diff --git a/src/plugins/projectexplorer/projecttreewidget.cpp b/src/plugins/projectexplorer/projecttreewidget.cpp index b88ef2175cf9068853f890ee0c1d8036bdffa8fe..32b6ca9edfb3cc11834c2aa2eb175dcc715394ee 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<FolderNode*> &)), + this, SLOT(foldersAboutToBeRemoved(FolderNode *, const QList<FolderNode*> &))); + connect(watcher, SIGNAL(filesAboutToBeRemoved(FolderNode *, const QList<FileNode*> &)), + this, SLOT(filesAboutToBeRemoved(FolderNode *, const QList<FileNode*> &))); 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<FolderNode*> &list) +{ + Node *n = m_explorer->currentNode(); + while(n) { + if (FolderNode *fn = qobject_cast<FolderNode *>(n)) { + if (list.contains(fn)) { + m_explorer->setCurrentNode(n->projectNode()); + break; + } + } + n = n->parentFolderNode(); + } +} + +void ProjectTreeWidget::filesAboutToBeRemoved(FolderNode *, const QList<FileNode*> &list) +{ + if (FileNode *fileNode = qobject_cast<FileNode *>(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 f723bfaff65d834efd4c78aaf4aa6e3f225a662f..4b536f1cff1506e7c0c827f4c686e9d95362f21a 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<FolderNode*> &); + void filesAboutToBeRemoved(FolderNode *, const QList<FileNode*> &); + private: ProjectExplorerPlugin *m_explorer; QTreeView *m_view;