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

project

importprojectjob.cpp

00001 /* This file is part of KDevelop
00002     Copyright 2004 Roberto Raggi <roberto@kdevelop.org>
00003     Copyright 2007 Andreas Pakulat <apaku@gmx.de>
00004 
00005     This library is free software; you can redistribute it and/or
00006     modify it under the terms of the GNU Library General Public
00007     License as published by the Free Software Foundation; either
00008     version 2 of the License, or (at your option) any later version.
00009 
00010     This library is distributed in the hope that it will be useful,
00011     but WITHOUT ANY WARRANTY; without even the implied warranty of
00012     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00013     Library General Public License for more details.
00014 
00015     You should have received a copy of the GNU Library General Public License
00016     along with this library; see the file COPYING.LIB.  If not, write to
00017     the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
00018     Boston, MA 02110-1301, USA.
00019 */
00020 
00021 #include "importprojectjob.h"
00022 #include "projectmodel.h"
00023 
00024 #include <QQueue>
00025 #include <QTimer>
00026 
00027 #include <kglobal.h>
00028 #include <kdebug.h>
00029 
00030 #include <interfaces/iprojectfilemanager.h>
00031 
00032 namespace KDevelop
00033 {
00034 
00035 class ImportProjectJobPrivate
00036 {
00037 public:
00038     ImportProjectJobPrivate( ImportProjectJob* job ) : q(job) {}
00039     ProjectFolderItem *m_folder;
00040     IProjectFileManager *m_importer;
00041     QTimer m_timer;
00042     QQueue< QList<KDevelop::ProjectFolderItem*> > m_workQueue;
00043     ImportProjectJob* q;
00044 
00045     void parseItem()
00046     {
00047         m_timer.stop();
00048         if( m_workQueue.count() > 0 )
00049         {
00050             QList<KDevelop::ProjectFolderItem*> front = m_workQueue.dequeue();
00051             Q_FOREACH( KDevelop::ProjectFolderItem* _item, front )
00052             {
00053                 QList<KDevelop::ProjectFolderItem*> workingList = m_importer->parse( _item );
00054                 if( workingList.count() > 0 )
00055                     m_workQueue.enqueue( workingList );
00056             }
00057             m_timer.start();
00058         } else
00059         {
00060             q->emitResult();
00061         }
00062     }
00063 };
00064 
00065 ImportProjectJob::ImportProjectJob(QStandardItem *folder, IProjectFileManager *importer)
00066     : KJob(0), d(new ImportProjectJobPrivate( this ) )
00067 
00068 {
00069     d->m_importer = importer;
00070     ProjectFolderItem *folderItem = 0;
00071     if ( folder->type() == ProjectBaseItem::Folder ||
00072          folder->type() == ProjectBaseItem::BuildFolder)
00073     {
00074         folderItem = dynamic_cast<ProjectFolderItem*>( folder );
00075     }
00076     d->m_folder = folderItem;
00077     d->m_timer.setInterval(200);
00078     connect( &d->m_timer, SIGNAL(timeout()), this, SLOT(parseItem()) );
00079 }
00080 
00081 ImportProjectJob::~ImportProjectJob()
00082 {
00083     delete d;
00084 }
00085 
00086 void ImportProjectJob::start()
00087 {
00088     QList<KDevelop::ProjectFolderItem*> initial;
00089     initial.append( d->m_folder );
00090     d->m_workQueue.enqueue( initial );
00091     d->m_timer.start();
00092 }
00093 
00094 
00095 }
00096 #include "importprojectjob.moc"
00097 

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