Fix no newlines warnings. Patch by Peter Oberndorfer
[kdevelopdvcssupport.git] / project / projectmodel.cpp
blob68cf48f07c02742bb3c84c0d19d3f899fab041ae
1 /* This file is part of KDevelop
2 Copyright 2005 Roberto Raggi <roberto@kdevelop.org>
3 Copyright 2007 Andreas Pakulat <apaku@gmx.de>
4 Copyright 2007 Aleix Pol <aleixpol@gmail.com>
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.
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.
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.
22 #include "projectmodel.h"
24 #include <kmimetype.h>
25 #include <kiconloader.h>
26 #include <kicon.h>
27 #include <kio/global.h>
29 #include <QApplication>
30 #include <QPalette>
31 #include <QBrush>
32 #include <QColor>
33 #include <QFileInfo>
34 #include <kdebug.h>
36 #include <interfaces/iproject.h>
38 namespace KDevelop
41 class ProjectBaseItemPrivate
43 public:
44 ProjectBaseItemPrivate() : project(0) {}
45 IProject* project;
48 class ProjectFolderItemPrivate : public ProjectBaseItemPrivate
50 public:
51 KUrl m_url;
52 QString m_folderName;
53 bool m_isProjectRoot;
56 class ProjectBuildFolderItemPrivate : public ProjectFolderItemPrivate
58 public:
61 class ProjectFileItemPrivate : public ProjectBaseItemPrivate
63 public:
64 KUrl m_url;
65 QString m_fileName;
68 class ProjectTargetItemPrivate : public ProjectBaseItemPrivate
72 class WorkspaceItemPrivate
74 public:
75 QString name;
76 KSharedConfig::Ptr metadataConfig;
77 QString metadataDir;
80 class ProjectModelPrivate
84 ProjectBaseItem::ProjectBaseItem( IProject* project, const QString &name, QStandardItem *parent )
85 : QStandardItem( name ), d_ptr(new ProjectBaseItemPrivate)
87 Q_D(ProjectBaseItem);
88 d->project = project;
89 setParent( parent );
90 setFlags( Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsEditable );
93 ProjectBaseItem::ProjectBaseItem( ProjectBaseItemPrivate& dd)
94 : d_ptr(&dd)
96 setFlags( Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsEditable );
99 ProjectBaseItem::~ProjectBaseItem()
101 Q_D(ProjectBaseItem);
102 delete d;
105 IProject* ProjectBaseItem::project() const
107 Q_D(const ProjectBaseItem);
108 return d->project;
111 void ProjectBaseItem::setParent( QStandardItem* parent )
113 if( parent )
114 parent->setChild( parent->rowCount(), this );
117 void ProjectBaseItem::setIcon()
121 void ProjectBaseItem::add( ProjectBaseItem* item )
123 appendRow( item );
126 ProjectFolderItem *ProjectBaseItem::folder() const
128 return 0;
131 ProjectTargetItem *ProjectBaseItem::target() const
133 return 0;
136 ProjectExecutableTargetItem *ProjectBaseItem::executable() const
138 return 0;
141 ProjectFileItem *ProjectBaseItem::file() const
143 return 0;
146 QList<ProjectFolderItem*> ProjectBaseItem::folderList() const
148 QList<ProjectFolderItem*> lst;
149 for ( int i = 0; i < rowCount(); ++i )
151 QStandardItem* item = child( i );
152 if ( item->type() == Folder || item->type() == BuildFolder )
154 ProjectFolderItem *kdevitem = dynamic_cast<ProjectFolderItem*>( item );
155 if ( kdevitem )
156 lst.append( kdevitem );
160 return lst;
163 QList<ProjectTargetItem*> ProjectBaseItem::targetList() const
165 QList<ProjectTargetItem*> lst;
166 for ( int i = 0; i < rowCount(); ++i )
168 QStandardItem* item = child( i );
169 if ( item->type() == Target || item->type() == LibraryTarget ||
170 item->type() == ExecutableTarget)
172 ProjectTargetItem *kdevitem = dynamic_cast<ProjectTargetItem*>( item );
173 if ( kdevitem )
174 lst.append( kdevitem );
178 return lst;
181 QList<ProjectFileItem*> ProjectBaseItem::fileList() const
183 QList<ProjectFileItem*> lst;
184 for ( int i = 0; i < rowCount(); ++i )
186 QStandardItem* item = child( i );
187 if ( item->type() == File )
189 ProjectFileItem *kdevitem = dynamic_cast<ProjectFileItem*>( item );
190 if ( kdevitem )
191 lst.append( kdevitem );
195 return lst;
198 ProjectModel::ProjectModel( QObject *parent )
199 : QStandardItemModel( parent ), d(0)
203 ProjectModel::~ProjectModel()
207 ProjectBaseItem *ProjectModel::item( const QModelIndex &index ) const
209 return dynamic_cast<ProjectBaseItem*>( itemFromIndex( index ) );
212 void ProjectModel::resetModel()
214 reset();
217 void ProjectModel::fetchMore( const QModelIndex &parent )
219 QStandardItem *parentItem = itemFromIndex( parent );
220 if( !parentItem )
221 return;
222 int rowcount = parentItem->rowCount();
223 for( int i=0; i<rowcount; i++ )
225 ProjectBaseItem *childItem = dynamic_cast<ProjectBaseItem*>(parentItem->child(i));
226 if( childItem && childItem->icon().isNull() )
227 childItem->setIcon();
231 bool ProjectModel::canFetchMore( const QModelIndex & parent ) const
233 QStandardItem *parentItem = itemFromIndex( parent );
234 if( !parentItem )
235 return false;
236 return true;
240 ProjectFolderItem::ProjectFolderItem( IProject* project, const KUrl & dir, QStandardItem * parent )
241 : ProjectBaseItem( *new ProjectFolderItemPrivate )
243 Q_D(ProjectFolderItem);
244 d->project = project;
245 d->m_url = dir;
246 setParent(parent);
247 setText( dir.fileName() );
250 ProjectFolderItem::ProjectFolderItem( ProjectFolderItemPrivate& dd)
251 : ProjectBaseItem( dd )
255 ProjectFolderItem::~ProjectFolderItem()
259 ProjectFolderItem *ProjectFolderItem::folder() const
261 return const_cast<ProjectFolderItem*>(this);
264 int ProjectFolderItem::type() const
266 return ProjectBaseItem::Folder;
269 const KUrl& ProjectFolderItem::url( ) const
271 Q_D(const ProjectFolderItem);
272 return d->m_url;
275 const QString& ProjectFolderItem::folderName() const
277 Q_D(const ProjectFolderItem);
278 return d->m_folderName;
281 void ProjectFolderItem::setUrl( const KUrl& url )
283 Q_D(ProjectFolderItem);
284 d->m_url = url;
285 d->m_folderName = d->m_url.fileName();
286 setText( d->m_folderName );
289 void ProjectFolderItem::setIcon()
291 QStandardItem::setIcon( KIO::pixmapForUrl( url(), 0, KIconLoader::Small ) );
294 bool ProjectFolderItem::hasFileOrFolder(const QString& name) const
296 for ( int i = 0; i < rowCount(); ++i )
298 QStandardItem* item = child( i );
299 if ( ProjectFileItem* file = dynamic_cast<ProjectFileItem*>(item))
300 if (file->fileName() == name)
301 return true;
303 if ( ProjectFolderItem* folder = dynamic_cast<ProjectFolderItem*>(item))
304 if (folder->folderName() == name)
305 return true;
307 return false;
310 ProjectBuildFolderItem::ProjectBuildFolderItem( ProjectBuildFolderItemPrivate& dd )
311 : ProjectFolderItem( dd )
315 ProjectBuildFolderItem::ProjectBuildFolderItem( IProject* project, const KUrl &dir, QStandardItem *parent)
316 : ProjectFolderItem( *new ProjectBuildFolderItemPrivate )
318 Q_D(ProjectBuildFolderItem);
319 d->project = project;
320 setUrl( dir );
321 setParent( parent );
324 int ProjectBuildFolderItem::type() const
326 return ProjectBaseItem::BuildFolder;
329 void ProjectBuildFolderItem::setIcon()
331 QStandardItem::setIcon( KIcon("folder-development") );
334 void ProjectFolderItem::setProjectRoot(bool isRoot)
336 Q_D(ProjectFolderItem);
337 d->m_isProjectRoot=isRoot;
338 setText(project()->name());
341 bool ProjectFolderItem::isProjectRoot() const
343 Q_D(const ProjectFolderItem);
344 return d->m_isProjectRoot;
347 ProjectFileItem::ProjectFileItem( ProjectFileItemPrivate& dd)
348 : ProjectBaseItem(dd)
350 setFlags( Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsEditable );
353 ProjectFileItem::ProjectFileItem( IProject* project, const KUrl & file, QStandardItem * parent )
354 : ProjectBaseItem( *new ProjectFileItemPrivate )
356 Q_D(ProjectFileItem);
357 d->project = project;
358 d->m_url = file;
359 setText( file.fileName() );
360 setParent( parent );
361 setFlags( Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsEditable );
364 const KUrl & ProjectFileItem::url( ) const
366 Q_D(const ProjectFileItem);
367 return d->m_url;
370 const QString& ProjectFileItem::fileName() const
372 Q_D(const ProjectFileItem);
373 return d->m_fileName;
376 void ProjectFileItem::setUrl( const KUrl& url )
378 Q_D(ProjectFileItem);
379 d->m_url = url;
380 d->m_fileName = d->m_url.fileName();
383 int ProjectFileItem::type() const
385 return ProjectBaseItem::File;
388 ProjectFileItem *ProjectFileItem::file() const
390 return const_cast<ProjectFileItem*>( this );
393 void ProjectFileItem::setIcon()
395 QStandardItem::setIcon( KIO::pixmapForUrl( url(), 0, KIconLoader::Small ) );
398 ProjectTargetItem::ProjectTargetItem( ProjectTargetItemPrivate& dd)
399 : ProjectBaseItem( dd )
403 ProjectTargetItem::ProjectTargetItem( IProject* project, const QString &name, QStandardItem *parent )
404 : ProjectBaseItem( *new ProjectTargetItemPrivate )
406 Q_D(ProjectTargetItem);
407 d->project = project;
408 setText( name );
409 setParent( parent );
412 int ProjectTargetItem::type() const
414 return ProjectBaseItem::Target;
417 ProjectTargetItem *ProjectTargetItem::target() const
419 return const_cast<ProjectTargetItem*>( this );
422 void ProjectTargetItem::setIcon()
424 QStandardItem::setIcon( KIcon("system-run") );
427 ProjectExecutableTargetItem::ProjectExecutableTargetItem( IProject* project, const QString &name, QStandardItem *parent )
428 : ProjectTargetItem(project, name, parent)
431 ProjectExecutableTargetItem *ProjectExecutableTargetItem::executable() const
433 return const_cast<ProjectExecutableTargetItem*>( this );
436 int ProjectExecutableTargetItem::type() const
438 return ProjectBaseItem::ExecutableTarget;
441 ProjectLibraryTargetItem::ProjectLibraryTargetItem( IProject* project, const QString &name, QStandardItem *parent )
442 : ProjectTargetItem(project, name, parent)
445 int ProjectLibraryTargetItem::type() const
447 return ProjectBaseItem::LibraryTarget;
452 #include "projectmodel.moc"