summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNikolai Kosjar <nikolai.kosjar@qt.io>2019-11-25 10:09:21 +0100
committerNikolai Kosjar <nikolai.kosjar@qt.io>2019-11-27 14:42:12 +0000
commitb2f5ed78e187fe57308549dde306563c7a9520e3 (patch)
tree6cd1f49420f2ed9d56fcc63bffa96c7430896021
parent2ca150c097eac0aa224d8f0f1a73124a2403d12f (diff)
downloadqt-creator-b2f5ed78e187fe57308549dde306563c7a9520e3.tar.gz
ClangTools: Add "go to project settings" toolbar button
With the introduction of the "Analyze Current File" action the widget to configure the diagnostic config was moved to the project panel (Project mode > Project Settings > Clang Tools). As not too many users are aware of the project settings there and navigating there involves more user interation now (mode switch, looking for the "Clang Tools" item), add a toolbar button as a shortcut. Change-Id: I4c864045ef41ff501d925d3175ce604def213f29 Reviewed-by: hjk <hjk@qt.io> Reviewed-by: Leena Miettinen <riitta-leena.miettinen@qt.io> Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
-rw-r--r--src/plugins/clangtools/clangtool.cpp11
-rw-r--r--src/plugins/clangtools/clangtool.h1
-rw-r--r--src/plugins/clangtools/clangtoolsconstants.h2
-rw-r--r--src/plugins/clangtools/clangtoolsplugin.cpp10
-rw-r--r--src/plugins/clangtools/clangtoolsplugin.h4
-rw-r--r--src/plugins/projectexplorer/projectexplorer.cpp6
-rw-r--r--src/plugins/projectexplorer/projectexplorer.h2
-rw-r--r--src/plugins/projectexplorer/projectpanelfactory.cpp10
-rw-r--r--src/plugins/projectexplorer/projectpanelfactory.h6
-rw-r--r--src/plugins/projectexplorer/projectwindow.cpp22
-rw-r--r--src/plugins/projectexplorer/projectwindow.h4
11 files changed, 77 insertions, 1 deletions
diff --git a/src/plugins/clangtools/clangtool.cpp b/src/plugins/clangtools/clangtool.cpp
index 607b78680c..780a38c4ff 100644
--- a/src/plugins/clangtools/clangtool.cpp
+++ b/src/plugins/clangtools/clangtool.cpp
@@ -33,6 +33,7 @@
#include "clangtoolsdiagnosticmodel.h"
#include "clangtoolsdiagnosticview.h"
#include "clangtoolslogfilereader.h"
+#include "clangtoolsplugin.h"
#include "clangtoolsprojectsettings.h"
#include "clangtoolssettings.h"
#include "clangtoolsutils.h"
@@ -399,6 +400,15 @@ ClangTool::ClangTool()
ApplyFixIts(diagnosticItems).apply(m_diagnosticModel);
});
+ // Open Project Settings
+ action = new QAction(this);
+ action->setIcon(Utils::Icons::SETTINGS_TOOLBAR.icon());
+ //action->setToolTip(tr("Open Project Settings")); // TODO: Uncomment in master.
+ connect(action, &QAction::triggered, []() {
+ ProjectExplorerPlugin::activateProjectPanel(Constants::PROJECT_PANEL_ID);
+ });
+ m_openProjectSettings = action;
+
ActionContainer *menu = ActionManager::actionContainer(Debugger::Constants::M_DEBUG_ANALYZER);
const QString toolTip = tr("Clang-Tidy and Clazy use a customized Clang executable from the "
"Clang project to search for diagnostics.");
@@ -424,6 +434,7 @@ ClangTool::ClangTool()
m_perspective.addToolBarAction(m_startAction);
m_perspective.addToolBarAction(m_startOnCurrentFileAction);
m_perspective.addToolBarAction(m_stopAction);
+ m_perspective.addToolBarAction(m_openProjectSettings);
m_perspective.addToolBarAction(m_loadExported);
m_perspective.addToolBarAction(m_clear);
m_perspective.addToolBarAction(m_goBack);
diff --git a/src/plugins/clangtools/clangtool.h b/src/plugins/clangtools/clangtool.h
index bde31d355d..d994a6b2f9 100644
--- a/src/plugins/clangtools/clangtool.h
+++ b/src/plugins/clangtools/clangtool.h
@@ -129,6 +129,7 @@ private:
Utils::FancyLineEdit *m_filterLineEdit = nullptr;
QToolButton *m_applyFixitsButton = nullptr;
+ QAction *m_openProjectSettings = nullptr;
QAction *m_goBack = nullptr;
QAction *m_goNext = nullptr;
QAction *m_loadExported = nullptr;
diff --git a/src/plugins/clangtools/clangtoolsconstants.h b/src/plugins/clangtools/clangtoolsconstants.h
index a3da1d78f5..8f09865b1c 100644
--- a/src/plugins/clangtools/clangtoolsconstants.h
+++ b/src/plugins/clangtools/clangtoolsconstants.h
@@ -28,6 +28,8 @@
namespace ClangTools {
namespace Constants {
+const char PROJECT_PANEL_ID[] = "ClangTools";
+
const char RUN_ON_PROJECT[] = "ClangTools.RunOnProject";
const char RUN_ON_CURRENT_FILE[] = "ClangTools.RunOnCurrentFile";
diff --git a/src/plugins/clangtools/clangtoolsplugin.cpp b/src/plugins/clangtools/clangtoolsplugin.cpp
index cdcda4d3c6..b53901e95a 100644
--- a/src/plugins/clangtools/clangtoolsplugin.cpp
+++ b/src/plugins/clangtools/clangtoolsplugin.cpp
@@ -67,6 +67,13 @@ using namespace ProjectExplorer;
namespace ClangTools {
namespace Internal {
+static ProjectPanelFactory *m_projectPanelFactoryInstance = nullptr;
+
+ProjectPanelFactory *projectPanelFactory()
+{
+ return m_projectPanelFactoryInstance;
+}
+
class ClangToolsOptionsPage : public IOptionsPage
{
public:
@@ -123,8 +130,9 @@ bool ClangToolsPlugin::initialize(const QStringList &arguments, QString *errorSt
ActionManager::registerAction(d->clangTool.startOnCurrentFileAction(),
Constants::RUN_ON_CURRENT_FILE);
- auto panelFactory = new ProjectPanelFactory();
+ auto panelFactory = m_projectPanelFactoryInstance = new ProjectPanelFactory;
panelFactory->setPriority(100);
+ panelFactory->setId(Constants::PROJECT_PANEL_ID);
panelFactory->setDisplayName(tr("Clang Tools"));
panelFactory->setCreateWidgetFunction([](Project *project) { return new ProjectSettingsWidget(project); });
ProjectPanelFactory::registerFactory(panelFactory);
diff --git a/src/plugins/clangtools/clangtoolsplugin.h b/src/plugins/clangtools/clangtoolsplugin.h
index 7f24d79f4b..30c28b276b 100644
--- a/src/plugins/clangtools/clangtoolsplugin.h
+++ b/src/plugins/clangtools/clangtoolsplugin.h
@@ -27,9 +27,13 @@
#include <extensionsystem/iplugin.h>
+namespace ProjectExplorer { class ProjectPanelFactory; }
+
namespace ClangTools {
namespace Internal {
+ProjectExplorer::ProjectPanelFactory *projectPanelFactory();
+
class ClangToolsPlugin : public ExtensionSystem::IPlugin
{
Q_OBJECT
diff --git a/src/plugins/projectexplorer/projectexplorer.cpp b/src/plugins/projectexplorer/projectexplorer.cpp
index 30fdbcc58a..96f46a11c9 100644
--- a/src/plugins/projectexplorer/projectexplorer.cpp
+++ b/src/plugins/projectexplorer/projectexplorer.cpp
@@ -3903,6 +3903,12 @@ void ProjectExplorerPlugin::updateActions()
dd->updateActions();
}
+void ProjectExplorerPlugin::activateProjectPanel(Core::Id panelId)
+{
+ Core::ModeManager::activateMode(Constants::MODE_SESSION);
+ dd->m_proWindow->activateProjectPanel(panelId);
+}
+
QList<QPair<QString, QString> > ProjectExplorerPlugin::recentProjects()
{
return dd->recentProjects();
diff --git a/src/plugins/projectexplorer/projectexplorer.h b/src/plugins/projectexplorer/projectexplorer.h
index feb53ccdef..5b1617e182 100644
--- a/src/plugins/projectexplorer/projectexplorer.h
+++ b/src/plugins/projectexplorer/projectexplorer.h
@@ -172,6 +172,8 @@ public:
static void updateActions();
+ static void activateProjectPanel(Core::Id panelId);
+
signals:
void finishedInitialization();
diff --git a/src/plugins/projectexplorer/projectpanelfactory.cpp b/src/plugins/projectexplorer/projectpanelfactory.cpp
index d734b8d336..c4eaef05b4 100644
--- a/src/plugins/projectexplorer/projectpanelfactory.cpp
+++ b/src/plugins/projectexplorer/projectpanelfactory.cpp
@@ -80,6 +80,16 @@ void ProjectPanelFactory::destroyFactories()
s_factories.clear();
}
+Core::Id ProjectPanelFactory::id() const
+{
+ return m_id;
+}
+
+void ProjectPanelFactory::setId(Core::Id id)
+{
+ m_id = id;
+}
+
QString ProjectPanelFactory::icon() const
{
return m_icon;
diff --git a/src/plugins/projectexplorer/projectpanelfactory.h b/src/plugins/projectexplorer/projectpanelfactory.h
index 27e643b0ed..6d03125398 100644
--- a/src/plugins/projectexplorer/projectpanelfactory.h
+++ b/src/plugins/projectexplorer/projectpanelfactory.h
@@ -30,6 +30,8 @@
#include "panelswidget.h"
#include "projectwindow.h"
+#include <coreplugin/id.h>
+
#include <utils/treemodel.h>
#include <functional>
@@ -44,6 +46,9 @@ class PROJECTEXPLORER_EXPORT ProjectPanelFactory
public:
ProjectPanelFactory();
+ Core::Id id() const;
+ void setId(Core::Id id);
+
// simple properties
QString displayName() const;
void setDisplayName(const QString &name);
@@ -78,6 +83,7 @@ private:
friend class ProjectExplorerPlugin;
static void destroyFactories();
+ Core::Id m_id;
int m_priority = 0;
QString m_displayName;
SupportsFunction m_supportsFunction;
diff --git a/src/plugins/projectexplorer/projectwindow.cpp b/src/plugins/projectexplorer/projectwindow.cpp
index dfa20793e3..d72f7812ff 100644
--- a/src/plugins/projectexplorer/projectwindow.cpp
+++ b/src/plugins/projectexplorer/projectwindow.cpp
@@ -84,6 +84,8 @@ public:
Qt::ItemFlags flags(int column) const override;
bool setData(int column, const QVariant &, int role) override;
+ ProjectPanelFactory *factory() const { return m_factory; }
+
protected:
ProjectPanelFactory *m_factory = nullptr;
QPointer<Project> m_project;
@@ -281,6 +283,13 @@ public:
return activeItem ? activeItem->index() : QModelIndex();
}
+ TreeItem *itemForProjectPanel(Core::Id panelId)
+ {
+ return m_miscItem->findChildAtLevel(1, [panelId](const TreeItem *item){
+ return static_cast<const MiscSettingsPanelItem *>(item)->factory()->id() == panelId;
+ });
+ }
+
private:
int m_currentChildIndex = 0; // Start with Build & Run.
Project *m_project = nullptr;
@@ -497,6 +506,14 @@ public:
item->setData(0, QVariant(), ItemActivatedDirectlyRole);
}
+ void activateProjectPanel(Core::Id panelId)
+ {
+ if (ProjectItem *projectItem = m_projectsModel.rootItem()->childAt(0)) {
+ if (TreeItem *item = projectItem->itemForProjectPanel(panelId))
+ itemActivated(item->index());
+ }
+ }
+
void openContextMenu(const QPoint &pos)
{
QMenu menu;
@@ -606,6 +623,11 @@ ProjectWindow::ProjectWindow()
setContextMenuPolicy(Qt::CustomContextMenu);
}
+void ProjectWindow::activateProjectPanel(Core::Id panelId)
+{
+ d->activateProjectPanel(panelId);
+}
+
ProjectWindow::~ProjectWindow() = default;
QSize SelectorDelegate::sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const
diff --git a/src/plugins/projectexplorer/projectwindow.h b/src/plugins/projectexplorer/projectwindow.h
index 1aeeb882f9..01840951ab 100644
--- a/src/plugins/projectexplorer/projectwindow.h
+++ b/src/plugins/projectexplorer/projectwindow.h
@@ -31,6 +31,8 @@
#include <memory>
+namespace Core { class Id; }
+
namespace ProjectExplorer {
namespace Internal {
@@ -60,6 +62,8 @@ public:
ProjectWindow();
~ProjectWindow() override;
+ void activateProjectPanel(Core::Id panelId);
+
private:
const std::unique_ptr<ProjectWindowPrivate> d;
};