diff options
author | hjk <hjk@qt.io> | 2018-09-13 15:48:16 +0200 |
---|---|---|
committer | hjk <hjk@qt.io> | 2018-09-18 06:13:21 +0000 |
commit | d421bc2fe3760c0dacb34da528aaa50b8f85217c (patch) | |
tree | 0fd58bc4a9bf73941a68033fe5007d522e74640e /src/plugins/projectexplorer/projectconfiguration.h | |
parent | d9275913d308193bc610749067cb034310b6510c (diff) | |
download | qt-creator-d421bc2fe3760c0dacb34da528aaa50b8f85217c.tar.gz |
ProjectExplorer: Split IRunConfigurationAspect
... into items that can be used generically in project configurations
(ProjectConfigurationAspect) and items that have a choice between
global and project settings (GlobalOrProjectAspect)
Change-Id: I94831237bdbb18c339eb76eba131bf7f928933d6
Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
Diffstat (limited to 'src/plugins/projectexplorer/projectconfiguration.h')
-rw-r--r-- | src/plugins/projectexplorer/projectconfiguration.h | 67 |
1 files changed, 66 insertions, 1 deletions
diff --git a/src/plugins/projectexplorer/projectconfiguration.h b/src/plugins/projectexplorer/projectconfiguration.h index f42e987093..9e72ce0cb8 100644 --- a/src/plugins/projectexplorer/projectconfiguration.h +++ b/src/plugins/projectexplorer/projectconfiguration.h @@ -34,10 +34,52 @@ #include <QString> #include <QVariantMap> +QT_BEGIN_NAMESPACE +class QFormLayout; +QT_END_NAMESPACE + namespace ProjectExplorer { class Project; +class PROJECTEXPLORER_EXPORT ProjectConfigurationAspect : public QObject +{ + Q_OBJECT + +public: + ProjectConfigurationAspect(); + ~ProjectConfigurationAspect() override; + + void setId(Core::Id id) { m_id = id; } + void setDisplayName(const QString &displayName) { m_displayName = displayName; } + void setSettingsKey(const QString &settingsKey) { m_settingsKey = settingsKey; } + + Core::Id id() const { return m_id; } + QString displayName() const { return m_displayName; } + QString settingsKey() const { return m_settingsKey; } + + bool isVisible() const { return m_visible; } + void setVisible(bool visible) { m_visible = visible; } + + using ConfigWidgetCreator = std::function<QWidget *()>; + void setConfigWidgetCreator(const ConfigWidgetCreator &configWidgetCreator); + QWidget *createConfigWidget() const; + + virtual void fromMap(const QVariantMap &) {} + virtual void toMap(QVariantMap &) const {} + virtual void addToConfigurationLayout(QFormLayout *) {} + +signals: + void changed(); + +protected: + Core::Id m_id; + QString m_displayName; + QString m_settingsKey; // Name of data in settings. + bool m_visible = true; + ConfigWidgetCreator m_configWidgetCreator; +}; + class PROJECTEXPLORER_EXPORT ProjectConfiguration : public QObject { Q_OBJECT @@ -46,7 +88,7 @@ protected: explicit ProjectConfiguration(QObject *parent, Core::Id id); public: - ~ProjectConfiguration() override = default; + ~ProjectConfiguration() override; Core::Id id() const; @@ -74,10 +116,33 @@ public: static QString settingsIdKey(); + template<class Aspect, typename ...Args> + Aspect *addAspect(Args && ...args) + { + auto aspect = new Aspect(args...); + m_aspects.append(aspect); + return aspect; + } + + const QList<ProjectConfigurationAspect *> aspects() const { return m_aspects; } + + ProjectConfigurationAspect *extraAspect(Core::Id id) const; + + template <typename T> T *extraAspect() const + { + for (ProjectConfigurationAspect *aspect : m_aspects) + if (T *result = qobject_cast<T *>(aspect)) + return result; + return nullptr; + } + signals: void displayNameChanged(); void toolTipChanged(); +protected: + QList<ProjectConfigurationAspect *> m_aspects; + private: const Core::Id m_id; QString m_displayName; |