diff options
-rw-r--r-- | src/plugins/clangtools/clangtool.cpp | 11 | ||||
-rw-r--r-- | src/plugins/clangtools/clangtool.h | 1 | ||||
-rw-r--r-- | src/plugins/clangtools/clangtoolsconstants.h | 2 | ||||
-rw-r--r-- | src/plugins/clangtools/clangtoolsplugin.cpp | 10 | ||||
-rw-r--r-- | src/plugins/clangtools/clangtoolsplugin.h | 4 | ||||
-rw-r--r-- | src/plugins/projectexplorer/projectexplorer.cpp | 6 | ||||
-rw-r--r-- | src/plugins/projectexplorer/projectexplorer.h | 2 | ||||
-rw-r--r-- | src/plugins/projectexplorer/projectpanelfactory.cpp | 10 | ||||
-rw-r--r-- | src/plugins/projectexplorer/projectpanelfactory.h | 6 | ||||
-rw-r--r-- | src/plugins/projectexplorer/projectwindow.cpp | 22 | ||||
-rw-r--r-- | src/plugins/projectexplorer/projectwindow.h | 4 |
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; }; |