aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/projectexplorer/projecttree.h
diff options
context:
space:
mode:
authorDaniel Teske <daniel.teske@theqtcompany.com>2015-01-09 15:50:06 +0100
committerDaniel Teske <daniel.teske@theqtcompany.com>2015-01-14 11:48:12 +0100
commit70c9c51e5e4c6f70c950c959757a2e597a646c56 (patch)
tree17c26446ef9827e2675cac334af29fad59ee99cf /src/plugins/projectexplorer/projecttree.h
parent44a7db5091c41bcdc89799a978994edbbf82e7e2 (diff)
Refactor ProjectExplorer::Node and remove NodesWatcher
The idea behind NodesWatcher was that it was the central place to catch node related signals, so that users didn't need to connect to each individual node and the nodes didn't need to be QObjects. Somehow Nodes ended up being QObjects anyway. Both the recently added ProjectTree and the FlatModels consume the signals the NodesWatcher sends. Unfortunately there's a ordering dependency between the ProjectTree and the FlatModels. This patch removes all NodesWatcher and instead makes the ProjectTree singleton the emitter of various project tree related signals. The ProjectTree also ensures that the ordering between the FlatModel and itself is taken into account. And it makes Node not derive from QObject, saving some memory in that process. Task-number: QTCREATORBUG-13756 Change-Id: I8b0d357863f1dc1d2d440ce8172502594138b9fb Reviewed-by: Tobias Hunger <tobias.hunger@theqtcompany.com>
Diffstat (limited to 'src/plugins/projectexplorer/projecttree.h')
-rw-r--r--src/plugins/projectexplorer/projecttree.h77
1 files changed, 57 insertions, 20 deletions
diff --git a/src/plugins/projectexplorer/projecttree.h b/src/plugins/projectexplorer/projecttree.h
index 4a99ebe25d..8269d61efb 100644
--- a/src/plugins/projectexplorer/projecttree.h
+++ b/src/plugins/projectexplorer/projecttree.h
@@ -35,14 +35,13 @@
#include <coreplugin/icontext.h>
-#include <QPointer>
-
namespace ProjectExplorer {
class FileNode;
class FolderNode;
class Node;
-class NodesWatcher;
class Project;
+class ProjectNode;
+class SessionNode;
namespace Internal { class ProjectTreeWidget; }
@@ -68,6 +67,60 @@ signals:
void currentProjectChanged(ProjectExplorer::Project *project);
void currentNodeChanged(ProjectExplorer::Node *node, ProjectExplorer::Project *project);
+ // Emitted whenever the model needs to send a update signal.
+ void nodeUpdated(ProjectExplorer::Node *node);
+
+ // projects
+ void aboutToChangeShowInSimpleTree(ProjectExplorer::FolderNode*);
+ void showInSimpleTreeChanged(ProjectExplorer::FolderNode *node);
+
+ // folders & projects
+ void foldersAboutToBeAdded(FolderNode *parentFolder,
+ const QList<FolderNode*> &newFolders);
+ void foldersAdded();
+
+ void foldersAboutToBeRemoved(FolderNode *parentFolder,
+ const QList<FolderNode*> &staleFolders);
+ void foldersRemoved();
+
+ // files
+ void filesAboutToBeAdded(FolderNode *folder,
+ const QList<FileNode*> &newFiles);
+ void filesAdded();
+
+ void filesAboutToBeRemoved(FolderNode *folder,
+ const QList<FileNode*> &staleFiles);
+ void filesRemoved();
+ void nodeSortKeyAboutToChange(Node *node);
+ void nodeSortKeyChanged();
+
+public: // for nodes to emit signals, do not call unless you are a node
+ void emitNodeUpdated(ProjectExplorer::Node *node);
+
+ // projects
+ void emitAboutToChangeShowInSimpleTree(ProjectExplorer::FolderNode *node);
+ void emitShowInSimpleTreeChanged(ProjectExplorer::FolderNode *node);
+
+ // folders & projects
+ void emitFoldersAboutToBeAdded(FolderNode *parentFolder,
+ const QList<FolderNode*> &newFolders);
+ void emitFoldersAdded();
+
+ void emitFoldersAboutToBeRemoved(FolderNode *parentFolder,
+ const QList<FolderNode*> &staleFolders);
+ void emitFoldersRemoved();
+
+ // files
+ void emitFilesAboutToBeAdded(FolderNode *folder,
+ const QList<FileNode*> &newFiles);
+ void emitFilesAdded();
+
+ void emitFilesAboutToBeRemoved(FolderNode *folder,
+ const QList<FileNode*> &staleFiles);
+ void emitFilesRemoved();
+ void emitNodeSortKeyAboutToChange(Node *node);
+ void emitNodeSortKeyChanged();
+
private:
void focusChanged();
void updateFromProjectTreeWidget(Internal::ProjectTreeWidget *widget);
@@ -76,36 +129,20 @@ private:
void update(Node *node, Project *project);
void updateContext();
- // slots to kepp the current node/current project from deletion
- void foldersAboutToBeRemoved(FolderNode *, const QList<FolderNode *> &list);
- void foldersRemoved();
- void filesAboutToBeRemoved(FolderNode *, const QList<FileNode *> &list);
- void filesRemoved();
- void aboutToRemoveProject(Project *project);
- void projectRemoved();
-
- void nodesAdded();
void updateFromFocus(bool invalidCurrentNode = false);
void updateExternalFileWarning();
static bool hasFocus(Internal::ProjectTreeWidget *widget);
-private slots: // use lambdas for the following when minimum Qt is 5.4
- void updateFromFocusResetFileSingleShot();
- void updateFromFocusResetFolderSingleShot();
- void updateFromFocusResetProjectSingleShot();
- void updateFromDocumentManagerSingleShot();
-
private:
static ProjectTree *s_instance;
QList<Internal::ProjectTreeWidget *> m_projectTreeWidgets;
Node *m_currentNode;
- QPointer<Project> m_currentProject;
+ Project *m_currentProject;
bool m_resetCurrentNodeFolder;
bool m_resetCurrentNodeFile;
bool m_resetCurrentNodeProject;
Core::Context m_lastProjectContext;
- NodesWatcher *m_watcher;
};
}