From 3de773a5517d46e94b163aa5f4d0e1cb1ff22661 Mon Sep 17 00:00:00 2001
From: hjk <qtc-committer@nokia.com>
Date: Fri, 27 Mar 2009 13:04:23 +0100
Subject: [PATCH] debugger: rework dumper settings page

---
 src/plugins/debugger/debuggeractions.cpp |  74 ++++------
 src/plugins/debugger/debuggeractions.h   |   3 +-
 src/plugins/debugger/debuggerplugin.cpp  |  25 +++-
 src/plugins/debugger/dumperoptionpage.ui | 165 ++++++++++++-----------
 src/plugins/debugger/gdbengine.cpp       |  13 +-
 src/plugins/debugger/gdbengine.h         |   2 +-
 src/plugins/debugger/watchwindow.cpp     |   2 +-
 7 files changed, 140 insertions(+), 144 deletions(-)

diff --git a/src/plugins/debugger/debuggeractions.cpp b/src/plugins/debugger/debuggeractions.cpp
index d766f987ef6..f93819c6e9a 100644
--- a/src/plugins/debugger/debuggeractions.cpp
+++ b/src/plugins/debugger/debuggeractions.cpp
@@ -64,7 +64,7 @@ DebuggerSettings::~DebuggerSettings()
     
 void DebuggerSettings::insertItem(int code, SavedAction *item)
 {
-    QTC_ASSERT(!m_items.contains(code), return);
+    QTC_ASSERT(!m_items.contains(code), qDebug() << code << item->toString(); return);
     m_items[code] = item;
 }
 
@@ -115,6 +115,10 @@ DebuggerSettings *theDebuggerSettings()
 
     SavedAction *item = 0;
 
+    item = new SavedAction(instance);
+    instance->insertItem(SettingsDialog, item);
+    item->setText(QObject::tr("Debugger properties..."));
+
     //
     // View
     //
@@ -141,7 +145,6 @@ DebuggerSettings *theDebuggerSettings()
     item = new SavedAction(instance);
     instance->insertItem(WatchExpressionInWindow, item);
     item->setTextPattern(QObject::tr("Watch expression \"%1\" in separate window"));
-    //item->setCheckable(true);
 
     item = new SavedAction(instance);
     instance->insertItem(AssignValue, item);
@@ -158,14 +161,29 @@ DebuggerSettings *theDebuggerSettings()
     // Dumpers
     //
     item = new SavedAction(instance);
-    instance->insertItem(SettingsDialog, item);
-    item->setText(QObject::tr("Debugger properties..."));
+    instance->insertItem(UseDumpers, item);
+    item->setDefaultValue(true);
+    item->setSettingsKey("DebugMode", "UseDumpers");
+    item->setText(QObject::tr("Use data dumpers"));
+    item->setCheckable(true);
+    item->setDefaultValue(true);
+
+    item = new SavedAction(instance);
+    instance->insertItem(UseCustomDumperLocation, item);
+    item->setSettingsKey("DebugMode", "CustomDumperLocation");
+    item->setCheckable(true);
+
+    item = new SavedAction(instance);
+    instance->insertItem(CustomDumperLocation, item);
+    item->setSettingsKey("DebugMode", "CustomDumperLocation");
 
     item = new SavedAction(instance);
     instance->insertItem(DebugDumpers, item);
-    item->setText(QObject::tr("Debug custom dumpers"));
+    item->setSettingsKey("DebugMode", "DebugDumpers");
+    item->setText(QObject::tr("Debug data dumpers"));
     item->setCheckable(true);
 
+
     item = new SavedAction(instance);
     item->setText(QObject::tr("Recheck custom dumper availability"));
     instance->insertItem(RecheckDumpers, item);
@@ -227,20 +245,6 @@ DebuggerSettings *theDebuggerSettings()
     instance->insertItem(FormatNatural, item);
     registerFormatGroup->addAction(item);
 
