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