diff --git a/src/plugins/projectexplorer/images/cancelbuild_overlay.png b/src/plugins/projectexplorer/images/cancelbuild_overlay.png new file mode 100644 index 00000000000..3305b979214 Binary files /dev/null and b/src/plugins/projectexplorer/images/cancelbuild_overlay.png differ diff --git a/src/plugins/projectexplorer/images/cancelbuild_overlay@2x.png b/src/plugins/projectexplorer/images/cancelbuild_overlay@2x.png new file mode 100644 index 00000000000..21eadc6db88 Binary files /dev/null and b/src/plugins/projectexplorer/images/cancelbuild_overlay@2x.png differ diff --git a/src/plugins/projectexplorer/projectexplorer.cpp b/src/plugins/projectexplorer/projectexplorer.cpp index 10c98a2b93b..ad5496e6e9b 100644 --- a/src/plugins/projectexplorer/projectexplorer.cpp +++ b/src/plugins/projectexplorer/projectexplorer.cpp @@ -125,6 +125,7 @@ #include #include #include +#include #include #include #include @@ -366,6 +367,7 @@ public: QAction *m_closeAllProjects; QAction *m_buildProjectOnlyAction; Utils::ParameterAction *m_buildAction; + Utils::ProxyAction *m_modeBarBuildAction; QAction *m_buildActionContextMenu; QAction *m_buildDependenciesActionContextMenu; QAction *m_buildSessionAction; @@ -924,7 +926,11 @@ bool ProjectExplorerPlugin::initialize(const QStringList &arguments, QString *er mbuild->addAction(cmd, Constants::G_BUILD_BUILD); // Add to mode bar - ModeManager::addAction(cmd->action(), Constants::P_ACTION_BUILDPROJECT); + dd->m_modeBarBuildAction = new Utils::ProxyAction(this); + dd->m_modeBarBuildAction->initialize(cmd->action()); + dd->m_modeBarBuildAction->setAttribute(Utils::ProxyAction::UpdateText); + dd->m_modeBarBuildAction->setAction(cmd->action()); + ModeManager::addAction(dd->m_modeBarBuildAction, Constants::P_ACTION_BUILDPROJECT); // deploy action dd->m_deployAction = new Utils::ParameterAction(tr("Deploy Project"), tr("Deploy Project \"%1\""), @@ -951,8 +957,7 @@ bool ProjectExplorerPlugin::initialize(const QStringList &arguments, QString *er mbuild->addAction(cmd, Constants::G_BUILD_CLEAN); // cancel build action - dd->m_cancelBuildAction = new QAction(Utils::Icons::STOP_SMALL.icon(), tr("Cancel Build"), - this); + dd->m_cancelBuildAction = new QAction(Utils::Icons::STOP_SMALL.icon(), tr("Cancel Build"), this); cmd = ActionManager::registerAction(dd->m_cancelBuildAction, Constants::CANCELBUILD); cmd->setDefaultKeySequence(QKeySequence(useMacShortcuts ? tr("Meta+Backspace") : tr("Alt+Backspace"))); mbuild->addAction(cmd, Constants::G_BUILD_CANCEL); @@ -2203,6 +2208,7 @@ void ProjectExplorerPluginPrivate::updateActions() const QPair buildActionState = buildSettingsEnabled(project); const QPair buildActionContextState = buildSettingsEnabled(currentProject); const QPair buildSessionState = buildSettingsEnabledForSession(); + const bool isBuilding = BuildManager::isBuilding(project); const QString projectName = project ? project->displayName() : QString(); const QString projectNameContextMenu = currentProject ? currentProject->displayName() : QString(); @@ -2210,6 +2216,15 @@ void ProjectExplorerPluginPrivate::updateActions() m_unloadAction->setParameter(projectName); m_unloadActionContextMenu->setParameter(projectNameContextMenu); + // mode bar build action + QAction * const buildAction = ActionManager::command(Constants::BUILD)->action(); + m_modeBarBuildAction->setAction(isBuilding + ? ActionManager::command(Constants::CANCELBUILD)->action() + : buildAction); + m_modeBarBuildAction->setIcon(isBuilding + ? Icons::CANCELBUILD_FLAT.icon() + : buildAction->icon()); + // Normal actions m_buildAction->setParameter(projectName); m_rebuildAction->setParameter(projectName); diff --git a/src/plugins/projectexplorer/projectexplorer.qrc b/src/plugins/projectexplorer/projectexplorer.qrc index 649c3e658f5..6b64ba4d568 100644 --- a/src/plugins/projectexplorer/projectexplorer.qrc +++ b/src/plugins/projectexplorer/projectexplorer.qrc @@ -76,5 +76,7 @@ images/fileoverlay_h@2x.png images/fileoverlay_unknown.png images/fileoverlay_unknown@2x.png + images/cancelbuild_overlay.png + images/cancelbuild_overlay@2x.png diff --git a/src/plugins/projectexplorer/projectexplorericons.cpp b/src/plugins/projectexplorer/projectexplorericons.cpp index cd1913838da..883739dca01 100644 --- a/src/plugins/projectexplorer/projectexplorericons.cpp +++ b/src/plugins/projectexplorer/projectexplorericons.cpp @@ -37,6 +37,11 @@ const Icon BUILD_FLAT({ const Icon BUILD_SMALL({ {":/projectexplorer/images/buildhammerhandle.png", Theme::IconsBuildHammerHandleColor}, {":/projectexplorer/images/buildhammerhead.png", Theme::IconsBuildHammerHeadColor}}, Icon::Tint); +const Icon CANCELBUILD_FLAT({ + {":/projectexplorer/images/build_hammerhandle_mask.png", Theme::IconsDisabledColor}, + {":/projectexplorer/images/build_hammerhead_mask.png", Theme::IconsDisabledColor}, + {":/projectexplorer/images/cancelbuild_overlay.png", Theme::IconsStopToolBarColor}}, + Icon::Tint | Icon::PunchEdges); const Icon REBUILD({ {":/projectexplorer/images/rebuildhammerhandles.png", Theme::IconsBuildHammerHandleColor}, {":/projectexplorer/images/buildhammerhandle.png", Theme::IconsBuildHammerHandleColor}, diff --git a/src/plugins/projectexplorer/projectexplorericons.h b/src/plugins/projectexplorer/projectexplorericons.h index fbef1896633..9776e74c0ff 100644 --- a/src/plugins/projectexplorer/projectexplorericons.h +++ b/src/plugins/projectexplorer/projectexplorericons.h @@ -35,6 +35,7 @@ namespace Icons { PROJECTEXPLORER_EXPORT extern const Utils::Icon BUILD; PROJECTEXPLORER_EXPORT extern const Utils::Icon BUILD_FLAT; PROJECTEXPLORER_EXPORT extern const Utils::Icon BUILD_SMALL; +PROJECTEXPLORER_EXPORT extern const Utils::Icon CANCELBUILD_FLAT; PROJECTEXPLORER_EXPORT extern const Utils::Icon REBUILD; PROJECTEXPLORER_EXPORT extern const Utils::Icon RUN; PROJECTEXPLORER_EXPORT extern const Utils::Icon RUN_FLAT; diff --git a/src/tools/icons/qtcreatoricons.svg b/src/tools/icons/qtcreatoricons.svg index be1d84907ae..d41141c4306 100644 --- a/src/tools/icons/qtcreatoricons.svg +++ b/src/tools/icons/qtcreatoricons.svg @@ -7455,6 +7455,29 @@ height="100%" /> + + + +