-    //
-    // Misc
-    //
-
-    item = new SavedAction(instance);
-    instance->insertItem(SkipKnownFrames, item);
-    item->setText(QObject::tr("Skip known frames"));
-    item->setCheckable(true);
-
-    item = new SavedAction(instance);
-    instance->insertItem(UseToolTips, item);
-    item->setText(QObject::tr("Use tooltips when debugging"));
-    item->setCheckable(true);
-
 
     //
     // Settings
@@ -266,33 +270,9 @@ DebuggerSettings *theDebuggerSettings()
     item = new SavedAction(instance);
     instance->insertItem(UseToolTips, item);
     item->setSettingsKey("DebugMode", "UseToolTips");
-
-    item = new SavedAction(instance);
-    instance->insertItem(DisplayRawData, item);
-    item->setSettingsKey("DebugMode", "DisplayRawData");
-    item->setText(QObject::tr("Display raw data"));
-    item->setCheckable(true);
-
-    item = new SavedAction(instance);
-    instance->insertItem(UseDefaultDumperLocation, item);
-    item->setDefaultValue(true);
-    item->setSettingsKey("DebugMode", "UseDefaultDumperLocation");
-    item->setCheckable(true);
-
-    item = new SavedAction(instance);
-    instance->insertItem(UseCustomDumperLocation, item);
-    item->setSettingsKey("DebugMode", "CustomDumperLocation");
-    item->setCheckable(true);
-
-    item = new SavedAction(instance);
-    instance->insertItem(DisplayRawData, item);
-    item->setSettingsKey("DebugMode", "DisplayRawData");
+    item->setText(QObject::tr("Use tooltips when debugging"));
     item->setCheckable(true);
 
-    item = new SavedAction(instance);
-    instance->insertItem(CustomDumperLocation, item);
-    item->setSettingsKey("DebugMode", "CustomDumperLocation");
-
     item = new SavedAction(instance);
     instance->insertItem(TerminalApplication, item);
     item->setDefaultValue("xterm");
@@ -307,10 +287,8 @@ DebuggerSettings *theDebuggerSettings()
     item = new SavedAction(instance);
     instance->insertItem(SkipKnownFrames, item);
     item->setSettingsKey("DebugMode", "SkipKnownFrames");
-
-    item = new SavedAction(instance);
-    instance->insertItem(DebugDumpers, item);
-    item->setSettingsKey("DebugMode", "DebugDumpers");
+    item->setText(QObject::tr("Skip known frames"));
+    item->setCheckable(true);
 
     item = new SavedAction(instance);
     instance->insertItem(AllPluginBreakpoints, item);
diff --git a/src/plugins/debugger/debuggeractions.h b/src/plugins/debugger/debuggeractions.h
index 5e6b986820f..3972aafce2a 100644
--- a/src/plugins/debugger/debuggeractions.h
+++ b/src/plugins/debugger/debuggeractions.h
@@ -87,9 +87,8 @@ enum DebuggerActionCode
     CollapseItem,
 
     RecheckDumpers,
-    DisplayRawData,
+    UseDumpers,
     UseCustomDumperLocation,
-    UseDefaultDumperLocation,
     CustomDumperLocation,
     DebugDumpers,
 
diff --git a/src/plugins/debugger/debuggerplugin.cpp b/src/plugins/debugger/debuggerplugin.cpp
index 6477f969bbe..3db99a052a0 100644
--- a/src/plugins/debugger/debuggerplugin.cpp
+++ b/src/plugins/debugger/debuggerplugin.cpp
@@ -345,6 +345,8 @@ public:
     void finish() { m_group.finish(); }
 
 private:
+    Q_SLOT void updateState();
+
     friend class DebuggerPlugin;
     Ui::DumperOptionPage m_ui;
 
@@ -362,16 +364,16 @@ QWidget *DumperOptionPage::createPage(QWidget *parent)
     m_ui.dumperLocationChooser->setInitialBrowsePathBackup(
         Core::ICore::instance()->resourcePath() + "../../lib");
 
