Browse Source

restore last active item in directory tree after switching notebook

Le Tan 8 years ago
parent
commit
c2c70368da
2 changed files with 28 additions and 2 deletions
  1. 24 2
      src/vdirectorytree.cpp
  2. 4 0
      src/vdirectorytree.h

+ 24 - 2
src/vdirectorytree.cpp

@@ -129,7 +129,26 @@ void VDirectoryTree::updateDirectoryTree()
 
         updateDirectoryTreeOne(item, 1);
     }
-    setCurrentItem(topLevelItem(0));
+
+    if (!restoreCurrentItem()) {
+        setCurrentItem(topLevelItem(0));
+    }
+}
+
+bool VDirectoryTree::restoreCurrentItem()
+{
+    qDebug() << m_notebook << m_notebookCurrentDirMap;
+    auto it = m_notebookCurrentDirMap.find(m_notebook);
+    if (it != m_notebookCurrentDirMap.end()) {
+        bool rootDirectory;
+        QTreeWidgetItem *item = findVDirectory(it.value(), rootDirectory);
+        if (item) {
+            setCurrentItem(item);
+            return true;
+        }
+    }
+
+    return false;
 }
 
 void VDirectoryTree::updateDirectoryTreeOne(QTreeWidgetItem *p_parent, int depth)
@@ -401,7 +420,10 @@ void VDirectoryTree::currentDirectoryItemChanged(QTreeWidgetItem *currentItem)
         emit currentDirectoryChanged(NULL);
         return;
     }
-    emit currentDirectoryChanged(getVDirectory(currentItem));
+
+    QPointer<VDirectory> dir = getVDirectory(currentItem);
+    m_notebookCurrentDirMap[m_notebook] = dir;
+    emit currentDirectoryChanged(dir);
 }
 
 void VDirectoryTree::editDirectoryInfo()

+ 4 - 0
src/vdirectorytree.h

@@ -7,6 +7,7 @@
 #include <QVector>
 #include <QMap>
 #include <QList>
+#include <QHash>
 #include "vdirectory.h"
 #include "vnotebook.h"
 #include "vnavigationmode.h"
@@ -77,12 +78,15 @@ private:
     void expandItemTree(QTreeWidgetItem *p_item);
     QList<QTreeWidgetItem *> getVisibleItems() const;
     QList<QTreeWidgetItem *> getVisibleChildItems(const QTreeWidgetItem *p_item) const;
+    bool restoreCurrentItem();
 
     VNote *vnote;
     QPointer<VNotebook> m_notebook;
     QVector<QPointer<VDirectory> > m_copiedDirs;
     VEditArea *m_editArea;
 
+    QHash<VNotebook *, VDirectory *> m_notebookCurrentDirMap;
+
     // Actions
     QAction *newRootDirAct;
     QAction *newSiblingDirAct;