project
projectmodel.cpp
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
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"