diff options
author | Jochen Becher <jochen_becher@gmx.de> | 2015-05-30 08:54:39 +0200 |
---|---|---|
committer | Jochen Becher <jochen_becher@gmx.de> | 2015-10-07 17:11:55 +0000 |
commit | 051bbb1cd0275282563003579a75f8565bed9ae4 (patch) | |
tree | 957dac84862b3bb06836d3cbe46599669612e712 | |
parent | c2b34fb1ef26351f0224c7cbdaa7a95d5b073a09 (diff) |
Todo Plugin: Add showing To-Do Entries for current sub-project only
Change-Id: Ia0c84ef62f833b7967985c0913584ca6ccb03ed1
Reviewed-by: Nikolai Kosjar <nikolai.kosjar@theqtcompany.com>
Reviewed-by: Leena Miettinen <riitta-leena.miettinen@theqtcompany.com>
-rw-r--r-- | src/plugins/todo/optionsdialog.cpp | 3 | ||||
-rw-r--r-- | src/plugins/todo/optionsdialog.ui | 7 | ||||
-rw-r--r-- | src/plugins/todo/settings.h | 3 | ||||
-rw-r--r-- | src/plugins/todo/todoitemsprovider.cpp | 39 | ||||
-rw-r--r-- | src/plugins/todo/todoitemsprovider.h | 1 | ||||
-rw-r--r-- | src/plugins/todo/todoitemsscanner.h | 4 | ||||
-rw-r--r-- | src/plugins/todo/todooutputpane.cpp | 14 | ||||
-rw-r--r-- | src/plugins/todo/todooutputpane.h | 1 |
8 files changed, 65 insertions, 7 deletions
diff --git a/src/plugins/todo/optionsdialog.cpp b/src/plugins/todo/optionsdialog.cpp index 8fb5ca2605..8536455423 100644 --- a/src/plugins/todo/optionsdialog.cpp +++ b/src/plugins/todo/optionsdialog.cpp @@ -150,6 +150,7 @@ void OptionsDialog::uiFromSettings(const Settings &settings) { ui->scanInCurrentFileRadioButton->setChecked(settings.scanningScope == ScanningScopeCurrentFile); ui->scanInProjectRadioButton->setChecked(settings.scanningScope == ScanningScopeProject); + ui->scanInSubprojectRadioButton->setChecked(settings.scanningScope == ScanningScopeSubProject); ui->keywordsList->clear(); foreach (const Keyword &keyword, settings.keywords) @@ -162,6 +163,8 @@ Settings OptionsDialog::settingsFromUi() if (ui->scanInCurrentFileRadioButton->isChecked()) settings.scanningScope = ScanningScopeCurrentFile; + else if (ui->scanInSubprojectRadioButton->isChecked()) + settings.scanningScope = ScanningScopeSubProject; else settings.scanningScope = ScanningScopeProject; diff --git a/src/plugins/todo/optionsdialog.ui b/src/plugins/todo/optionsdialog.ui index a440652155..e097f1cf05 100644 --- a/src/plugins/todo/optionsdialog.ui +++ b/src/plugins/todo/optionsdialog.ui @@ -101,6 +101,13 @@ </property> </widget> </item> + <item> + <widget class="QRadioButton" name="scanInSubprojectRadioButton"> + <property name="text"> + <string>Scan the current subproject</string> + </property> + </widget> + </item> </layout> </widget> </item> diff --git a/src/plugins/todo/settings.h b/src/plugins/todo/settings.h index b41d48a1fc..3d930f6957 100644 --- a/src/plugins/todo/settings.h +++ b/src/plugins/todo/settings.h @@ -41,7 +41,8 @@ namespace Internal { enum ScanningScope { ScanningScopeCurrentFile, - ScanningScopeProject + ScanningScopeProject, + ScanningScopeSubProject }; class Settings { diff --git a/src/plugins/todo/todoitemsprovider.cpp b/src/plugins/todo/todoitemsprovider.cpp index 8308cdc7af..2fd6a8d27d 100644 --- a/src/plugins/todo/todoitemsprovider.cpp +++ b/src/plugins/todo/todoitemsprovider.cpp @@ -36,7 +36,10 @@ #include "todoitemsmodel.h" #include "todoitemsscanner.h" +#include <projectexplorer/nodesvisitor.h> #include <projectexplorer/projectexplorer.h> +#include <projectexplorer/projectnodes.h> +#include <projectexplorer/projecttree.h> #include <coreplugin/editormanager/editormanager.h> #include <coreplugin/idocument.h> #include <projectexplorer/session.h> @@ -90,6 +93,10 @@ void TodoItemsProvider::updateList() if (m_settings.scanningScope == ScanningScopeCurrentFile) { if (m_currentEditor) m_itemsList = m_itemsHash.value(m_currentEditor->document()->filePath().toString()); + // Show only items of the current sub-project + } else if (m_settings.scanningScope == ScanningScopeSubProject) { + if (m_startupProject) + setItemsListWithinSubproject(); // Show only items of the startup project if any } else if (m_startupProject) { setItemsListWithinStartupProject(); @@ -139,6 +146,34 @@ void TodoItemsProvider::setItemsListWithinStartupProject() } } +void TodoItemsProvider::setItemsListWithinSubproject() +{ + // TODO prefer current editor as source of sub-project + Node *node = ProjectTree::currentNode(); + if (node) { + ProjectNode *projectNode = node->projectNode(); + if (projectNode) { + + FindAllFilesVisitor filesVisitor; + projectNode->accept(&filesVisitor); + + // files must be both in the current subproject and the startup-project. + QSet<Utils::FileName> subprojectFileNames = + QSet<Utils::FileName>::fromList(filesVisitor.filePaths()); + QSet<QString> fileNames = QSet<QString>::fromList( + m_startupProject->files(ProjectExplorer::Project::ExcludeGeneratedFiles)); + QHashIterator<QString, QList<TodoItem> > it(m_itemsHash); + while (it.hasNext()) { + it.next(); + if (subprojectFileNames.contains(Utils::FileName::fromString(it.key())) + && fileNames.contains(it.key())) { + m_itemsList << it.value(); + } + } + } + } +} + void TodoItemsProvider::itemsFetched(const QString &fileName, const QList<TodoItem> &items) { // Replace old items with new ones @@ -161,8 +196,10 @@ void TodoItemsProvider::projectsFilesChanged() void TodoItemsProvider::currentEditorChanged(Core::IEditor *editor) { m_currentEditor = editor; - if (m_settings.scanningScope == ScanningScopeCurrentFile) + if (m_settings.scanningScope == ScanningScopeCurrentFile + || m_settings.scanningScope == ScanningScopeSubProject) { updateList(); + } } void TodoItemsProvider::updateListTimeoutElapsed() diff --git a/src/plugins/todo/todoitemsprovider.h b/src/plugins/todo/todoitemsprovider.h index 75a64cb1d3..fbf2549550 100644 --- a/src/plugins/todo/todoitemsprovider.h +++ b/src/plugins/todo/todoitemsprovider.h @@ -86,6 +86,7 @@ private: void updateList(); void createScanners(); void setItemsListWithinStartupProject(); + void setItemsListWithinSubproject(); private slots: void itemsFetched(const QString &fileName, const QList<TodoItem> &items); diff --git a/src/plugins/todo/todoitemsscanner.h b/src/plugins/todo/todoitemsscanner.h index b6313227ca..6bbb828f0c 100644 --- a/src/plugins/todo/todoitemsscanner.h +++ b/src/plugins/todo/todoitemsscanner.h @@ -37,10 +37,6 @@ #include <QObject> -namespace ProjectExplorer { -class Project; -} - namespace Todo { namespace Internal { diff --git a/src/plugins/todo/todooutputpane.cpp b/src/plugins/todo/todooutputpane.cpp index 7dbb3247f0..e31a95f9e5 100644 --- a/src/plugins/todo/todooutputpane.cpp +++ b/src/plugins/todo/todooutputpane.cpp @@ -72,7 +72,8 @@ QList<QWidget*> TodoOutputPane::toolBarWidgets() const return QList<QWidget*>() << m_spacer << m_currentFileButton - << m_wholeProjectButton; + << m_wholeProjectButton + << m_subProjectButton; } QString TodoOutputPane::displayName() const @@ -144,6 +145,8 @@ void TodoOutputPane::setScanningScope(ScanningScope scanningScope) { if (scanningScope == ScanningScopeCurrentFile) m_currentFileButton->setChecked(true); + else if (scanningScope == ScanningScopeSubProject) + m_subProjectButton->setChecked(true); else if (scanningScope == ScanningScopeProject) m_wholeProjectButton->setChecked(true); else @@ -154,6 +157,8 @@ void TodoOutputPane::scopeButtonClicked(QAbstractButton* button) { if (button == m_currentFileButton) emit scanningScopeChanged(ScanningScopeCurrentFile); + else if (button == m_subProjectButton) + emit scanningScopeChanged(ScanningScopeSubProject); else if (button == m_wholeProjectButton) emit scanningScopeChanged(ScanningScopeProject); setBadgeNumber(m_todoItemsModel->rowCount()); @@ -205,9 +210,15 @@ void TodoOutputPane::createScopeButtons() m_wholeProjectButton->setText(tr("Active Project")); m_wholeProjectButton->setToolTip(tr("Scan the whole active project.")); + m_subProjectButton = new QToolButton(); + m_subProjectButton->setCheckable(true); + m_subProjectButton->setText(tr("Subproject")); + m_subProjectButton->setToolTip(tr("Scan the current subproject.")); + m_scopeButtons = new QButtonGroup(); m_scopeButtons->addButton(m_wholeProjectButton); m_scopeButtons->addButton(m_currentFileButton); + m_scopeButtons->addButton(m_subProjectButton); connect(m_scopeButtons, static_cast<void (QButtonGroup::*)(QAbstractButton *)>(&QButtonGroup::buttonClicked), this, &TodoOutputPane::scopeButtonClicked); @@ -219,6 +230,7 @@ void TodoOutputPane::freeScopeButtons() { delete m_currentFileButton; delete m_wholeProjectButton; + delete m_subProjectButton; delete m_scopeButtons; delete m_spacer; } diff --git a/src/plugins/todo/todooutputpane.h b/src/plugins/todo/todooutputpane.h index ab5f55932d..769493e897 100644 --- a/src/plugins/todo/todooutputpane.h +++ b/src/plugins/todo/todooutputpane.h @@ -88,6 +88,7 @@ private: TodoOutputTreeView *m_todoTreeView; QToolButton *m_currentFileButton; QToolButton *m_wholeProjectButton; + QToolButton *m_subProjectButton; QWidget *m_spacer; QButtonGroup *m_scopeButtons; QList<TodoItem> *items; |