diff --git a/src/plugins/coreplugin/editormanager/editormanager.cpp b/src/plugins/coreplugin/editormanager/editormanager.cpp index 76a49f54f4066e6a4ad5c2b5cd328941aa53cfec..03959a5dc51ad778f3d6e5513146262f8b2c7898 100644 --- a/src/plugins/coreplugin/editormanager/editormanager.cpp +++ b/src/plugins/coreplugin/editormanager/editormanager.cpp @@ -70,6 +70,8 @@ #include <QtGui/QSplitter> #include <QtGui/QStackedLayout> +Q_DECLARE_METATYPE(Core::IEditor*) + using namespace Core; using namespace Core::Internal; @@ -740,6 +742,26 @@ IEditor *EditorManager::pickUnusedEditor() const return 0; } + +void EditorManager::activateEditor(const QModelIndex &index, Internal::EditorView *view) +{ + IEditor *editor = index.data(Qt::UserRole).value<IEditor*>(); + if (editor) { + if (view) + activateEditor(view, editor); + else + activateEditor(editor); + return; + } + + if (view) + setCurrentView(m_d->m_splitter->findView(view)); + + QString fileName = index.data(Qt::UserRole + 1).toString(); + QByteArray kind = index.data(Qt::UserRole + 2).toByteArray(); + openEditor(fileName, kind); +} + void EditorManager::activateEditor(IEditor *editor, OpenEditorFlags flags) { SplitterOrView *splitterOrView = m_d->m_currentView; @@ -1244,7 +1266,7 @@ void EditorManager::gotoNextDocHistory() if (dialog->isVisible()) { dialog->selectNextEditor(); } else { - dialog->setEditors(m_d->m_editorHistory, m_d->m_currentEditor); + dialog->setEditors(m_d->m_editorHistory, m_d->m_currentEditor, m_d->m_editorModel); dialog->selectNextEditor(); showWindowPopup(); } @@ -1256,7 +1278,7 @@ void EditorManager::gotoPreviousDocHistory() if (dialog->isVisible()) { dialog->selectPreviousEditor(); } else { - dialog->setEditors(m_d->m_editorHistory, m_d->m_currentEditor); + dialog->setEditors(m_d->m_editorHistory, m_d->m_currentEditor, m_d->m_editorModel); dialog->selectPreviousEditor(); showWindowPopup(); } @@ -1451,24 +1473,30 @@ QByteArray EditorManager::saveState() const QByteArray bytes; QDataStream stream(&bytes, QIODevice::WriteOnly); - stream << QByteArray("EditorManagerV1"); - - stream << m_d->m_editorStates; + stream << QByteArray("EditorManagerV2"); QList<IEditor *> editors = openedEditors(); - int editorCount = editors.count(); - - if (editors.contains(m_d->m_currentEditor)) { - editors.removeAll(m_d->m_currentEditor); - editors.prepend(m_d->m_currentEditor); + foreach (IEditor *editor, editors) { + if (!editor->file()->fileName().isEmpty()) { + QByteArray state = editor->saveState(); + if (!state.isEmpty()) + m_d->m_editorStates.insert(editor->file()->fileName(), QVariant(state)); + } } + stream << m_d->m_editorStates; + + + QList<EditorModel::Entry> entries = m_d->m_editorModel->entries(); + stream << entries.count(); - stream << editorCount; - foreach (IEditor *editor, editors) { - stream << editor->file()->fileName() << QByteArray(editor->kind()); + if (IEditor *current = m_d->m_currentEditor) // current first + stream << current->file()->fileName() << current->displayName() << QByteArray(current->kind()); + foreach (EditorModel::Entry entry, entries) { + if (entry.editor && entry.editor == m_d->m_currentEditor) // all but current + continue; + stream << entry.fileName() << entry.displayName() << entry.kind(); } - return bytes; } @@ -1480,7 +1508,7 @@ bool EditorManager::restoreState(const QByteArray &state) QByteArray version; stream >> version; - if (version != "EditorManagerV1") + if (version != "EditorManagerV2") return false; QMap<QString, QVariant> editorstates; @@ -1500,11 +1528,16 @@ bool EditorManager::restoreState(const QByteArray &state) while (--editorCount >= 0) { QString fileName; stream >> fileName; + QString displayName; + stream >> displayName; QByteArray kind; stream >> kind; - IEditor *editor = openEditor(fileName, kind, IgnoreNavigationHistory | NoActivate); - if (!toActivate) - toActivate = editor; + + if (!toActivate) { + toActivate = openEditor(fileName, kind, IgnoreNavigationHistory | NoActivate); + } else if (!fileName.isEmpty() && !displayName.isEmpty()){ + m_d->m_editorModel->addRestoredEditor(fileName, displayName, kind); + } } if (toActivate) @@ -1702,6 +1735,7 @@ Core::IEditor *EditorManager::duplicateEditor(Core::IEditor *editor) return 0; IEditor *duplicate = editor->duplicate(0); + duplicate->restoreState(editor->saveState()); emit editorCreated(duplicate, duplicate->file()->fileName()); addEditor(duplicate, true); return duplicate; diff --git a/src/plugins/coreplugin/editormanager/editormanager.h b/src/plugins/coreplugin/editormanager/editormanager.h index 1d03906bfd0c21b529078ea55b1580b0c1b82188..401e94b00d7bffe19feb57932a6af743290f4c4e 100644 --- a/src/plugins/coreplugin/editormanager/editormanager.h +++ b/src/plugins/coreplugin/editormanager/editormanager.h @@ -39,6 +39,7 @@ QT_BEGIN_NAMESPACE class QSettings; +class QModelIndex; QT_END_NAMESPACE namespace Core { @@ -125,6 +126,8 @@ public: QList<IEditor*> openedEditors() const; Internal::EditorModel *openedEditorsModel() const; + void activateEditor(const QModelIndex &index, Internal::EditorView *view = 0); + QList<IEditor*> editorsForFiles(QList<IFile*> files) const; //QList<EditorGroup *> editorGroups() const; diff --git a/src/plugins/coreplugin/editormanager/editorview.cpp b/src/plugins/coreplugin/editormanager/editorview.cpp index 480a3fd4ba287628cb0ee896a0916c35a7f2e4bf..484905ebbe99d9eccab1d529e8689c9dc7850c68 100644 --- a/src/plugins/coreplugin/editormanager/editorview.cpp +++ b/src/plugins/coreplugin/editormanager/editorview.cpp @@ -61,6 +61,18 @@ using namespace Core::Internal; //================EditorModel==================== + +QString EditorModel::Entry::fileName() const { + return editor ? editor->file()->fileName() : m_fileName; +} +QString EditorModel::Entry::displayName() const { + return editor ? editor->displayName() : m_displayName; +} +QByteArray EditorModel::Entry::kind() const +{ + return editor ? QByteArray(editor->kind()) : m_kind; +} + int EditorModel::columnCount(const QModelIndex &parent) const { Q_UNUSED(parent); @@ -74,6 +86,15 @@ int EditorModel::rowCount(const QModelIndex &parent) const return 0; } +QList<IEditor *> EditorModel::editors() const +{ + QList<IEditor *> result; + foreach (Entry entry, m_editors) + if (entry.editor) + result += entry.editor; + return result; +} + void EditorModel::addEditor(IEditor *editor, bool isDuplicate) { if (isDuplicate) { @@ -81,23 +102,69 @@ void EditorModel::addEditor(IEditor *editor, bool isDuplicate) return; } - int index = 0; + Entry entry; + entry.editor = editor; + addEntry(entry); +} + +void EditorModel::addRestoredEditor(const QString &fileName, const QString &displayName, const QByteArray &kind) +{ + Entry entry; + entry.m_fileName = fileName; + entry.m_displayName = displayName; + entry.m_kind = kind; + addEntry(entry); +} - QString fileName = editor->file()->fileName(); - for (index = 0; index < m_editors.count(); ++index) - if (fileName < m_editors.at(index)->file()->fileName()) +void EditorModel::addEntry(const Entry &entry) +{ + QString fileName = entry.fileName(); + + int previousIndex = findFileName(fileName); + if (previousIndex >= 0) { + if (entry.editor && m_editors.at(previousIndex).editor == 0) { + m_editors[previousIndex] = entry; + QModelIndex mindex = index(previousIndex, 0); + emit dataChanged(mindex, mindex); + } + return; + } + + int index; + for (index = 0; index < m_editors.count(); ++index) { + if (fileName < m_editors.at(index).fileName()) break; + } beginInsertRows(QModelIndex(), index, index); - m_editors.insert(index, editor); - connect(editor, SIGNAL(changed()), this, SLOT(itemChanged())); + m_editors.insert(index, entry); + if (entry.editor) + connect(entry.editor, SIGNAL(changed()), this, SLOT(itemChanged())); endInsertRows(); } + +int EditorModel::findEditor(IEditor *editor) const +{ + for (int i = 0; i < m_editors.count(); ++i) + if (m_editors.at(i).editor == editor) + return i; + return -1; +} + +int EditorModel::findFileName(const QString &filename) const +{ + for (int i = 0; i < m_editors.count(); ++i) { + if (m_editors.at(i).fileName() == filename) + return i; + } + return -1; +} + void EditorModel::removeEditor(IEditor *editor) { m_duplicateEditors.removeAll(editor); - int idx = m_editors.indexOf(editor); + int idx = findEditor(editor); if (idx < 0) return; beginRemoveRows(QModelIndex(), idx, idx); @@ -114,9 +181,9 @@ bool EditorModel::isDuplicate(IEditor *editor) const IEditor *EditorModel::originalForDuplicate(IEditor *duplicate) const { IFile *file = duplicate->file(); - foreach(IEditor *e, m_editors) - if (e->file() == file) - return e; + foreach(Entry e, m_editors) + if (e.editor && e.editor->file() == file) + return e.editor; return 0; } @@ -132,7 +199,7 @@ QList<IEditor *> EditorModel::duplicatesFor(IEditor *editor) const void EditorModel::emitDataChanged(IEditor *editor) { - int idx = m_editors.indexOf(editor); + int idx = findEditor(editor); if (idx < 0) return; QModelIndex mindex = index(idx, 0); @@ -151,23 +218,26 @@ QVariant EditorModel::data(const QModelIndex &index, int role) const { if (!index.isValid()) return QVariant(); - IEditor *editor = m_editors.at(index.row()); - QTC_ASSERT(editor, return QVariant()); + Entry e = m_editors.at(index.row()); switch (role) { case Qt::DisplayRole: - return editor->file()->isModified() - ? editor->displayName() + QLatin1String("*") - : editor->displayName(); + return (e.editor && e.editor->file()->isModified()) + ? e.displayName() + QLatin1String("*") + : e.displayName(); case Qt::DecorationRole: - return editor->file()->isReadOnly() + return (e.editor && e.editor->file()->isReadOnly()) ? QIcon(QLatin1String(":/core/images/locked.png")) : QIcon(); case Qt::ToolTipRole: - return editor->file()->fileName().isEmpty() - ? editor->displayName() - : QDir::toNativeSeparators(editor->file()->fileName()); + return e.fileName().isEmpty() + ? e.displayName() + : QDir::toNativeSeparators(e.fileName()); case Qt::UserRole: - return qVariantFromValue(editor); + return qVariantFromValue(e.editor); + case Qt::UserRole + 1: + return e.fileName(); + case Qt::UserRole + 2: + return e.editor ? QByteArray(e.editor->kind()) : e.kind(); default: return QVariant(); } @@ -176,7 +246,7 @@ QVariant EditorModel::data(const QModelIndex &index, int role) const QModelIndex EditorModel::indexOf(IEditor *editor) const { - int idx = m_editors.indexOf(editor); + int idx = findEditor(editor); if (idx < 0) return indexOf(editor->file()->fileName()); return createIndex(idx, 0); @@ -184,9 +254,9 @@ QModelIndex EditorModel::indexOf(IEditor *editor) const QModelIndex EditorModel::indexOf(const QString &fileName) const { - for (int i = 0; i < m_editors.count(); ++i) - if (m_editors.at(i)->file()->fileName() == fileName) - return createIndex(i, 0); + int idx = findFileName(fileName); + if (idx >= 0) + return createIndex(idx, 0); return QModelIndex(); } @@ -524,9 +594,13 @@ void EditorView::makeEditorWritable() void EditorView::listSelectionActivated(int index) { + EditorManager *em = CoreImpl::instance()->editorManager(); QAbstractItemModel *model = m_editorList->model(); - IEditor *editor = model->data(model->index(index, 0), Qt::UserRole).value<IEditor*>(); - CoreImpl::instance()->editorManager()->activateEditor(this, editor); + if (IEditor *editor = model->data(model->index(index, 0), Qt::UserRole).value<IEditor*>()) { + em->activateEditor(this, editor); + } else { + em->activateEditor(model->index(index, 0), this); + } } diff --git a/src/plugins/coreplugin/editormanager/editorview.h b/src/plugins/coreplugin/editormanager/editorview.h index e6f7472d0d7a7508d6a42c494bb5bebe7659508e..bc1f5a6e31628dfd99d3963d61ca4bee1f56922d 100644 --- a/src/plugins/coreplugin/editormanager/editorview.h +++ b/src/plugins/coreplugin/editormanager/editorview.h @@ -70,11 +70,24 @@ public: QModelIndex index(int row, int column = 0, const QModelIndex &parent = QModelIndex()) const; void addEditor(IEditor *editor, bool isDuplicate = false); + void addRestoredEditor(const QString &fileName, const QString &displayName, const QByteArray &kind); + + struct Entry { + Entry():editor(0){} + IEditor *editor; + QString fileName() const; + QString displayName() const; + QByteArray kind() const; + QString m_fileName; + QString m_displayName; + QByteArray m_kind; + }; + QList<Entry> entries() const { return m_editors; } void removeEditor(IEditor *editor); void emitDataChanged(IEditor *editor); - QList<IEditor *> editors() const { return m_editors; } + QList<IEditor *> editors() const; bool isDuplicate(IEditor *editor) const; QList<IEditor *> duplicatesFor(IEditor *editor) const; IEditor *originalForDuplicate(IEditor *duplicate) const; @@ -83,8 +96,12 @@ public: private slots: void itemChanged(); + private: - QList<IEditor *> m_editors; + void addEntry(const Entry &entry); + int findEditor(IEditor *editor) const; + int findFileName(const QString &filename) const; + QList<Entry> m_editors; QList<IEditor *>m_duplicateEditors; }; diff --git a/src/plugins/coreplugin/editormanager/openeditorsview.cpp b/src/plugins/coreplugin/editormanager/openeditorsview.cpp index 463ebf4390f61c422b1bbfeafafb459b96775122..af10e6096f121d0393415d0af80e62500fd15d98 100644 --- a/src/plugins/coreplugin/editormanager/openeditorsview.cpp +++ b/src/plugins/coreplugin/editormanager/openeditorsview.cpp @@ -93,8 +93,7 @@ void OpenEditorsWidget::updateCurrentItem(Core::IEditor *editor) void OpenEditorsWidget::selectEditor(const QModelIndex &index) { - IEditor *editor = index.data(Qt::UserRole).value<IEditor*>(); - EditorManager::instance()->activateEditor(editor); + EditorManager::instance()->activateEditor(index); } diff --git a/src/plugins/coreplugin/editormanager/openeditorswindow.cpp b/src/plugins/coreplugin/editormanager/openeditorswindow.cpp index 3fadcf836f1e5c4fa7edf0edbfd8f1fdc7bd921f..b91e3a0de3e833d5ddc52c04ed9f55d7b7fcff59 100644 --- a/src/plugins/coreplugin/editormanager/openeditorswindow.cpp +++ b/src/plugins/coreplugin/editormanager/openeditorswindow.cpp @@ -29,6 +29,7 @@ #include "openeditorswindow.h" #include "editormanager.h" +#include "editorview.h" #include <QtGui/QHeaderView> @@ -43,8 +44,7 @@ const int OpenEditorsWindow::MARGIN = 4; OpenEditorsWindow::OpenEditorsWindow(QWidget *parent) : QWidget(parent, Qt::Popup), - m_editorList(new QTreeWidget(this)), - m_current(0) + m_editorList(new QTreeWidget(this)) { resize(QSize(WIDTH, HEIGHT)); m_editorList->setColumnCount(1); @@ -113,8 +113,6 @@ bool OpenEditorsWindow::eventFilter(QObject *obj, QEvent *e) if (e->type() == QEvent::KeyPress) { QKeyEvent *ke = static_cast<QKeyEvent*>(e); if (ke->key() == Qt::Key_Escape) { - m_current = EditorManager::instance()->currentEditor(); - updateSelectedEditor(); setVisible(false); return true; } @@ -140,7 +138,7 @@ void OpenEditorsWindow::selectUpDown(bool up) int index = m_editorList->indexOfTopLevelItem(m_editorList->currentItem()); if (index < 0) return; - IEditor *editor = 0; + QTreeWidgetItem *editor = 0; int count = 0; while (!editor && count < itemCount) { if (up) { @@ -152,12 +150,13 @@ void OpenEditorsWindow::selectUpDown(bool up) if (index >= itemCount) index = 0; } - editor = m_editorList->topLevelItem(index) - ->data(0, Qt::UserRole).value<IEditor *>(); + editor = m_editorList->topLevelItem(index); count++; } - if (editor) - setSelectedEditor(editor); + if (editor) { + m_editorList->setCurrentItem(editor); + ensureCurrentVisible(); + } } void OpenEditorsWindow::selectPreviousEditor() @@ -188,7 +187,7 @@ void OpenEditorsWindow::centerOnItem(int selectedIndex) } } -void OpenEditorsWindow::setEditors(const QList<IEditor *>&editors, IEditor *current) +void OpenEditorsWindow::setEditors(const QList<IEditor *>&editors, IEditor *current, EditorModel *model) { static const QIcon lockedIcon(QLatin1String(":/core/images/locked.png")); static const QIcon emptyIcon(QLatin1String(":/core/images/empty14.png")); @@ -214,24 +213,40 @@ void OpenEditorsWindow::setEditors(const QList<IEditor *>&editors, IEditor *curr item->setText(0, title); item->setToolTip(0, editor->file()->fileName()); item->setData(0, Qt::UserRole, QVariant::fromValue(editor)); - //item->setFlags(Qt::ItemIsSelectable); - item->setTextAlignment(0, Qt::AlignLeft); m_editorList->addTopLevelItem(item); + if (editor == current) + m_editorList->setCurrentItem(item); + + } + + // add purely restored editors which are not initialised yet + foreach (EditorModel::Entry entry, model->entries()) { + if (entry.editor) + return; + QTreeWidgetItem *item = new QTreeWidgetItem(); + QString title = entry.displayName(); + item->setIcon(0, emptyIcon); + item->setText(0, title); + item->setToolTip(0, entry.fileName()); + item->setData(0, Qt::UserRole+1, QVariant::fromValue(entry.kind())); + item->setTextAlignment(0, Qt::AlignLeft); + + m_editorList->addTopLevelItem(item); } - setSelectedEditor(current); } void OpenEditorsWindow::selectEditor(QTreeWidgetItem *item) { - IEditor *editor = 0; - if (item) - editor = item->data(0, Qt::UserRole).value<IEditor*>(); - if (editor) + if (!item) + return; + if (IEditor *editor = item->data(0, Qt::UserRole).value<IEditor*>()) EditorManager::instance()->activateEditor(editor); + else + EditorManager::instance()->openEditor(item->toolTip(0), item->data(0, Qt::UserRole+1).toByteArray()); } void OpenEditorsWindow::editorClicked(QTreeWidgetItem *item) @@ -241,27 +256,8 @@ void OpenEditorsWindow::editorClicked(QTreeWidgetItem *item) } -void OpenEditorsWindow::setSelectedEditor(IEditor *editor) -{ - m_current = editor; - updateSelectedEditor(); -} - -void OpenEditorsWindow::updateSelectedEditor() +void OpenEditorsWindow::ensureCurrentVisible() { - if (m_current == 0 && m_editorList->currentItem()) { - m_editorList->currentItem()->setSelected(false); - return; - } - int num = m_editorList->topLevelItemCount(); - for (int i = 0; i < num; ++i) { - IEditor *editor = m_editorList->topLevelItem(i) - ->data(0, Qt::UserRole).value<IEditor *>(); - if (editor == m_current) { - m_editorList->setCurrentItem(m_editorList->topLevelItem(i)); - break; - } - } m_editorList->scrollTo(m_editorList->currentIndex(), QAbstractItemView::PositionAtCenter); } diff --git a/src/plugins/coreplugin/editormanager/openeditorswindow.h b/src/plugins/coreplugin/editormanager/openeditorswindow.h index 6c376e6e9d3f49d22e2b5542b3339649f87fe521..7d0d9c623b5330ff551a77f945d6553bba030262 100644 --- a/src/plugins/coreplugin/editormanager/openeditorswindow.h +++ b/src/plugins/coreplugin/editormanager/openeditorswindow.h @@ -43,6 +43,8 @@ class IEditor; namespace Internal { +class EditorModel; + class OpenEditorsWindow : public QWidget { Q_OBJECT @@ -53,7 +55,7 @@ public: OpenEditorsWindow(QWidget *parent = 0); ~OpenEditorsWindow() {} - void setEditors(const QList<IEditor *>&editors, IEditor *current); + void setEditors(const QList<IEditor *>&editors, IEditor *current, EditorModel *model); bool event(QEvent *e); bool eventFilter(QObject *src, QEvent *e); @@ -61,8 +63,6 @@ public: void setVisible(bool visible); void selectNextEditor(); void selectPreviousEditor(); - IEditor *selectedEditor() const { return m_current; } - void setSelectedEditor(IEditor *); private slots: void editorClicked(QTreeWidgetItem *item); @@ -75,7 +75,7 @@ private: static const int MARGIN; static void updateItem(QTreeWidgetItem *item, IEditor *editor); - void updateSelectedEditor(); + void ensureCurrentVisible(); bool isCentering(); void centerOnItem(int selectedIndex); void selectUpDown(bool up); @@ -84,7 +84,6 @@ private: QTreeWidget *m_editorList; QTimer m_autoHide; - IEditor *m_current; }; } // namespace Internal diff --git a/src/plugins/cpptools/cppmodelmanager.cpp b/src/plugins/cpptools/cppmodelmanager.cpp index a08d66bebef4bd348548afe890d778aaa08e7491..3d4c73346d6075077c0b529f153fe0b5aaad6625 100644 --- a/src/plugins/cpptools/cppmodelmanager.cpp +++ b/src/plugins/cpptools/cppmodelmanager.cpp @@ -33,7 +33,10 @@ #include "cpptoolsconstants.h" #include "cpptoolseditorsupport.h" +#include <functional> +#include <QtConcurrentRun> #include <qtconcurrent/runextensions.h> + #include <texteditor/itexteditor.h> #include <texteditor/basetexteditor.h> @@ -171,8 +174,6 @@ public: void resetEnvironment(); - void parseCollectedDocuments(); - const QSet<QString> &todo() const { return m_todo; } @@ -211,7 +212,6 @@ private: QSet<QString> m_included; Document::Ptr m_currentDoc; QSet<QString> m_todo; - QList<Document::Ptr> m_documents; }; } // namespace Internal @@ -241,7 +241,7 @@ void CppPreprocessor::setTodo(const QStringList &files) namespace { -class Process +class Process: public std::unary_function<Document::Ptr, void> { QPointer<CppModelManager> _modelManager; @@ -250,7 +250,7 @@ public: : _modelManager(modelManager) { } - void operator()(Document::Ptr doc) + void operator()(Document::Ptr doc) const { doc->parse(); doc->check(); @@ -267,22 +267,11 @@ void CppPreprocessor::run(const QString &fileName) { QString absoluteFilePath = fileName; sourceNeeded(absoluteFilePath, IncludeGlobal, /*line = */ 0); - - if (m_documents.size() >= 8) - parseCollectedDocuments(); } void CppPreprocessor::resetEnvironment() { env.reset(); } -void CppPreprocessor::parseCollectedDocuments() -{ - QThread::currentThread()->setPriority(QThread::IdlePriority); - QtConcurrent::blockingMap(m_documents, Process(m_modelManager)); - QThread::currentThread()->setPriority(QThread::NormalPriority); - m_documents.clear(); -} - bool CppPreprocessor::includeFile(const QString &absoluteFilePath, QByteArray *result) { if (absoluteFilePath.isEmpty() || m_included.contains(absoluteFilePath)) { @@ -514,12 +503,11 @@ void CppPreprocessor::sourceNeeded(QString &fileName, IncludeType type, doc->releaseSource(); snapshot.insert(doc->fileName(), doc); + m_todo.remove(fileName); - m_documents.append(doc); + QtConcurrent::run(Process(m_modelManager), doc); (void) switchDocument(previousDoc); - - m_todo.remove(fileName); } Document::Ptr CppPreprocessor::switchDocument(Document::Ptr doc) @@ -1041,8 +1029,6 @@ void CppModelManager::parse(QFutureInterface<void> &future, QThread::currentThread()->setPriority(QThread::NormalPriority); } - preproc->parseCollectedDocuments(); - future.setProgressValue(files.size()); delete preproc;