forked from qt-creator/qt-creator
Debugger: Make DebuggerRunConfig sub-aspects direct members
Change-Id: I53979892598164b26c8fc1977b1366b0a56fa152 Reviewed-by: Jarek Kobus <jaroslaw.kobus@qt.io>
This commit is contained in:
@@ -2518,9 +2518,20 @@ TriStateAspect::TriStateAspect(AspectContainer *container,
|
|||||||
{
|
{
|
||||||
setDisplayStyle(DisplayStyle::ComboBox);
|
setDisplayStyle(DisplayStyle::ComboBox);
|
||||||
setDefaultValue(TriState::Default);
|
setDefaultValue(TriState::Default);
|
||||||
addOption(onString.isEmpty() ? Tr::tr("Enable") : onString);
|
SelectionAspect::addOption({});
|
||||||
addOption(offString.isEmpty() ? Tr::tr("Disable") : offString);
|
SelectionAspect::addOption({});
|
||||||
addOption(defaultString.isEmpty() ? Tr::tr("Leave at Default") : defaultString);
|
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
|
TriState TriStateAspect::value() const
|
||||||
|
|||||||
@@ -554,7 +554,6 @@ protected:
|
|||||||
void bufferToGui() override;
|
void bufferToGui() override;
|
||||||
bool guiToBuffer() override;
|
bool guiToBuffer() override;
|
||||||
|
|
||||||
private:
|
|
||||||
std::unique_ptr<Internal::SelectionAspectPrivate> d;
|
std::unique_ptr<Internal::SelectionAspectPrivate> d;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -812,6 +811,13 @@ public:
|
|||||||
|
|
||||||
TriState defaultValue() const;
|
TriState defaultValue() const;
|
||||||
void setDefaultValue(TriState setting);
|
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<QStringList>
|
class QTCREATOR_UTILS_EXPORT StringListAspect : public TypedAspect<QStringList>
|
||||||
|
|||||||
@@ -26,10 +26,8 @@
|
|||||||
#include <utils/environment.h>
|
#include <utils/environment.h>
|
||||||
#include <utils/layoutbuilder.h>
|
#include <utils/layoutbuilder.h>
|
||||||
|
|
||||||
#include <QCheckBox>
|
|
||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
#include <QLabel>
|
#include <QLabel>
|
||||||
#include <QTextEdit>
|
|
||||||
|
|
||||||
using namespace ProjectExplorer;
|
using namespace ProjectExplorer;
|
||||||
using namespace Utils;
|
using namespace Utils;
|
||||||
@@ -79,26 +77,26 @@ DebuggerRunConfigurationAspect::DebuggerRunConfigurationAspect(Target *target)
|
|||||||
|
|
||||||
const auto setSummaryText = [this, details] {
|
const auto setSummaryText = [this, details] {
|
||||||
QStringList items;
|
QStringList items;
|
||||||
if (m_cppAspect->value() == TriState::Enabled)
|
if (m_cppAspect() == TriState::Enabled)
|
||||||
items.append(Tr::tr("Enable C++ debugger."));
|
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."));
|
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."));
|
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(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("Without additional startup commands.")
|
||||||
: Tr::tr("With additional startup commands."));
|
: Tr::tr("With additional startup commands."));
|
||||||
details->setSummaryText(items.join(" "));
|
details->setSummaryText(items.join(" "));
|
||||||
};
|
};
|
||||||
setSummaryText();
|
setSummaryText();
|
||||||
|
|
||||||
connect(m_cppAspect, &BaseAspect::changed, this, setSummaryText);
|
connect(&m_cppAspect, &BaseAspect::changed, this, setSummaryText);
|
||||||
connect(m_qmlAspect, &BaseAspect::changed, this, setSummaryText);
|
connect(&m_qmlAspect, &BaseAspect::changed, this, setSummaryText);
|
||||||
connect(m_overrideStartupAspect, &BaseAspect::changed, this, setSummaryText);
|
connect(&m_overrideStartupAspect, &BaseAspect::changed, this, setSummaryText);
|
||||||
|
|
||||||
return details;
|
return details;
|
||||||
});
|
});
|
||||||
@@ -109,63 +107,54 @@ DebuggerRunConfigurationAspect::DebuggerRunConfigurationAspect(Target *target)
|
|||||||
addDataExtractor(this, &DebuggerRunConfigurationAspect::useMultiProcess, &Data::useMultiProcess);
|
addDataExtractor(this, &DebuggerRunConfigurationAspect::useMultiProcess, &Data::useMultiProcess);
|
||||||
addDataExtractor(this, &DebuggerRunConfigurationAspect::overrideStartup, &Data::overrideStartup);
|
addDataExtractor(this, &DebuggerRunConfigurationAspect::overrideStartup, &Data::overrideStartup);
|
||||||
|
|
||||||
m_cppAspect = new TriStateAspect(nullptr, Tr::tr("Enabled"), Tr::tr("Disabled"), Tr::tr("Automatic"));
|
m_cppAspect.setSettingsKey("RunConfiguration.UseCppDebugger");
|
||||||
m_cppAspect->setLabelText(Tr::tr("C++ debugger:"));
|
m_cppAspect.setLabelText(Tr::tr("C++ debugger:"));
|
||||||
m_cppAspect->setSettingsKey("RunConfiguration.UseCppDebugger");
|
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.setSettingsKey("RunConfiguration.UseQmlDebugger");
|
||||||
m_qmlAspect->setLabelText(Tr::tr("QML debugger:"));
|
m_qmlAspect.setLabelText(Tr::tr("QML debugger:"));
|
||||||
m_qmlAspect->setSettingsKey("RunConfiguration.UseQmlDebugger");
|
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.setSettingsKey("RunConfiguration.UsePythonDebugger");
|
||||||
m_pythonAspect->setLabelText(Tr::tr("Python debugger:"));
|
m_pythonAspect.setLabelText(Tr::tr("Python debugger:"));
|
||||||
m_pythonAspect->setSettingsKey("RunConfiguration.UsePythonDebugger");
|
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.
|
// Make sure at least one of the debuggers is set to be active.
|
||||||
connect(m_cppAspect, &TriStateAspect::changed, this, [this]{
|
connect(&m_cppAspect, &TriStateAspect::changed, this, [this] {
|
||||||
if (Utils::allOf({m_cppAspect, m_qmlAspect, m_pythonAspect}, &isDisabled))
|
if (Utils::allOf({&m_cppAspect, &m_qmlAspect, &m_pythonAspect}, &isDisabled))
|
||||||
m_qmlAspect->setValue(TriState::Default);
|
m_qmlAspect.setValue(TriState::Default);
|
||||||
});
|
});
|
||||||
connect(m_qmlAspect, &TriStateAspect::changed, this, [this]{
|
connect(&m_qmlAspect, &TriStateAspect::changed, this, [this] {
|
||||||
if (Utils::allOf({m_cppAspect, m_qmlAspect, m_pythonAspect}, &isDisabled))
|
if (Utils::allOf({&m_cppAspect, &m_qmlAspect, &m_pythonAspect}, &isDisabled))
|
||||||
m_cppAspect->setValue(TriState::Default);
|
m_cppAspect.setValue(TriState::Default);
|
||||||
});
|
});
|
||||||
connect(m_qmlAspect, &TriStateAspect::changed, this, [this] {
|
connect(&m_qmlAspect, &TriStateAspect::changed, this, [this] {
|
||||||
if (Utils::allOf({m_cppAspect, m_qmlAspect, m_pythonAspect}, &isDisabled))
|
if (Utils::allOf({&m_cppAspect, &m_qmlAspect, &m_pythonAspect}, &isDisabled))
|
||||||
m_cppAspect->setValue(TriState::Default);
|
m_cppAspect.setValue(TriState::Default);
|
||||||
});
|
});
|
||||||
|
|
||||||
m_multiProcessAspect = new BoolAspect;
|
m_multiProcessAspect.setSettingsKey("RunConfiguration.UseMultiProcess");
|
||||||
m_multiProcessAspect->setSettingsKey("RunConfiguration.UseMultiProcess");
|
m_multiProcessAspect.setLabel(Tr::tr("Enable Debugging of Subprocesses"),
|
||||||
m_multiProcessAspect->setLabel(Tr::tr("Enable Debugging of Subprocesses"),
|
|
||||||
BoolAspect::LabelPlacement::AtCheckBox);
|
BoolAspect::LabelPlacement::AtCheckBox);
|
||||||
|
|
||||||
m_overrideStartupAspect = new StringAspect;
|
m_overrideStartupAspect.setSettingsKey("RunConfiguration.OverrideDebuggerStartup");
|
||||||
m_overrideStartupAspect->setSettingsKey("RunConfiguration.OverrideDebuggerStartup");
|
m_overrideStartupAspect.setDisplayStyle(StringAspect::TextEditDisplay);
|
||||||
m_overrideStartupAspect->setDisplayStyle(StringAspect::TextEditDisplay);
|
m_overrideStartupAspect.setLabelText(Tr::tr("Additional startup commands:"));
|
||||||
m_overrideStartupAspect->setLabelText(Tr::tr("Additional startup commands:"));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
DebuggerRunConfigurationAspect::~DebuggerRunConfigurationAspect()
|
DebuggerRunConfigurationAspect::~DebuggerRunConfigurationAspect() = default;
|
||||||
{
|
|
||||||
delete m_cppAspect;
|
|
||||||
delete m_qmlAspect;
|
|
||||||
delete m_pythonAspect;
|
|
||||||
delete m_multiProcessAspect;
|
|
||||||
delete m_overrideStartupAspect;
|
|
||||||
}
|
|
||||||
|
|
||||||
void DebuggerRunConfigurationAspect::setUseQmlDebugger(bool value)
|
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
|
bool DebuggerRunConfigurationAspect::useCppDebugger() const
|
||||||
{
|
{
|
||||||
if (m_cppAspect->value() == TriState::Default)
|
if (m_cppAspect() == TriState::Default)
|
||||||
return m_target->project()->projectLanguages().contains(
|
return m_target->project()->projectLanguages().contains(
|
||||||
ProjectExplorer::Constants::CXX_LANGUAGE_ID);
|
ProjectExplorer::Constants::CXX_LANGUAGE_ID);
|
||||||
return m_cppAspect->value() == TriState::Enabled;
|
return m_cppAspect() == TriState::Enabled;
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool projectHasQmlDefines(ProjectExplorer::Project *project)
|
static bool projectHasQmlDefines(ProjectExplorer::Project *project)
|
||||||
@@ -185,7 +174,7 @@ static bool projectHasQmlDefines(ProjectExplorer::Project *project)
|
|||||||
|
|
||||||
bool DebuggerRunConfigurationAspect::useQmlDebugger() const
|
bool DebuggerRunConfigurationAspect::useQmlDebugger() const
|
||||||
{
|
{
|
||||||
if (m_qmlAspect->value() == TriState::Default) {
|
if (m_qmlAspect() == TriState::Default) {
|
||||||
const Core::Context languages = m_target->project()->projectLanguages();
|
const Core::Context languages = m_target->project()->projectLanguages();
|
||||||
if (!languages.contains(ProjectExplorer::Constants::QMLJS_LANGUAGE_ID))
|
if (!languages.contains(ProjectExplorer::Constants::QMLJS_LANGUAGE_ID))
|
||||||
return projectHasQmlDefines(m_target->project());
|
return projectHasQmlDefines(m_target->project());
|
||||||
@@ -199,31 +188,31 @@ bool DebuggerRunConfigurationAspect::useQmlDebugger() const
|
|||||||
|
|
||||||
return !languages.contains(ProjectExplorer::Constants::CXX_LANGUAGE_ID);
|
return !languages.contains(ProjectExplorer::Constants::CXX_LANGUAGE_ID);
|
||||||
}
|
}
|
||||||
return m_qmlAspect->value() == TriState::Enabled;
|
return m_qmlAspect() == TriState::Enabled;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool DebuggerRunConfigurationAspect::usePythonDebugger() const
|
bool DebuggerRunConfigurationAspect::usePythonDebugger() const
|
||||||
{
|
{
|
||||||
if (m_pythonAspect->value() == TriState::Default) {
|
if (m_pythonAspect() == TriState::Default) {
|
||||||
const Core::Context languages = m_target->project()->projectLanguages();
|
const Core::Context languages = m_target->project()->projectLanguages();
|
||||||
return languages.contains(ProjectExplorer::Constants::PYTHON_LANGUAGE_ID);
|
return languages.contains(ProjectExplorer::Constants::PYTHON_LANGUAGE_ID);
|
||||||
}
|
}
|
||||||
return m_pythonAspect->value() == TriState::Enabled;
|
return m_pythonAspect() == TriState::Enabled;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool DebuggerRunConfigurationAspect::useMultiProcess() const
|
bool DebuggerRunConfigurationAspect::useMultiProcess() const
|
||||||
{
|
{
|
||||||
return m_multiProcessAspect->value();
|
return m_multiProcessAspect();
|
||||||
}
|
}
|
||||||
|
|
||||||
void DebuggerRunConfigurationAspect::setUseMultiProcess(bool value)
|
void DebuggerRunConfigurationAspect::setUseMultiProcess(bool value)
|
||||||
{
|
{
|
||||||
m_multiProcessAspect->setValue(value);
|
m_multiProcessAspect.setValue(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
QString DebuggerRunConfigurationAspect::overrideStartup() const
|
QString DebuggerRunConfigurationAspect::overrideStartup() const
|
||||||
{
|
{
|
||||||
return m_overrideStartupAspect->value();
|
return m_overrideStartupAspect();
|
||||||
}
|
}
|
||||||
|
|
||||||
int DebuggerRunConfigurationAspect::portsUsedByDebugger() const
|
int DebuggerRunConfigurationAspect::portsUsedByDebugger() const
|
||||||
@@ -238,31 +227,31 @@ int DebuggerRunConfigurationAspect::portsUsedByDebugger() const
|
|||||||
|
|
||||||
void DebuggerRunConfigurationAspect::toMap(Store &map) const
|
void DebuggerRunConfigurationAspect::toMap(Store &map) const
|
||||||
{
|
{
|
||||||
m_cppAspect->toMap(map);
|
m_cppAspect.toMap(map);
|
||||||
m_qmlAspect->toMap(map);
|
m_qmlAspect.toMap(map);
|
||||||
m_pythonAspect->toMap(map);
|
m_pythonAspect.toMap(map);
|
||||||
m_multiProcessAspect->toMap(map);
|
m_multiProcessAspect.toMap(map);
|
||||||
m_overrideStartupAspect->toMap(map);
|
m_overrideStartupAspect.toMap(map);
|
||||||
|
|
||||||
// compatibility to old settings
|
// compatibility to old settings
|
||||||
map.insert("RunConfiguration.UseCppDebuggerAuto", m_cppAspect->value() == TriState::Default);
|
map.insert("RunConfiguration.UseCppDebuggerAuto", m_cppAspect() == TriState::Default);
|
||||||
map.insert("RunConfiguration.UseQmlDebuggerAuto", m_qmlAspect->value() == TriState::Default);
|
map.insert("RunConfiguration.UseQmlDebuggerAuto", m_qmlAspect() == TriState::Default);
|
||||||
}
|
}
|
||||||
|
|
||||||
void DebuggerRunConfigurationAspect::fromMap(const Store &map)
|
void DebuggerRunConfigurationAspect::fromMap(const Store &map)
|
||||||
{
|
{
|
||||||
m_cppAspect->fromMap(map);
|
m_cppAspect.fromMap(map);
|
||||||
m_qmlAspect->fromMap(map);
|
m_qmlAspect.fromMap(map);
|
||||||
m_pythonAspect->fromMap(map);
|
m_pythonAspect.fromMap(map);
|
||||||
|
|
||||||
// respect old project settings
|
// respect old project settings
|
||||||
if (map.value("RunConfiguration.UseCppDebuggerAuto", false).toBool())
|
if (map.value("RunConfiguration.UseCppDebuggerAuto", false).toBool())
|
||||||
m_cppAspect->setValue(TriState::Default);
|
m_cppAspect.setValue(TriState::Default);
|
||||||
if (map.value("RunConfiguration.UseQmlDebuggerAuto", false).toBool())
|
if (map.value("RunConfiguration.UseQmlDebuggerAuto", false).toBool())
|
||||||
m_qmlAspect->setValue(TriState::Default);
|
m_qmlAspect.setValue(TriState::Default);
|
||||||
|
|
||||||
m_multiProcessAspect->fromMap(map);
|
m_multiProcessAspect.fromMap(map);
|
||||||
m_overrideStartupAspect->fromMap(map);
|
m_overrideStartupAspect.fromMap(map);
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace Debugger
|
} // namespace Debugger
|
||||||
|
|||||||
@@ -40,11 +40,11 @@ public:
|
|||||||
};
|
};
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Utils::TriStateAspect *m_cppAspect;
|
Utils::TriStateAspect m_cppAspect;
|
||||||
Utils::TriStateAspect *m_qmlAspect;
|
Utils::TriStateAspect m_qmlAspect;
|
||||||
Utils::TriStateAspect *m_pythonAspect;
|
Utils::TriStateAspect m_pythonAspect;
|
||||||
Utils::BoolAspect *m_multiProcessAspect;
|
Utils::BoolAspect m_multiProcessAspect;
|
||||||
Utils::StringAspect *m_overrideStartupAspect;
|
Utils::StringAspect m_overrideStartupAspect;
|
||||||
ProjectExplorer::Target *m_target;
|
ProjectExplorer::Target *m_target;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user