28 #ifndef YSL_INC_UI_ywgtevt_h_
29 #define YSL_INC_UI_ywgtevt_h_ 1
32 #include YFM_YSLib_UI_YComponent
33 #include YFM_YSLib_Core_YEvent
34 #include YFM_YSLib_Core_YString
35 #include YFM_YSLib_Core_YDevice // for Devices::KeyInputDevice::Tester,
112 Strategy(strategy), Handled(false)
129 Tester{Devices::KeyInputDevice::DefaultTest};
152 PDefHOp(
bool, [],
KeyIndex code) const
196 RoutingStrategy = Direct);
202 DefCvt(
const ynothrow,
const InputType&, Position)
224 const InputType& = {}, RoutingStrategy = Direct);
240 RoutingStrategy = Direct);
251 template<
typename _type>
262 template<
typename... _tParams>
268 DefCvt(
const ynothrow, ValueType, Value)
279 PaintEventArgs(IWidget&,
const PaintContext&);
306 #define DefEventTypeMapping(_name, _tEventHandler) \
308 struct EventTypeMapping<_name> \
310 using HandlerType = _tEventHandler; \
380 template<VisualEvent>
420 namespace EventMapping
427 using SearchResult = pair<typename MapType::iterator, bool>; \
498 GetItemRef(const VisualEvent&
id, EventMapping::
MappedType(&)())
514 template<class _tEventHandler>
517 typename
EventArgsHead<typename _tEventHandler::TupleType>::type&& e)
521 return dynamic_cast<EventT(typename _tEventHandler)&
>(
522 controller.GetItem(
id))(std::move(e));
524 catch(std::out_of_range&)
526 catch(std::bad_cast&)
535 template<VisualEvent _vID>
556 template<VisualEvent _vID>
573 template<VisualEvent _vID>
574 EventT(
typename EventTypeMapping<_vID>::HandlerType)&
575 FetchEvent(AController& controller)
577 return dynamic_cast<EventT(typename EventTypeMapping<_vID>::HandlerType)&
>(
578 controller.GetItemRef(_vID, NewEvent<_vID>));
583 template<
class _tW
idget, VisualEvent _vID>
587 template<VisualEvent _vID,
class _tW
idget,
typename _fCallable>
594 template<VisualEvent _vID,
class _tTarget,
class _tW
idget,
typename _fCallable>
596 AddWidgetHandlerAdaptor(_tTarget&& target, _tWidget&
wgt, _fCallable&&
f)
598 return FetchEvent<_vID>(
yforward(target))
621 GetItem(const VisualEvent&);
#define DefDeDtor(_t)
定义默认析构函数。
std::size_t KeyIndex
按键索引类型:标识特定的按键在按键集合中的位置。
#define DefPred(_q, _n,...)
GWidgetHandlerAdaptor< _tWidget, _vID > MakeWidgetHandlerAdaptor(_tWidget &wgt, _fCallable &&f)
GEventPointerWrapper< UIEventArgs && > MappedType
映射项类型。
yconstfn const string _tParams && args
#define DefDeCopyCtor(_t)
GIHEvent< UIEventArgs && > ItemType
EventT(typename EventTypeMapping< _vID >::HandlerType)&FetchEvent(IWidget &wgt)
取部件事件。
YF_API EventMapping::ItemType & GetEvent(EventMapping::MapType &, const VisualEvent &, EventMapping::MappedType(&)())
在事件映射表中取指定 id 对应的事件。
yconstexpr EventPriority BoundaryPriority(0x60)
pair< VisualEvent, MappedType > PairType
#define yforward(_expr)
根据参数类型使用 std::forward 传递对应参数。
#define DefGetter(_q, _t, _n,...)
map< VisualEvent, MappedType > MapType
映射表类型。
pair< typename MapType::iterator, bool > SearchResult
搜索表结果类型。
PDefH(void, Activate, Console &console, Drawing::Color fc=Drawing::ColorSpace::White) ImplExpr(Activate(console
激活:使用指定屏幕、有效性、前景色和默认背景色。
YSLib 标准字符串(使用 UCS-2 作为内部编码)。
GBinaryGroup< SPos > Point
屏幕二维点(直角坐标表示)。
yconstexpr EventPriority ForegroundPriority(0x40)
RoutingStrategy Strategy
事件路由策略。
#define ynothrow
YSLib 无异常抛出保证:若支持 noexcept 关键字, 指定特定的 noexcept 异常规范。
GEventWrapper< EventT(HPaintEvent), UIEventArgs && > Paint
GSStringTemplate< char >::basic_string string
DeclDelegate(HScrollEvent, ScrollEventArgs) class YF_API ATrack
轨道。
#define DefSetter(_t, _n, _m)
EventMapping::MapType VisualEventMap
size_t DoEvent(AController &controller, const VisualEvent &id, typename EventArgsHead< typename _tEventHandler::TupleType >::type &&e)
#define yconstfn
指定编译时常量函数。
yconstfn GValueEventArgs(IWidget &wgt, _tParams &&...args)
构造:使用部件引用和值。
#define DefEventTypeMapping(_name, _tEventHandler)
#define DefClone(_q, _t)
动态复制。
const IWidget &wgt ImplRet(wgt.GetView().IsVisible()) bool YF_API Contains(const IWidget &
判断点是否在部件的可视区域内。
GHandlerAdaptor< _tWidget, typename EventTypeMapping< _vID >::HandlerType::BaseType > GWidgetHandlerAdaptor
RoutedEventArgs(IWidget &wgt, RoutingStrategy strategy=Direct)
ptrdiff_t WheelDelta
滚轮度量:以角度计量的转动滚轮的幅度。
#define yconstexpr
指定编译时常量表达式。
#define DefCvt(_q, _t,...)
BadEvent(const std::string &msg="")
AController(bool b=true)
构造:使用指定可用性。
UIEventArgs(IWidget &wgt)
EventMapping::MappedType NewEvent()
构造指针指向的 VisualEvent 指定的事件对象。
std::bitset< KeyBitsetWidth > KeyInput
按键并行位宽。
用户事件信号:表示携带用户事件的消息处理中断的异常。
#define DefDeCopyAssignment(_t)
std::function< bool(const KeyInput &, KeyIndex)> Tester
输入测试器:判断是否在指定索引上激活输入状态。
yconstexpr EventPriority BackgroundPriority(0xC0)
用户界面绘制优先级。
UIEventSignal(const std::string &msg="")