OSDN Git Service

debugger: move memory related context menu items of l&w to submenu
authorhjk <qtc-committer@nokia.com>
Thu, 16 Dec 2010 11:07:12 +0000 (12:07 +0100)
committerhjk <qtc-committer@nokia.com>
Thu, 16 Dec 2010 11:32:55 +0000 (12:32 +0100)
src/plugins/debugger/watchwindow.cpp

index e8d48d0..65035c3 100644 (file)
@@ -337,24 +337,9 @@ void WatchWindow::contextMenuEvent(QContextMenuEvent *ev)
     QAction *actSelectWidgetToWatch = menu.addAction(tr("Select Widget to Watch"));
     actSelectWidgetToWatch->setEnabled(canHandleWatches);
 
-    QAction *actOpenMemoryEditAtVariableAddress = 0;
-    QAction *actOpenMemoryEditAtPointerValue = 0;
-    QAction *actOpenMemoryEditor =
-        new QAction(tr("Open Memory Editor..."), &menu);
-    const bool canShowMemory = engineCapabilities & ShowMemoryCapability;
-    actOpenMemoryEditor->setEnabled(actionsEnabled && canShowMemory);
-
     // Offer to open address pointed to or variable address.
     const bool createPointerActions = pointerValue && pointerValue != address;
 
-    if (canShowMemory && address)
-        actOpenMemoryEditAtVariableAddress =
-            new QAction(tr("Open Memory Editor at Object's Address (0x%1)")
-                .arg(address, 0, 16), &menu);
-    if (createPointerActions)
-        actOpenMemoryEditAtPointerValue =
-            new QAction(tr("Open Memory Editor at Referenced Address (0x%1)")
-                .arg(pointerValue, 0, 16), &menu);
     menu.addSeparator();
 
     QAction *actSetWatchpointAtVariableAddress = 0;
@@ -396,14 +381,42 @@ void WatchWindow::contextMenuEvent(QContextMenuEvent *ev)
     else
         menu.addAction(actRemoveWatchExpression);
 
+    QMenu memoryMenu;
+    memoryMenu.setTitle(tr("Open Memory Editor..."));
+    QAction *actOpenMemoryEditAtVariableAddress = new QAction(&memoryMenu);
+    QAction *actOpenMemoryEditAtPointerValue = new QAction(&memoryMenu);
+    QAction *actOpenMemoryEditor = new QAction(&memoryMenu);
+    if (engineCapabilities & ShowMemoryCapability) {
+        actOpenMemoryEditor->setText(tr("Open Memory Editor..."));
+        if (address) {
+            actOpenMemoryEditAtVariableAddress->setText(
+                tr("Open Memory Editor at Object's Address (0x%1)")
+                    .arg(address, 0, 16));
+        } else {
+            actOpenMemoryEditAtVariableAddress->setText(
+                tr("Open Memory Editor at Object's Address"));
+            actOpenMemoryEditAtVariableAddress->setEnabled(false);
+        }
+        if (createPointerActions) {
+            actOpenMemoryEditAtPointerValue->setText(
+                tr("Open Memory Editor at Referenced Address (0x%1)")
+                    .arg(pointerValue, 0, 16));
+        } else {
+            actOpenMemoryEditAtPointerValue->setText(
+                tr("Open Memory Editor at Referenced Address"));
+            actOpenMemoryEditAtPointerValue->setEnabled(false);
+        }
+        memoryMenu.addAction(actOpenMemoryEditAtVariableAddress);
+        memoryMenu.addAction(actOpenMemoryEditAtPointerValue);
+        memoryMenu.addAction(actOpenMemoryEditor);
+    } else {
+        memoryMenu.setEnabled(false);
+    }
+
     menu.addAction(actInsertNewWatchItem);
     menu.addAction(actSelectWidgetToWatch);
     menu.addMenu(&formatMenu);
-    if (actOpenMemoryEditAtVariableAddress)
-        menu.addAction(actOpenMemoryEditAtVariableAddress);
-    if (actOpenMemoryEditAtPointerValue)
-        menu.addAction(actOpenMemoryEditAtPointerValue);
-    menu.addAction(actOpenMemoryEditor);
+    menu.addMenu(&memoryMenu);
     menu.addAction(actSetWatchpointAtVariableAddress);
     if (actSetWatchpointAtPointerValue)
         menu.addAction(actSetWatchpointAtPointerValue);