From 3a210a19c9be11de7a9887b34c84a8a02f8b971e Mon Sep 17 00:00:00 2001
From: hjk <qtc-committer@nokia.com>
Date: Thu, 24 Nov 2011 18:14:49 +0100
Subject: [PATCH] debugger: immediate refresh after toggling sort order of
 struct members

Change-Id: Iac7de58ca8681a60a4b6c9d0e717eb57753898b5
Reviewed-by: hjk <qthjk@ovi.com>
---
 src/plugins/debugger/gdb/gdbengine.cpp |  6 ----
 src/plugins/debugger/watchhandler.cpp  | 39 ++++++++++++++++++++++----
 src/plugins/debugger/watchhandler.h    |  3 ++
 3 files changed, 36 insertions(+), 12 deletions(-)

diff --git a/src/plugins/debugger/gdb/gdbengine.cpp b/src/plugins/debugger/gdb/gdbengine.cpp
index 9424c16f66c..f723c9a8e96 100644
--- a/src/plugins/debugger/gdb/gdbengine.cpp
+++ b/src/plugins/debugger/gdb/gdbengine.cpp
@@ -220,12 +220,6 @@ GdbEngine::GdbEngine(const DebuggerStartParameters &startParameters,
 
     connect(debuggerCore()->action(AutoDerefPointers), SIGNAL(valueChanged(QVariant)),
             SLOT(reloadLocals()));
-    connect(debuggerCore()->action(SortStructMembers), SIGNAL(valueChanged(QVariant)),
-            SLOT(reloadLocals()));
-    connect(debuggerCore()->action(ShowStdNamespace), SIGNAL(valueChanged(QVariant)),
-            SLOT(reloadLocals()));
-    connect(debuggerCore()->action(ShowQtNamespace), SIGNAL(valueChanged(QVariant)),
-            SLOT(reloadLocals()));
     connect(debuggerCore()->action(CreateFullBacktrace), SIGNAL(triggered()),
             SLOT(createFullBacktrace()));
 }
diff --git a/src/plugins/debugger/watchhandler.cpp b/src/plugins/debugger/watchhandler.cpp
index 2c80c368b75..3de5f5bc0f6 100644
--- a/src/plugins/debugger/watchhandler.cpp
+++ b/src/plugins/debugger/watchhandler.cpp
@@ -256,6 +256,25 @@ void WatchModel::destroyItem(WatchItem *item)
     delete item;
 }
 
+void WatchModel::reinsertAllData()
+{
+    QList<WatchData> list;
+    reinsertAllDataHelper(m_root, &list);
+    reinitialize();
+    foreach (WatchItem data, list) {
+        data.setAllUnneeded();
+        insertData(data);
+    }
+    layoutChanged();
+}
+
+void WatchModel::reinsertAllDataHelper(WatchItem *item, QList<WatchData> *data)
+{
+    data->append(*item);
+    foreach (WatchItem *child, item->children)
+        reinsertAllDataHelper(child, data);
+}
+
 static QByteArray parentName(const QByteArray &iname)
 {
     int pos = iname.lastIndexOf('.');
@@ -1204,12 +1223,12 @@ WatchHandler::WatchHandler(DebuggerEngine *engine)
     m_watchers = new WatchModel(this, WatchersWatch);
     m_tooltips = new WatchModel(this, TooltipsWatch);
 
-    connect(debuggerCore()->action(ShowStdNamespace),
-        SIGNAL(triggered()), SLOT(emitAllChanged()));
-    connect(debuggerCore()->action(ShowQtNamespace),
-        SIGNAL(triggered()), SLOT(emitAllChanged()));
-    connect(debuggerCore()->action(SortStructMembers),
-        SIGNAL(triggered()), SLOT(emitAllChanged()));
+    connect(debuggerCore()->action(SortStructMembers), SIGNAL(valueChanged(QVariant)),
+           SLOT(reinsertAllData()));
+    connect(debuggerCore()->action(ShowStdNamespace), SIGNAL(valueChanged(QVariant)),
+           SLOT(reinsertAllData()));
+    connect(debuggerCore()->action(ShowQtNamespace), SIGNAL(valueChanged(QVariant)),
+           SLOT(reinsertAllData()));
 }
 
 void WatchHandler::beginCycle(bool fullCycle)
@@ -1295,6 +1314,14 @@ void WatchHandler::insertData(const WatchData &data)
     }
 }
 
+void WatchHandler::reinsertAllData()
+{
+    m_locals->reinsertAllData();
+    m_watchers->reinsertAllData();
+    m_tooltips->reinsertAllData();
+    m_return->reinsertAllData();
+}
+
 // Bulk-insertion
 void WatchHandler::insertBulkData(const QList<WatchData> &list)
 {
diff --git a/src/plugins/debugger/watchhandler.h b/src/plugins/debugger/watchhandler.h
index 632f76ff808..63af6f654a3 100644
--- a/src/plugins/debugger/watchhandler.h
+++ b/src/plugins/debugger/watchhandler.h
@@ -98,6 +98,8 @@ private:
         const WatchItem *parentItem, const QModelIndex &parentIndex) const;
 
     void insertData(const WatchData &data);
+    void reinsertAllData();
+    void reinsertAllDataHelper(WatchItem *item, QList<WatchData> *data);
     void insertBulkData(const QList<WatchData> &data);
     WatchItem *findItem(const QByteArray &iname, WatchItem *root) const;
     void reinitialize();
@@ -159,6 +161,7 @@ public:
     void insertData(const WatchData &data);
     void insertBulkData(const QList<WatchData> &data);
     void removeData(const QByteArray &iname);
+    Q_SLOT void reinsertAllData();
 
     const WatchData *watchData(WatchType type, const QModelIndex &) const;
     const WatchData *findItem(const QByteArray &iname) const;
-- 
GitLab