Utils: Make LayoutBuilder setter setup less repetitive

Change-Id: I9113f7a97566c21cf83dcb95ce8e75e9707360b4
Reviewed-by: Marcus Tillmanns <marcus.tillmanns@qt.io>
This commit is contained in:
hjk
2024-05-31 13:46:04 +02:00
parent 968e47194c
commit b10d5581e4
11 changed files with 75 additions and 104 deletions

View File

@@ -139,13 +139,16 @@ public:
Layout(Implementation *w) { ptr = w; }
void span(int cols, int rows);
void noMargin();
void normalMargin();
void customMargin(const QMargins &margin);
void setNoMargins();
void setNormalMargins();
void setContentMargins(const QMargins &margin);
void setColumnStretch(int cols, int rows);
void setSpacing(int space);
void setFieldGrowthPolicy(int policy);
void attachTo(QWidget *);
void addItem(I item);
void addItems(std::initializer_list<I> items);
void addRow(std::initializer_list<I> items);
@@ -153,7 +156,6 @@ public:
void flush();
void flush_() const;
void fieldGrowthPolicy(int policy);
QWidget *emerge() const;
void show() const;
@@ -258,15 +260,15 @@ public:
Widget(Implementation *w) { ptr = w; }
QWidget *emerge() const;
void show();
void resize(int, int);
void setLayout(const Layout &layout);
void setSize(int, int);
void setWindowTitle(const QString &);
void setToolTip(const QString &);
void noMargin(int = 0);
void normalMargin(int = 0);
void customMargin(const QMargins &margin);
void setNoMargins(int = 0);
void setNormalMargins(int = 0);
void setContentMargins(const QMargins &);
};
class QTCREATOR_UTILS_EXPORT Label : public Widget
@@ -439,69 +441,38 @@ void doit(Interface *x, IdId, auto p)
// Setter dispatchers
class SizeId {};
auto size(auto w, auto h) { return IdAndArg{SizeId{}, std::pair{w, h}}; }
void doit(auto x, SizeId, auto p) { x->resize(p->first, p->second); }
#define QTCREATOR_SETTER(name, setter) \
class name##_TAG {}; \
inline auto name(auto p) { return IdAndArg{name##_TAG{}, p}; } \
inline void doit(auto x, name##_TAG, auto p) { x->setter(p); }
class TextId {};
auto text(auto p) { return IdAndArg{TextId{}, p}; }
void doit(auto x, TextId, auto p) { x->setText(p); }
#define QTCREATOR_SETTER2(name, setter) \
class name##_TAG {}; \
inline auto name(auto p1, auto p2) { return IdAndArg{name##_TAG{}, std::pair{p1, p2}}; } \
inline void doit(auto x, name##_TAG, auto p) { x->setter(p.first, p.second); }
class TitleId {};
auto title(auto p) { return IdAndArg{TitleId{}, p}; }
void doit(auto x, TitleId, auto p) { x->setTitle(p); }
#define QTCREATOR_TYPED_SETTER(name, setter, type) \
class name##_TAG {}; \
inline auto name(type p) { return IdAndArg{name##_TAG{}, p}; } \
inline void doit(auto x, name##_TAG, auto p) { x->setter(p); }
class TextFormatId {};
auto textFormat(auto p) { return IdAndArg{TextFormatId{}, p}; }
void doit(auto x, TextFormatId, auto p) { x->setTextFormat(p); }
QTCREATOR_SETTER(fieldGrowthPolicy, setFieldGrowthPolicy);
QTCREATOR_SETTER(groupChecker, setGroupChecker);
QTCREATOR_SETTER(openExternalLinks, setOpenExternalLinks);
QTCREATOR_SETTER2(size, setSize)
QTCREATOR_SETTER(text, setText)
QTCREATOR_SETTER(textFormat, setTextFormat);
QTCREATOR_SETTER(textInteractionFlags, setTextInteractionFlags);
QTCREATOR_SETTER(title, setTitle)
QTCREATOR_SETTER(toolTip, setToolTip);
QTCREATOR_SETTER(windowTitle, setWindowTitle);
QTCREATOR_SETTER(wordWrap, setWordWrap);
QTCREATOR_SETTER2(columnStretch, setColumnStretch);
QTCREATOR_SETTER2(onClicked, onClicked);
QTCREATOR_SETTER2(onLinkHovered, onLinkHovered);
QTCREATOR_SETTER2(onTextChanged, onTextChanged);
class WordWrapId {};
auto wordWrap(auto p) { return IdAndArg{WordWrapId{}, p}; }
void doit(auto x, WordWrapId, auto p) { x->setWordWrap(p); }
class TextInteractionFlagId {};
auto textInteractionFlags(auto p) { return IdAndArg{TextInteractionFlagId{}, p}; }
void doit(auto x, TextInteractionFlagId, auto p) { x->setTextInteractionFlags(p); }
class OpenExternalLinksId {};
auto openExternalLinks(auto p) { return IdAndArg{OpenExternalLinksId{}, p}; }
void doit(auto x, OpenExternalLinksId, auto p) { x->setOpenExternalLinks(p); }
class OnLinkHoveredId {};
auto onLinkHovered(auto p, QObject *guard) { return IdAndArg{OnLinkHoveredId{}, std::pair{p, guard}}; }
void doit(auto x, OnLinkHoveredId, auto p) { x->onLinkHovered(p.first, p.second); }
class GroupCheckerId {};
auto groupChecker(auto p) { return IdAndArg{GroupCheckerId{}, p}; }
void doit(auto x, GroupCheckerId, auto p) { x->setGroupChecker(p); }
class ToolTipId {};
auto toolTip(auto p) { return IdAndArg{ToolTipId{}, p}; }
void doit(auto x, ToolTipId, auto p) { x->setToolTip(p); }
class WindowTitleId {};
auto windowTitle(auto p) { return IdAndArg{WindowTitleId{}, p}; }
void doit(auto x, WindowTitleId, auto p) { x->setWindowTitle(p); }
class OnTextChangedId {};
auto onTextChanged(auto p) { return IdAndArg{OnTextChangedId{}, p}; }
void doit(auto x, OnTextChangedId, auto p) { x->onTextChanged(p); }
class OnClickedId {};
auto onClicked(auto p, auto guard) { return IdAndArg{OnClickedId{}, std::pair{p, guard}}; }
void doit(auto x, OnClickedId, auto p) { x->onClicked(p.first, p.second); }
class CustomMarginId {};
inline auto customMargin(const QMargins &p) { return IdAndArg{CustomMarginId{}, p}; }
void doit(auto x, CustomMarginId, auto p) { x->customMargin(p); }
class FieldGrowthPolicyId {};
inline auto fieldGrowthPolicy(auto p) { return IdAndArg{FieldGrowthPolicyId{}, p}; }
void doit(auto x, FieldGrowthPolicyId, auto p) { x->fieldGrowthPolicy(p); }
class ColumnStretchId {};
inline auto columnStretch(int column, int stretch) { return IdAndArg{ColumnStretchId{}, std::pair{column, stretch}}; }
void doit(auto x, ColumnStretchId, auto p) { x->setColumnStretch(p.first, p.second); }
QTCREATOR_TYPED_SETTER(customMargin, setContentMargins, const QMargins &);
// Nesting dispatchers