summaryrefslogtreecommitdiff
path: root/src/plugins/projectexplorer/projectconfiguration.h
diff options
context:
space:
mode:
authorhjk <hjk@qt.io>2018-09-13 15:48:16 +0200
committerhjk <hjk@qt.io>2018-09-18 06:13:21 +0000
commitd421bc2fe3760c0dacb34da528aaa50b8f85217c (patch)
tree0fd58bc4a9bf73941a68033fe5007d522e74640e /src/plugins/projectexplorer/projectconfiguration.h
parentd9275913d308193bc610749067cb034310b6510c (diff)
downloadqt-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.h67
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;