Commit 492fffb4 authored by Lasse Holmstedt's avatar Lasse Holmstedt

Added automatic language switching option to debugger settings

Additionally, hiding of debugger menu entries was done as most of
them are irrelevant for QML debugging.
parent b14a2082
......@@ -2,11 +2,38 @@
<ui version="4.0">
<class>CommonOptionsPage</class>
<widget class="QWidget" name="CommonOptionsPage">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>338</width>
<height>357</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QGroupBox" name="groupBox_2">
<property name="title">
<string>Language</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="0">
<widget class="QCheckBox" name="checkBoxChangeLanguageAutomatically">
<property name="toolTip">
<string>Changes the debugger language according to the currently opened file.</string>
</property>
<property name="text">
<string>Change debugger language automatically</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="groupBox">
<property name="title">
<string>User interface</string>
<string>C++</string>
</property>
<layout class="QFormLayout" name="formLayout">
<item row="0" column="0" colspan="2">
......
......@@ -442,6 +442,14 @@ DebuggerSettings *DebuggerSettings::instance()
item->setDefaultValue(20);
instance->insertItem(GdbWatchdogTimeout, item);
// Language switching
item = new Utils::SavedAction(instance);
item->setSettingsKey(debugModeGroup, QLatin1String("ChangeLanguageAutomatically"));
item->setText(tr("Change debugger language automatically"));
item->setToolTip(tr("Changes the debugger language according to the currently opened file."));
item->setCheckable(true);
item->setDefaultValue(true);
instance->insertItem(SwitchLanguageAutomatically, item);
return instance;
}
......
......@@ -136,7 +136,10 @@ enum DebuggerActionCode
SelectedPluginBreakpointsPattern,
UsePreciseBreakpoints,
BreakOnThrow,
BreakOnCatch
BreakOnCatch,
// UI/Language switching
SwitchLanguageAutomatically
};
// singleton access
......
......@@ -466,10 +466,6 @@ void DebuggerManager::init()
connect(this, SIGNAL(emitShowOutput(int, QString)),
d->m_outputWindow, SLOT(showOutput(int, QString)), Qt::QueuedConnection);
// UI Switcher
connect(DebuggerUISwitcher::instance(), SIGNAL(languageChanged(QString)),
this, SLOT(languageChanged(QString)));
// Tooltip
//QTreeView *tooltipView = qobject_cast<QTreeView *>(d->m_tooltipWindow);
//tooltipView->setModel(d->m_watchHandler->model(TooltipsWatch));
......@@ -1929,14 +1925,6 @@ void DebuggerManager::fontSettingsChanged(const TextEditor::FontSettings &settin
changeFontSize(d->m_threadsWindow, size);
}
// only update necessary menu items on language change
void DebuggerManager::languageChanged(const QString &debuggerLanguage)
{
const bool debuggerIsCPP = (debuggerLanguage == Constants::LANG_CPP);
d->m_actions.reverseDirectionAction->setEnabled(debuggerIsCPP);
theDebuggerAction(OperateByInstruction)->setEnabled(debuggerIsCPP);
}
//////////////////////////////////////////////////////////////////////
//
// AbstractDebuggerEngine
......
......@@ -280,7 +280,6 @@ public slots: // FIXME
void reloadFullStack();
void operateByInstructionTriggered();
void startFailed();
void languageChanged(const QString &debuggerLanguage);
private:
Internal::ModulesHandler *modulesHandler() const;
......
......@@ -359,6 +359,9 @@ QWidget *CommonOptionsPage::createPage(QWidget *parent)
m_ui.setupUi(w);
m_group.clear();
m_group.insert(theDebuggerAction(SwitchLanguageAutomatically),
m_ui.checkBoxChangeLanguageAutomatically);
m_group.insert(theDebuggerAction(ListSourceFiles),
m_ui.checkBoxListSourceFiles);
m_group.insert(theDebuggerAction(UseAlternatingRowColors),
......@@ -388,7 +391,9 @@ QWidget *CommonOptionsPage::createPage(QWidget *parent)
m_group.insert(theDebuggerAction(BreakOnCatch), 0);
if (m_searchKeywords.isEmpty()) {
QTextStream(&m_searchKeywords) << ' ' << m_ui.checkBoxListSourceFiles->text()
QTextStream(&m_searchKeywords) << ' '
<< m_ui.checkBoxChangeLanguageAutomatically->text()
<< m_ui.checkBoxListSourceFiles->text()
<< ' ' << m_ui.checkBoxUseMessageBoxForSignals->text()
<< ' ' << m_ui.checkBoxUseAlternatingRowColors->text()
<< ' ' << m_ui.checkBoxUseToolTipsInMainEditor->text()
......@@ -796,76 +801,89 @@ bool DebuggerPlugin::initialize(const QStringList &arguments, QString *errorMess
QAction *sep = new QAction(this);
sep->setSeparator(true);
cmd = am->registerAction(sep, _("Debugger.Sep.Step"), globalcontext);
m_uiSwitcher->addMenuAction(cmd);
m_uiSwitcher->addMenuAction(cmd, Constants::LANG_CPP);
cmd = am->registerAction(actions.nextAction,
Constants::NEXT, debuggercontext);
cmd->setDefaultKeySequence(QKeySequence(Constants::NEXT_KEY));
m_uiSwitcher->addMenuAction(cmd);
m_uiSwitcher->addMenuAction(cmd, Constants::LANG_CPP);
cmd = am->registerAction(actions.stepAction,
Constants::STEP, debuggercontext);
cmd->setDefaultKeySequence(QKeySequence(Constants::STEP_KEY));
m_uiSwitcher->addMenuAction(cmd);
m_uiSwitcher->addMenuAction(cmd, Constants::LANG_CPP);
cmd = am->registerAction(actions.stepOutAction,
Constants::STEPOUT, debuggercontext);
cmd->setDefaultKeySequence(QKeySequence(Constants::STEPOUT_KEY));
m_uiSwitcher->addMenuAction(cmd);
m_uiSwitcher->addMenuAction(cmd, Constants::LANG_CPP);
cmd = am->registerAction(actions.runToLineAction1,
Constants::RUN_TO_LINE1, debuggercontext);
cmd->setDefaultKeySequence(QKeySequence(Constants::RUN_TO_LINE_KEY));
m_uiSwitcher->addMenuAction(cmd);
m_uiSwitcher->addMenuAction(cmd, Constants::LANG_CPP);
cmd = am->registerAction(actions.runToFunctionAction,
Constants::RUN_TO_FUNCTION, debuggercontext);
cmd->setDefaultKeySequence(QKeySequence(Constants::RUN_TO_FUNCTION_KEY));
m_uiSwitcher->addMenuAction(cmd);
m_uiSwitcher->addMenuAction(cmd, Constants::LANG_CPP);
cmd = am->registerAction(actions.jumpToLineAction1,
Constants::JUMP_TO_LINE1, debuggercontext);
m_uiSwitcher->addMenuAction(cmd);
m_uiSwitcher->addMenuAction(cmd, Constants::LANG_CPP);
cmd = am->registerAction(actions.returnFromFunctionAction,
Constants::RETURN_FROM_FUNCTION, debuggercontext);
m_uiSwitcher->addMenuAction(cmd);
m_uiSwitcher->addMenuAction(cmd, Constants::LANG_CPP);
cmd = am->registerAction(actions.reverseDirectionAction,
Constants::REVERSE, debuggercontext);
cmd->setDefaultKeySequence(QKeySequence(Constants::REVERSE_KEY));
m_uiSwitcher->addMenuAction(cmd);
m_uiSwitcher->addMenuAction(cmd, Constants::LANG_CPP);
sep = new QAction(this);
sep->setSeparator(true);
cmd = am->registerAction(sep, _("Debugger.Sep.Break"), globalcontext);
m_uiSwitcher->addMenuAction(cmd);
m_uiSwitcher->addMenuAction(cmd, Constants::LANG_CPP);
cmd = am->registerAction(actions.snapshotAction,
Constants::SNAPSHOT, debuggercontext);
cmd->setDefaultKeySequence(QKeySequence(Constants::SNAPSHOT_KEY));
m_uiSwitcher->addMenuAction(cmd);
m_uiSwitcher->addMenuAction(cmd, Constants::LANG_CPP);
cmd = am->registerAction(theDebuggerAction(OperateByInstruction),
Constants::OPERATE_BY_INSTRUCTION, debuggercontext);
m_uiSwitcher->addMenuAction(cmd);
m_uiSwitcher->addMenuAction(cmd, Constants::LANG_CPP);
cmd = am->registerAction(actions.breakAction,
Constants::TOGGLE_BREAK, cppeditorcontext);
cmd->setDefaultKeySequence(QKeySequence(Constants::TOGGLE_BREAK_KEY));
m_uiSwitcher->addMenuAction(cmd);
m_uiSwitcher->addMenuAction(cmd, Constants::LANG_CPP);
//mcppcontext->addAction(cmd);
sep = new QAction(this);
sep->setSeparator(true);
cmd = am->registerAction(sep, _("Debugger.Sep.Watch"), globalcontext);
m_uiSwitcher->addMenuAction(cmd);
m_uiSwitcher->addMenuAction(cmd, Constants::LANG_CPP);
cmd = am->registerAction(actions.watchAction1,
Constants::ADD_TO_WATCH1, cppeditorcontext);
cmd->action()->setEnabled(true);
//cmd->setDefaultKeySequence(QKeySequence(tr("ALT+D,ALT+W")));
m_uiSwitcher->addMenuAction(cmd);
m_uiSwitcher->addMenuAction(cmd, Constants::LANG_CPP);
// Editor context menu
ActionContainer *editorContextMenu =
......@@ -979,6 +997,10 @@ bool DebuggerPlugin::initialize(const QStringList &arguments, QString *errorMess
connect(theDebuggerAction(EnableReverseDebugging), SIGNAL(valueChanged(QVariant)),
this, SLOT(enableReverseDebuggingTriggered(QVariant)));
// UI Switcher
connect(DebuggerUISwitcher::instance(), SIGNAL(languageChanged(QString)),
this, SLOT(languageChanged(QString)));
return true;
}
......@@ -1217,6 +1239,20 @@ void DebuggerPlugin::handleStateChanged(int state)
m_detachAction->setEnabled(detachable);
}
void DebuggerPlugin::languageChanged(const QString &language)
{
if (!m_manager)
return;
const bool debuggerIsCPP = (language == Constants::LANG_CPP);
m_startExternalAction->setVisible(debuggerIsCPP);
m_attachExternalAction->setVisible(debuggerIsCPP);
m_attachCoreAction->setVisible(debuggerIsCPP);
m_startRemoteAction->setVisible(debuggerIsCPP);
m_detachAction->setVisible(debuggerIsCPP);
}
void DebuggerPlugin::writeSettings() const
{
QSettings *s = settings();
......@@ -1242,9 +1278,8 @@ void DebuggerPlugin::onModeChanged(IMode *mode)
if (editorManager->currentEditor()) {
editorManager->currentEditor()->widget()->setFocus();
if (editorManager->currentEditor()->id() == CppEditor::Constants::C_CPPEDITOR) {
if (editorManager->currentEditor()->id() == CppEditor::Constants::C_CPPEDITOR)
m_uiSwitcher->setActiveLanguage(LANG_CPP);
}
}
}
......
......@@ -119,6 +119,7 @@ private slots:
void attachCmdLine();
void enableReverseDebuggingTriggered(const QVariant &value);
void languageChanged(const QString &debuggerLanguage);
private:
void readSettings();
......
......@@ -2,7 +2,12 @@
#include "debuggermainwindow.h"
#include <debugger/debuggerconstants.h>
#include <utils/savedaction.h>
#include <utils/styledbar.h>
#include <debugger/debuggerconstants.h>
#include <debugger/debuggeractions.h>
#include <coreplugin/modemanager.h>
#include <coreplugin/basemode.h>
#include <coreplugin/uniqueidmanager.h>
......@@ -115,11 +120,13 @@ DebuggerUISwitcher::~DebuggerUISwitcher()
void DebuggerUISwitcher::addMenuAction(Core::Command *command, const QString &group)
{
d->m_debugMenu->addAction(command, group);
m_menuCommands.insert(m_languages.indexOf(langName), command);
}
void DebuggerUISwitcher::setActiveLanguage(const QString &langName)
{
changeDebuggerUI(langName);
if (theDebuggerAction(SwitchLanguageAutomatically)->isChecked())
changeDebuggerUI(langName);
}
int DebuggerUISwitcher::activeLanguageId() const
......@@ -263,6 +270,14 @@ void DebuggerUISwitcher::changeDebuggerUI(const QString &langName)
}
}
d->m_languageMenu->menu()->setTitle(tr("Language") + " (" + langName + ")");
QHashIterator<int, Core::Command *> iter(m_menuCommands);
while (iter.hasNext()) {
iter.next();
bool active = (iter.key() == langId);
iter.value()->action()->setVisible(active);
}
emit languageChanged(langName);
}
......
......@@ -6,6 +6,7 @@
#include <QtCore/QObject>
QT_FORWARD_DECLARE_CLASS(QDockWidget);
#include <QtCore/QMultiHash>
namespace Core {
class ActionContainer;
......@@ -16,8 +17,10 @@ namespace Core {
namespace Utils {
class FancyMainWindow;
class SavedAction;
}
namespace Debugger {
struct DebuggerUISwitcherPrivate;
......@@ -42,9 +45,11 @@ public:
void setToolbar(const QString &langName, QWidget *widget);
// menu actions are registered with this function
void addMenuAction(Core::Command *command,
const QString &group = QString());
void addMenuAction(Core::Command *command, const QString &langName,
const QString &group = QString());
// Changes the active language UI to the one specified by langName.
// Does nothing if automatic switching is toggled off from settings.
void setActiveLanguage(const QString &langName);
int activeLanguageId() const;
......@@ -84,6 +89,8 @@ private:
QWidget *createMainWindow(Core::BaseMode *mode);
DebuggerUISwitcherPrivate *d;
QMultiHash< int, Core::Command *> m_menuCommands;
Utils::SavedAction *m_changeLanguageAction;
};
}
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment