From e3b62d0aa51dc5324ba32cb58138b0017cb97566 Mon Sep 17 00:00:00 2001 From: hjk Date: Thu, 15 Feb 2024 17:10:32 +0100 Subject: [PATCH] Debugger: Make DebuggerRunConfig sub-aspects direct members Change-Id: I53979892598164b26c8fc1977b1366b0a56fa152 Reviewed-by: Jarek Kobus --- src/libs/utils/aspects.cpp | 17 ++- src/libs/utils/aspects.h | 8 +- .../debuggerrunconfigurationaspect.cpp | 123 ++++++++---------- .../debugger/debuggerrunconfigurationaspect.h | 10 +- 4 files changed, 82 insertions(+), 76 deletions(-) diff --git a/src/libs/utils/aspects.cpp b/src/libs/utils/aspects.cpp index 2098c68d1c0..b72fc2060e3 100644 --- a/src/libs/utils/aspects.cpp +++ b/src/libs/utils/aspects.cpp @@ -2518,9 +2518,20 @@ TriStateAspect::TriStateAspect(AspectContainer *container, { setDisplayStyle(DisplayStyle::ComboBox); setDefaultValue(TriState::Default); - addOption(onString.isEmpty() ? Tr::tr("Enable") : onString); - addOption(offString.isEmpty() ? Tr::tr("Disable") : offString); - addOption(defaultString.isEmpty() ? Tr::tr("Leave at Default") : defaultString); + SelectionAspect::addOption({}); + SelectionAspect::addOption({}); + SelectionAspect::addOption({}); + setOptionTexts(onString, offString, defaultString); +} + +void TriStateAspect::setOptionTexts(const QString &onString, + const QString &offString, + const QString &defaultString) +{ + QTC_ASSERT(d->m_options.size() == 3, return); + d->m_options[0].displayName = onString.isEmpty() ? Tr::tr("Enable") : onString; + d->m_options[1].displayName = offString.isEmpty() ? Tr::tr("Disable") : offString; + d->m_options[2].displayName = defaultString.isEmpty() ? Tr::tr("Leave at Default") : defaultString; } TriState TriStateAspect::value() const diff --git a/src/libs/utils/aspects.h b/src/libs/utils/aspects.h index d4d1f704e02..cb885cc495a 100644 --- a/src/libs/utils/aspects.h +++ b/src/libs/utils/aspects.h @@ -554,7 +554,6 @@ protected: void bufferToGui() override; bool guiToBuffer() override; -private: std::unique_ptr d; }; @@ -812,6 +811,13 @@ public: TriState defaultValue() const; void setDefaultValue(TriState setting); + + void setOptionTexts(const QString &onString, + const QString &offString, + const QString &defaultString); +private: + void addOption(const QString &displayName, const QString &toolTip = {}) = delete; + void addOption(const Option &option) = delete; }; class QTCREATOR_UTILS_EXPORT StringListAspect : public TypedAspect diff --git a/src/plugins/debugger/debuggerrunconfigurationaspect.cpp b/src/plugins/debugger/debuggerrunconfigurationaspect.cpp index 814ca0e81b5..1b44afd821b 100644 --- a/src/plugins/debugger/debuggerrunconfigurationaspect.cpp +++ b/src/plugins/debugger/debuggerrunconfigurationaspect.cpp @@ -26,10 +26,8 @@ #include #include -#include #include #include -#include using namespace ProjectExplorer; using namespace Utils; @@ -79,26 +77,26 @@ DebuggerRunConfigurationAspect::DebuggerRunConfigurationAspect(Target *target) const auto setSummaryText = [this, details] { QStringList items; - if (m_cppAspect->value() == TriState::Enabled) + if (m_cppAspect() == TriState::Enabled) items.append(Tr::tr("Enable C++ debugger.")); - else if (m_cppAspect->value() == TriState::Default) + else if (m_cppAspect() == TriState::Default) items.append(Tr::tr("Try to determine need for C++ debugger.")); - if (m_qmlAspect->value() == TriState::Enabled) + if (m_qmlAspect() == TriState::Enabled) items.append(Tr::tr("Enable QML debugger.")); - else if (m_qmlAspect->value() == TriState::Default) + else if (m_qmlAspect() == TriState::Default) items.append(Tr::tr("Try to determine need for QML debugger.")); - items.append(m_overrideStartupAspect->value().isEmpty() + items.append(m_overrideStartupAspect().isEmpty() ? Tr::tr("Without additional startup commands.") : Tr::tr("With additional startup commands.")); details->setSummaryText(items.join(" ")); }; setSummaryText(); - connect(m_cppAspect, &BaseAspect::changed, this, setSummaryText); - connect(m_qmlAspect, &BaseAspect::changed, this, setSummaryText); - connect(m_overrideStartupAspect, &BaseAspect::changed, this, setSummaryText); + connect(&m_cppAspect, &BaseAspect::changed, this, setSummaryText); + connect(&m_qmlAspect, &BaseAspect::changed, this, setSummaryText); + connect(&m_overrideStartupAspect, &BaseAspect::changed, this, setSummaryText); return details; }); @@ -109,63 +107,54 @@ DebuggerRunConfigurationAspect::DebuggerRunConfigurationAspect(Target *target) addDataExtractor(this, &DebuggerRunConfigurationAspect::useMultiProcess, &Data::useMultiProcess); addDataExtractor(this, &DebuggerRunConfigurationAspect::overrideStartup, &Data::overrideStartup); - m_cppAspect = new TriStateAspect(nullptr, Tr::tr("Enabled"), Tr::tr("Disabled"), Tr::tr("Automatic")); - m_cppAspect->setLabelText(Tr::tr("C++ debugger:")); - m_cppAspect->setSettingsKey("RunConfiguration.UseCppDebugger"); + m_cppAspect.setSettingsKey("RunConfiguration.UseCppDebugger"); + m_cppAspect.setLabelText(Tr::tr("C++ debugger:")); + m_cppAspect.setOptionTexts(Tr::tr("Enabled"), Tr::tr("Disabled"), Tr::tr("Automatic")); - m_qmlAspect = new TriStateAspect(nullptr, Tr::tr("Enabled"), Tr::tr("Disabled"), Tr::tr("Automatic")); - m_qmlAspect->setLabelText(Tr::tr("QML debugger:")); - m_qmlAspect->setSettingsKey("RunConfiguration.UseQmlDebugger"); + m_qmlAspect.setSettingsKey("RunConfiguration.UseQmlDebugger"); + m_qmlAspect.setLabelText(Tr::tr("QML debugger:")); + m_qmlAspect.setOptionTexts(Tr::tr("Enabled"), Tr::tr("Disabled"), Tr::tr("Automatic")); - m_pythonAspect = new TriStateAspect(nullptr, Tr::tr("Enabled"), Tr::tr("Disabled"), Tr::tr("Automatic")); - m_pythonAspect->setLabelText(Tr::tr("Python debugger:")); - m_pythonAspect->setSettingsKey("RunConfiguration.UsePythonDebugger"); + m_pythonAspect.setSettingsKey("RunConfiguration.UsePythonDebugger"); + m_pythonAspect.setLabelText(Tr::tr("Python debugger:")); + m_pythonAspect.setOptionTexts(Tr::tr("Enabled"), Tr::tr("Disabled"), Tr::tr("Automatic")); // Make sure at least one of the debuggers is set to be active. - connect(m_cppAspect, &TriStateAspect::changed, this, [this]{ - if (Utils::allOf({m_cppAspect, m_qmlAspect, m_pythonAspect}, &isDisabled)) - m_qmlAspect->setValue(TriState::Default); + connect(&m_cppAspect, &TriStateAspect::changed, this, [this] { + if (Utils::allOf({&m_cppAspect, &m_qmlAspect, &m_pythonAspect}, &isDisabled)) + m_qmlAspect.setValue(TriState::Default); }); - connect(m_qmlAspect, &TriStateAspect::changed, this, [this]{ - if (Utils::allOf({m_cppAspect, m_qmlAspect, m_pythonAspect}, &isDisabled)) - m_cppAspect->setValue(TriState::Default); + connect(&m_qmlAspect, &TriStateAspect::changed, this, [this] { + if (Utils::allOf({&m_cppAspect, &m_qmlAspect, &m_pythonAspect}, &isDisabled)) + m_cppAspect.setValue(TriState::Default); }); - connect(m_qmlAspect, &TriStateAspect::changed, this, [this] { - if (Utils::allOf({m_cppAspect, m_qmlAspect, m_pythonAspect}, &isDisabled)) - m_cppAspect->setValue(TriState::Default); + connect(&m_qmlAspect, &TriStateAspect::changed, this, [this] { + if (Utils::allOf({&m_cppAspect, &m_qmlAspect, &m_pythonAspect}, &isDisabled)) + m_cppAspect.setValue(TriState::Default); }); - m_multiProcessAspect = new BoolAspect; - m_multiProcessAspect->setSettingsKey("RunConfiguration.UseMultiProcess"); - m_multiProcessAspect->setLabel(Tr::tr("Enable Debugging of Subprocesses"), + m_multiProcessAspect.setSettingsKey("RunConfiguration.UseMultiProcess"); + m_multiProcessAspect.setLabel(Tr::tr("Enable Debugging of Subprocesses"), BoolAspect::LabelPlacement::AtCheckBox); - m_overrideStartupAspect = new StringAspect; - m_overrideStartupAspect->setSettingsKey("RunConfiguration.OverrideDebuggerStartup"); - m_overrideStartupAspect->setDisplayStyle(StringAspect::TextEditDisplay); - m_overrideStartupAspect->setLabelText(Tr::tr("Additional startup commands:")); + m_overrideStartupAspect.setSettingsKey("RunConfiguration.OverrideDebuggerStartup"); + m_overrideStartupAspect.setDisplayStyle(StringAspect::TextEditDisplay); + m_overrideStartupAspect.setLabelText(Tr::tr("Additional startup commands:")); } -DebuggerRunConfigurationAspect::~DebuggerRunConfigurationAspect() -{ - delete m_cppAspect; - delete m_qmlAspect; - delete m_pythonAspect; - delete m_multiProcessAspect; - delete m_overrideStartupAspect; -} +DebuggerRunConfigurationAspect::~DebuggerRunConfigurationAspect() = default; void DebuggerRunConfigurationAspect::setUseQmlDebugger(bool value) { - m_qmlAspect->setValue(value ? TriState::Enabled : TriState::Disabled); + m_qmlAspect.setValue(value ? TriState::Enabled : TriState::Disabled); } bool DebuggerRunConfigurationAspect::useCppDebugger() const { - if (m_cppAspect->value() == TriState::Default) + if (m_cppAspect() == TriState::Default) return m_target->project()->projectLanguages().contains( ProjectExplorer::Constants::CXX_LANGUAGE_ID); - return m_cppAspect->value() == TriState::Enabled; + return m_cppAspect() == TriState::Enabled; } static bool projectHasQmlDefines(ProjectExplorer::Project *project) @@ -185,7 +174,7 @@ static bool projectHasQmlDefines(ProjectExplorer::Project *project) bool DebuggerRunConfigurationAspect::useQmlDebugger() const { - if (m_qmlAspect->value() == TriState::Default) { + if (m_qmlAspect() == TriState::Default) { const Core::Context languages = m_target->project()->projectLanguages(); if (!languages.contains(ProjectExplorer::Constants::QMLJS_LANGUAGE_ID)) return projectHasQmlDefines(m_target->project()); @@ -199,31 +188,31 @@ bool DebuggerRunConfigurationAspect::useQmlDebugger() const return !languages.contains(ProjectExplorer::Constants::CXX_LANGUAGE_ID); } - return m_qmlAspect->value() == TriState::Enabled; + return m_qmlAspect() == TriState::Enabled; } bool DebuggerRunConfigurationAspect::usePythonDebugger() const { - if (m_pythonAspect->value() == TriState::Default) { + if (m_pythonAspect() == TriState::Default) { const Core::Context languages = m_target->project()->projectLanguages(); return languages.contains(ProjectExplorer::Constants::PYTHON_LANGUAGE_ID); } - return m_pythonAspect->value() == TriState::Enabled; + return m_pythonAspect() == TriState::Enabled; } bool DebuggerRunConfigurationAspect::useMultiProcess() const { - return m_multiProcessAspect->value(); + return m_multiProcessAspect(); } void DebuggerRunConfigurationAspect::setUseMultiProcess(bool value) { - m_multiProcessAspect->setValue(value); + m_multiProcessAspect.setValue(value); } QString DebuggerRunConfigurationAspect::overrideStartup() const { - return m_overrideStartupAspect->value(); + return m_overrideStartupAspect(); } int DebuggerRunConfigurationAspect::portsUsedByDebugger() const @@ -238,31 +227,31 @@ int DebuggerRunConfigurationAspect::portsUsedByDebugger() const void DebuggerRunConfigurationAspect::toMap(Store &map) const { - m_cppAspect->toMap(map); - m_qmlAspect->toMap(map); - m_pythonAspect->toMap(map); - m_multiProcessAspect->toMap(map); - m_overrideStartupAspect->toMap(map); + m_cppAspect.toMap(map); + m_qmlAspect.toMap(map); + m_pythonAspect.toMap(map); + m_multiProcessAspect.toMap(map); + m_overrideStartupAspect.toMap(map); // compatibility to old settings - map.insert("RunConfiguration.UseCppDebuggerAuto", m_cppAspect->value() == TriState::Default); - map.insert("RunConfiguration.UseQmlDebuggerAuto", m_qmlAspect->value() == TriState::Default); + map.insert("RunConfiguration.UseCppDebuggerAuto", m_cppAspect() == TriState::Default); + map.insert("RunConfiguration.UseQmlDebuggerAuto", m_qmlAspect() == TriState::Default); } void DebuggerRunConfigurationAspect::fromMap(const Store &map) { - m_cppAspect->fromMap(map); - m_qmlAspect->fromMap(map); - m_pythonAspect->fromMap(map); + m_cppAspect.fromMap(map); + m_qmlAspect.fromMap(map); + m_pythonAspect.fromMap(map); // respect old project settings if (map.value("RunConfiguration.UseCppDebuggerAuto", false).toBool()) - m_cppAspect->setValue(TriState::Default); + m_cppAspect.setValue(TriState::Default); if (map.value("RunConfiguration.UseQmlDebuggerAuto", false).toBool()) - m_qmlAspect->setValue(TriState::Default); + m_qmlAspect.setValue(TriState::Default); - m_multiProcessAspect->fromMap(map); - m_overrideStartupAspect->fromMap(map); + m_multiProcessAspect.fromMap(map); + m_overrideStartupAspect.fromMap(map); } } // namespace Debugger diff --git a/src/plugins/debugger/debuggerrunconfigurationaspect.h b/src/plugins/debugger/debuggerrunconfigurationaspect.h index 16bcce9f5de..5dcbbce7a5f 100644 --- a/src/plugins/debugger/debuggerrunconfigurationaspect.h +++ b/src/plugins/debugger/debuggerrunconfigurationaspect.h @@ -40,11 +40,11 @@ public: }; private: - Utils::TriStateAspect *m_cppAspect; - Utils::TriStateAspect *m_qmlAspect; - Utils::TriStateAspect *m_pythonAspect; - Utils::BoolAspect *m_multiProcessAspect; - Utils::StringAspect *m_overrideStartupAspect; + Utils::TriStateAspect m_cppAspect; + Utils::TriStateAspect m_qmlAspect; + Utils::TriStateAspect m_pythonAspect; + Utils::BoolAspect m_multiProcessAspect; + Utils::StringAspect m_overrideStartupAspect; ProjectExplorer::Target *m_target; };