diff options
author | hjk <hjk@qt.io> | 2019-10-15 17:20:51 +0200 |
---|---|---|
committer | hjk <hjk@qt.io> | 2019-10-18 12:24:39 +0000 |
commit | 6eaf239777a3166f2504b0dff90bb4afcacba89f (patch) | |
tree | 32a2ffa2028e3ba487d62b380e40aab866c1e39f /src/plugins/projectexplorer/projectconfiguration.h | |
parent | 02350520c211bf5aa4f2804c1d19d28d710daa20 (diff) |
ProjectExplorer: Prepare more flexibility to aspect layouting
This hides the explicit use of a QFormLayout from the aspect
interface in a new LayoutBuilder class. That currently works
only on a QFormLayout in the back, but opens the possibility
to use e.g. a QGridLayout as use on the Kits and some option
pages.
The aspects now only announce sub-widgets they like to add,
actuall positioning is does by a new LayoutBuilder class,
also cramming several widgets in an hbox in the right column
of the QFormLayout is done there.
Change-Id: I2b788192c465f2ab82261849d34e514697c5a491
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
Diffstat (limited to 'src/plugins/projectexplorer/projectconfiguration.h')
-rw-r--r-- | src/plugins/projectexplorer/projectconfiguration.h | 38 |
1 files changed, 33 insertions, 5 deletions
diff --git a/src/plugins/projectexplorer/projectconfiguration.h b/src/plugins/projectexplorer/projectconfiguration.h index bc6d33fce8..76b3080291 100644 --- a/src/plugins/projectexplorer/projectconfiguration.h +++ b/src/plugins/projectexplorer/projectconfiguration.h @@ -35,10 +35,7 @@ #include <QPointer> #include <QString> #include <QVariantMap> - -QT_BEGIN_NAMESPACE -class QFormLayout; -QT_END_NAMESPACE +#include <QWidget> namespace ProjectExplorer { @@ -46,6 +43,36 @@ class Project; class ProjectConfigurationAspects; class Target; +class PROJECTEXPLORER_EXPORT LayoutBuilder +{ +public: + explicit LayoutBuilder(QWidget *parent); + ~LayoutBuilder(); + + class LayoutItem + { + public: + LayoutItem(QLayout *layout) : layout(layout) {} + LayoutItem(QWidget *widget) : widget(widget) {} + LayoutItem(const QString &text) : text(text) {} + + QLayout *layout = nullptr; + QWidget *widget = nullptr; + QString text; + }; + + void addItem(LayoutItem item); + void startNewRow(); + + QLayout *layout() const; + +private: + void flushPendingItems(); + + QLayout *m_layout = nullptr; + QList<LayoutItem> m_pendingItems; +}; + class PROJECTEXPLORER_EXPORT ProjectConfigurationAspect : public QObject { Q_OBJECT @@ -71,9 +98,10 @@ public: virtual void fromMap(const QVariantMap &) {} virtual void toMap(QVariantMap &) const {} - virtual void addToConfigurationLayout(QFormLayout *) {} virtual void acquaintSiblings(const ProjectConfigurationAspects &) {} + virtual void addToLayout(LayoutBuilder &builder); + signals: void changed(); |