Support more args when switching screens

This commit is contained in:
2022-02-02 17:38:52 +01:00
parent b07438977b
commit 41a5b304c1
2 changed files with 37 additions and 1 deletions

View File

@@ -15,8 +15,12 @@ public:
void triggered() override { switchScreen<Tscreen>(); }
};
template<typename Tscreen, typename ...Targs>
class SwitchScreenActionArgs;
template<typename Tscreen, typename T1>
class SwitchScreenActionArgs : public virtual ActionInterface
class SwitchScreenActionArgs<Tscreen, T1> : public virtual ActionInterface
{
public:
SwitchScreenActionArgs(T1 &&arg1) :
@@ -31,4 +35,24 @@ public:
private:
T1 m_arg1;
};
template<typename Tscreen, typename T1, typename T2>
class SwitchScreenActionArgs<Tscreen, T1, T2> : public virtual ActionInterface
{
public:
SwitchScreenActionArgs(T1 &&arg1, T2 &&arg2) :
m_arg1{std::move<T1>(arg1)},
m_arg2{std::move<T2>(arg2)}
{}
SwitchScreenActionArgs(const T1 &arg1, const T2 &arg2) :
m_arg1{arg1},
m_arg2{arg2}
{}
void triggered() override { switchScreen<Tscreen>(std::move(m_arg1), std::move(m_arg2)); }
private:
T1 m_arg1;
T2 m_arg2;
};
} // namespace espgui

View File

@@ -47,6 +47,18 @@ public:
}
};
template <typename T1, typename T2, typename T3, typename ...T4>
class makeComponentArgs2x2 : public T1, public T2, public T3, public T4...
{
public:
template<typename Targ1, typename Targ2, typename Targ3, typename Targ4>
makeComponentArgs2x2(Targ1&& arg1, Targ2&& arg2, Targ3&& arg3, Targ4&& arg4) :
T2{std::forward<Targ1>(arg1), std::forward<Targ2>(arg2)},
T3{std::forward<Targ3>(arg3), std::forward<Targ4>(arg4)}
{
}
};
class Display : public virtual ButtonsInterface
{
public: