Add AbstractDeclarationNavigationContext, and move the html-method from
[kdevelopdvcssupport.git] / project / importprojectjob.cpp
blob82a724b82e89d5030c70dbfe54aa71c493d57cbc
1 /* This file is part of KDevelop
2 Copyright 2004 Roberto Raggi <roberto@kdevelop.org>
3 Copyright 2007 Andreas Pakulat <apaku@gmx.de>
5 This library is free software; you can redistribute it and/or
6 modify it under the terms of the GNU Library General Public
7 License as published by the Free Software Foundation; either
8 version 2 of the License, or (at your option) any later version.
10 This library is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Library General Public License for more details.
15 You should have received a copy of the GNU Library General Public License
16 along with this library; see the file COPYING.LIB. If not, write to
17 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
18 Boston, MA 02110-1301, USA.
21 #include "importprojectjob.h"
22 #include "projectmodel.h"
24 #include <QQueue>
25 #include <QTimer>
27 #include <kglobal.h>
28 #include <kdebug.h>
30 #include <interfaces/iprojectfilemanager.h>
32 namespace KDevelop
35 class ImportProjectJobPrivate
37 public:
38 ImportProjectJobPrivate( ImportProjectJob* job ) : q(job) {}
39 ProjectFolderItem *m_folder;
40 IProjectFileManager *m_importer;
41 QTimer m_timer;
42 QQueue< QList<KDevelop::ProjectFolderItem*> > m_workQueue;
43 ImportProjectJob* q;
45 void parseItem()
47 m_timer.stop();
48 if( m_workQueue.count() > 0 )
50 QList<KDevelop::ProjectFolderItem*> front = m_workQueue.dequeue();
51 Q_FOREACH( KDevelop::ProjectFolderItem* _item, front )
53 QList<KDevelop::ProjectFolderItem*> workingList = m_importer->parse( _item );
54 if( workingList.count() > 0 )
55 m_workQueue.enqueue( workingList );
57 m_timer.start();
58 } else
60 q->emitResult();
65 ImportProjectJob::ImportProjectJob(QStandardItem *folder, IProjectFileManager *importer)
66 : KJob(0), d(new ImportProjectJobPrivate( this ) )
69 d->m_importer = importer;
70 ProjectFolderItem *folderItem = 0;
71 if ( folder->type() == ProjectBaseItem::Folder ||
72 folder->type() == ProjectBaseItem::BuildFolder)
74 folderItem = dynamic_cast<ProjectFolderItem*>( folder );
76 d->m_folder = folderItem;
77 d->m_timer.setInterval(200);
78 connect( &d->m_timer, SIGNAL(timeout()), this, SLOT(parseItem()) );
81 ImportProjectJob::~ImportProjectJob()
83 delete d;
86 void ImportProjectJob::start()
88 QList<KDevelop::ProjectFolderItem*> initial;
89 initial.append( d->m_folder );
90 d->m_workQueue.enqueue( initial );
91 d->m_timer.start();
96 #include "importprojectjob.moc"