diff options
author | Daniel Teske <daniel.teske@theqtcompany.com> | 2015-01-09 15:50:06 +0100 |
---|---|---|
committer | Daniel Teske <daniel.teske@theqtcompany.com> | 2015-01-14 11:48:12 +0100 |
commit | 70c9c51e5e4c6f70c950c959757a2e597a646c56 (patch) | |
tree | 17c26446ef9827e2675cac334af29fad59ee99cf /src/plugins/projectexplorer/projecttree.h | |
parent | 44a7db5091c41bcdc89799a978994edbbf82e7e2 (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.h | 77 |
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; }; } |