aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/mesonprojectmanager/mesonactionsmanager/mesonactionsmanager.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/mesonprojectmanager/mesonactionsmanager/mesonactionsmanager.cpp')
-rw-r--r--src/plugins/mesonprojectmanager/mesonactionsmanager/mesonactionsmanager.cpp112
1 files changed, 112 insertions, 0 deletions
diff --git a/src/plugins/mesonprojectmanager/mesonactionsmanager/mesonactionsmanager.cpp b/src/plugins/mesonprojectmanager/mesonactionsmanager/mesonactionsmanager.cpp
new file mode 100644
index 0000000000..521b0ba865
--- /dev/null
+++ b/src/plugins/mesonprojectmanager/mesonactionsmanager/mesonactionsmanager.cpp
@@ -0,0 +1,112 @@
+/****************************************************************************
+**
+** Copyright (C) 2020 Alexis Jeandet.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt Creator.
+**
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+****************************************************************************/
+
+#include "mesonactionsmanager.h"
+#include <coreplugin/actionmanager/actioncontainer.h>
+#include <coreplugin/actionmanager/actionmanager.h>
+#include <coreplugin/coreconstants.h>
+#include <project/mesonbuildsystem.h>
+#include <project/projecttree/mesonprojectnodes.h>
+#include <projectexplorer/projectexplorer.h>
+#include <projectexplorer/projecttree.h>
+#include <utils/parameteraction.h>
+namespace MesonProjectManager {
+namespace Internal {
+
+MesonActionsManager::MesonActionsManager()
+ : configureActionMenu(tr("Configure"))
+ , configureActionContextMenu(tr("Configure"))
+{
+ const Core::Context globalContext(Core::Constants::C_GLOBAL);
+ const Core::Context projectContext{Constants::Project::ID};
+ Core::ActionContainer *mproject = Core::ActionManager::actionContainer(
+ ProjectExplorer::Constants::M_PROJECTCONTEXT);
+ Core::ActionContainer *msubproject = Core::ActionManager::actionContainer(
+ ProjectExplorer::Constants::M_SUBPROJECTCONTEXT);
+
+ Core::Command *command;
+
+ {
+ command = Core::ActionManager::registerAction(&configureActionMenu,
+ "MesonProject.Configure",
+ projectContext);
+ mproject->addAction(command, ProjectExplorer::Constants::G_PROJECT_BUILD);
+ msubproject->addAction(command, ProjectExplorer::Constants::G_PROJECT_BUILD);
+ connect(&configureActionMenu,
+ &QAction::triggered,
+ this,
+ &MesonActionsManager::configureCurrentProject);
+ }
+
+ {
+ command = Core::ActionManager::registerAction(&buildTargetContextAction,
+ "Meson.BuildTargetContextMenu",
+ projectContext);
+ command->setAttribute(Core::Command::CA_Hide);
+ command->setAttribute(Core::Command::CA_UpdateText);
+ command->setDescription(buildTargetContextAction.text());
+
+ Core::ActionManager::actionContainer(ProjectExplorer::Constants::M_SUBPROJECTCONTEXT)
+ ->addAction(command, ProjectExplorer::Constants::G_PROJECT_BUILD);
+ // Wire up context menu updates:
+ connect(ProjectExplorer::ProjectTree::instance(),
+ &ProjectExplorer::ProjectTree::currentNodeChanged,
+ this,
+ &MesonActionsManager::updateContextActions);
+
+ connect(&buildTargetContextAction, &Utils::ParameterAction::triggered, this, [] {
+ auto bs = qobject_cast<MesonBuildSystem *>(
+ ProjectExplorer::ProjectTree::currentBuildSystem());
+ if (bs) {
+ auto targetNode = dynamic_cast<MesonTargetNode *>(
+ ProjectExplorer::ProjectTree::currentNode());
+ targetNode->build();
+ }
+ });
+ }
+}
+
+void MesonActionsManager::configureCurrentProject()
+{
+ auto bs = dynamic_cast<MesonBuildSystem *>(ProjectExplorer::ProjectTree::currentBuildSystem());
+ QTC_ASSERT(bs, return );
+ if (ProjectExplorer::ProjectExplorerPlugin::saveModifiedFiles())
+ bs->configure();
+}
+
+void MesonActionsManager::updateContextActions()
+{
+ auto targetNode = dynamic_cast<const MesonTargetNode *>(
+ ProjectExplorer::ProjectTree::currentNode());
+ const QString targetDisplayName = targetNode ? targetNode->displayName() : QString();
+
+ // Build Target:
+ buildTargetContextAction.setParameter(targetDisplayName);
+ buildTargetContextAction.setEnabled(targetNode);
+ buildTargetContextAction.setVisible(targetNode);
+}
+
+} // namespace Internal
+} // namespace MesonProjectManager