• Skip to content
  • Skip to link menu
KDE API Reference
  • KDE API Reference
  • kdevelop API Reference
  • KDE Home
  • Contact Us
 

kdevplatform/language/classmodel

  • sources
  • kfour-appscomplete
  • kdevelop
  • kdevplatform
  • language
  • classmodel
classmodelnode.h
Go to the documentation of this file.
1 /*
2  * KDevelop Class Browser
3  *
4  * Copyright 2007-2009 Hamish Rodda <[email protected]>
5  * Copyright 2009 Lior Mualem <[email protected]>
6  *
7  * This program is free software; you can redistribute it and/or modify
8  * it under the terms of the GNU Library General Public License as
9  * published by the Free Software Foundation; either version 2 of the
10  * License, or (at your option) any later version.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public
18  * License along with this program; if not, write to the
19  * Free Software Foundation, Inc.,
20  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
21  */
22 
23 #ifndef KDEVPLATFORM_CLASSMODELNODE_H
24 #define KDEVPLATFORM_CLASSMODELNODE_H
25 
26 #include "classmodel.h"
27 
28 #include "../duchain/identifier.h"
29 #include "../duchain/duchainpointer.h"
30 #include "classmodelnodescontroller.h"
31 
32 #include <QIcon>
33 
34 class NodesModelInterface;
35 
36 namespace KDevelop {
37 class ClassDeclaration;
38 class ClassFunctionDeclaration;
39 class ClassMemberDeclaration;
40 class Declaration;
41 }
42 
43 namespace ClassModelNodes {
45 class Node
46 {
47 public:
48  Node(const QString& a_displayName, NodesModelInterface* a_model);
49  virtual ~Node();
50 
51 public: // Operations
53  void clear();
54 
56  virtual void collapse() {};
57 
59  virtual void expand() {};
60 
62  void addNode(Node* a_child);
63 
65  void removeNode(Node* a_child);
66 
68  void removeSelf() { m_parentNode->removeNode(this); }
69 
71  void recursiveSort();
72 
73 public: // Info retrieval
75  Node* parent() const { return m_parentNode; }
76 
78  int row();
79 
81  QString displayName() const { return m_displayName; }
82 
84  const QList<Node*>& children() const { return m_children; }
85 
88  QIcon cachedIcon();
89 
90 public: // overridables
92  virtual int score() const = 0;
93 
95  virtual bool hasChildren() const { return !m_children.empty(); }
96 
98  virtual QString sortableString() const { return m_displayName; }
99 
100 protected:
104  virtual bool getIcon(QIcon& a_resultIcon) = 0;
105 
106 private:
107  Node* m_parentNode;
108 
110  void recursiveSortInternal();
111 
112 protected:
113  using NodesList = QList<Node*>;
114  NodesList m_children;
115  QString m_displayName;
116  QIcon m_cachedIcon;
117  NodesModelInterface* m_model;
118 };
119 
122 
124 class DynamicNode
125  : public Node
126 {
127 public:
128  DynamicNode(const QString& a_displayName, NodesModelInterface* a_model);
129 
131  bool isPopulated() const { return m_populated; }
132 
134  void performPopulateNode(bool a_forceRepopulate = false);
135 
136 public: // Node overrides.
137  void collapse() override;
138  void expand() override;
139  bool hasChildren() const override;
140 
141 protected: // overridables
144  virtual void populateNode() {}
145 
148  virtual void nodeCleared() {}
149 
150 private:
151  bool m_populated;
152 
154  void performNodeCleanup();
155 };
156 
159 
161 class IdentifierNode
162  : public DynamicNode
163 {
164 public:
165  IdentifierNode(KDevelop::Declaration* a_decl, NodesModelInterface* a_model,
166  const QString& a_displayName = QString());
167 
168 public:
170  const KDevelop::IndexedQualifiedIdentifier& identifier() const { return m_identifier; }
171 
172 public: // Node overrides
173  bool getIcon(QIcon& a_resultIcon) override;
174 
175 public: // Overridables
178  virtual KDevelop::Declaration* declaration();
179 
180 private:
181  KDevelop::IndexedQualifiedIdentifier m_identifier;
182  KDevelop::IndexedDeclaration m_indexedDeclaration;
183  KDevelop::DeclarationPointer m_cachedDeclaration;
184 };
185 
188 
190 class EnumNode
191  : public IdentifierNode
192 {
193 public:
194  EnumNode(KDevelop::Declaration* a_decl, NodesModelInterface* a_model);
195 
196 public: // Node overrides
197  int score() const override { return 102; }
198  bool getIcon(QIcon& a_resultIcon) override;
199  void populateNode() override;
200 };
201 
204 
206 class ClassNode
207  : public IdentifierNode
208  , public ClassModelNodeDocumentChangedInterface
209 {
210 public:
211  ClassNode(KDevelop::Declaration* a_decl, NodesModelInterface* a_model);
212  ~ClassNode() override;
213 
216  ClassNode* findSubClass(const KDevelop::IndexedQualifiedIdentifier& a_id);
217 
218 public: // Node overrides
219  int score() const override { return 300; }
220  void populateNode() override;
221  void nodeCleared() override;
222  bool hasChildren() const override { return true; }
223 
224 protected: // ClassModelNodeDocumentChangedInterface overrides
225  void documentChanged(const KDevelop::IndexedString& a_file) override;
226 
227 private:
228  using SubIdentifiersMap = QMap<uint, Node*>;
230  SubIdentifiersMap m_subIdentifiers;
231 
233  KDevelop::IndexedString m_cachedUrl;
234 
238  bool updateClassDeclarations();
239 
242  bool addBaseAndDerived();
243 };
244 
247 
249 class FunctionNode
250  : public IdentifierNode
251 {
252 public:
253  FunctionNode(KDevelop::Declaration* a_decl, NodesModelInterface* a_model);
254 
255 public: // Node overrides
256  int score() const override { return 400; }
257  QString sortableString() const override { return m_sortableString; }
258 
259 private:
260  QString m_sortableString;
261 };
262 
265 
267 class ClassMemberNode
268  : public IdentifierNode
269 {
270 public:
271  ClassMemberNode(KDevelop::ClassMemberDeclaration* a_decl, NodesModelInterface* a_model);
272 
273 public: // Node overrides
274  int score() const override { return 500; }
275  bool getIcon(QIcon& a_resultIcon) override;
276 };
277 
280 
282 class FolderNode
283  : public Node
284 {
285 public:
286  FolderNode(const QString& a_displayName, NodesModelInterface* a_model);
287 
288 public: // Node overrides
289  bool getIcon(QIcon& a_resultIcon) override;
290  int score() const override { return 100; }
291 };
292 
295 
297 class DynamicFolderNode
298  : public DynamicNode
299 {
300 public:
301  DynamicFolderNode(const QString& a_displayName, NodesModelInterface* a_model);
302 
303 public: // Node overrides
304  bool getIcon(QIcon& a_resultIcon) override;
305  int score() const override { return 100; }
306 };
307 
310 
313 class BaseClassesFolderNode
314  : public DynamicFolderNode
315 {
316 public:
317  explicit BaseClassesFolderNode(NodesModelInterface* a_model);
318 
319 public: // Node overrides
320  void populateNode() override;
321 };
322 
325 
328 class DerivedClassesFolderNode
329  : public DynamicFolderNode
330 {
331 public:
332  explicit DerivedClassesFolderNode(NodesModelInterface* a_model);
333 
334 public: // Node overrides
335  void populateNode() override;
336 };
337 } // namespace classModelNodes
338 
339 #endif
ClassModelNodes::Node::parent
Node * parent() const
Return the parent associated with this node.
Definition: classmodelnode.h:75
ClassModelNodes::ClassMemberNode::ClassMemberNode
ClassMemberNode(KDevelop::ClassMemberDeclaration *a_decl, NodesModelInterface *a_model)
Definition: classmodelnode.cpp:299
ClassModelNodes::FunctionNode::score
int score() const override
Return a score when sorting the nodes.
Definition: classmodelnode.h:256
ClassModelNodes::ClassNode::populateNode
void populateNode() override
Called by the framework when the node is about to be expanded it should be populated with sub-nodes i...
Definition: classmodelnode.cpp:134
ClassModelNodeDocumentChangedInterface
Definition: classmodelnodescontroller.h:31
ClassModelNodes::Node::removeSelf
void removeSelf()
Remove this node and delete it.
Definition: classmodelnode.h:68
ClassModelNodes::BaseClassesFolderNode::BaseClassesFolderNode
BaseClassesFolderNode(NodesModelInterface *a_model)
Definition: classmodelnode.cpp:357
classmodel.h
ClassModelNodes::ClassNode
Provides display for a single class.
Definition: classmodelnode.h:206
ClassModelNodes::IdentifierNode::identifier
const KDevelop::IndexedQualifiedIdentifier & identifier() const
Returns the qualified identifier for this node by going through the tree.
Definition: classmodelnode.h:170
ClassModelNodes::IdentifierNode::IdentifierNode
IdentifierNode(KDevelop::Declaration *a_decl, NodesModelInterface *a_model, const QString &a_displayName=QString())
Definition: classmodelnode.cpp:42
ClassModelNodes::Node::m_model
NodesModelInterface * m_model
Definition: classmodelnode.h:117
ClassModelNodes::ClassMemberNode::getIcon
bool getIcon(QIcon &a_resultIcon) override
fill a_resultIcon with a display icon for the node.
Definition: classmodelnode.cpp:304
NodesModelInterface
The model interface accessible from the nodes.
Definition: classmodel.h:51
ClassModelNodes::Node::hasChildren
virtual bool hasChildren() const
Return true if the node contains sub-nodes.
Definition: classmodelnode.h:95
ClassModelNodes::DynamicNode::expand
void expand() override
Called by the model to expand the node and populate it with sub-nodes if needed.
Definition: classmodelnode.cpp:518
ClassModelNodes::ClassNode::hasChildren
bool hasChildren() const override
Return true if the node contains sub-nodes.
Definition: classmodelnode.h:222
ClassModelNodes::ClassNode::~ClassNode
~ClassNode() override
Definition: classmodelnode.cpp:126
ClassModelNodes::Node::collapse
virtual void collapse()
Called by the model to collapse the node and remove sub-items if needed.
Definition: classmodelnode.h:56
ClassModelNodes::ClassMemberNode::score
int score() const override
Return a score when sorting the nodes.
Definition: classmodelnode.h:274
ClassModelNodes::DynamicNode::populateNode
virtual void populateNode()
Called by the framework when the node is about to be expanded it should be populated with sub-nodes i...
Definition: classmodelnode.h:144
ClassModelNodes::DerivedClassesFolderNode::DerivedClassesFolderNode
DerivedClassesFolderNode(NodesModelInterface *a_model)
Definition: classmodelnode.cpp:388
ClassModelNodes::Node::clear
void clear()
Clear all the children from the node.
Definition: classmodelnode.cpp:428
ClassModelNodes::Node
Base node class - provides basic functionality.
Definition: classmodelnode.h:45
classmodelnodescontroller.h
ClassModelNodes::Node::children
const QList< Node * > & children() const
Returns a list of child nodes.
Definition: classmodelnode.h:84
ClassModelNodes::DynamicFolderNode::score
int score() const override
Return a score when sorting the nodes.
Definition: classmodelnode.h:305
ClassModelNodes::Node::row
int row()
Get my index in the parent node.
Definition: classmodelnode.cpp:485
ClassModelNodes::DynamicFolderNode
Provides a folder node with a dynamic list of nodes.
Definition: classmodelnode.h:297
QList< Node * >
ClassModelNodes::DynamicNode::isPopulated
bool isPopulated() const
Return true if the node was populated already.
Definition: classmodelnode.h:131
ClassModelNodes::Node::cachedIcon
QIcon cachedIcon()
Return an icon representation for the node.
Definition: classmodelnode.cpp:493
ClassModelNodes::FunctionNode::FunctionNode
FunctionNode(KDevelop::Declaration *a_decl, NodesModelInterface *a_model)
Definition: classmodelnode.cpp:277
ClassModelNodes::DynamicNode::hasChildren
bool hasChildren() const override
Return true if the node contains sub-nodes.
Definition: classmodelnode.cpp:564
ClassModelNodes::IdentifierNode
Base class for nodes associated with a KDevelop::QualifiedIdentifier.
Definition: classmodelnode.h:161
ClassModelNodes::ClassNode::score
int score() const override
Return a score when sorting the nodes.
Definition: classmodelnode.h:219
ClassModelNodes::DynamicNode::DynamicNode
DynamicNode(const QString &a_displayName, NodesModelInterface *a_model)
Definition: classmodelnode.cpp:507
ClassModelNodes::DynamicNode
Base class for nodes that generate and populate their child nodes dynamically.
Definition: classmodelnode.h:124
QList::empty
bool empty() const
ClassModelNodes::FolderNode
Provides a folder node with a static list of nodes.
Definition: classmodelnode.h:282
ClassModelNodes::EnumNode::getIcon
bool getIcon(QIcon &a_resultIcon) override
fill a_resultIcon with a display icon for the node.
Definition: classmodelnode.cpp:82
ClassModelNodes::IdentifierNode::declaration
virtual KDevelop::Declaration * declaration()
Return the associated declaration.
Definition: classmodelnode.cpp:52
QString
ClassModelNodes::FolderNode::getIcon
bool getIcon(QIcon &a_resultIcon) override
fill a_resultIcon with a display icon for the node.
Definition: classmodelnode.cpp:348
ClassModelNodes::DynamicFolderNode::DynamicFolderNode
DynamicFolderNode(const QString &a_displayName, NodesModelInterface *a_model)
Definition: classmodelnode.cpp:329
ClassModelNodes::DynamicNode::nodeCleared
virtual void nodeCleared()
Called after the nodes have been removed.
Definition: classmodelnode.h:148
ClassModelNodes::BaseClassesFolderNode
Special folder - the parent is assumed to be a ClassNode.
Definition: classmodelnode.h:313
ClassModelNodes::DynamicNode::collapse
void collapse() override
Called by the model to collapse the node and remove sub-items if needed.
Definition: classmodelnode.cpp:513
ClassModelNodes::FunctionNode::sortableString
QString sortableString() const override
We use this string when sorting items.
Definition: classmodelnode.h:257
ClassModelNodes::Node::expand
virtual void expand()
Called by the model to expand the node and populate it with sub-nodes if needed.
Definition: classmodelnode.h:59
QIcon
ClassModelNodes::BaseClassesFolderNode::populateNode
void populateNode() override
Called by the framework when the node is about to be expanded it should be populated with sub-nodes i...
Definition: classmodelnode.cpp:362
ClassModelNodes::EnumNode::populateNode
void populateNode() override
Called by the framework when the node is about to be expanded it should be populated with sub-nodes i...
Definition: classmodelnode.cpp:104
ClassModelNodes::FunctionNode
Provides a display for a single class function.
Definition: classmodelnode.h:249
ClassModelNodes::Node::removeNode
void removeNode(Node *a_child)
Remove child node from the list and delete it.
Definition: classmodelnode.cpp:444
ClassModelNodes::ClassNode::ClassNode
ClassNode(KDevelop::Declaration *a_decl, NodesModelInterface *a_model)
Definition: classmodelnode.cpp:121
ClassModelNodes::EnumNode::EnumNode
EnumNode(KDevelop::Declaration *a_decl, NodesModelInterface *a_model)
Definition: classmodelnode.cpp:74
ClassModelNodes::Node::Node
Node(const QString &a_displayName, NodesModelInterface *a_model)
Definition: classmodelnode.cpp:411
ClassModelNodes::Node::m_cachedIcon
QIcon m_cachedIcon
Definition: classmodelnode.h:116
QMap< uint, Node * >
ClassModelNodes::ClassNode::documentChanged
void documentChanged(const KDevelop::IndexedString &a_file) override
Called when the registered document is changed.
Definition: classmodelnode.cpp:247
ClassModelNodes::Node::m_children
NodesList m_children
Definition: classmodelnode.h:114
ClassModelNodes::ClassMemberNode
Provides display for a single class variable.
Definition: classmodelnode.h:267
ClassModelNodes
Definition: allclassesfolder.h:31
KDevelop
Definition: allclassesfolder.h:27
ClassModelNodes::Node::m_displayName
QString m_displayName
Definition: classmodelnode.h:115
ClassModelNodes::Node::sortableString
virtual QString sortableString() const
We use this string when sorting items.
Definition: classmodelnode.h:98
ClassModelNodes::EnumNode::score
int score() const override
Return a score when sorting the nodes.
Definition: classmodelnode.h:197
ClassModelNodes::FolderNode::FolderNode
FolderNode(const QString &a_displayName, NodesModelInterface *a_model)
Definition: classmodelnode.cpp:343
ClassModelNodes::Node::recursiveSort
void recursiveSort()
Called once the node has been populated to sort the entire tree / branch.
Definition: classmodelnode.cpp:476
ClassModelNodes::DynamicNode::performPopulateNode
void performPopulateNode(bool a_forceRepopulate=false)
Populate the node and mark the flag - called from expand or can be used internally.
Definition: classmodelnode.cpp:546
ClassModelNodes::Node::getIcon
virtual bool getIcon(QIcon &a_resultIcon)=0
fill a_resultIcon with a display icon for the node.
ClassModelNodes::Node::~Node
virtual ~Node()
Definition: classmodelnode.cpp:418
ClassModelNodes::ClassNode::findSubClass
ClassNode * findSubClass(const KDevelop::IndexedQualifiedIdentifier &a_id)
Lookup a contained class and return the related node.
Definition: classmodelnode.cpp:255
ClassModelNodes::EnumNode
A node that represents an enum value.
Definition: classmodelnode.h:190
ClassModelNodes::DynamicFolderNode::getIcon
bool getIcon(QIcon &a_resultIcon) override
fill a_resultIcon with a display icon for the node.
Definition: classmodelnode.cpp:334
ClassModelNodes::DerivedClassesFolderNode
Special folder - the parent is assumed to be a ClassNode.
Definition: classmodelnode.h:328
ClassModelNodes::Node::addNode
void addNode(Node *a_child)
Append a new child node to the list.
Definition: classmodelnode.cpp:434
ClassModelNodes::Node::displayName
QString displayName() const
Return the display name for the node.
Definition: classmodelnode.h:81
ClassModelNodes::FolderNode::score
int score() const override
Return a score when sorting the nodes.
Definition: classmodelnode.h:290
ClassModelNodes::Node::score
virtual int score() const =0
Return a score when sorting the nodes.
ClassModelNodes::DerivedClassesFolderNode::populateNode
void populateNode() override
Called by the framework when the node is about to be expanded it should be populated with sub-nodes i...
Definition: classmodelnode.cpp:393
ClassModelNodes::IdentifierNode::getIcon
bool getIcon(QIcon &a_resultIcon) override
fill a_resultIcon with a display icon for the node.
Definition: classmodelnode.cpp:60
ClassModelNodes::ClassNode::nodeCleared
void nodeCleared() override
Called after the nodes have been removed.
Definition: classmodelnode.cpp:237
This file is part of the KDE documentation.
Documentation copyright © 1996-2021 The KDE developers.
Generated on Thu Jan 14 2021 23:34:45 by doxygen 1.8.16 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

kdevplatform/language/classmodel

Skip menu "kdevplatform/language/classmodel"
  • Main Page
  • Namespace List
  • Alphabetical List
  • Class List
  • Class Hierarchy
  • Class Members
  • File List
  • File Members
  • Related Pages

kdevelop API Reference

Skip menu "kdevelop API Reference"
  • kdevplatform
  •   debugger
  •   documentation
  •   interfaces
  •   language
  •     assistant
  •     backgroundparser
  •     checks
  •     classmodel
  •     codecompletion
  •     codegen
  •     duchain
  •     editor
  •     highlighting
  •     interfaces
  •     util
  •   outputview
  •   project
  •   serialization
  •   shell
  •   sublime
  •   tests
  •   util
  •   vcs

Search



Report problems with this website to our bug tracking system.
Contact the specific authors with questions and comments about the page contents.

KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal