From d61a7f59b298a55abbffbcb59e892ae36b831b33 Mon Sep 17 00:00:00 2001 From: mae <qt-info@nokia.com> Date: Fri, 12 Mar 2010 14:22:26 +0100 Subject: [PATCH] Make the run and debug buttons in the FancyActionBar mutual exclusive Debug is now only available in debug mode, run is available in all other modes. --- src/plugins/coreplugin/fancyactionbar.cpp | 25 ++++++++++++++++++++++- src/plugins/coreplugin/fancyactionbar.h | 6 ++++++ 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/src/plugins/coreplugin/fancyactionbar.cpp b/src/plugins/coreplugin/fancyactionbar.cpp index f14891b64e6..6346a84d8c0 100644 --- a/src/plugins/coreplugin/fancyactionbar.cpp +++ b/src/plugins/coreplugin/fancyactionbar.cpp @@ -1,4 +1,4 @@ -/********************Q****************************************************** +/************************************************************************** ** ** This file is part of Qt Creator ** @@ -33,6 +33,8 @@ #include <utils/stylehelper.h> #include <coreplugin/icore.h> +#include <coreplugin/imode.h> +#include <coreplugin/modemanager.h> #include <coreplugin/mainwindow.h> #include <QtGui/QHBoxLayout> @@ -47,6 +49,7 @@ #include <QtGui/QMouseEvent> #include <QtCore/QAnimationGroup> #include <QtCore/QPropertyAnimation> +#include <QtCore/QDebug> using namespace Core; using namespace Internal; @@ -234,6 +237,11 @@ FancyActionBar::FancyActionBar(QWidget *parent) spacerLayout->setSpacing(0); setLayout(spacerLayout); setContentsMargins(0,2,0,0); + + m_runButton = m_debugButton = 0; + + connect(Core::ModeManager::instance(), SIGNAL(currentModeChanged(Core::IMode*)), + this, SLOT(modeChanged(Core::IMode*))); } void FancyActionBar::addProjectSelector(QAction *action) @@ -247,11 +255,26 @@ void FancyActionBar::addProjectSelector(QAction *action) void FancyActionBar::insertAction(int index, QAction *action) { FancyToolButton *toolButton = new FancyToolButton(this); + if (action->objectName() == QLatin1String("ProjectExplorer.Run")) + m_runButton = toolButton; + if (action->objectName() == QLatin1String("ProjectExplorer.Debug")) + m_debugButton = toolButton; + toolButton->setDefaultAction(action); connect(action, SIGNAL(changed()), toolButton, SLOT(actionChanged())); m_actionsLayout->insertWidget(index, toolButton); } +void FancyActionBar::modeChanged(Core::IMode *mode) +{ + if (m_runButton && m_debugButton) { + bool inDebugMode = (mode->id() == QLatin1String("Debugger.Mode.Debug")); + m_runButton->setVisible(!inDebugMode); + m_debugButton->setVisible(inDebugMode); + } +} + + QLayout *FancyActionBar::actionsLayout() const { return m_actionsLayout; diff --git a/src/plugins/coreplugin/fancyactionbar.h b/src/plugins/coreplugin/fancyactionbar.h index c6fee53feaf..6879cfa9dd5 100644 --- a/src/plugins/coreplugin/fancyactionbar.h +++ b/src/plugins/coreplugin/fancyactionbar.h @@ -39,6 +39,7 @@ class QVBoxLayout; QT_END_NAMESPACE namespace Core { + class IMode; namespace Internal { class FancyToolButton : public QToolButton @@ -75,8 +76,13 @@ public: void addProjectSelector(QAction *action); QLayout *actionsLayout() const; +private slots: + void modeChanged(Core::IMode *mode); + private: QVBoxLayout *m_actionsLayout; + FancyToolButton *m_runButton; + FancyToolButton *m_debugButton; }; } // namespace Internal -- GitLab