forked from qt-creator/qt-creator
Utils: Flatten LayoutBuilder related hierarchies
Originally the idea was to only expose LayoutBuilder, but we are getting more and more related items. Be consequent now, and have everything in Utils::Layouting, but not in nested classes. Change-Id: Ic0f98595882e5c60a25c30ec52df4a0ea79bc0ca Reviewed-by: Alessandro Portale <alessandro.portale@qt.io>
This commit is contained in:
@@ -5,7 +5,6 @@
|
||||
|
||||
#include "utils_global.h"
|
||||
|
||||
|
||||
#include <QList>
|
||||
#include <QString>
|
||||
#include <QVariant>
|
||||
@@ -20,11 +19,11 @@ class QWidget;
|
||||
QT_END_NAMESPACE
|
||||
|
||||
namespace Utils {
|
||||
|
||||
class BaseAspect;
|
||||
class BoolAspect;
|
||||
} // Utils
|
||||
|
||||
namespace Layouting {
|
||||
namespace Utils::Layouting {
|
||||
|
||||
enum AttachType {
|
||||
WithMargins,
|
||||
@@ -32,19 +31,13 @@ enum AttachType {
|
||||
WithFormAlignment, // Handle Grid similar to QFormLayout, i.e. use special alignment for the first column on Mac
|
||||
};
|
||||
|
||||
} // Layouting
|
||||
class LayoutBuilder;
|
||||
|
||||
class QTCREATOR_UTILS_EXPORT LayoutBuilder
|
||||
// LayoutItem
|
||||
|
||||
class QTCREATOR_UTILS_EXPORT LayoutItem
|
||||
{
|
||||
public:
|
||||
enum LayoutType {
|
||||
HBoxLayout,
|
||||
VBoxLayout,
|
||||
FormLayout,
|
||||
GridLayout,
|
||||
StackLayout,
|
||||
};
|
||||
|
||||
enum class AlignmentType {
|
||||
DefaultAlignment,
|
||||
AlignAsFormLabel,
|
||||
@@ -59,29 +52,123 @@ public:
|
||||
};
|
||||
|
||||
using Setter = std::function<void(QObject *target)>;
|
||||
LayoutItem();
|
||||
LayoutItem(QLayout *layout);
|
||||
LayoutItem(QWidget *widget);
|
||||
LayoutItem(BaseAspect *aspect); // Remove
|
||||
LayoutItem(BaseAspect &aspect);
|
||||
LayoutItem(const QString &text);
|
||||
LayoutItem(const LayoutBuilder &builder);
|
||||
LayoutItem(const Setter &setter) { this->setter = setter; }
|
||||
|
||||
class QTCREATOR_UTILS_EXPORT LayoutItem
|
||||
{
|
||||
public:
|
||||
LayoutItem();
|
||||
LayoutItem(QLayout *layout);
|
||||
LayoutItem(QWidget *widget);
|
||||
LayoutItem(BaseAspect *aspect); // Remove
|
||||
LayoutItem(BaseAspect &aspect);
|
||||
LayoutItem(const QString &text);
|
||||
LayoutItem(const LayoutBuilder &builder);
|
||||
LayoutItem(const Setter &setter) { this->setter = setter; }
|
||||
QLayout *layout = nullptr;
|
||||
QWidget *widget = nullptr;
|
||||
BaseAspect *aspect = nullptr;
|
||||
|
||||
QLayout *layout = nullptr;
|
||||
QWidget *widget = nullptr;
|
||||
BaseAspect *aspect = nullptr;
|
||||
QString text; // FIXME: Use specialValue for that
|
||||
int span = 1;
|
||||
AlignmentType align = AlignmentType::DefaultAlignment;
|
||||
Setter setter;
|
||||
SpecialType specialType = SpecialType::NotSpecial;
|
||||
QVariant specialValue;
|
||||
};
|
||||
|
||||
QString text; // FIXME: Use specialValue for that
|
||||
int span = 1;
|
||||
AlignmentType align = AlignmentType::DefaultAlignment;
|
||||
Setter setter;
|
||||
SpecialType specialType = SpecialType::NotSpecial;
|
||||
QVariant specialValue;
|
||||
class QTCREATOR_UTILS_EXPORT Space : public LayoutItem
|
||||
{
|
||||
public:
|
||||
explicit Space(int space);
|
||||
};
|
||||
|
||||
class QTCREATOR_UTILS_EXPORT Span : public LayoutItem
|
||||
{
|
||||
public:
|
||||
Span(int span, const LayoutItem &item);
|
||||
};
|
||||
|
||||
class QTCREATOR_UTILS_EXPORT Stretch : public LayoutItem
|
||||
{
|
||||
public:
|
||||
explicit Stretch(int stretch = 1);
|
||||
};
|
||||
|
||||
class QTCREATOR_UTILS_EXPORT Tab : public LayoutItem
|
||||
{
|
||||
public:
|
||||
Tab(const QString &tabName, const LayoutBuilder &item);
|
||||
};
|
||||
|
||||
class QTCREATOR_UTILS_EXPORT Break : public LayoutItem
|
||||
{
|
||||
public:
|
||||
Break();
|
||||
};
|
||||
|
||||
class QTCREATOR_UTILS_EXPORT HorizontalRule : public LayoutItem
|
||||
{
|
||||
public:
|
||||
HorizontalRule();
|
||||
};
|
||||
|
||||
class QTCREATOR_UTILS_EXPORT Group : public LayoutItem
|
||||
{
|
||||
public:
|
||||
Group(std::initializer_list<LayoutItem> items);
|
||||
};
|
||||
|
||||
class QTCREATOR_UTILS_EXPORT PushButton : public LayoutItem
|
||||
{
|
||||
public:
|
||||
PushButton(std::initializer_list<LayoutItem> items);
|
||||
};
|
||||
|
||||
class QTCREATOR_UTILS_EXPORT Splitter : public LayoutItem
|
||||
{
|
||||
public:
|
||||
Splitter(std::initializer_list<LayoutItem> items);
|
||||
Splitter(QSplitter *splitter, std::initializer_list<LayoutItem> items);
|
||||
};
|
||||
|
||||
class QTCREATOR_UTILS_EXPORT TabWidget : public LayoutItem
|
||||
{
|
||||
public:
|
||||
TabWidget(std::initializer_list<Tab> tabs);
|
||||
TabWidget(QTabWidget *tabWidget, std::initializer_list<Tab> tabs);
|
||||
};
|
||||
|
||||
// Singleton items.
|
||||
|
||||
QTCREATOR_UTILS_EXPORT extern Break br;
|
||||
QTCREATOR_UTILS_EXPORT extern Stretch st;
|
||||
QTCREATOR_UTILS_EXPORT extern Space empty;
|
||||
QTCREATOR_UTILS_EXPORT extern HorizontalRule hr;
|
||||
|
||||
// "Properties"
|
||||
|
||||
QTCREATOR_UTILS_EXPORT LayoutItem::Setter title(const QString &title,
|
||||
BoolAspect *checker = nullptr);
|
||||
|
||||
QTCREATOR_UTILS_EXPORT LayoutItem::Setter text(const QString &text);
|
||||
QTCREATOR_UTILS_EXPORT LayoutItem::Setter tooltip(const QString &toolTip);
|
||||
QTCREATOR_UTILS_EXPORT LayoutItem::Setter onClicked(const std::function<void()> &func,
|
||||
QObject *guard = nullptr);
|
||||
|
||||
|
||||
// Convenience
|
||||
|
||||
QTCREATOR_UTILS_EXPORT QWidget *createHr(QWidget *parent = nullptr);
|
||||
|
||||
|
||||
// LayoutBuilder
|
||||
|
||||
class QTCREATOR_UTILS_EXPORT LayoutBuilder
|
||||
{
|
||||
public:
|
||||
enum LayoutType {
|
||||
HBoxLayout,
|
||||
VBoxLayout,
|
||||
FormLayout,
|
||||
GridLayout,
|
||||
StackLayout,
|
||||
};
|
||||
|
||||
using LayoutItems = QList<LayoutItem>;
|
||||
@@ -109,43 +196,9 @@ public:
|
||||
void attachTo(QWidget *w, Layouting::AttachType attachType = Layouting::WithMargins) const;
|
||||
QWidget *emerge(Layouting::AttachType attachType = Layouting::WithMargins);
|
||||
|
||||
class QTCREATOR_UTILS_EXPORT Space : public LayoutItem
|
||||
{
|
||||
public:
|
||||
explicit Space(int space);
|
||||
};
|
||||
|
||||
class QTCREATOR_UTILS_EXPORT Span : public LayoutItem
|
||||
{
|
||||
public:
|
||||
Span(int span, const LayoutItem &item);
|
||||
};
|
||||
|
||||
class QTCREATOR_UTILS_EXPORT Stretch : public LayoutItem
|
||||
{
|
||||
public:
|
||||
explicit Stretch(int stretch = 1);
|
||||
};
|
||||
|
||||
class QTCREATOR_UTILS_EXPORT Tab : public LayoutItem
|
||||
{
|
||||
public:
|
||||
Tab(const QString &tabName, const LayoutBuilder &item);
|
||||
};
|
||||
|
||||
class QTCREATOR_UTILS_EXPORT Break : public LayoutItem
|
||||
{
|
||||
public:
|
||||
Break();
|
||||
};
|
||||
|
||||
class QTCREATOR_UTILS_EXPORT HorizontalRule : public LayoutItem
|
||||
{
|
||||
public:
|
||||
HorizontalRule();
|
||||
};
|
||||
|
||||
protected:
|
||||
friend class LayoutItem;
|
||||
|
||||
explicit LayoutBuilder(); // Adds to existing layout.
|
||||
|
||||
QLayout *createLayout() const;
|
||||
@@ -167,47 +220,6 @@ private:
|
||||
Layouting::AttachType m_attachType = {};
|
||||
};
|
||||
|
||||
namespace Layouting {
|
||||
|
||||
using Space = LayoutBuilder::Space;
|
||||
using Span = LayoutBuilder::Span;
|
||||
using Tab = LayoutBuilder::Tab;
|
||||
|
||||
QTCREATOR_UTILS_EXPORT LayoutBuilder::Setter title(const QString &title,
|
||||
BoolAspect *checker = nullptr);
|
||||
|
||||
QTCREATOR_UTILS_EXPORT LayoutBuilder::Setter text(const QString &text);
|
||||
QTCREATOR_UTILS_EXPORT LayoutBuilder::Setter tooltip(const QString &toolTip);
|
||||
QTCREATOR_UTILS_EXPORT LayoutBuilder::Setter onClicked(const std::function<void()> &func,
|
||||
QObject *guard = nullptr);
|
||||
QTCREATOR_UTILS_EXPORT QWidget *createHr(QWidget *parent = nullptr);
|
||||
|
||||
class QTCREATOR_UTILS_EXPORT Group : public LayoutBuilder::LayoutItem
|
||||
{
|
||||
public:
|
||||
Group(std::initializer_list<LayoutItem> items);
|
||||
};
|
||||
|
||||
class QTCREATOR_UTILS_EXPORT PushButton : public LayoutBuilder::LayoutItem
|
||||
{
|
||||
public:
|
||||
PushButton(std::initializer_list<LayoutItem> items);
|
||||
};
|
||||
|
||||
class QTCREATOR_UTILS_EXPORT Splitter : public LayoutBuilder::LayoutItem
|
||||
{
|
||||
public:
|
||||
Splitter(std::initializer_list<LayoutItem> items);
|
||||
Splitter(QSplitter *splitter, std::initializer_list<LayoutItem> items);
|
||||
};
|
||||
|
||||
class QTCREATOR_UTILS_EXPORT TabWidget : public LayoutBuilder::LayoutItem
|
||||
{
|
||||
public:
|
||||
TabWidget(std::initializer_list<Tab> tabs);
|
||||
TabWidget(QTabWidget *tabWidget, std::initializer_list<Tab> tabs);
|
||||
};
|
||||
|
||||
class QTCREATOR_UTILS_EXPORT Column : public LayoutBuilder
|
||||
{
|
||||
public:
|
||||
@@ -243,10 +255,4 @@ public:
|
||||
Stack(std::initializer_list<LayoutItem> items) : LayoutBuilder(StackLayout, items) {}
|
||||
};
|
||||
|
||||
QTCREATOR_UTILS_EXPORT extern LayoutBuilder::Break br;
|
||||
QTCREATOR_UTILS_EXPORT extern LayoutBuilder::Stretch st;
|
||||
QTCREATOR_UTILS_EXPORT extern LayoutBuilder::Space empty;
|
||||
QTCREATOR_UTILS_EXPORT extern LayoutBuilder::HorizontalRule hr;
|
||||
|
||||
} // Layouting
|
||||
} // Utils
|
||||
} // Utils::Layouting
|
||||
|
||||
Reference in New Issue
Block a user