-    connect(m_ui.radioButtonUseCustomDumperLocation, SIGNAL(toggled(bool)),
-        m_ui.dumperLocationChooser, SLOT(setEnabled(bool)));
+    connect(m_ui.checkBoxUseDumpers, SIGNAL(toggled(bool)),
+        this, SLOT(updateState()));
+    connect(m_ui.checkBoxUseCustomDumperLocation, SIGNAL(toggled(bool)),
+        this, SLOT(updateState()));
 
     m_group.clear();
-    m_group.insert(theDebuggerAction(DisplayRawData),
-        m_ui.radioButtonDisplayRawData);
+    m_group.insert(theDebuggerAction(UseDumpers),
+        m_ui.checkBoxUseDumpers);
     m_group.insert(theDebuggerAction(UseCustomDumperLocation),
-        m_ui.radioButtonUseCustomDumperLocation);
-    m_group.insert(theDebuggerAction(UseDefaultDumperLocation),
-        m_ui.radioButtonUseDefaultDumperLocation);
+        m_ui.checkBoxUseCustomDumperLocation);
     m_group.insert(theDebuggerAction(CustomDumperLocation),
         m_ui.dumperLocationChooser);
 
@@ -394,6 +396,15 @@ QWidget *DumperOptionPage::createPage(QWidget *parent)
     return w;
 }
 
+void DumperOptionPage::updateState()
+{
+    m_ui.checkBoxUseCustomDumperLocation->setEnabled(
+        m_ui.checkBoxUseDumpers->isChecked());
+    m_ui.dumperLocationChooser->setEnabled(
+        m_ui.checkBoxUseDumpers->isChecked()
+            && m_ui.checkBoxUseCustomDumperLocation->isChecked());
+}
+
 } // namespace Internal
 } // namespace Debugger
 
diff --git a/src/plugins/debugger/dumperoptionpage.ui b/src/plugins/debugger/dumperoptionpage.ui
index 874ff24e184..43a6a1ae818 100644
--- a/src/plugins/debugger/dumperoptionpage.ui
+++ b/src/plugins/debugger/dumperoptionpage.ui
@@ -6,81 +6,95 @@
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>398</width>
-    <height>426</height>
+    <width>403</width>
+    <height>434</height>
    </rect>
   </property>
   <property name="windowTitle">
    <string>Form</string>
   </property>
-  <layout class="QGridLayout" name="gridLayout_2">
-   <item row="0" column="0">
-    <widget class="QGroupBox" name="groupBoxDataDumpers">
-     <property name="title">
-      <string>Location of data dumper helper library</string>
+  <layout class="QVBoxLayout" name="verticalLayout">
+   <item>
+    <widget class="QCheckBox" name="checkBoxUseDumpers">
+     <property name="toolTip">
+      <string>This will enable nice display of Qt and Standard Library objects in the Locals&amp;Watchers view</string>
+     </property>
+     <property name="text">
+      <string>Use data dumpers</string>
      </property>
-     <layout class="QGridLayout" name="gridLayout">
-      <item row="1" column="0">
-       <widget class="QRadioButton" name="radioButtonUseDefaultDumperLocation">
-        <property name="toolTip">
-         <string>This will load a dumper library</string>
-        </property>
-        <property name="text">
-         <string>Use dumpers from default location</string>
-        </property>
-       </widget>
-      </item>
-      <item row="2" column="0">
-       <widget class="QRadioButton" name="radioButtonUseCustomDumperLocation">
-        <property name="text">
-         <string>Use dumpers from custom location</string>
-        </property>
-       </widget>
-      </item>
-      <item row="3" column="0">
-       <layout class="QHBoxLayout" name="horizontalLayout">
-        <item>
-         <spacer name="horizontalSpacer">
-          <property name="orientation">
-           <enum>Qt::Horizontal</enum>
-          </property>
-          <property name="sizeType">
-           <enum>QSizePolicy::Preferred</enum>
-          </property>
-          <property name="sizeHint" stdset="0">
-           <size>
-            <width>10</width>
-            <height>10</height>
-           </size>
-          </property>
-         </spacer>
-        </item>
-        <item>
-         <widget class="QLabel" name="labelDumperLocation">
-          <property name="text">
-           <string>Location: </string>
-          </property>
-         </widget>
-        </item>
-        <item>
-         <widget class="Core::Utils::PathChooser" name="dumperLocationChooser" native="true"/>
-        </item>
-       </layout>
-      </item>
-      <item row="0" column="0">
-       <widget class="QRadioButton" name="radioButtonDisplayRawData">
-        <property name="toolTip">
-         <string>This will disable nice display of Qt and Standard Library objects in the Locals&amp;Watchers view</string>
-        </property>
-        <property name="text">
-         <string>Do not use data dumpers</string>
-        </property>
-       </widget>
-      </item>
-     </layout>
     </widget>
    </item>
