From f812780e30cfc5267a44a2ef8946d87db5cc2ca8 Mon Sep 17 00:00:00 2001
From: hjk <qtc-committer@nokia.com>
Date: Wed, 25 Mar 2009 13:05:12 +0100
Subject: [PATCH] debugger: keep row selection in watchersview after
 expand/collapse

Task-number: 233285
---
 src/plugins/debugger/watchhandler.cpp |  3 ++-
 src/plugins/debugger/watchwindow.cpp  | 16 ++++++++++++----
 src/plugins/debugger/watchwindow.h    |  1 +
 3 files changed, 15 insertions(+), 5 deletions(-)

diff --git a/src/plugins/debugger/watchhandler.cpp b/src/plugins/debugger/watchhandler.cpp
index 0342f22c7e3..e8bb8d5fe5e 100644
--- a/src/plugins/debugger/watchhandler.cpp
+++ b/src/plugins/debugger/watchhandler.cpp
@@ -751,7 +751,8 @@ void WatchHandler::rebuildModel()
 
     m_inChange = true;
     //qDebug() << "WATCHHANDLER: RESET ABOUT TO EMIT";
-    emit reset();
+    //emit reset();
+    emit layoutChanged();
     //qDebug() << "WATCHHANDLER: RESET EMITTED";
     m_inChange = false;
 
diff --git a/src/plugins/debugger/watchwindow.cpp b/src/plugins/debugger/watchwindow.cpp
index 55759b1462c..e10d39319b6 100644
--- a/src/plugins/debugger/watchwindow.cpp
+++ b/src/plugins/debugger/watchwindow.cpp
@@ -215,16 +215,13 @@ void WatchWindow::editItem(const QModelIndex &idx)
 
 void WatchWindow::reset()
 {
+    QTreeView::reset(); 
     int row = 0;
     if (m_type == TooltipType)
         row = 1;
     else if (m_type == WatchersType)
         row = 2;
-    //qDebug() << "WATCHWINDOW::RESET" << row;
-    QTreeView::reset(); 
     setRootIndex(model()->index(row, 0, model()->index(0, 0)));
-    //setRootIndex(model()->index(0, 0));
-    resetHelper(model()->index(0, 0));
 }
 
 void WatchWindow::setModel(QAbstractItemModel *model)
@@ -236,16 +233,27 @@ void WatchWindow::setModel(QAbstractItemModel *model)
     header()->setResizeMode(QHeaderView::ResizeToContents);
     if (m_type != LocalsType)
         header()->hide();
+
+    connect(model, SIGNAL(layoutChanged()), this, SLOT(resetHelper()));
+}
+
+void WatchWindow::resetHelper()
+{
+    resetHelper(model()->index(0, 0));
 }
 
 void WatchWindow::resetHelper(const QModelIndex &idx)
 {
     if (model()->data(idx, ExpandedRole).toBool()) {
+        //qDebug() << "EXPANDING " << model()->data(idx, INameRole);
         expand(idx);
         for (int i = 0, n = model()->rowCount(idx); i != n; ++i) {
             QModelIndex idx1 = model()->index(i, 0, idx);
             resetHelper(idx1);
         }
+    } else {
+        //qDebug() << "COLLAPSING " << model()->data(idx, INameRole);
+        collapse(idx);
     }
 }
 
diff --git a/src/plugins/debugger/watchwindow.h b/src/plugins/debugger/watchwindow.h
index ff26a693362..715507f8b16 100644
--- a/src/plugins/debugger/watchwindow.h
+++ b/src/plugins/debugger/watchwindow.h
@@ -60,6 +60,7 @@ public slots:
 private:
     Q_SLOT void expandNode(const QModelIndex &index);
     Q_SLOT void collapseNode(const QModelIndex &index);
+    Q_SLOT void resetHelper();
 
     void keyPressEvent(QKeyEvent *ev);
     void contextMenuEvent(QContextMenuEvent *ev);
-- 
GitLab