summaryrefslogtreecommitdiff
path: root/src/plugins/debugger/cdb/cdboptionspage.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/debugger/cdb/cdboptionspage.cpp')
-rw-r--r--src/plugins/debugger/cdb/cdboptionspage.cpp154
1 files changed, 105 insertions, 49 deletions
diff --git a/src/plugins/debugger/cdb/cdboptionspage.cpp b/src/plugins/debugger/cdb/cdboptionspage.cpp
index d98040f3e8..c795228f21 100644
--- a/src/plugins/debugger/cdb/cdboptionspage.cpp
+++ b/src/plugins/debugger/cdb/cdboptionspage.cpp
@@ -29,6 +29,8 @@
#include "cdboptionspage.h"
#include "commonoptionspage.h"
+#include "debuggeractions.h"
+#include "debuggercore.h"
#include "debuggerinternalconstants.h"
#include "cdbengine.h"
#include "cdbsymbolpathlisteditor.h"
@@ -41,6 +43,8 @@
namespace Debugger {
namespace Internal {
+const char *CdbOptionsPage::crtDbgReport = "CrtDbgReport";
+
struct EventsDescription {
const char *abbreviation;
bool hasParameter;
@@ -157,8 +161,6 @@ QStringList CdbBreakEventWidget::breakEvents() const
CdbOptionsPageWidget::CdbOptionsPageWidget(QWidget *parent)
: QWidget(parent)
, m_breakEventWidget(new CdbBreakEventWidget)
- , m_symbolPathListEditor(new CdbSymbolPathListEditor)
- , m_sourcePathListEditor(new Utils::PathListEditor)
{
m_ui.setupUi(this);
// Squeeze the groupbox layouts vertically to
@@ -175,40 +177,25 @@ CdbOptionsPageWidget::CdbOptionsPageWidget(QWidget *parent)
eventLayout->addWidget(m_breakEventWidget);
m_ui.eventGroupBox->setLayout(eventLayout);
m_ui.breakCrtDbgReportCheckBox
- ->setText(CommonOptionsPage::msgSetBreakpointAtFunction(CdbOptions::crtDbgReport));
+ ->setText(CommonOptionsPage::msgSetBreakpointAtFunction(CdbOptionsPage::crtDbgReport));
const QString hint = tr("This is useful to catch runtime error messages, for example caused by assert().");
m_ui.breakCrtDbgReportCheckBox
- ->setToolTip(CommonOptionsPage::msgSetBreakpointAtFunctionToolTip(CdbOptions::crtDbgReport, hint));
+ ->setToolTip(CommonOptionsPage::msgSetBreakpointAtFunctionToolTip(CdbOptionsPage::crtDbgReport, hint));
- m_ui.symbolPathsGroupBox->layout()->addWidget(m_symbolPathListEditor);
- m_ui.sourcePathsGroupBox->layout()->addWidget(m_sourcePathListEditor);
-}
+ DebuggerCore *dc = debuggerCore();
+ group.insert(dc->action(CdbAdditionalArguments), m_ui.additionalArgumentsLineEdit);
+ group.insert(dc->action(CdbBreakOnCrtDbgReport), m_ui.breakCrtDbgReportCheckBox);
+ group.insert(dc->action(UseCdbConsole), m_ui.consoleCheckBox);
+ group.insert(dc->action(CdbBreakPointCorrection), m_ui.breakpointCorrectionCheckBox);
+ group.insert(dc->action(IgnoreFirstChanceAccessViolation),
+ m_ui.ignoreFirstChanceAccessViolationCheckBox);
-void CdbOptionsPageWidget::setOptions(CdbOptions &o)
-{
- m_ui.additionalArgumentsLineEdit->setText(o.additionalArguments);
- m_symbolPathListEditor->setPathList(o.symbolPaths);
- m_sourcePathListEditor->setPathList(o.sourcePaths);
- m_ui.ignoreFirstChanceAccessViolationCheckBox->setChecked(o.ignoreFirstChanceAccessViolation);
- m_breakEventWidget->setBreakEvents(o.breakEvents);
- m_ui.consoleCheckBox->setChecked(o.cdbConsole);
- m_ui.breakpointCorrectionCheckBox->setChecked(o.breakpointCorrection);
- m_ui.breakCrtDbgReportCheckBox->setChecked(o.breakFunctions.contains(QLatin1String(CdbOptions::crtDbgReport)));
+ m_breakEventWidget->setBreakEvents(dc->stringListSetting(CdbBreakEvents));
}
-CdbOptions CdbOptionsPageWidget::options() const
+QStringList CdbOptionsPageWidget::breakEvents() const
{
- CdbOptions rc;
- rc.additionalArguments = m_ui.additionalArgumentsLineEdit->text().trimmed();
- rc.symbolPaths = m_symbolPathListEditor->pathList();
- rc.sourcePaths = m_sourcePathListEditor->pathList();
- rc.ignoreFirstChanceAccessViolation = m_ui.ignoreFirstChanceAccessViolationCheckBox->isChecked();
- rc.breakEvents = m_breakEventWidget->breakEvents();
- rc.cdbConsole = m_ui.consoleCheckBox->isChecked();
- rc.breakpointCorrection = m_ui.breakpointCorrectionCheckBox->isChecked();
- if (m_ui.breakCrtDbgReportCheckBox->isChecked())
- rc.breakFunctions.push_back(QLatin1String(CdbOptions::crtDbgReport));
- return rc;
+ return m_breakEventWidget->breakEvents();
}
static QString stripColon(QString s)
@@ -222,24 +209,15 @@ static QString stripColon(QString s)
QString CdbOptionsPageWidget::searchKeywords() const
{
QString rc;
- QTextStream(&rc)
- << stripColon(m_ui.additionalArgumentsLabel->text()) << ' '
- << m_ui.symbolPathsGroupBox->title() << ' '
- << m_ui.sourcePathsGroupBox->title();
+ QTextStream(&rc) << stripColon(m_ui.additionalArgumentsLabel->text());
rc.remove(QLatin1Char('&'));
return rc;
}
// ---------- CdbOptionsPage
-CdbOptionsPage *CdbOptionsPage::m_instance = 0;
-
-CdbOptionsPage::CdbOptionsPage() :
- m_options(new CdbOptions)
+CdbOptionsPage::CdbOptionsPage()
{
- CdbOptionsPage::m_instance = this;
- m_options->fromSettings(Core::ICore::settings());
-
setId("F.Cda");
setDisplayName(tr("CDB"));
setCategory(Debugger::Constants::DEBUGGER_SETTINGS_CATEGORY);
@@ -250,13 +228,11 @@ CdbOptionsPage::CdbOptionsPage() :
CdbOptionsPage::~CdbOptionsPage()
{
- CdbOptionsPage::m_instance = 0;
}
QWidget *CdbOptionsPage::createPage(QWidget *parent)
{
m_widget = new CdbOptionsPageWidget(parent);
- m_widget->setOptions(*m_options);
if (m_searchKeywords.isEmpty())
m_searchKeywords = m_widget->searchKeywords();
return m_widget;
@@ -266,15 +242,13 @@ void CdbOptionsPage::apply()
{
if (!m_widget)
return;
- const CdbOptions newOptions = m_widget->options();
- if (*m_options != newOptions) {
- *m_options = newOptions;
- m_options->toSettings(Core::ICore::settings());
- }
+ m_widget->group.apply(Core::ICore::settings());
+ debuggerCore()->action(CdbBreakEvents)->setValue(m_widget->breakEvents());
}
void CdbOptionsPage::finish()
{
+ m_widget->group.finish();
}
bool CdbOptionsPage::matches(const QString &s) const
@@ -282,9 +256,91 @@ bool CdbOptionsPage::matches(const QString &s) const
return m_searchKeywords.contains(s, Qt::CaseInsensitive);
}
-CdbOptionsPage *CdbOptionsPage::instance()
+// ---------- CdbPathsPage
+
+class CdbPathsPageWidget : public QWidget
+{
+public:
+ Utils::SavedActionSet group;
+
+// CdbPaths m_paths;
+ QString m_searchKeywords;
+
+ CdbSymbolPathListEditor *m_symbolPathListEditor;
+ Utils::PathListEditor *m_sourcePathListEditor;
+
+ CdbPathsPageWidget(QWidget *parent = 0);
+};
+
+CdbPathsPageWidget::CdbPathsPageWidget(QWidget *parent) :
+ QWidget(parent)
+{
+ QVBoxLayout *layout = new QVBoxLayout(this);
+
+ QString title = tr("Symbol Paths");
+ m_searchKeywords.append(title);
+ QGroupBox* gbSymbolPath = new QGroupBox(this);
+ gbSymbolPath->setTitle(title);
+ QVBoxLayout *gbSymbolPathLayout = new QVBoxLayout(gbSymbolPath);
+ m_symbolPathListEditor = new CdbSymbolPathListEditor(gbSymbolPath);
+ gbSymbolPathLayout->addWidget(m_symbolPathListEditor);
+
+ title = tr("Source Paths");
+ m_searchKeywords.append(title);
+ QGroupBox* gbSourcePath = new QGroupBox(this);
+ gbSourcePath->setTitle(title);
+ QVBoxLayout *gbSourcePathLayout = new QVBoxLayout(gbSourcePath);
+ m_sourcePathListEditor = new Utils::PathListEditor(gbSourcePath);
+ gbSourcePathLayout->addWidget(m_sourcePathListEditor);
+
+ layout->addWidget(gbSymbolPath);
+ layout->addWidget(gbSourcePath);
+
+ DebuggerCore *dc = debuggerCore();
+ group.insert(dc->action(CdbSymbolPaths), m_symbolPathListEditor);
+ group.insert(dc->action(CdbSourcePaths), m_sourcePathListEditor);
+}
+
+CdbPathsPage::CdbPathsPage()
+ : m_widget(0)
+{
+ setId("F.Cdb");
+ setDisplayName(tr("CDB Paths"));
+ setCategory(Debugger::Constants::DEBUGGER_SETTINGS_CATEGORY);
+ setDisplayCategory(QCoreApplication::translate("Debugger",
+ Constants::DEBUGGER_SETTINGS_TR_CATEGORY));
+ setCategoryIcon(QLatin1String(Constants::DEBUGGER_COMMON_SETTINGS_CATEGORY_ICON));
+}
+
+CdbPathsPage::~CdbPathsPage()
+{
+}
+
+QWidget *CdbPathsPage::createPage(QWidget *parent)
+{
+ if (!m_widget)
+ m_widget = new CdbPathsPageWidget(parent);
+ else
+ m_widget->setParent(parent);
+ return m_widget;
+}
+
+void CdbPathsPage::apply()
+{
+ if (m_widget)
+ m_widget->group.apply(Core::ICore::settings());
+}
+
+void CdbPathsPage::finish()
+{
+ if (m_widget)
+ m_widget->group.finish();
+}
+
+bool CdbPathsPage::matches(const QString &searchKeyWord) const
{
- return m_instance;
+ return m_widget &&
+ m_widget->m_searchKeywords.contains(searchKeyWord, Qt::CaseInsensitive);
}
} // namespace Internal