aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJochen Becher <jochen_becher@gmx.de>2015-05-30 08:54:39 +0200
committerJochen Becher <jochen_becher@gmx.de>2015-10-07 17:11:55 +0000
commit051bbb1cd0275282563003579a75f8565bed9ae4 (patch)
tree957dac84862b3bb06836d3cbe46599669612e712
parentc2b34fb1ef26351f0224c7cbdaa7a95d5b073a09 (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.cpp3
-rw-r--r--src/plugins/todo/optionsdialog.ui7
-rw-r--r--src/plugins/todo/settings.h3
-rw-r--r--src/plugins/todo/todoitemsprovider.cpp39
-rw-r--r--src/plugins/todo/todoitemsprovider.h1
-rw-r--r--src/plugins/todo/todoitemsscanner.h4
-rw-r--r--src/plugins/todo/todooutputpane.cpp14
-rw-r--r--src/plugins/todo/todooutputpane.h1
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;