diff options
Diffstat (limited to 'src/plugins/debugger/debuggerplugin.cpp')
-rw-r--r-- | src/plugins/debugger/debuggerplugin.cpp | 210 |
1 files changed, 169 insertions, 41 deletions
diff --git a/src/plugins/debugger/debuggerplugin.cpp b/src/plugins/debugger/debuggerplugin.cpp index 80acb59b92..bf8edf404e 100644 --- a/src/plugins/debugger/debuggerplugin.cpp +++ b/src/plugins/debugger/debuggerplugin.cpp @@ -36,12 +36,14 @@ #include "debuggerconstants.h" #include "debuggermanager.h" #include "debuggerrunner.h" -#include "gdboptionpage.h" #include "gdbengine.h" +#include "ui_gdboptionpage.h" + #include <coreplugin/actionmanager/actionmanager.h> #include <coreplugin/basemode.h> #include <coreplugin/coreconstants.h> +#include <coreplugin/dialogs/ioptionspage.h> #include <coreplugin/editormanager/editormanager.h> #include <coreplugin/findplaceholder.h> #include <coreplugin/icore.h> @@ -53,6 +55,8 @@ #include <coreplugin/rightpane.h> #include <coreplugin/uniqueidmanager.h> +#include <extensionsystem/pluginmanager.h> + #include <cplusplus/ExpressionUnderCursor.h> #include <cppeditor/cppeditorconstants.h> @@ -73,6 +77,7 @@ #include <QtCore/QSettings> #include <QtCore/QtPlugin> +#include <QtGui/QLineEdit> #include <QtGui/QDockWidget> #include <QtGui/QMainWindow> #include <QtGui/QPlainTextEdit> @@ -80,6 +85,8 @@ #include <QtGui/QTextCursor> +namespace ExtensionSystem { class PluginManager; } + using namespace Core; using namespace Debugger::Constants; using namespace Debugger::Internal; @@ -143,6 +150,12 @@ const char * const ADD_TO_WATCH_KEY = "Ctrl+Alt+Q"; } // namespace Debugger +/////////////////////////////////////////////////////////////////////// +// +// DebugMode +// +/////////////////////////////////////////////////////////////////////// + namespace Debugger { namespace Internal { @@ -159,9 +172,6 @@ public: void shutdown() {} }; -} // namespace Internal -} // namespace Debugger - DebugMode::DebugMode(QObject *parent) : BaseMode(parent) { @@ -177,6 +187,9 @@ DebugMode::~DebugMode() EditorManager::instance()->setParent(0); } +} // namespace Internal +} // namespace Debugger + /////////////////////////////////////////////////////////////////////// // @@ -184,8 +197,10 @@ DebugMode::~DebugMode() // /////////////////////////////////////////////////////////////////////// -class Debugger::Internal::LocationMark - : public TextEditor::BaseTextMark +namespace Debugger { +namespace Internal { + +class LocationMark : public TextEditor::BaseTextMark { Q_OBJECT @@ -212,6 +227,112 @@ QIcon LocationMark::icon() const return icon; } +} // namespace Internal +} // namespace Debugger + + +/////////////////////////////////////////////////////////////////////// +// +// GdbOptionPage +// +/////////////////////////////////////////////////////////////////////// + +namespace Debugger { +namespace Internal { + +class GdbOptionPage : public Core::IOptionsPage +{ + Q_OBJECT + +public: + GdbOptionPage(DebuggerPlugin *plugin) : m_plugin(plugin) {} + + // IOptionsPage + QString name() const { return tr("Gdb"); } + QString category() const { return "Debugger"; } + QString trCategory() const { return tr("Debugger"); } + + QWidget *createPage(QWidget *parent); + void apply(); + void finish() {} // automatically calls "apply" + +private: + Ui::GdbOptionPage m_ui; + + DebuggerSettings m_settings; + DebuggerPlugin *m_plugin; +}; + +QWidget *GdbOptionPage::createPage(QWidget *parent) +{ + QWidget *w = new QWidget(parent); + m_settings = *m_plugin->m_manager->settings(); + m_ui.setupUi(w); + m_ui.gdbLocationChooser->setExpectedKind(Core::Utils::PathChooser::Command); + m_ui.gdbLocationChooser->setPromptDialogTitle(tr("Choose Gdb Location")); + m_ui.gdbLocationChooser->setPath(m_settings.m_gdbCmd); + m_ui.scriptFileChooser->setExpectedKind(Core::Utils::PathChooser::File); + m_ui.scriptFileChooser->setPromptDialogTitle(tr("Choose Location of Startup Script File")); + m_ui.scriptFileChooser->setPath(m_settings.m_scriptFile); + m_ui.environmentEdit->setText(m_settings.m_gdbEnv); + m_ui.autoStartBox->setChecked(m_settings.m_autoRun); + m_ui.autoQuitBox->setChecked(m_settings.m_autoQuit); + + m_ui.checkBoxSkipKnownFrames->setChecked(m_settings.m_skipKnownFrames); + m_ui.checkBoxDebugDumpers->setChecked(m_settings.m_debugDumpers); + m_ui.checkBoxUseCustomDumpers->setChecked(m_settings.m_useCustomDumpers); + m_ui.checkBoxFastStart->setChecked(m_settings.m_useFastStart); + m_ui.checkBoxUseToolTips->setChecked(m_settings.m_useToolTips); + +#ifndef QT_DEBUG +#if 0 + cmd = am->registerAction(m_manager->m_dumpLogAction, + Constants::DUMP_LOG, globalcontext); + //cmd->setDefaultKeySequence(QKeySequence(tr("Ctrl+D,Ctrl+L"))); + cmd->setDefaultKeySequence(QKeySequence(tr("Ctrl+Shift+F11"))); + mdebug->addAction(cmd); + + cmd = am->registerAction(m_manager->m_debugDumpersAction, + Constants::DEBUG_DUMPERS, debuggercontext); + mdebug->addAction(cmd); +#endif +#endif + + // FIXME + m_ui.autoStartBox->hide(); + m_ui.autoQuitBox->hide(); + m_ui.environmentEdit->hide(); + m_ui.labelEnvironment->hide(); + + m_ui.checkBoxFastStart->setChecked(false); + m_ui.checkBoxFastStart->hide(); + + //m_dumpLogAction = new QAction(this); + //m_dumpLogAction->setText(tr("Dump Log File for Debugging Purposes")); + return w; +} + +void GdbOptionPage::apply() +{ + m_settings.m_gdbCmd = m_ui.gdbLocationChooser->path(); + m_settings.m_gdbEnv = m_ui.environmentEdit->text(); + m_settings.m_autoRun = m_ui.autoStartBox->isChecked(); + m_settings.m_autoQuit = m_ui.autoQuitBox->isChecked(); + m_settings.m_scriptFile = m_ui.scriptFileChooser->path(); + + m_settings.m_skipKnownFrames = m_ui.checkBoxSkipKnownFrames->isChecked(); + m_settings.m_debugDumpers = m_ui.checkBoxDebugDumpers->isChecked(); + m_settings.m_useCustomDumpers = m_ui.checkBoxUseCustomDumpers->isChecked(); + m_settings.m_useFastStart = m_ui.checkBoxFastStart->isChecked(); + m_settings.m_useToolTips = m_ui.checkBoxUseToolTips->isChecked(); + + *m_plugin->m_manager->settings() = m_settings; + m_plugin->writeSettings(); +} + +} // namespace Internal +} // namespace Debugger + /////////////////////////////////////////////////////////////////////// // @@ -409,34 +530,6 @@ bool DebuggerPlugin::initialize(const QStringList &arguments, QString *error_mes cmd = am->registerAction(sep, QLatin1String("Debugger.Sep2"), globalcontext); mdebug->addAction(cmd); - cmd = am->registerAction(m_manager->m_skipKnownFramesAction, - Constants::SKIP_KNOWN_FRAMES, globalcontext); - mdebug->addAction(cmd); - - cmd = am->registerAction(m_manager->m_useCustomDumpersAction, - Constants::USE_CUSTOM_DUMPERS, globalcontext); - mdebug->addAction(cmd); - - cmd = am->registerAction(m_manager->m_useFastStartAction, - Constants::USE_FAST_START, globalcontext); - mdebug->addAction(cmd); - - cmd = am->registerAction(m_manager->m_useToolTipsAction, - Constants::USE_TOOL_TIPS, globalcontext); - mdebug->addAction(cmd); - -#ifdef QT_DEBUG - cmd = am->registerAction(m_manager->m_dumpLogAction, - Constants::DUMP_LOG, globalcontext); - //cmd->setDefaultKeySequence(QKeySequence(tr("Ctrl+D,Ctrl+L"))); - cmd->setDefaultKeySequence(QKeySequence(tr("Ctrl+Shift+F11"))); - mdebug->addAction(cmd); - - cmd = am->registerAction(m_manager->m_debugDumpersAction, - Constants::DEBUG_DUMPERS, debuggercontext); - mdebug->addAction(cmd); -#endif - sep = new QAction(this); sep->setSeparator(true); cmd = am->registerAction(sep, QLatin1String("Debugger.Sep4"), globalcontext); @@ -479,7 +572,7 @@ bool DebuggerPlugin::initialize(const QStringList &arguments, QString *error_mes m_generalOptionPage = 0; // FIXME: - m_generalOptionPage = new GdbOptionPage(&theGdbSettings()); + m_generalOptionPage = new GdbOptionPage(this); addObject(m_generalOptionPage); m_locationMark = 0; @@ -711,7 +804,7 @@ void DebuggerPlugin::requestMark(TextEditor::ITextEditor *editor, int lineNumber void DebuggerPlugin::showToolTip(TextEditor::ITextEditor *editor, const QPoint &point, int pos) { - if (!m_manager->useToolTipsAction()->isChecked()) + if (!m_manager->settings()->m_useToolTips) return; QPlainTextEdit *plaintext = qobject_cast<QPlainTextEdit*>(editor->widget()); @@ -799,22 +892,57 @@ void DebuggerPlugin::changeStatus(int status) void DebuggerPlugin::writeSettings() const { - QSettings *s = settings(); QTC_ASSERT(m_manager, return); QTC_ASSERT(m_manager->mainWindow(), return); + + QSettings *s = settings(); + DebuggerSettings *m = m_manager->settings(); s->beginGroup(QLatin1String("DebugMode")); - s->setValue(QLatin1String("State"), m_manager->mainWindow()->saveState()); - s->setValue(QLatin1String("Locked"), m_toggleLockedAction->isChecked()); + s->setValue("State", m_manager->mainWindow()->saveState()); + s->setValue("Locked", m_toggleLockedAction->isChecked()); + s->setValue("Location", m->m_gdbCmd); + s->setValue("Environment", m->m_gdbEnv); + s->setValue("AutoRun", m->m_autoRun); + s->setValue("AutoQuit", m->m_autoQuit); + + s->setValue("UseFastStart", m->m_useFastStart); + s->setValue("UseToolTips", m->m_useToolTips); + s->setValue("UseCustomDumpers", m->m_useCustomDumpers); + s->setValue("SkipKnowFrames", m->m_skipKnownFrames); + s->setValue("DebugDumpers", m->m_debugDumpers); s->endGroup(); } void DebuggerPlugin::readSettings() { QSettings *s = settings(); + DebuggerSettings *m = &m_manager->m_settings; + + QString defaultCommand("gdb"); +#if defined(Q_OS_WIN32) + defaultCommand.append(".exe"); +#endif + Core::ICore *coreIFace = m_pm->getObject<Core::ICore>(); + QString defaultScript = coreIFace->resourcePath() + + QLatin1String("/gdb/qt4macros"); + s->beginGroup(QLatin1String("DebugMode")); - m_manager->mainWindow()->restoreState(s->value(QLatin1String("State"), QByteArray()).toByteArray()); - m_toggleLockedAction->setChecked(s->value(QLatin1String("Locked"), true).toBool()); + QByteArray ba = s->value("State", QByteArray()).toByteArray(); + m_toggleLockedAction->setChecked(s->value("Locked", true).toBool()); + m->m_gdbCmd = s->value("Location", defaultCommand).toString(); + m->m_scriptFile= s->value("ScriptFile", defaultScript).toString(); + m->m_gdbEnv = s->value("Environment", "").toString(); + m->m_autoRun = s->value("AutoRun", true).toBool(); + m->m_autoQuit = s->value("AutoQuit", true).toBool(); + + m->m_skipKnownFrames = s->value("SkipKnownFrames", false).toBool(); + m->m_debugDumpers = s->value("DebugDumpers", false).toBool(); + m->m_useCustomDumpers = s->value("UseCustomDupers", false).toBool(); + m->m_useFastStart = s->value("UseFastStart", false).toBool(); + m->m_useToolTips = s->value("UseToolTips", false).toBool(); s->endGroup(); + + m_manager->mainWindow()->restoreState(ba); } void DebuggerPlugin::focusCurrentEditor(IMode *mode) |