• Skip to content
  • Skip to link menu
KDE 4.2 API Reference
  • KDE API Reference
  • KDevelop Platform Libraries
  • Sitemap
  • Contact Us
 

project

projectmodel.cpp

00001 /* This file is part of KDevelop
00002     Copyright 2005 Roberto Raggi <roberto@kdevelop.org>
00003     Copyright 2007 Andreas Pakulat <apaku@gmx.de>
00004     Copyright 2007 Aleix Pol <aleixpol@gmail.com>
00005 
00006     This library is free software; you can redistribute it and/or
00007     modify it under the terms of the GNU Library General Public
00008     License as published by the Free Software Foundation; either
00009     version 2 of the License, or (at your option) any later version.
00010 
00011     This library is distributed in the hope that it will be useful,
00012     but WITHOUT ANY WARRANTY; without even the implied warranty of
00013     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00014     Library General Public License for more details.
00015 
00016     You should have received a copy of the GNU Library General Public License
00017     along with this library; see the file COPYING.LIB.  If not, write to
00018     the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
00019     Boston, MA 02110-1301, USA.
00020 */
00021 
00022 #include "projectmodel.h"
00023 
00024 #include <kmimetype.h>
00025 #include <kiconloader.h>
00026 #include <kicon.h>
00027 #include <kio/global.h>
00028 
00029 #include <QApplication>
00030 #include <QPalette>
00031 #include <QBrush>
00032 #include <QColor>
00033 #include <QFileInfo>
00034 #include <kdebug.h>
00035 
00036 #include <interfaces/iproject.h>
00037 
00038 namespace KDevelop
00039 {
00040 
00041 class ProjectBaseItemPrivate
00042 {
00043 public:
00044     ProjectBaseItemPrivate() : project(0) {}
00045     IProject* project;
00046 };
00047 
00048 class ProjectFolderItemPrivate : public ProjectBaseItemPrivate
00049 {
00050 public:
00051     KUrl m_url;
00052     bool m_isProjectRoot;
00053 };
00054 
00055 class ProjectBuildFolderItemPrivate : public ProjectFolderItemPrivate
00056 {
00057 public:
00058 };
00059 
00060 class ProjectFileItemPrivate : public ProjectBaseItemPrivate
00061 {
00062 public:
00063     KUrl m_url;
00064 };
00065 
00066 class ProjectTargetItemPrivate : public ProjectBaseItemPrivate
00067 {
00068 };
00069 
00070 class WorkspaceItemPrivate
00071 {
00072 public:
00073     QString name;
00074     KSharedConfig::Ptr metadataConfig;
00075     QString metadataDir;
00076 };
00077 
00078 class ProjectModelPrivate
00079 {
00080 };
00081 
00082 ProjectBaseItem::ProjectBaseItem( IProject* project, const QString &name, QStandardItem *parent )
00083         : QStandardItem( name ), d_ptr(new ProjectBaseItemPrivate)
00084 {
00085     Q_D(ProjectBaseItem);
00086     d->project = project;
00087     setParent( parent );
00088     setFlags( Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsEditable );
00089 }
00090 
00091 ProjectBaseItem::ProjectBaseItem( ProjectBaseItemPrivate& dd)
00092     : d_ptr(&dd)
00093 {
00094     setFlags( Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsEditable );
00095 }
00096 
00097 ProjectBaseItem::~ProjectBaseItem()
00098 {
00099     Q_D(ProjectBaseItem);
00100     delete d;
00101 }
00102 
00103 IProject* ProjectBaseItem::project() const
00104 {
00105     Q_D(const ProjectBaseItem);
00106     return d->project;
00107 }
00108 
00109 void ProjectBaseItem::setParent( QStandardItem* parent )
00110 {
00111     if( parent )
00112         parent->setChild( parent->rowCount(), this );
00113 }
00114 
00115 void ProjectBaseItem::setIcon()
00116 {
00117 }
00118 
00119 void ProjectBaseItem::add( ProjectBaseItem* item )
00120 {
00121     appendRow( item );
00122 }
00123 
00124 ProjectFolderItem *ProjectBaseItem::folder() const
00125 {
00126     return 0;
00127 }
00128 
00129 ProjectTargetItem *ProjectBaseItem::target() const
00130 {
00131     return 0;
00132 }
00133 
00134 ProjectFileItem *ProjectBaseItem::file() const
00135 {
00136     return 0;
00137 }
00138 
00139 QList<ProjectFolderItem*> ProjectBaseItem::folderList() const
00140 {
00141     QList<ProjectFolderItem*> lst;
00142     for ( int i = 0; i < rowCount(); ++i )
00143     {
00144         QStandardItem* item = child( i );
00145         if ( item->type() == Folder || item->type() == BuildFolder )
00146         {
00147             ProjectFolderItem *kdevitem = dynamic_cast<ProjectFolderItem*>( item );
00148             if ( kdevitem )
00149                 lst.append( kdevitem );
00150         }
00151     }
00152 
00153     return lst;
00154 }
00155 
00156 QList<ProjectTargetItem*> ProjectBaseItem::targetList() const
00157 {
00158     QList<ProjectTargetItem*> lst;
00159     for ( int i = 0; i < rowCount(); ++i )
00160     {
00161         QStandardItem* item = child( i );
00162         if ( item->type() == Target || item->type() == LibraryTarget ||
00163              item->type() == ExecutableTarget || item->type() == TestTarget)
00164         {
00165             ProjectTargetItem *kdevitem = dynamic_cast<ProjectTargetItem*>( item );
00166             if ( kdevitem )
00167                 lst.append( kdevitem );
00168         }
00169     }
00170 
00171     return lst;
00172 }
00173 
00174 QList<ProjectTestTargetItem*> ProjectBaseItem::testList() const
00175 {
00176     QList<ProjectTestTargetItem*> lst;
00177     for ( int i = 0; i < rowCount(); ++i )
00178     {
00179         QStandardItem* item = child( i );
00180         if (item->type() == TestTarget)
00181         {
00182             ProjectTestTargetItem *kdevitem = dynamic_cast<ProjectTestTargetItem*>( item );
00183             if ( kdevitem )
00184                 lst.append( kdevitem );
00185         }
00186     }
00187 
00188     return lst;
00189 }
00190 
00191 QList<ProjectFileItem*> ProjectBaseItem::fileList() const
00192 {
00193     QList<ProjectFileItem*> lst;
00194     for ( int i = 0; i < rowCount(); ++i )
00195     {
00196         QStandardItem* item = child( i );
00197         if ( item->type() == File )
00198         {
00199             ProjectFileItem *kdevitem = dynamic_cast<ProjectFileItem*>( item );
00200             if ( kdevitem )
00201                 lst.append( kdevitem );
00202         }
00203 
00204     }
00205     return lst;
00206 }
00207 
00208 ProjectModel::ProjectModel( QObject *parent )
00209         : QStandardItemModel( parent ), d(0)
00210 {
00211 }
00212 
00213 ProjectModel::~ProjectModel()
00214 {}
00215 
00216 
00217 ProjectBaseItem *ProjectModel::item( const QModelIndex &index ) const
00218 {
00219     return dynamic_cast<ProjectBaseItem*>( itemFromIndex( index ) );
00220 }
00221 
00222 void ProjectModel::resetModel()
00223 {
00224     reset();
00225 }
00226 
00227 void ProjectModel::fetchMore( const QModelIndex &parent )
00228 {
00229     QStandardItem *parentItem = itemFromIndex( parent );
00230     if( !parentItem )
00231         return;
00232     int rowcount = parentItem->rowCount();
00233     for( int i=0; i<rowcount; i++ )
00234     {
00235         ProjectBaseItem *childItem = dynamic_cast<ProjectBaseItem*>(parentItem->child(i));
00236         if( childItem && childItem->icon().isNull() )
00237             childItem->setIcon();
00238     }
00239 }
00240 
00241 bool ProjectModel::canFetchMore( const QModelIndex & parent ) const
00242 {
00243     QStandardItem *parentItem = itemFromIndex( parent );
00244     if( !parentItem )
00245         return false;
00246     return true;
00247 }
00248 
00249 
00250 ProjectFolderItem::ProjectFolderItem( IProject* project, const KUrl & dir, QStandardItem * parent )
00251         : ProjectBaseItem( *new ProjectFolderItemPrivate )
00252 {
00253     Q_D(ProjectFolderItem);
00254     d->project = project;
00255     d->m_url = dir;
00256     setParent(parent);
00257     setText( dir.fileName() );
00258 }
00259 
00260 ProjectFolderItem::ProjectFolderItem( ProjectFolderItemPrivate& dd)
00261     : ProjectBaseItem( dd )
00262 {
00263 }
00264 
00265 ProjectFolderItem::~ProjectFolderItem()
00266 {
00267 }
00268 
00269 ProjectFolderItem *ProjectFolderItem::folder() const
00270 {
00271     return const_cast<ProjectFolderItem*>(this);
00272 }
00273 
00274 int ProjectFolderItem::type() const
00275 {
00276     return ProjectBaseItem::Folder;
00277 }
00278 
00279 const KUrl& ProjectFolderItem::url( ) const
00280 {
00281     Q_D(const ProjectFolderItem);
00282     return d->m_url;
00283 }
00284 
00285 void ProjectFolderItem::setUrl( const KUrl& url )
00286 {
00287     Q_D(ProjectFolderItem);
00288     d->m_url = url;
00289     setText( url.fileName() );
00290 }
00291 
00292 void ProjectFolderItem::setIcon()
00293 {
00294     QStandardItem::setIcon( KIO::pixmapForUrl( url(), 0, KIconLoader::Small ) );
00295 }
00296 
00297 bool ProjectFolderItem::hasFileOrFolder(const QString& name) const
00298 {
00299     for ( int i = 0; i < rowCount(); ++i )
00300     {
00301         QStandardItem* item = child( i );
00302         if ( ProjectFileItem* file = dynamic_cast<ProjectFileItem*>(item))
00303             if (file->url().fileName() == name)
00304                 return true;
00305 
00306         if ( ProjectFolderItem* folder = dynamic_cast<ProjectFolderItem*>(item))
00307             if (folder->url().fileName() == name)
00308                 return true;
00309     }
00310     return false;
00311 }
00312 
00313 ProjectBuildFolderItem::ProjectBuildFolderItem( ProjectBuildFolderItemPrivate& dd )
00314     : ProjectFolderItem( dd )
00315 {
00316 }
00317 
00318 ProjectBuildFolderItem::ProjectBuildFolderItem( IProject* project, const KUrl &dir, QStandardItem *parent)
00319     : ProjectFolderItem( *new ProjectBuildFolderItemPrivate )
00320 {
00321     Q_D(ProjectBuildFolderItem);
00322     d->project = project;
00323     setUrl( dir );
00324     setParent( parent );
00325 }
00326 
00327 int ProjectBuildFolderItem::type() const
00328 {
00329     return ProjectBaseItem::BuildFolder;
00330 }
00331 
00332 void ProjectBuildFolderItem::setIcon()
00333 {
00334     QStandardItem::setIcon( KIcon("folder-development") );
00335 }
00336 
00337 void ProjectFolderItem::setProjectRoot(bool isRoot)
00338 {
00339     Q_D(ProjectFolderItem);
00340     d->m_isProjectRoot=isRoot;
00341     setText(project()->name());
00342 }
00343 
00344 bool ProjectFolderItem::isProjectRoot() const
00345 {
00346     Q_D(const ProjectFolderItem);
00347     return d->m_isProjectRoot;
00348 }
00349 
00350 ProjectFileItem::ProjectFileItem( ProjectFileItemPrivate& dd)
00351     : ProjectBaseItem(dd)
00352 {
00353     setFlags( Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsEditable );
00354 }
00355 
00356 ProjectFileItem::ProjectFileItem( IProject* project, const KUrl & file, QStandardItem * parent )
00357         : ProjectBaseItem( *new ProjectFileItemPrivate )
00358 {
00359     Q_D(ProjectFileItem);
00360     d->project = project;
00361     d->m_url = file;
00362     setText( file.fileName() );
00363     setParent( parent );
00364     setFlags( Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsEditable );
00365 }
00366 
00367 const KUrl & ProjectFileItem::url( ) const
00368 {
00369     Q_D(const ProjectFileItem);
00370     return d->m_url;
00371 }
00372 
00373 void ProjectFileItem::setUrl( const KUrl& url )
00374 {
00375     Q_D(ProjectFileItem);
00376     d->m_url = url;
00377 }
00378 
00379 int ProjectFileItem::type() const
00380 {
00381     return ProjectBaseItem::File;
00382 }
00383 
00384 ProjectFileItem *ProjectFileItem::file() const
00385 {
00386     return const_cast<ProjectFileItem*>( this );
00387 }
00388 
00389 void ProjectFileItem::setIcon()
00390 {
00391     QStandardItem::setIcon( KIO::pixmapForUrl( url(), 0, KIconLoader::Small ) );
00392 }
00393 
00394 ProjectTargetItem::ProjectTargetItem( ProjectTargetItemPrivate& dd)
00395     : ProjectBaseItem( dd )
00396 {
00397 }
00398 
00399 ProjectTargetItem::ProjectTargetItem( IProject* project, const QString &name, QStandardItem *parent )
00400                 : ProjectBaseItem( *new ProjectTargetItemPrivate )
00401 {
00402     Q_D(ProjectTargetItem);
00403     d->project = project;
00404     setText( name );
00405     setParent( parent );
00406 }
00407 
00408 int ProjectTargetItem::type() const
00409 {
00410     return ProjectBaseItem::Target;
00411 }
00412 
00413 ProjectTargetItem *ProjectTargetItem::target() const
00414 {
00415     return const_cast<ProjectTargetItem*>( this );
00416 }
00417 
00418 void ProjectTargetItem::setIcon()
00419 {
00420     QStandardItem::setIcon( KIcon("system-run") );
00421 }
00422 
00423 ProjectExecutableTargetItem::ProjectExecutableTargetItem( IProject* project, const QString &name, QStandardItem *parent )
00424     : ProjectTargetItem(project, name, parent)
00425 {}
00426 
00427 int ProjectExecutableTargetItem::type() const
00428 {
00429     return ProjectBaseItem::ExecutableTarget;
00430 }
00431 
00432 ProjectLibraryTargetItem::ProjectLibraryTargetItem( IProject* project, const QString &name, QStandardItem *parent )
00433     : ProjectTargetItem(project, name, parent)
00434 {}
00435 
00436 int ProjectLibraryTargetItem::type() const
00437 {
00438     return ProjectBaseItem::LibraryTarget;
00439 }
00440 
00441 ProjectTestTargetItem::ProjectTestTargetItem( IProject* project, const QString &name, QStandardItem *parent )
00442     : ProjectExecutableTargetItem(project, name, parent)
00443 {}
00444 
00445 int ProjectTestTargetItem::type() const
00446 {
00447     return ProjectBaseItem::TestTarget;
00448 }
00449 
00450 
00451 }
00452 #include "projectmodel.moc"

project

Skip menu "project"
  • Main Page
  • Class Hierarchy
  • Alphabetical List
  • Class List
  • File List
  • Class Members
  • Related Pages

KDevelop Platform Libraries

Skip menu "KDevelop Platform Libraries"
  • interfaces
  • language
  •   duchain
  •   editor
  • outputview
  • project
  • shell
  • sublime
  • util
  • vcs
Generated for KDevelop Platform Libraries by doxygen 1.5.4
This website is maintained by Adriaan de Groot and Allen Winter.
KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal