From f20b92f9130db2df1c7e2ce22926286c2b51ef39 Mon Sep 17 00:00:00 2001 From: Tobias Hunger <tobias.hunger@digia.com> Date: Wed, 30 Jan 2013 18:13:46 +0100 Subject: [PATCH] ProjectNodes: Add line information and act on it Also allow for the path to be set. Qbs can move products from one file to the next, so that is needed there. Change-Id: Iebaf3be40fdb0e5e462d45b00cf46d58f985a163 Reviewed-by: hjk <hjk121@nokiamail.com> --- src/plugins/projectexplorer/projectnodes.cpp | 33 +++++++++++++++++++ src/plugins/projectexplorer/projectnodes.h | 10 ++++-- .../projectexplorer/projecttreewidget.cpp | 8 +++-- 3 files changed, 46 insertions(+), 5 deletions(-) diff --git a/src/plugins/projectexplorer/projectnodes.cpp b/src/plugins/projectexplorer/projectnodes.cpp index 7c04426e41d..8e029843944 100644 --- a/src/plugins/projectexplorer/projectnodes.cpp +++ b/src/plugins/projectexplorer/projectnodes.cpp @@ -73,6 +73,16 @@ Node::Node(NodeType nodeType, } +/*! + * \brief The path of the file representing this node. + * + * This method does not emit any signals, that has to be done by the calling class! + */ +void Node::setPath(const QString &path) +{ + m_path = path; +} + NodeType Node::nodeType() const { return m_nodeType; @@ -102,6 +112,11 @@ QString Node::path() const return m_path; } +int Node::line() const +{ + return -1; +} + QString Node::displayName() const { return QFileInfo(path()).fileName(); @@ -241,6 +256,24 @@ void FolderNode::setIcon(const QIcon &icon) m_icon = icon; } +FileNode *FolderNode::findFile(const QString &path) +{ + foreach (FileNode *n, fileNodes()) { + if (n->path() == path) + return n; + } + return 0; +} + +FolderNode *FolderNode::findSubFolder(const QString &path) +{ + foreach (FolderNode *n, subFolderNodes()) { + if (n->path() == path) + return n; + } + return 0; +} + /*! \class ProjectExplorer::VirtualFolderNode diff --git a/src/plugins/projectexplorer/projectnodes.h b/src/plugins/projectexplorer/projectnodes.h index 749dda03680..c5e62a8b7c8 100644 --- a/src/plugins/projectexplorer/projectnodes.h +++ b/src/plugins/projectexplorer/projectnodes.h @@ -85,11 +85,15 @@ public: ProjectNode *projectNode() const; // managing project FolderNode *parentFolderNode() const; // parent folder or project QString path() const; // file system path + virtual int line() const; virtual QString displayName() const; virtual QString vcsTopic() const; virtual QString tooltip() const; virtual bool isEnabled() const; + void setPath(const QString &path); // this does not call emitNodeUpdated! + void emitNodeUpdated(); + protected: Node(NodeType nodeType, const QString &path); @@ -97,8 +101,6 @@ protected: void setProjectNode(ProjectNode *project); void setParentFolderNode(FolderNode *parentFolder); - void emitNodeUpdated(); - private: NodeType m_nodeType; ProjectNode *m_projectNode; @@ -140,6 +142,9 @@ public: void setDisplayName(const QString &name); void setIcon(const QIcon &icon); + FileNode *findFile(const QString &path); + FolderNode *findSubFolder(const QString &path); + protected: QList<FolderNode*> m_subFolderNodes; QList<FileNode*> m_fileNodes; @@ -331,7 +336,6 @@ private: friend class Node; }; - } // namespace ProjectExplorer // HACK: THERE SHOULD BE ONE PLACE TO MAKE THE FILE ENDING->FILE TYPE ASSOCIATION diff --git a/src/plugins/projectexplorer/projecttreewidget.cpp b/src/plugins/projectexplorer/projecttreewidget.cpp index ab8fe7ec205..b1edc28f5b6 100644 --- a/src/plugins/projectexplorer/projecttreewidget.cpp +++ b/src/plugins/projectexplorer/projecttreewidget.cpp @@ -40,6 +40,7 @@ #include <coreplugin/coreconstants.h> #include <coreplugin/icore.h> #include <coreplugin/editormanager/editormanager.h> +#include <coreplugin/editormanager/ieditor.h> #include <coreplugin/icontext.h> #include <utils/qtcassert.h> @@ -374,8 +375,11 @@ void ProjectTreeWidget::initView() void ProjectTreeWidget::openItem(const QModelIndex &mainIndex) { Node *node = m_model->nodeForIndex(mainIndex); - if (node->nodeType() == FileNodeType) - EditorManager::openEditor(node->path(), Id(), EditorManager::ModeSwitch); + if (node->nodeType() != FileNodeType) + return; + IEditor *editor = EditorManager::openEditor(node->path(), Id(), EditorManager::ModeSwitch); + if (node->line() >= 0) + editor->gotoLine(node->line()); } void ProjectTreeWidget::setProjectFilter(bool filter) -- GitLab