From 0edebcfa9c59a48afd42f7c850cf604f7e6282a8 Mon Sep 17 00:00:00 2001 From: hjk Date: Thu, 17 Dec 2020 15:43:10 +0100 Subject: [PATCH] Utils: Pimpl BaseAspect Change-Id: I70a7d49010c24a44dc64d20c5548c249964b78bd Reviewed-by: Christian Kandeler --- src/libs/utils/aspects.cpp | 54 ++++++++++++++++--- src/libs/utils/aspects.h | 23 ++++---- src/libs/utils/savedaction.cpp | 10 ++-- .../projectexplorer/runconfiguration.cpp | 4 +- 4 files changed, 66 insertions(+), 25 deletions(-) diff --git a/src/libs/utils/aspects.cpp b/src/libs/utils/aspects.cpp index 794d3dab7df..6a2feccd1d2 100644 --- a/src/libs/utils/aspects.cpp +++ b/src/libs/utils/aspects.cpp @@ -47,6 +47,19 @@ #include namespace Utils { +namespace Internal { + +class BaseAspectPrivate +{ +public: + Utils::Id m_id; + QString m_displayName; + QString m_settingsKey; // Name of data in settings. + bool m_visible = true; + BaseAspect::ConfigWidgetCreator m_configWidgetCreator; +}; + +} // Internal /*! \class Utils::BaseAspect @@ -70,7 +83,34 @@ namespace Utils { /*! Constructs a BaseAspect. */ -BaseAspect::BaseAspect() = default; +BaseAspect::BaseAspect() + : d(new Internal::BaseAspectPrivate) +{} + +Id BaseAspect::id() const +{ + return d->m_id; +} + +void BaseAspect::setId(Id id) +{ + d->m_id = id; +} + +void BaseAspect::setDisplayName(const QString &displayName) +{ + d->m_displayName = displayName; +} + +bool BaseAspect::isVisible() const +{ + return d->m_visible; +} + +void BaseAspect::setVisible(bool visible) +{ + d->m_visible = visible; +} /*! Destructs a BaseAspect. @@ -82,7 +122,7 @@ BaseAspect::~BaseAspect() = default; */ void BaseAspect::setConfigWidgetCreator(const ConfigWidgetCreator &configWidgetCreator) { - m_configWidgetCreator = configWidgetCreator; + d->m_configWidgetCreator = configWidgetCreator; } /*! @@ -92,7 +132,7 @@ void BaseAspect::setConfigWidgetCreator(const ConfigWidgetCreator &configWidgetC */ QString BaseAspect::settingsKey() const { - return m_settingsKey; + return d->m_settingsKey; } /*! @@ -102,7 +142,7 @@ QString BaseAspect::settingsKey() const */ void BaseAspect::setSettingsKey(const QString &key) { - m_settingsKey = key; + d->m_settingsKey = key; } /*! @@ -112,15 +152,17 @@ void BaseAspect::setSettingsKey(const QString &key) */ void BaseAspect::setSettingsKey(const QString &group, const QString &key) { - m_settingsKey = group + "/" + key; + d->m_settingsKey = group + "/" + key; } +QString BaseAspect::displayName() const { return d->m_displayName; } + /*! \internal */ QWidget *BaseAspect::createConfigWidget() const { - return m_configWidgetCreator ? m_configWidgetCreator() : nullptr; + return d->m_configWidgetCreator ? d->m_configWidgetCreator() : nullptr; } /*! diff --git a/src/libs/utils/aspects.h b/src/libs/utils/aspects.h index 28a49c855f5..94ac51c79c8 100644 --- a/src/libs/utils/aspects.h +++ b/src/libs/utils/aspects.h @@ -42,6 +42,7 @@ class LayoutBuilder; namespace Internal { class AspectContainerPrivate; +class BaseAspectPrivate; class BoolAspectPrivate; class IntegerAspectPrivate; class SelectionAspectPrivate; @@ -58,17 +59,18 @@ public: BaseAspect(); ~BaseAspect() override; - void setId(Utils::Id id) { m_id = id; } - void setDisplayName(const QString &displayName) { m_displayName = displayName; } + Utils::Id id() const; + void setId(Utils::Id id); + + QString settingsKey() const; void setSettingsKey(const QString &settingsKey); void setSettingsKey(const QString &group, const QString &key); - Utils::Id id() const { return m_id; } - QString displayName() const { return m_displayName; } - QString settingsKey() const; + QString displayName() const; + void setDisplayName(const QString &displayName); - bool isVisible() const { return m_visible; } - void setVisible(bool visible) { m_visible = visible; } + bool isVisible() const; + void setVisible(bool visible); using ConfigWidgetCreator = std::function; void setConfigWidgetCreator(const ConfigWidgetCreator &configWidgetCreator); @@ -88,11 +90,8 @@ protected: void saveToMap(QVariantMap &data, const QVariant &value, const QVariant &defaultValue, const QString &keyExtension = {}) const; - Utils::Id m_id; - QString m_displayName; - QString m_settingsKey; // Name of data in settings. - bool m_visible = true; - ConfigWidgetCreator m_configWidgetCreator; +private: + std::unique_ptr d; }; class QTCREATOR_UTILS_EXPORT BaseAspects diff --git a/src/libs/utils/savedaction.cpp b/src/libs/utils/savedaction.cpp index 6388818dcbb..353a504da96 100644 --- a/src/libs/utils/savedaction.cpp +++ b/src/libs/utils/savedaction.cpp @@ -117,7 +117,7 @@ QString SavedAction::toString() const { return QLatin1String("value: ") + m_value.toString() + QLatin1String(" defaultvalue: ") + m_defaultValue.toString() - + QLatin1String(" settingskey: ") + m_settingsKey; + + QLatin1String(" settingskey: ") + settingsKey(); } /* @@ -128,9 +128,9 @@ QString SavedAction::toString() const */ void SavedAction::readSettings(const QSettings *settings) { - if (m_settingsKey.isEmpty()) + if (settingsKey().isEmpty()) return; - QVariant var = settings->value(m_settingsKey, m_defaultValue); + QVariant var = settings->value(settingsKey(), m_defaultValue); // work around old ini files containing @Invalid() entries if (m_action.isCheckable() && !var.isValid()) var = false; @@ -145,9 +145,9 @@ void SavedAction::readSettings(const QSettings *settings) */ void SavedAction::writeSettings(QSettings *settings) { - if (m_settingsKey.isEmpty()) + if (settingsKey().isEmpty()) return; - settings->setValue(m_settingsKey, m_value); + settings->setValue(settingsKey(), m_value); } /* diff --git a/src/plugins/projectexplorer/runconfiguration.cpp b/src/plugins/projectexplorer/runconfiguration.cpp index 1be65b84e63..5d7b613b23f 100644 --- a/src/plugins/projectexplorer/runconfiguration.cpp +++ b/src/plugins/projectexplorer/runconfiguration.cpp @@ -124,14 +124,14 @@ void GlobalOrProjectAspect::fromMap(const QVariantMap &map) { if (m_projectSettings) m_projectSettings->fromMap(map); - m_useGlobalSettings = map.value(m_id.toString() + QLatin1String(".UseGlobalSettings"), true).toBool(); + m_useGlobalSettings = map.value(id().toString() + ".UseGlobalSettings", true).toBool(); } void GlobalOrProjectAspect::toMap(QVariantMap &map) const { if (m_projectSettings) m_projectSettings->toMap(map); - map.insert(m_id.toString() + QLatin1String(".UseGlobalSettings"), m_useGlobalSettings); + map.insert(id().toString() + ".UseGlobalSettings", m_useGlobalSettings); } void GlobalOrProjectAspect::resetProjectToGlobalSettings()