Debugger: Remove explicit language switch from menu

This duplicates the switch in the runtime configuration.

Reviewed-by: Lasse Holmstedt
This commit is contained in:
Kai Koehne
2010-09-28 11:15:57 +02:00
parent d79e6e79be
commit 509238da89
4 changed files with 20 additions and 83 deletions

View File

@@ -47,7 +47,6 @@ const char * const STEPOUT = "Debugger.StepOut";
const char * const NEXT = "Debugger.NextLine"; const char * const NEXT = "Debugger.NextLine";
const char * const REVERSE = "Debugger.ReverseDirection"; const char * const REVERSE = "Debugger.ReverseDirection";
const char * const M_DEBUG_DEBUGGING_LANGUAGES = "Debugger.Menu.View.DebugLanguages";
const char * const M_DEBUG_VIEWS = "Debugger.Menu.View.Debug"; const char * const M_DEBUG_VIEWS = "Debugger.Menu.View.Debug";
const char * const C_DEBUGMODE = "Debugger.DebugMode"; const char * const C_DEBUGMODE = "Debugger.DebugMode";

View File

@@ -1265,8 +1265,8 @@ bool DebuggerPluginPrivate::initialize(const QStringList &arguments, QString *er
// Cpp/Qml ui setup // Cpp/Qml ui setup
m_uiSwitcher = new DebuggerUISwitcher(m_debugMode, this); m_uiSwitcher = new DebuggerUISwitcher(m_debugMode, this);
ExtensionSystem::PluginManager::instance()->addObject(m_uiSwitcher); ExtensionSystem::PluginManager::instance()->addObject(m_uiSwitcher);
m_uiSwitcher->addLanguage(CppLanguage, tr("C++"), cppDebuggercontext); m_uiSwitcher->addLanguage(CppLanguage, cppDebuggercontext);
m_uiSwitcher->addLanguage(QmlLanguage, tr("QML/JavaScript"), qmlDebuggerContext); m_uiSwitcher->addLanguage(QmlLanguage, qmlDebuggerContext);
// Dock widgets // Dock widgets
m_breakDock = m_uiSwitcher->createDockWidget(CppLanguage, m_breakWindow); m_breakDock = m_uiSwitcher->createDockWidget(CppLanguage, m_breakWindow);

View File

@@ -129,17 +129,12 @@ struct DebuggerUISwitcherPrivate
QHash<DebuggerLanguage, Context> m_contextsForLanguage; QHash<DebuggerLanguage, Context> m_contextsForLanguage;
QActionGroup *m_languageActionGroup;
bool m_inDebugMode; bool m_inDebugMode;
bool m_changingUI; bool m_changingUI;
ActionContainer *m_debuggerLanguageMenu;
DebuggerLanguages m_previousDebugLanguages; DebuggerLanguages m_previousDebugLanguages;
DebuggerLanguages m_activeDebugLanguages; DebuggerLanguages m_activeDebugLanguages;
QAction *m_activateCppAction;
QAction *m_activateQmlAction;
QAction *m_openMemoryEditorAction; QAction *m_openMemoryEditorAction;
bool m_qmlEnabled;
ActionContainer *m_viewsMenu; ActionContainer *m_viewsMenu;
ActionContainer *m_debugMenu; ActionContainer *m_debugMenu;
@@ -160,21 +155,15 @@ DebuggerUISwitcherPrivate::DebuggerUISwitcherPrivate(DebuggerUISwitcher *q)
, m_supportedLanguages(AnyLanguage) , m_supportedLanguages(AnyLanguage)
, m_languageCount(0) , m_languageCount(0)
, m_toolbarStack(new QStackedWidget) , m_toolbarStack(new QStackedWidget)
, m_languageActionGroup(new QActionGroup(q))
, m_inDebugMode(false) , m_inDebugMode(false)
, m_changingUI(false) , m_changingUI(false)
, m_debuggerLanguageMenu(0)
, m_previousDebugLanguages(AnyLanguage) , m_previousDebugLanguages(AnyLanguage)
, m_activeDebugLanguages(AnyLanguage) , m_activeDebugLanguages(AnyLanguage)
, m_activateCppAction(0)
, m_activateQmlAction(0)
, m_openMemoryEditorAction(0) , m_openMemoryEditorAction(0)
, m_qmlEnabled(false)
, m_viewsMenu(0) , m_viewsMenu(0)
, m_debugMenu(0) , m_debugMenu(0)
, m_initialized(false) , m_initialized(false)
{ {
m_languageActionGroup->setExclusive(false);
} }
DebuggerUISwitcher *DebuggerUISwitcherPrivate::m_instance = 0; DebuggerUISwitcher *DebuggerUISwitcherPrivate::m_instance = 0;
@@ -197,7 +186,6 @@ DebuggerUISwitcher::DebuggerUISwitcher(BaseMode *mode, QObject* parent)
d->m_debugMenu = am->actionContainer(ProjectExplorer::Constants::M_DEBUG); d->m_debugMenu = am->actionContainer(ProjectExplorer::Constants::M_DEBUG);
d->m_viewsMenu = am->actionContainer(Core::Id(Core::Constants::M_WINDOW_VIEWS)); d->m_viewsMenu = am->actionContainer(Core::Id(Core::Constants::M_WINDOW_VIEWS));
QTC_ASSERT(d->m_viewsMenu, return) QTC_ASSERT(d->m_viewsMenu, return)
d->m_debuggerLanguageMenu = am->createMenu(Constants::M_DEBUG_DEBUGGING_LANGUAGES);
DebuggerUISwitcherPrivate::m_instance = this; DebuggerUISwitcherPrivate::m_instance = this;
} }
@@ -268,43 +256,24 @@ void DebuggerUISwitcher::updateUiForRunConfiguration(ProjectExplorer::RunConfigu
void DebuggerUISwitcher::updateUiForCurrentRunConfiguration() void DebuggerUISwitcher::updateUiForCurrentRunConfiguration()
{ {
if (d->m_previousRunConfiguration) {
ProjectExplorer::RunConfiguration *rc = d->m_previousRunConfiguration.data();
if (d->m_activateCppAction)
d->m_activateCppAction->setChecked(rc->useCppDebugger());
if (d->m_activateQmlAction)
d->m_activateQmlAction->setChecked(rc->useQmlDebugger());
}
updateActiveLanguages(); updateActiveLanguages();
} }
void DebuggerUISwitcher::updateActiveLanguages() void DebuggerUISwitcher::updateActiveLanguages()
{ {
DebuggerLanguages prevLanguages = d->m_activeDebugLanguages; DebuggerLanguages newLanguages = AnyLanguage;
d->m_activeDebugLanguages = AnyLanguage; if (d->m_previousRunConfiguration) {
if (d->m_previousRunConfiguration.data()->useCppDebugger())
if (d->m_activateCppAction->isChecked()) newLanguages = CppLanguage;
d->m_activeDebugLanguages = CppLanguage; if (d->m_previousRunConfiguration.data()->useQmlDebugger())
newLanguages |= QmlLanguage;
if (d->m_qmlEnabled && d->m_activateQmlAction->isChecked())
d->m_activeDebugLanguages |= QmlLanguage;
if (d->m_activeDebugLanguages == AnyLanguage) {
// do mutual exclusive selection if qml is enabled. Otherwise, just keep
// cpp language selected.
if (prevLanguages & CppLanguage && d->m_qmlEnabled) {
d->m_activeDebugLanguages = QmlLanguage;
d->m_activateQmlAction->setChecked(true);
} else {
d->m_activateCppAction->setChecked(true);
d->m_activeDebugLanguages = CppLanguage;
}
} }
if (newLanguages != d->m_activeDebugLanguages) {
d->m_activeDebugLanguages = newLanguages;
emit activeLanguagesChanged(d->m_activeDebugLanguages); emit activeLanguagesChanged(d->m_activeDebugLanguages);
}
updateUi(); updateUi();
} }
@@ -357,9 +326,6 @@ void DebuggerUISwitcher::createViewsMenuItems()
ActionManager *am = core->actionManager(); ActionManager *am = core->actionManager();
Context globalcontext(Core::Constants::C_GLOBAL); Context globalcontext(Core::Constants::C_GLOBAL);
d->m_debugMenu->addMenu(d->m_debuggerLanguageMenu, Core::Constants::G_DEFAULT_THREE);
d->m_debuggerLanguageMenu->menu()->setTitle(tr("&Debug Languages"));
d->m_openMemoryEditorAction = new QAction(this); d->m_openMemoryEditorAction = new QAction(this);
d->m_openMemoryEditorAction->setText(tr("Memory...")); d->m_openMemoryEditorAction->setText(tr("Memory..."));
connect(d->m_openMemoryEditorAction, SIGNAL(triggered()), connect(d->m_openMemoryEditorAction, SIGNAL(triggered()),
@@ -390,8 +356,7 @@ DebuggerUISwitcher *DebuggerUISwitcher::instance()
return DebuggerUISwitcherPrivate::m_instance; return DebuggerUISwitcherPrivate::m_instance;
} }
void DebuggerUISwitcher::addLanguage(const DebuggerLanguage &languageId, void DebuggerUISwitcher::addLanguage(const DebuggerLanguage &languageId, const Context &context)
const QString &languageName, const Context &context)
{ {
bool activate = (d->m_supportedLanguages == AnyLanguage); bool activate = (d->m_supportedLanguages == AnyLanguage);
d->m_supportedLanguages = d->m_supportedLanguages | languageId; d->m_supportedLanguages = d->m_supportedLanguages | languageId;
@@ -400,30 +365,6 @@ void DebuggerUISwitcher::addLanguage(const DebuggerLanguage &languageId,
d->m_toolBars.insert(languageId, 0); d->m_toolBars.insert(languageId, 0);
d->m_contextsForLanguage.insert(languageId, context); d->m_contextsForLanguage.insert(languageId, context);
ActionManager *am = ICore::instance()->actionManager();
QAction *debuggableLang = new QAction(languageName, this);
debuggableLang->setCheckable(true);
debuggableLang->setText(languageName);
d->m_languageActionGroup->addAction(debuggableLang);
Command *activeDebugLanguageCmd = am->registerAction(debuggableLang,
QString("Debugger.DebugLanguage." + languageName),
Context(Core::Constants::C_GLOBAL));
d->m_debuggerLanguageMenu->addAction(activeDebugLanguageCmd);
QString shortcutPrefix = tr("Alt+L");
QString shortcutIndex = QString::number(d->m_languageCount);
activeDebugLanguageCmd->setDefaultKeySequence(QKeySequence(
QString("%1,%2").arg(shortcutPrefix).arg(shortcutIndex)));
if (languageId == QmlLanguage) {
d->m_qmlEnabled = true;
d->m_activateQmlAction = debuggableLang;
} else if (!d->m_activateCppAction) {
d->m_activateCppAction = debuggableLang;
}
connect(debuggableLang, SIGNAL(triggered()), SLOT(updateActiveLanguages()));
updateUiForRunConfiguration(0); updateUiForRunConfiguration(0);
if (activate) if (activate)
@@ -683,7 +624,7 @@ void DebuggerUISwitcher::writeSettings() const
} }
settings->endGroup(); settings->endGroup();
} }
if (d->m_qmlEnabled) { {
settings->beginGroup(QLatin1String("DebugMode.CppQmlMode")); settings->beginGroup(QLatin1String("DebugMode.CppQmlMode"));
QHashIterator<QString, QVariant> it(d->m_dockWidgetActiveStateQmlCpp); QHashIterator<QString, QVariant> it(d->m_dockWidgetActiveStateQmlCpp);
while (it.hasNext()) { while (it.hasNext()) {
@@ -706,13 +647,11 @@ void DebuggerUISwitcher::readSettings()
} }
settings->endGroup(); settings->endGroup();
if (d->m_qmlEnabled) {
settings->beginGroup(QLatin1String("DebugMode.CppQmlMode")); settings->beginGroup(QLatin1String("DebugMode.CppQmlMode"));
foreach (const QString &key, settings->childKeys()) { foreach (const QString &key, settings->childKeys()) {
d->m_dockWidgetActiveStateQmlCpp.insert(key, settings->value(key)); d->m_dockWidgetActiveStateQmlCpp.insert(key, settings->value(key));
} }
settings->endGroup(); settings->endGroup();
}
// reset initial settings when there are none yet // reset initial settings when there are none yet
DebuggerLanguages langs = d->m_activeDebugLanguages; DebuggerLanguages langs = d->m_activeDebugLanguages;
@@ -720,7 +659,7 @@ void DebuggerUISwitcher::readSettings()
d->m_activeDebugLanguages = CppLanguage; d->m_activeDebugLanguages = CppLanguage;
resetDebuggerLayout(); resetDebuggerLayout();
} }
if (d->m_qmlEnabled && d->m_dockWidgetActiveStateQmlCpp.isEmpty()) { if (d->m_dockWidgetActiveStateQmlCpp.isEmpty()) {
d->m_activeDebugLanguages = QmlLanguage; d->m_activeDebugLanguages = QmlLanguage;
resetDebuggerLayout(); resetDebuggerLayout();
} }

View File

@@ -76,8 +76,7 @@ public:
static DebuggerUISwitcher *instance(); static DebuggerUISwitcher *instance();
// debuggable languages are registered with this function. // debuggable languages are registered with this function.
void addLanguage(const DebuggerLanguage &language, const QString &languageName, void addLanguage(const DebuggerLanguage &language, const Core::Context &context);
const Core::Context &context);
// debugger toolbars are registered with this function // debugger toolbars are registered with this function
void setToolbar(const DebuggerLanguage &language, QWidget *widget); void setToolbar(const DebuggerLanguage &language, QWidget *widget);