diff --git a/src/plugins/projectexplorer/projecttreewidget.cpp b/src/plugins/projectexplorer/projecttreewidget.cpp index b88ef2175cf..32b6ca9edfb 100644 --- a/src/plugins/projectexplorer/projecttreewidget.cpp +++ b/src/plugins/projectexplorer/projecttreewidget.cpp @@ -119,6 +119,13 @@ ProjectTreeWidget::ProjectTreeWidget(QWidget *parent) m_autoSync(false) { m_model = new FlatModel(m_explorer->session()->sessionNode(), this); + NodesWatcher *watcher = new NodesWatcher(this); + m_explorer->session()->sessionNode()->registerWatcher(watcher); + + connect(watcher, SIGNAL(foldersAboutToBeRemoved(FolderNode *, const QList &)), + this, SLOT(foldersAboutToBeRemoved(FolderNode *, const QList &))); + connect(watcher, SIGNAL(filesAboutToBeRemoved(FolderNode *, const QList &)), + this, SLOT(filesAboutToBeRemoved(FolderNode *, const QList &))); m_view = new ProjectTreeView; m_view->setModel(m_model); @@ -165,6 +172,29 @@ ProjectTreeWidget::ProjectTreeWidget(QWidget *parent) setAutoSynchronization(true); } +void ProjectTreeWidget::foldersAboutToBeRemoved(FolderNode *, const QList &list) +{ + Node *n = m_explorer->currentNode(); + while(n) { + if (FolderNode *fn = qobject_cast(n)) { + if (list.contains(fn)) { + m_explorer->setCurrentNode(n->projectNode()); + break; + } + } + n = n->parentFolderNode(); + } +} + +void ProjectTreeWidget::filesAboutToBeRemoved(FolderNode *, const QList &list) +{ + if (FileNode *fileNode = qobject_cast(m_explorer->currentNode())) { + if (list.contains(fileNode)) { + m_explorer->setCurrentNode(fileNode->projectNode()); + } + } +} + QToolButton *ProjectTreeWidget::toggleSync() { return m_toggleSync; diff --git a/src/plugins/projectexplorer/projecttreewidget.h b/src/plugins/projectexplorer/projecttreewidget.h index f723bfaff65..4b536f1cff1 100644 --- a/src/plugins/projectexplorer/projecttreewidget.h +++ b/src/plugins/projectexplorer/projecttreewidget.h @@ -40,6 +40,8 @@ namespace ProjectExplorer { class ProjectExplorerPlugin; class Project; class Node; +class FolderNode; +class FileNode; namespace Internal { @@ -73,6 +75,9 @@ private slots: void startupProjectChanged(ProjectExplorer::Project *project); void initView(); + void foldersAboutToBeRemoved(FolderNode *, const QList &); + void filesAboutToBeRemoved(FolderNode *, const QList &); + private: ProjectExplorerPlugin *m_explorer; QTreeView *m_view;