forked from qt-creator/qt-creator
Utils: Simplify builderutils code
Use variadic template for Arg class. Change-Id: I04fa001ac2b6e733d4f6c20d976c1658faad7904 Reviewed-by: hjk <hjk@qt.io>
This commit is contained in:
@@ -25,43 +25,11 @@ public:
|
|||||||
const Arg arg; // FIXME: Could be const &, but this would currently break bindTo().
|
const Arg arg; // FIXME: Could be const &, but this would currently break bindTo().
|
||||||
};
|
};
|
||||||
|
|
||||||
template<typename T1, typename T2>
|
template <typename ...Args>
|
||||||
struct Arg2
|
struct ArgTuple
|
||||||
{
|
{
|
||||||
Arg2(const T1 &a1, const T2 &a2)
|
ArgTuple(Args &&...args) : args(std::forward<Args>(args)...) {}
|
||||||
: p1(a1)
|
const std::tuple<std::decay_t<Args>...> args;
|
||||||
, p2(a2)
|
|
||||||
{}
|
|
||||||
const T1 p1;
|
|
||||||
const T2 p2;
|
|
||||||
};
|
|
||||||
|
|
||||||
template<typename T1, typename T2, typename T3>
|
|
||||||
struct Arg3
|
|
||||||
{
|
|
||||||
Arg3(const T1 &a1, const T2 &a2, const T3 &a3)
|
|
||||||
: p1(a1)
|
|
||||||
, p2(a2)
|
|
||||||
, p3(a3)
|
|
||||||
{}
|
|
||||||
const T1 p1;
|
|
||||||
const T2 p2;
|
|
||||||
const T3 p3;
|
|
||||||
};
|
|
||||||
|
|
||||||
template<typename T1, typename T2, typename T3, typename T4>
|
|
||||||
struct Arg4
|
|
||||||
{
|
|
||||||
Arg4(const T1 &a1, const T2 &a2, const T3 &a3, const T4 &a4)
|
|
||||||
: p1(a1)
|
|
||||||
, p2(a2)
|
|
||||||
, p3(a3)
|
|
||||||
, p4(a4)
|
|
||||||
{}
|
|
||||||
const T1 p1;
|
|
||||||
const T2 p2;
|
|
||||||
const T3 p3;
|
|
||||||
const T4 p4;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
// The main dispatcher
|
// The main dispatcher
|
||||||
@@ -90,22 +58,13 @@ public:
|
|||||||
|
|
||||||
#define QTC_DEFINE_BUILDER_SETTER(name, setter) \
|
#define QTC_DEFINE_BUILDER_SETTER(name, setter) \
|
||||||
class name##_TAG {}; \
|
class name##_TAG {}; \
|
||||||
inline auto name(auto p) { return Building::IdAndArg{name##_TAG{}, p}; } \
|
template <typename ...Args> \
|
||||||
inline void doit(auto x, name##_TAG, auto p) { x->setter(p); }
|
inline auto name(Args &&...args) { \
|
||||||
|
return Building::IdAndArg{name##_TAG{}, Building::ArgTuple<Args...>{std::forward<Args>(args)...}}; \
|
||||||
#define QTC_DEFINE_BUILDER_SETTER2(name, setter) \
|
} \
|
||||||
class name##_TAG {}; \
|
template <typename L, typename ...Args> \
|
||||||
inline auto name(auto p1, auto p2) { return Building::IdAndArg{name##_TAG{}, Building::Arg2{p1, p2}}; } \
|
inline void doit(L *x, name##_TAG, const Building::ArgTuple<Args...> &arg) { \
|
||||||
inline void doit(auto x, name##_TAG, auto p) { x->setter(p.p1, p.p2); }
|
std::apply(&L::setter, std::tuple_cat(std::make_tuple(x), arg.args)); \
|
||||||
|
}
|
||||||
#define QTC_DEFINE_BUILDER_SETTER3(name, setter) \
|
|
||||||
class name##_TAG {}; \
|
|
||||||
inline auto name(auto p1, auto p2, auto p3) { return Building::IdAndArg{name##_TAG{}, Building::Arg3{p1, p2, p3}}; } \
|
|
||||||
inline void doit(auto x, name##_TAG, auto p) { x->setter(p.p1, p.p2, p.p3); }
|
|
||||||
|
|
||||||
#define QTC_DEFINE_BUILDER_SETTER4(name, setter) \
|
|
||||||
class name##_TAG {}; \
|
|
||||||
inline auto name(auto p1, auto p2, auto p3, auto p4) { return Building::IdAndArg{name##_TAG{}, Building::Arg4{p1, p2, p3, p4}}; } \
|
|
||||||
inline void doit(auto x, name##_TAG, auto p) { x->setter(p.p1, p.p2, p.p3, p.p4); }
|
|
||||||
|
|
||||||
} // Building
|
} // Building
|
||||||
|
@@ -414,12 +414,11 @@ QTC_DEFINE_BUILDER_SETTER(toolTip, setToolTip)
|
|||||||
QTC_DEFINE_BUILDER_SETTER(windowTitle, setWindowTitle)
|
QTC_DEFINE_BUILDER_SETTER(windowTitle, setWindowTitle)
|
||||||
QTC_DEFINE_BUILDER_SETTER(wordWrap, setWordWrap);
|
QTC_DEFINE_BUILDER_SETTER(wordWrap, setWordWrap);
|
||||||
QTC_DEFINE_BUILDER_SETTER(orientation, setOrientation);
|
QTC_DEFINE_BUILDER_SETTER(orientation, setOrientation);
|
||||||
QTC_DEFINE_BUILDER_SETTER2(columnStretch, setColumnStretch)
|
QTC_DEFINE_BUILDER_SETTER(columnStretch, setColumnStretch)
|
||||||
QTC_DEFINE_BUILDER_SETTER2(onClicked, onClicked)
|
QTC_DEFINE_BUILDER_SETTER(onClicked, onClicked)
|
||||||
QTC_DEFINE_BUILDER_SETTER2(onLinkHovered, onLinkHovered)
|
QTC_DEFINE_BUILDER_SETTER(onLinkHovered, onLinkHovered)
|
||||||
QTC_DEFINE_BUILDER_SETTER2(onTextChanged, onTextChanged)
|
QTC_DEFINE_BUILDER_SETTER(onTextChanged, onTextChanged)
|
||||||
QTC_DEFINE_BUILDER_SETTER2(stretchFactor, setStretchFactor)
|
QTC_DEFINE_BUILDER_SETTER(customMargins, setContentsMargins)
|
||||||
QTC_DEFINE_BUILDER_SETTER4(customMargins, setContentsMargins)
|
|
||||||
|
|
||||||
// Nesting dispatchers
|
// Nesting dispatchers
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user