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

kdevplatform/project

  • sources
  • kfour-appscomplete
  • kdevelop
  • kdevplatform
  • project
projectmodel.h
Go to the documentation of this file.
1 /* This file is part of KDevelop
2  Copyright 2005 Roberto Raggi <[email protected]>
3  Copyright 2007 Andreas Pakulat <[email protected]>
4  Copyright 2007 Aleix Pol <[email protected]>
5 
6  This library is free software; you can redistribute it and/or
7  modify it under the terms of the GNU Library General Public
8  License as published by the Free Software Foundation; either
9  version 2 of the License, or (at your option) any later version.
10 
11  This library is distributed in the hope that it will be useful,
12  but WITHOUT ANY WARRANTY; without even the implied warranty of
13  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14  Library General Public License for more details.
15 
16  You should have received a copy of the GNU Library General Public License
17  along with this library; see the file COPYING.LIB. If not, write to
18  the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
19  Boston, MA 02110-1301, USA.
20 */
21 
22 #ifndef KDEVPLATFORM_PROJECTMODEL_H
23 #define KDEVPLATFORM_PROJECTMODEL_H
24 
25 #include <QAbstractItemModel>
26 #include <QUrl>
27 
28 #include "projectexport.h"
29 
30 template<typename T1,typename T2> struct QPair;
31 template<typename T> class QList;
32 
33 namespace KDevelop
34 {
35 
36 class IProject;
37 class ProjectFolderItem;
38 class ProjectBuildFolderItem;
39 class ProjectFileItem;
40 class ProjectTargetItem;
41 class ProjectExecutableTargetItem;
42 class ProjectLibraryTargetItem;
43 class ProjectModel;
44 class IndexedString;
45 class Path;
46 class ProjectModelPrivate;
47 
56 class KDEVPLATFORMPROJECT_EXPORT ProjectVisitor
57 {
58 public:
59  ProjectVisitor();
60  virtual ~ProjectVisitor();
64  virtual void visit( ProjectModel* );
68  virtual void visit( IProject* );
72  virtual void visit( ProjectFolderItem* );
76  virtual void visit( ProjectFileItem* );
80  virtual void visit( ProjectBuildFolderItem* );
84  virtual void visit( ProjectExecutableTargetItem* );
88  virtual void visit( ProjectLibraryTargetItem* );
89 };
90 
101 class KDEVPLATFORMPROJECT_EXPORT ProjectBaseItem
102 {
103  public:
104  ProjectBaseItem( IProject*, const QString &name, ProjectBaseItem *parent = nullptr );
105  virtual ~ProjectBaseItem();
106 
107 
108  enum ProjectItemType
109  {
110  BaseItem = 0 ,
111  BuildFolder = 1 ,
112  Folder = 2 ,
113  ExecutableTarget = 3 ,
114  LibraryTarget = 4 ,
115  Target = 5 ,
116  File = 6 ,
117  CustomProjectItemType = 100
118  };
119 
120  enum RenameStatus
121  {
122  RenameOk = 0,
123  ExistingItemSameName = 1,
124  ProjectManagerRenameFailed = 2,
125  InvalidNewName = 3
126  };
127 
129  IProject* project() const;
130 
132  virtual ProjectFolderItem *folder() const;
133 
135  virtual ProjectTargetItem *target() const;
136 
138  virtual ProjectFileItem *file() const;
139 
141  virtual ProjectExecutableTargetItem *executable() const;
142 
144  QList<ProjectFolderItem*> folderList() const;
145 
147  QList<ProjectTargetItem*> targetList() const;
148 
150  QList<ProjectFileItem*> fileList() const;
151 
152  virtual bool lessThan( const KDevelop::ProjectBaseItem* ) const;
153  static bool pathLessThan(KDevelop::ProjectBaseItem* item1, KDevelop::ProjectBaseItem* item2);
154 
156  ProjectBaseItem* child( int row ) const;
158  QList<ProjectBaseItem*> children() const;
160  QModelIndex index() const;
162  virtual ProjectBaseItem* parent() const;
164  QString text() const;
166  int row() const;
167 
169  int rowCount() const;
170 
172  ProjectModel* model() const;
173 
177  void appendRow( ProjectBaseItem* item );
178 
182  void removeRow( int row );
183 
187  void removeRows( int row, int count );
188 
192  ProjectBaseItem* takeRow( int row );
193 
195  virtual int type() const;
196 
198  virtual QString iconName() const;
199 
206  virtual void setPath( const Path& );
207 
211  Path path() const;
212 
217  IndexedString indexedPath() const;
218 
224  QString baseName() const;
225 
230  virtual RenameStatus rename( const QString& newname );
231 
232  bool isProjectRoot() const;
233 
239  virtual Qt::ItemFlags flags();
240 
244  void setFlags(Qt::ItemFlags flags);
245 
246  protected:
254  void setText( const QString& text );
255 
256  const QScopedPointer<class ProjectBaseItemPrivate> d_ptr;
257  void setRow( int row );
258  void setModel( ProjectModel* model );
259  private:
260  Q_DECLARE_PRIVATE(ProjectBaseItem)
261  friend class ProjectModel;
262 };
263 
268 class KDEVPLATFORMPROJECT_EXPORT ProjectFolderItem: public ProjectBaseItem
269 {
270 public:
275  ProjectFolderItem( IProject* project, const Path& path, ProjectBaseItem* parent = nullptr );
276 
282  ProjectFolderItem( const QString& name, ProjectBaseItem *parent );
283 
284  ~ProjectFolderItem() override;
285 
286  void setPath(const Path& ) override;
287 
288  ProjectFolderItem *folder() const override;
289 
291  int type() const override;
292 
296  QString folderName() const;
297 
299  bool hasFileOrFolder(const QString& name) const;
300 
301  QString iconName() const override;
302  RenameStatus rename(const QString& newname) override;
303 
304 private:
305  void propagateRename( const Path& newBase ) const;
306 };
307 
308 
312 class KDEVPLATFORMPROJECT_EXPORT ProjectBuildFolderItem: public ProjectFolderItem
313 {
314 public:
319  ProjectBuildFolderItem( IProject* project, const Path &path, ProjectBaseItem* parent = nullptr );
325  ProjectBuildFolderItem( const QString &name, ProjectBaseItem *parent );
326 
328  int type() const override;
329  QString iconName() const override;
330 };
331 
337 class KDEVPLATFORMPROJECT_EXPORT ProjectTargetItem: public ProjectBaseItem
338 {
339 public:
340  ProjectTargetItem( IProject*, const QString &name, ProjectBaseItem *parent = nullptr );
341 
343  int type() const override;
344 
345  ProjectTargetItem *target() const override;
346  QString iconName() const override;
347  void setPath(const Path& path ) override;
348 };
349 
355 class KDEVPLATFORMPROJECT_EXPORT ProjectExecutableTargetItem: public ProjectTargetItem
356 {
357  public:
358  ProjectExecutableTargetItem( IProject*, const QString &name, ProjectBaseItem *parent = nullptr );
359 
360  ProjectExecutableTargetItem *executable() const override;
361  int type() const override;
362  virtual QUrl builtUrl() const=0;
363  virtual QUrl installedUrl() const=0;
364 };
365 
366 
372 class KDEVPLATFORMPROJECT_EXPORT ProjectLibraryTargetItem: public ProjectTargetItem
373 {
374  public:
375  ProjectLibraryTargetItem(IProject* project, const QString &name, ProjectBaseItem *parent = nullptr );
376 
377  int type() const override;
378 };
379 
383 class KDEVPLATFORMPROJECT_EXPORT ProjectFileItem: public ProjectBaseItem
384 {
385 public:
390  ProjectFileItem( IProject* project, const Path& path, ProjectBaseItem* parent = nullptr );
391 
397  ProjectFileItem( const QString& name, ProjectBaseItem *parent );
398  ~ProjectFileItem() override;
399 
401  int type() const override;
402 
403  ProjectFileItem *file() const override;
404 
408  QString fileName() const;
409 
410  void setPath( const Path& ) override;
411  QString iconName() const override;
412  RenameStatus rename(const QString& newname) override;
413 };
414 
420 class KDEVPLATFORMPROJECT_EXPORT ProjectModel: public QAbstractItemModel
421 {
422  Q_OBJECT
423 public:
424  enum Roles {
425  ProjectRole = Qt::UserRole+1
426  , ProjectItemRole
427  , UrlRole
428  , LastRole
429  };
430 
431  explicit ProjectModel( QObject *parent = nullptr );
432  ~ProjectModel() override;
433 
434  void clear();
435 
436  void appendRow( ProjectBaseItem* item );
437  void removeRow( int row );
438  ProjectBaseItem* takeRow( int row );
439 
440  ProjectBaseItem* itemAt( int row ) const;
441  QList<ProjectBaseItem*> topItems() const;
442 
443  QModelIndex pathToIndex(const QStringList& tofetch) const;
444  QStringList pathFromIndex(const QModelIndex& index) const;
445 
446  QModelIndex indexFromItem( const ProjectBaseItem* item ) const;
447  ProjectBaseItem* itemFromIndex( const QModelIndex& ) const;
448 
449  int columnCount( const QModelIndex& parent = QModelIndex() ) const override;
450  QVariant data( const QModelIndex& index, int role = Qt::DisplayRole ) const override;
451  QModelIndex parent( const QModelIndex& child ) const override;
452  int rowCount( const QModelIndex& parent = QModelIndex() ) const override;
453  QModelIndex index(int row, int column, const QModelIndex& parent = QModelIndex()) const override;
454 
455  bool setData(const QModelIndex& index, const QVariant& value, int role = Qt::EditRole) override;
456  bool insertColumns(int column, int count, const QModelIndex& parent = QModelIndex()) override;
457  bool insertRows(int row, int count, const QModelIndex& parent = QModelIndex()) override;
458 
459  Qt::ItemFlags flags(const QModelIndex& index) const override;
460  Qt::DropActions supportedDropActions() const override;
461 
465  QList<ProjectBaseItem*> itemsForPath(const IndexedString& path) const;
466 
470  ProjectBaseItem* itemForPath(const IndexedString& path) const;
471 
472 private:
473  const QScopedPointer<class ProjectModelPrivate> d_ptr;
474  Q_DECLARE_PRIVATE(ProjectModel)
475  friend class ProjectBaseItem;
476 };
477 
478 KDEVPLATFORMPROJECT_EXPORT QStringList joinProjectBasePath( const QStringList& partialpath, KDevelop::ProjectBaseItem* item );
479 KDEVPLATFORMPROJECT_EXPORT QStringList removeProjectBasePath( const QStringList& fullpath, KDevelop::ProjectBaseItem* item );
480 
481 }
482 
483 Q_DECLARE_METATYPE(KDevelop::ProjectBaseItem*)
484 Q_DECLARE_METATYPE(KDevelop::ProjectFolderItem*)
485 Q_DECLARE_METATYPE(KDevelop::ProjectFileItem*)
486 Q_DECLARE_METATYPE(KDevelop::ProjectLibraryTargetItem*)
487 Q_DECLARE_METATYPE(KDevelop::ProjectExecutableTargetItem*)
488 Q_DECLARE_METATYPE(KDevelop::ProjectTargetItem*)
489 Q_DECLARE_METATYPE(KDevelop::ProjectBuildFolderItem*)
490 Q_DECLARE_METATYPE(QList<KDevelop::ProjectBaseItem*>)
491 
492 #endif // KDEVPLATFORM_PROJECTMODEL_H
KDevelop::ProjectFolderItem
Implementation of the ProjectBaseItem interface that is specific to a folder.
Definition: projectmodel.h:268
KDevelop::ProjectExecutableTargetItem
Object which represents an executable target in a build system.
Definition: projectmodel.h:355
KDevelop::ProjectFileItem
Object which represents a file.
Definition: projectmodel.h:383
KDevelop::ProjectBuildFolderItem
Folder which contains buildable targets as part of a buildable project.
Definition: projectmodel.h:312
itemForPath
static KDevelop::ProjectBaseItem * itemForPath(const QStringList &path, KDevelop::ProjectModel *model)
Definition: dependencieswidget.cpp:30
KDevelop::ProjectBaseItem::RenameStatus
RenameStatus
Definition: projectmodel.h:120
QUrl
KDevelop::ProjectBaseItem
Interface that allows a developer to implement the three basic types of items you would see in a mult...
Definition: projectmodel.h:101
KDevelop::ProjectModel
Class providing some convenience methods for accessing the project model.
Definition: projectmodel.h:420
QList
Definition: projectmodel.h:31
KDevelop::ProjectVisitor
Base class to implement the visitor pattern for the project item tree.
Definition: projectmodel.h:56
QObject
QString
KDevelop::joinProjectBasePath
QStringList joinProjectBasePath(const QStringList &partialpath, KDevelop::ProjectBaseItem *item)
Definition: projectmodel.cpp:62
KDevelop::ProjectLibraryTargetItem
Object which represents a library target in a build system.
Definition: projectmodel.h:372
KDevelop::ProjectBaseItem::d_ptr
const QScopedPointer< class ProjectBaseItemPrivate > d_ptr
Definition: projectmodel.h:256
QScopedPointer< class ProjectBaseItemPrivate >
KDevelop::ProjectModel::Roles
Roles
Definition: projectmodel.h:424
Qt::DropActions
typedef DropActions
KDevelop
Definition: abstractfilemanagerplugin.h:33
QModelIndex
Qt::ItemFlags
typedef ItemFlags
KDevelop::removeProjectBasePath
QStringList removeProjectBasePath(const QStringList &fullpath, KDevelop::ProjectBaseItem *item)
Definition: projectmodel.cpp:46
QVariant
KDevelop::ProjectTargetItem
Object which represents a target in a build system.
Definition: projectmodel.h:337
KDevelop::ProjectBaseItem::ProjectItemType
ProjectItemType
Definition: projectmodel.h:108
QPair
Definition: projectmodel.h:30
QAbstractItemModel
QStringList
This file is part of the KDE documentation.
Documentation copyright © 1996-2021 The KDE developers.
Generated on Wed Mar 3 2021 00:37:59 by doxygen 1.8.16 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

kdevplatform/project

Skip menu "kdevplatform/project"
  • Main Page
  • Namespace List
  • Namespace Members
  • 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