forked from qt-creator/qt-creator
LayoutBuilder: Update manual test to latest syntax changes
Change-Id: I9bf07e4ae896df0640a81847d33514b1f488a024 Reviewed-by: Jarek Kobus <jaroslaw.kobus@qt.io>
This commit is contained in:
@@ -696,7 +696,7 @@ Widget::Widget(std::initializer_list<I> ps)
|
|||||||
apply(this, ps);
|
apply(this, ps);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Widget::resize(int w, int h)
|
void Widget::setSize(int w, int h)
|
||||||
{
|
{
|
||||||
access(this)->resize(w, h);
|
access(this)->resize(w, h);
|
||||||
}
|
}
|
||||||
|
@@ -39,7 +39,7 @@ class QVBoxLayout;
|
|||||||
class QWidget;
|
class QWidget;
|
||||||
QT_END_NAMESPACE
|
QT_END_NAMESPACE
|
||||||
|
|
||||||
namespace Layouting {
|
namespace Building {
|
||||||
|
|
||||||
class NestId {};
|
class NestId {};
|
||||||
|
|
||||||
@@ -58,13 +58,6 @@ void doit(auto x, auto id, auto p);
|
|||||||
template <typename X> class BuilderItem
|
template <typename X> class BuilderItem
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
// Nested child object
|
|
||||||
template <typename Inner>
|
|
||||||
BuilderItem(Inner && p)
|
|
||||||
{
|
|
||||||
apply = [&p](X *x) { doit(x, NestId{}, std::forward<Inner>(p)); };
|
|
||||||
}
|
|
||||||
|
|
||||||
// Property setter
|
// Property setter
|
||||||
template <typename Id, typename Arg>
|
template <typename Id, typename Arg>
|
||||||
BuilderItem(IdAndArg<Id, Arg> && idarg)
|
BuilderItem(IdAndArg<Id, Arg> && idarg)
|
||||||
@@ -72,9 +65,31 @@ public:
|
|||||||
apply = [&idarg](X *x) { doit(x, Id{}, idarg.arg); };
|
apply = [&idarg](X *x) { doit(x, Id{}, idarg.arg); };
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Nested child object
|
||||||
|
template <typename Inner>
|
||||||
|
BuilderItem(Inner && p)
|
||||||
|
{
|
||||||
|
apply = [&p](X *x) { doit(x, NestId{}, std::forward<Inner>(p)); };
|
||||||
|
}
|
||||||
|
|
||||||
std::function<void(X *)> apply;
|
std::function<void(X *)> apply;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#define QTC_DEFINE_BUILDER_SETTER(name, setter) \
|
||||||
|
class name##_TAG {}; \
|
||||||
|
template <typename ...Args> \
|
||||||
|
inline auto name(Args &&...args) { \
|
||||||
|
return Building::IdAndArg{name##_TAG{}, std::tuple<Args...>{std::forward<Args>(args)...}}; \
|
||||||
|
} \
|
||||||
|
template <typename L, typename ...Args> \
|
||||||
|
inline void doit(L *x, name##_TAG, const std::tuple<Args...> &arg) { \
|
||||||
|
std::apply(&L::setter, std::tuple_cat(std::make_tuple(x), arg)); \
|
||||||
|
}
|
||||||
|
|
||||||
|
} // Building
|
||||||
|
|
||||||
|
|
||||||
|
namespace Layouting {
|
||||||
|
|
||||||
//////////////////////////////////////////////
|
//////////////////////////////////////////////
|
||||||
|
|
||||||
@@ -92,7 +107,7 @@ class QTCREATOR_UTILS_EXPORT Object : public Thing
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
using Implementation = QObject;
|
using Implementation = QObject;
|
||||||
using I = BuilderItem<Object>;
|
using I = Building::BuilderItem<Object>;
|
||||||
|
|
||||||
Object() = default;
|
Object() = default;
|
||||||
Object(std::initializer_list<I> ps);
|
Object(std::initializer_list<I> ps);
|
||||||
@@ -111,7 +126,7 @@ class QTCREATOR_UTILS_EXPORT Layout : public Object
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
using Implementation = QLayout;
|
using Implementation = QLayout;
|
||||||
using I = BuilderItem<Layout>;
|
using I = Building::BuilderItem<Layout>;
|
||||||
|
|
||||||
Layout() = default;
|
Layout() = default;
|
||||||
Layout(Implementation *w) { ptr = w; }
|
Layout(Implementation *w) { ptr = w; }
|
||||||
@@ -174,7 +189,7 @@ class QTCREATOR_UTILS_EXPORT Column : public Layout
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
using Implementation = QVBoxLayout;
|
using Implementation = QVBoxLayout;
|
||||||
using I = BuilderItem<Column>;
|
using I = Building::BuilderItem<Column>;
|
||||||
|
|
||||||
Column(std::initializer_list<I> ps);
|
Column(std::initializer_list<I> ps);
|
||||||
};
|
};
|
||||||
@@ -183,7 +198,7 @@ class QTCREATOR_UTILS_EXPORT Row : public Layout
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
using Implementation = QHBoxLayout;
|
using Implementation = QHBoxLayout;
|
||||||
using I = BuilderItem<Row>;
|
using I = Building::BuilderItem<Row>;
|
||||||
|
|
||||||
Row(std::initializer_list<I> ps);
|
Row(std::initializer_list<I> ps);
|
||||||
};
|
};
|
||||||
@@ -192,7 +207,7 @@ class QTCREATOR_UTILS_EXPORT Form : public Layout
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
using Implementation = QFormLayout;
|
using Implementation = QFormLayout;
|
||||||
using I = BuilderItem<Form>;
|
using I = Building::BuilderItem<Form>;
|
||||||
|
|
||||||
Form();
|
Form();
|
||||||
Form(std::initializer_list<I> ps);
|
Form(std::initializer_list<I> ps);
|
||||||
@@ -202,7 +217,7 @@ class QTCREATOR_UTILS_EXPORT Grid : public Layout
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
using Implementation = QGridLayout;
|
using Implementation = QGridLayout;
|
||||||
using I = BuilderItem<Grid>;
|
using I = Building::BuilderItem<Grid>;
|
||||||
|
|
||||||
Grid();
|
Grid();
|
||||||
Grid(std::initializer_list<I> ps);
|
Grid(std::initializer_list<I> ps);
|
||||||
@@ -248,7 +263,7 @@ class QTCREATOR_UTILS_EXPORT Widget : public Object
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
using Implementation = QWidget;
|
using Implementation = QWidget;
|
||||||
using I = BuilderItem<Widget>;
|
using I = Building::BuilderItem<Widget>;
|
||||||
|
|
||||||
Widget() = default;
|
Widget() = default;
|
||||||
Widget(std::initializer_list<I> ps);
|
Widget(std::initializer_list<I> ps);
|
||||||
@@ -257,7 +272,7 @@ public:
|
|||||||
QWidget *emerge() const;
|
QWidget *emerge() const;
|
||||||
|
|
||||||
void show();
|
void show();
|
||||||
void resize(int, int);
|
void setSize(int, int);
|
||||||
void setLayout(const Layout &layout);
|
void setLayout(const Layout &layout);
|
||||||
void setWindowTitle(const QString &);
|
void setWindowTitle(const QString &);
|
||||||
void setToolTip(const QString &);
|
void setToolTip(const QString &);
|
||||||
@@ -270,7 +285,7 @@ class QTCREATOR_UTILS_EXPORT Label : public Widget
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
using Implementation = QLabel;
|
using Implementation = QLabel;
|
||||||
using I = BuilderItem<Label>;
|
using I = Building::BuilderItem<Label>;
|
||||||
|
|
||||||
Label(std::initializer_list<I> ps);
|
Label(std::initializer_list<I> ps);
|
||||||
Label(const QString &text);
|
Label(const QString &text);
|
||||||
@@ -282,7 +297,7 @@ class QTCREATOR_UTILS_EXPORT Group : public Widget
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
using Implementation = QGroupBox;
|
using Implementation = QGroupBox;
|
||||||
using I = BuilderItem<Group>;
|
using I = Building::BuilderItem<Group>;
|
||||||
|
|
||||||
Group(std::initializer_list<I> ps);
|
Group(std::initializer_list<I> ps);
|
||||||
|
|
||||||
@@ -294,7 +309,7 @@ class QTCREATOR_UTILS_EXPORT SpinBox : public Widget
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
using Implementation = QSpinBox;
|
using Implementation = QSpinBox;
|
||||||
using I = BuilderItem<SpinBox>;
|
using I = Building::BuilderItem<SpinBox>;
|
||||||
|
|
||||||
SpinBox(std::initializer_list<I> ps);
|
SpinBox(std::initializer_list<I> ps);
|
||||||
|
|
||||||
@@ -306,7 +321,7 @@ class QTCREATOR_UTILS_EXPORT PushButton : public Widget
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
using Implementation = QPushButton;
|
using Implementation = QPushButton;
|
||||||
using I = BuilderItem<PushButton>;
|
using I = Building::BuilderItem<PushButton>;
|
||||||
|
|
||||||
PushButton(std::initializer_list<I> ps);
|
PushButton(std::initializer_list<I> ps);
|
||||||
|
|
||||||
@@ -318,7 +333,7 @@ class QTCREATOR_UTILS_EXPORT TextEdit : public Widget
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
using Implementation = QTextEdit;
|
using Implementation = QTextEdit;
|
||||||
using I = BuilderItem<TextEdit>;
|
using I = Building::BuilderItem<TextEdit>;
|
||||||
using Id = Implementation *;
|
using Id = Implementation *;
|
||||||
|
|
||||||
TextEdit(std::initializer_list<I> ps);
|
TextEdit(std::initializer_list<I> ps);
|
||||||
@@ -330,7 +345,7 @@ class QTCREATOR_UTILS_EXPORT Splitter : public Widget
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
using Implementation = QSplitter;
|
using Implementation = QSplitter;
|
||||||
using I = BuilderItem<Splitter>;
|
using I = Building::BuilderItem<Splitter>;
|
||||||
|
|
||||||
Splitter(std::initializer_list<I> items);
|
Splitter(std::initializer_list<I> items);
|
||||||
};
|
};
|
||||||
@@ -339,7 +354,7 @@ class QTCREATOR_UTILS_EXPORT Stack : public Widget
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
using Implementation = QStackedWidget;
|
using Implementation = QStackedWidget;
|
||||||
using I = BuilderItem<Stack>;
|
using I = Building::BuilderItem<Stack>;
|
||||||
|
|
||||||
Stack() : Stack({}) {}
|
Stack() : Stack({}) {}
|
||||||
Stack(std::initializer_list<I> items);
|
Stack(std::initializer_list<I> items);
|
||||||
@@ -360,7 +375,7 @@ class QTCREATOR_UTILS_EXPORT TabWidget : public Widget
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
using Implementation = QTabWidget;
|
using Implementation = QTabWidget;
|
||||||
using I = BuilderItem<TabWidget>;
|
using I = Building::BuilderItem<TabWidget>;
|
||||||
|
|
||||||
TabWidget(std::initializer_list<I> items);
|
TabWidget(std::initializer_list<I> items);
|
||||||
};
|
};
|
||||||
@@ -369,7 +384,7 @@ class QTCREATOR_UTILS_EXPORT ToolBar : public Widget
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
using Implementation = QToolBar;
|
using Implementation = QToolBar;
|
||||||
using I = Layouting::BuilderItem<ToolBar>;
|
using I = Building::BuilderItem<ToolBar>;
|
||||||
|
|
||||||
ToolBar(std::initializer_list<I> items);
|
ToolBar(std::initializer_list<I> items);
|
||||||
};
|
};
|
||||||
@@ -411,7 +426,7 @@ class BindToId {};
|
|||||||
template <typename T>
|
template <typename T>
|
||||||
auto bindTo(T **p)
|
auto bindTo(T **p)
|
||||||
{
|
{
|
||||||
return IdAndArg{BindToId{}, p};
|
return Building::IdAndArg{BindToId{}, p};
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename Interface>
|
template <typename Interface>
|
||||||
@@ -421,7 +436,7 @@ void doit(Interface *x, BindToId, auto p)
|
|||||||
}
|
}
|
||||||
|
|
||||||
class IdId {};
|
class IdId {};
|
||||||
auto id(auto p) { return IdAndArg{IdId{}, p}; }
|
auto id(auto p) { return Building::IdAndArg{IdId{}, p}; }
|
||||||
|
|
||||||
template <typename Interface>
|
template <typename Interface>
|
||||||
void doit(Interface *x, IdId, auto p)
|
void doit(Interface *x, IdId, auto p)
|
||||||
@@ -431,49 +446,24 @@ void doit(Interface *x, IdId, auto p)
|
|||||||
|
|
||||||
// Setter dispatchers
|
// 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); }
|
|
||||||
|
|
||||||
class TextId {};
|
QTC_DEFINE_BUILDER_SETTER(fieldGrowthPolicy, setFieldGrowthPolicy)
|
||||||
auto text(auto p) { return IdAndArg{TextId{}, p}; }
|
QTC_DEFINE_BUILDER_SETTER(groupChecker, setGroupChecker)
|
||||||
void doit(auto x, TextId, auto p) { x->setText(p); }
|
QTC_DEFINE_BUILDER_SETTER(openExternalLinks, setOpenExternalLinks)
|
||||||
|
QTC_DEFINE_BUILDER_SETTER(size, setSize)
|
||||||
class TitleId {};
|
QTC_DEFINE_BUILDER_SETTER(text, setText)
|
||||||
auto title(auto p) { return IdAndArg{TitleId{}, p}; }
|
QTC_DEFINE_BUILDER_SETTER(textFormat, setTextFormat)
|
||||||
void doit(auto x, TitleId, auto p) { x->setTitle(p); }
|
QTC_DEFINE_BUILDER_SETTER(textInteractionFlags, setTextInteractionFlags)
|
||||||
|
QTC_DEFINE_BUILDER_SETTER(title, setTitle)
|
||||||
class GroupCheckerId {};
|
QTC_DEFINE_BUILDER_SETTER(toolTip, setToolTip)
|
||||||
auto groupChecker(auto p) { return IdAndArg{GroupCheckerId{}, p}; }
|
QTC_DEFINE_BUILDER_SETTER(windowTitle, setWindowTitle)
|
||||||
void doit(auto x, GroupCheckerId, auto p) { x->setGroupChecker(p); }
|
QTC_DEFINE_BUILDER_SETTER(wordWrap, setWordWrap);
|
||||||
|
QTC_DEFINE_BUILDER_SETTER(orientation, setOrientation);
|
||||||
class ToolTipId {};
|
QTC_DEFINE_BUILDER_SETTER(columnStretch, setColumnStretch)
|
||||||
auto toolTip(auto p) { return IdAndArg{ToolTipId{}, p}; }
|
QTC_DEFINE_BUILDER_SETTER(onClicked, onClicked)
|
||||||
void doit(auto x, ToolTipId, auto p) { x->setToolTip(p); }
|
QTC_DEFINE_BUILDER_SETTER(onLinkHovered, onLinkHovered)
|
||||||
|
QTC_DEFINE_BUILDER_SETTER(onTextChanged, onTextChanged)
|
||||||
class WindowTitleId {};
|
QTC_DEFINE_BUILDER_SETTER(customMargins, setContentsMargins)
|
||||||
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); }
|
|
||||||
|
|
||||||
// Nesting dispatchers
|
// Nesting dispatchers
|
||||||
|
|
||||||
@@ -528,7 +518,7 @@ void doit_nested(Splitter *outer, auto inner)
|
|||||||
}
|
}
|
||||||
|
|
||||||
template <class Inner>
|
template <class Inner>
|
||||||
void doit(auto outer, NestId, Inner && inner)
|
void doit(auto outer, Building::NestId, Inner && inner)
|
||||||
{
|
{
|
||||||
doit_nested(outer, std::forward<Inner>(inner));
|
doit_nested(outer, std::forward<Inner>(inner));
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user