diff --git a/src/plugins/cmakeprojectmanager/cmakeopenprojectwizard.cpp b/src/plugins/cmakeprojectmanager/cmakeopenprojectwizard.cpp index 842536f3ccde31d94dc7ca3be831b0d6c3ed4457..4c70858bcc18767d33247ee0d355ac3f24e44972 100644 --- a/src/plugins/cmakeprojectmanager/cmakeopenprojectwizard.cpp +++ b/src/plugins/cmakeprojectmanager/cmakeopenprojectwizard.cpp @@ -248,6 +248,7 @@ void CMakeRunPage::initWidgets() fl->addWidget(m_runCMake); m_output = new QPlainTextEdit(this); + m_output->setReadOnly(true); fl->addRow(m_output); } diff --git a/src/plugins/genericprojectmanager/genericprojectnodes.cpp b/src/plugins/genericprojectmanager/genericprojectnodes.cpp index 64a73f6f0f8d6d92858f5a23c10e7c2db227549d..2a3351206d5d82a84ddee3af75ac432029275b39 100644 --- a/src/plugins/genericprojectmanager/genericprojectnodes.cpp +++ b/src/plugins/genericprojectmanager/genericprojectnodes.cpp @@ -63,7 +63,7 @@ void GenericProjectNode::refresh() removeFileNodes(fileNodes(), this); removeFolderNodes(subFolderNodes(), this); - ProjectExplorerPlugin::instance()->setCurrentNode(0); // ### remove me + //ProjectExplorerPlugin::instance()->setCurrentNode(0); // ### remove me FileNode *projectFilesNode = new FileNode(m_project->filesFileName(), ProjectFileType, 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;