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 m_subFolderNodes; QList 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 #include #include +#include #include #include @@ -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)