28 #ifndef YSL_INC_UI_Loader_h_
29 #define YSL_INC_UI_Loader_h_ 1
32 #include YFM_YSLib_UI_YUIContainer
33 #include YFM_YSLib_Core_ValueNode
52 template<
typename _tWidget,
typename... _tParams>
53 static unique_ptr<IWidget>
64 template<
typename _tWidget,
typename... _tParams>
77 return str.size() != 0 && str[0] !=
'$';
108 template<typename... _tParams>
115 AccessWidgetNode(node.at(
"$children").at(name),
yforward(args)...);
117 catch(std::out_of_range&)
119 throw WidgetNotFound(node.GetName(),
"Widget children not found.");
133 template<
typename... _tParams>
140 template<
class _tWidget,
typename... _tParams>
150 template<
typename... _tParams>
154 template<
typename... _tParams>
171 template<
typename... _tParams>
173 GWidgetRegister<_tParams...>, string, GWidgetCreator<_tParams...>>
179 ImplS(
Base) template<typename _tWidget, typename _fHandler>
201 template<
typename... _tParams>
203 GWidgetInserterRegister<_tParams...>, string, GWidgetInserter<_tParams...>>
209 ImplS(
Base) template<typename _tWidget, typename _fHandler>
236 LoadUILayout(
const string&);
250 std::reference_wrapper<WidgetLoader>
Loader;
254 : Loader(ldr), WidgetNode(ldr.LoadUILayout(str))
263 #define DeclDynWidget(_t, _n, ...) \
264 auto& _n(YSLib::UI::AccessWidget<_t>(__VA_ARGS__));
270 #define DeclDynWidgetN(_t, _n, ...) \
271 DeclDynWidget(_t, _n, __VA_ARGS__, #_n)
276 #define DeclDynWidgetNode(_t, _n) DeclDynWidgetN(_t, _n, node)
yconstfn const string _tParams && args
ImplS(Base) template< typename _tWidget
GWidgetCreator< _tParams...>GWidgetCreator< _tParams...> GetRegister() const ) template< typename..._tParams > auto Call(const string &key
DynamicWidget(WidgetLoader &ldr, const string &str)
加载器注册接口:加载一个或多个键和添加部件引用例程。
#define yforward(_expr)
根据参数类型使用 std::forward 传递对应参数。
std::reference_wrapper< WidgetLoader > Loader
PDefH(void, Activate, Console &console, Drawing::Color fc=Drawing::ColorSpace::White) ImplExpr(Activate(console
激活:使用指定屏幕、有效性、前景色和默认背景色。
yconstfn const string & name
static void InsertWidget(IWidget &wgt, _tParams &&...args)
注册部件加载器:添加部件引用。
ImplS(Base) template< typename _tWidget
GSStringTemplate< char >::basic_string string
注册处理器抽象模板:供派生类加载一个或多个键和指定类型关联的例程。
WidgetNotFound(const string &name, const std::string &s, LevelType l=Warning)
static unique_ptr< IWidget > CreateUniqueWidget(_tParams &&...args)
注册部件加载器:创建部件。
#define yconstfn
指定编译时常量函数。
IWidget & AccessWidget(const ValueNode &node, const string &name, _tParams &&...args)
const IWidget &wgt ImplRet(wgt.GetView().IsVisible()) bool YF_API Contains(const IWidget &
判断点是否在部件的可视区域内。
YF_API Rect ParseRect(const string &)
void AddWidget(_tCon &con, IWidget &wgt)
向部件添加单一子部件。
void(*)(IWidget &, _tParams...) GWidgetInserter
unique_ptr< IWidget >(*)(_tParams...) GWidgetCreator
bool CheckChildName(const string &str)