-   <item row="3" column="0">
+   <item>
+    <layout class="QHBoxLayout" name="horizontalLayout_2">
+     <item>
+      <spacer name="horizontalSpacer">
+       <property name="orientation">
+        <enum>Qt::Horizontal</enum>
+       </property>
+       <property name="sizeType">
+        <enum>QSizePolicy::Fixed</enum>
+       </property>
+       <property name="sizeHint" stdset="0">
+        <size>
+         <width>10</width>
+         <height>10</height>
+        </size>
+       </property>
+      </spacer>
+     </item>
+     <item>
+      <widget class="QCheckBox" name="checkBoxUseCustomDumperLocation">
+       <property name="toolTip">
+        <string>This will load a dumper library</string>
+       </property>
+       <property name="text">
+        <string>Use dumpers from custom location</string>
+       </property>
+      </widget>
+     </item>
+    </layout>
+   </item>
+   <item>
+    <layout class="QHBoxLayout" name="horizontalLayout">
+     <item>
+      <spacer name="horizontalSpacer_2">
+       <property name="orientation">
+        <enum>Qt::Horizontal</enum>
+       </property>
+       <property name="sizeType">
+        <enum>QSizePolicy::Fixed</enum>
+       </property>
+       <property name="sizeHint" stdset="0">
+        <size>
+         <width>20</width>
+         <height>20</height>
+        </size>
+       </property>
+      </spacer>
+     </item>
+     <item>
+      <widget class="QLabel" name="labelDumperLocation">
+       <property name="text">
+        <string>Location: </string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="Core::Utils::PathChooser" name="dumperLocationChooser" native="true"/>
+     </item>
+    </layout>
+   </item>
+   <item>
+    <widget class="QCheckBox" name="checkBoxDebugDumpers">
+     <property name="toolTip">
+      <string notr="true">This is an internal tool to make debugging the Custom Data Dumper code easier. Using this action is in general not needed unless you want do debug Qt Creator itself.</string>
+     </property>
+     <property name="text">
+      <string>Debug custom dumpers</string>
+     </property>
+    </widget>
+   </item>
+   <item>
     <spacer name="verticalSpacer">
      <property name="orientation">
       <enum>Qt::Vertical</enum>
@@ -93,17 +107,14 @@
      </property>
     </spacer>
    </item>
-   <item row="2" column="0">
-    <widget class="QCheckBox" name="checkBoxDebugDumpers">
-     <property name="toolTip">
-      <string notr="true">This is an internal tool to make debugging the Custom Data Dumper code easier. Using this action is in general not needed unless you want do debug Qt Creator itself.</string>
-     </property>
-     <property name="text">
-      <string>Debug custom dumpers</string>
-     </property>
-    </widget>
-   </item>
   </layout>
+  <zorder>checkBoxDebugDumpers</zorder>
+  <zorder>checkBoxUseDumpers</zorder>
+  <zorder>checkBoxUseDefaultDumperLocation</zorder>
+  <zorder>horizontalSpacer</zorder>
+  <zorder>labelDumperLocation</zorder>
+  <zorder>horizontalSpacer_2</zorder>
+  <zorder>labelDumperLocation</zorder>
  </widget>
  <customwidgets>
   <customwidget>
diff --git a/src/plugins/debugger/gdbengine.cpp b/src/plugins/debugger/gdbengine.cpp
index 857c220f5d8..c206831ad07 100644
--- a/src/plugins/debugger/gdbengine.cpp
+++ b/src/plugins/debugger/gdbengine.cpp
@@ -210,8 +210,8 @@ void GdbEngine::initializeConnections()
         q, SLOT(showApplicationOutput(QString)),
         Qt::QueuedConnection);
 
-    connect(theDebuggerAction(DisplayRawData), SIGNAL(valueChanged(QVariant)),
-        this, SLOT(setDisplayRawData(QVariant)));
+    connect(theDebuggerAction(UseDumpers), SIGNAL(valueChanged(QVariant)),
+        this, SLOT(setUseDumpers(QVariant)));
     connect(theDebuggerAction(DebugDumpers), SIGNAL(valueChanged(QVariant)),
         this, SLOT(setDebugDumpers(QVariant)));
     connect(theDebuggerAction(RecheckDumpers), SIGNAL(triggered()),
@@ -2849,7 +2849,7 @@ static void setWatchDataSAddress(WatchData &data, const GdbMi &mi)
         data.saddr = mi.data();
 }
 
-void GdbEngine::setDisplayRawData(const QVariant &on)
+void GdbEngine::setUseDumpers(const QVariant &on)
 {
     qDebug() << "SWITCHING ON/OFF DUMPER DEBUGGING:" << on;
     // FIXME: a bit too harsh, but otherwise the treeview sometimes look funny
@@ -2860,7 +2860,7 @@ void GdbEngine::setDisplayRawData(const QVariant &on)
 
 bool GdbEngine::isCustomValueDumperAvailable(const QString &type) const
 {
-    if (theDebuggerBoolSetting(DisplayRawData))
+    if (!theDebuggerBoolSetting(UseDumpers))
         return false;
 
     if (q->startMode() == AttachCore) {
@@ -3991,10 +3991,7 @@ QString GdbEngine::dumperLibraryName() const
 {
     if (theDebuggerAction(UseCustomDumperLocation)->value().toBool())
         return theDebuggerAction(CustomDumperLocation)->value().toString();
-    if (theDebuggerAction(UseDefaultDumperLocation)->value().toBool())
-        return q->m_dumperLib;
-    QTC_ASSERT(false, /**/);
-    return QString();
+    return q->m_dumperLib;
 }
 
 void GdbEngine::tryLoadCustomDumpers()
diff --git a/src/plugins/debugger/gdbengine.h b/src/plugins/debugger/gdbengine.h
index 07d2ee195df..49b823e957b 100644
--- a/src/plugins/debugger/gdbengine.h
+++ b/src/plugins/debugger/gdbengine.h
@@ -131,7 +131,7 @@ private:
     void loadAllSymbols();
 
     Q_SLOT void setDebugDumpers(const QVariant &on);
-    Q_SLOT void setDisplayRawData(const QVariant &on);
+    Q_SLOT void setUseDumpers(const QVariant &on);
 
     //
     // Own stuff
diff --git a/src/plugins/debugger/watchwindow.cpp b/src/plugins/debugger/watchwindow.cpp
index 816274d5431..e10d39319b6 100644
--- a/src/plugins/debugger/watchwindow.cpp
+++ b/src/plugins/debugger/watchwindow.cpp
@@ -177,7 +177,7 @@ void WatchWindow::contextMenuEvent(QContextMenuEvent *ev)
 
     menu.addSeparator();
     menu.addAction(theDebuggerAction(RecheckDumpers));
-    menu.addAction(theDebuggerAction(DisplayRawData));
+    menu.addAction(theDebuggerAction(UseDumpers));
     menu.addSeparator();
     menu.addAction(theDebuggerAction(SettingsDialog));
 
-- 
GitLab