YSTest: YControl.h 源文件

YSTest PreAlpha_b900_20201012 The YSLib Test Project

YControl.h
浏览该文件的文档.
1 /*
2 © 2010-2016, 2019-2020 FrankHB.
3
4 This file is part of the YSLib project, and may only be used,
5 modified, and distributed under the terms of the YSLib project
6 license, LICENSE.TXT. By continuing to use, modify, or distribute
7 this file you indicate that you have read the license and
8 understand and accept it fully.
9 */
10
28 #ifndef YSL_INC_UI_YControl_h_
29 #define YSL_INC_UI_YControl_h_ 1
30
31 #include "YModules.h"
32 #include YFM_YSLib_UI_YWidget // for function;
33 #include YFM_YSLib_UI_YWidgetEvent
34
35 namespace YSLib
36 {
37
38 namespace UI
39 {
40
46 using namespace Drawing;
47
53 class YF_API Controller : public AController
54 {
55 public:
60 mutable VisualEventMap EventMap;
61
62 private:
67 std::bitset<MaxEvent> event_mask;
68
69 public:
70 explicit
71 Controller(bool b)
72 : AController(b), EventMap()
73 {}
75 template<typename... _tParams>
76 Controller(bool b, _tParams&&... args)
77 : AController(b), EventMap(yforward(args)...)
78 {}
79
81
82 PDefH(bool, IsEventEnabled, VisualEvent id) const ImplI(AController)
83 ImplRet(AController::IsEnabled() && !event_mask[id])
84
85
86 PDefH(EventRef, GetEvent, VisualEvent id) const ImplI(AController)
87 ImplRet(EventRef(EventMap.at(id)))
89 EventRef
90 GetEventRef(VisualEvent, EventItem(&)()) const override;
92 DefGetter(const ynothrow, VisualEventMap&, EventMap, EventMap)
94
95
96 PDefH(void, SetEventEnabled, VisualEvent id, bool b) ImplI(AController)
97 ImplExpr(event_mask[id] = !b)
98
100 DefClone(const ImplI(AController), Controller)
101 };
102
103
107 inline PDefH(bool, IsEnabled, const IWidget& wgt)
108 ImplRet(wgt.GetController().IsEnabled())
109
113 inline PDefH(void, SetEnabledOf, IWidget& wgt, bool b)
114 ImplExpr(wgt.GetController().SetEnabled(b))
115
121 YF_API bool
122 Enable(IWidget&, bool = true);
123
124
135 template<VisualEvent _vID>
136 inline EventOf<_vID>&
137 FetchEvent(IWidget& wgt)
138 {
139 return FetchEvent<_vID>(wgt.GetController());
140 }
141
147 template<VisualEvent _vID, typename _tEventArgs>
148 inline size_t
149 CallEvent(IWidget& wgt, _tEventArgs&& e)
150 {
151 TryRet(DoEvent<HandlerOf<_vID>>(wgt.GetController(), _vID, std::move(e)))
152 CatchIgnore(BadEvent&)
153 return 0;
154 }
155
156
157 //公共事件处理器。
158
166 template<VisualEvent _vID, class _tEventArgs>
167 inline void
168 OnEvent_Call(_tEventArgs&& e)
169 {
170 CallEvent<_vID>(e.GetSender(), e);
171 }
172
177 template<class _tEventArgs>
178 inline void
179 OnEvent_StopRouting(_tEventArgs&& e)
180 {
181 e.Handled = true;
182 }
183
184
189 YF_API void
190 OnUIEvent_Invalidate(UIEventArgs&&);
191
192
196 YF_API void
197 OnKeyHeld(KeyEventArgs&&);
198
208 YF_API void
209 OnTouchDown_RequestToFrontFocused(CursorEventArgs&&);
210
216 YF_API void
217 OnTouchHeld(CursorEventArgs&&);
218
224 YF_API void
225 OnTouchHeld_Dragging(CursorEventArgs&&);
226
232 YF_API void
233 OnTouchHeld_DraggingRaw(CursorEventArgs&&, IWidget&);
234
235
243 YF_API void
244 OnKey_Bound_TouchUp(KeyEventArgs&&);
245
253 YF_API void
254 OnKey_Bound_TouchDown(KeyEventArgs&&);
255
262 YF_API void
263 OnKey_Bound_Click(KeyEventArgs&&);
264
265
270 class YF_API Control : public Widget
271 {
272 protected:
278 DefExtendEventMap(YF_API ControlEventMap, VisualEventMap)
279
280 public:
288 function<observer_ptr<IWidget>(const KeyInput&)> BoundControlPtr;
289
298 explicit
299 Control(const Rect& = {});
305 explicit
306 Control(const Rect&, HBrush);
310 Control(const Control&);
315 ~Control() override;
316
321 virtual PDefH(observer_ptr<IWidget>, GetBoundControlPtr, const KeyInput&)
322 ImplRet(nullptr)
323
324
330 void
331 OnTouch_Close(CursorEventArgs&&);
332 };
333
334
339 enum class CursorState
340 {
341 Outside,
342 Over,
343 Pressed
344 };
345
346 } // namespace UI;
347
348 } // namespace YSLib;
349
350 #endif
351
DefClone
#define DefClone(_q, _t)
动态复制。
Definition: YBaseMacro.h:294
YSLib::UI::Enable
bool Enable(IWidget &wgt, bool b)
Definition: YControl.cpp:91
YSLib::UI::ynothrow
AView &y ynothrow
Definition: YWidgetView.cpp:47
YSLib::GEvent
事件模板。
Definition: YEvent.hpp:488
CatchIgnore
#define CatchIgnore(_ex)
指定异常处理器忽略指定异常。
Definition: YBaseMacro.h:133
YSLib::UI::OnTouchHeld
YF_API void OnTouchHeld(CursorEventArgs &&)
处理屏幕接触保持事件。
Definition: YControl.cpp:132
YSLib::UI::OnKey_Bound_TouchUp
YF_API void OnKey_Bound_TouchUp(KeyEventArgs &&)
处理按键事件：按键-指针设备接触结束。
Definition: YControl.cpp:160
YSLib::UI::CursorState
CursorState
指针设备光标相对控件的状态。
Definition: YControl.h:340
YSLib::UI::CallEvent
size_t CallEvent(IWidget &wgt, _tEventArgs &&e)
调用部件事件，并忽略 BadEvent 异常。
Definition: YControl.h:149
YSLib::UI::PDefH
PDefH(void, DisplayFor, IWidget &wgt, Timers::TimeSpan delay) ImplExpr(Show(wgt)
在一定时间内显示部件。
ystdex::function_base
函数包装类模板。
Definition: function.hpp:578
YSLib::UI::Control::PDefH
virtual PDefH(observer_ptr< IWidget >, GetBoundControlPtr, const KeyInput &) ImplRet(nullptr) void OnTouch_Close(CursorEventArgs &&)
取按键-指针设备输入默认事件组映射。
YSLib::UI::Control
控件。
Definition: YControl.h:271
YSLib::UI::Widget
部件。
Definition: YWidget.h:374
YSLib::UI::CursorEventArgs
指针设备输入事件参数类。
Definition: YWidgetEvent.h:216
YSLib::UI::FetchEvent
EventOf< _vID > & FetchEvent(IWidget &wgt)
取部件事件。
Definition: YControl.h:137
YSLib::UI::AController
抽象控制器。
Definition: YWidgetEvent.h:599
YSLib::UI::OnKey_Bound_Click
YF_API void OnKey_Bound_Click(KeyEventArgs &&)
处理按键事件：按键-指针设备按下。
Definition: YControl.cpp:172
YF_API
#define YF_API
Definition: Platform.h:56
YSLib::UI::OnTouchHeld_DraggingRaw
YF_API void OnTouchHeld_DraggingRaw(CursorEventArgs &&, IWidget &)
处理屏幕接触移动事件：拖放指定部件。
Definition: YControl.cpp:152
YSLib::UI::DoEvent
size_t DoEvent(AController &controller, VisualEvent id, ystdex::parameter_of_t< 0, typename _tEventHandler::FuncType > &&e)
调用指定控制器和索引的事件。
Definition: YWidgetEvent.h:666
YSLib::UI::EventRef
事件引用。
Definition: YWidgetEvent.h:512
ystdex::map
映射容器。
Definition: map.hpp:79
YSLib::UI::args
yconstfn const string _tParams && args
Definition: Loader.h:131
DefExtendEventMap
#define DefExtendEventMap(_n, _b)
定义扩展事件映射类。
Definition: YEvent.hpp:894
ImplI
#define ImplI(...)
Definition: YBaseMacro.h:396
yforward
#define yforward(_expr)
根据参数类型使用 std::forward 转发对应参数。
Definition: ydef.h:1508
YSLib::UI::Controller::Controller
Controller(bool b, _tParams &&... args)
Definition: YControl.h:76
YSLib::UI::EventItem
ValueObject EventItem
事件映射项类型。
Definition: YWidgetEvent.h:505
YSLib::UI::VisualEvent
VisualEvent
标准控件事件空间。
Definition: YWidgetEvent.h:377
YSLib::UI::OnEvent_Call
void OnEvent_Call(_tEventArgs &&e)
处理事件：直接转发至发送者。
Definition: YControl.h:168
YSLib::UI::KeyEventArgs
按键输入事件参数类。
Definition: YWidgetEvent.h:193
YSLib::UI::Controller
部件控制器。
Definition: YControl.h:54
YSLib::UI::OnKeyHeld
YF_API void OnKeyHeld(KeyEventArgs &&)
处理键接触保持事件。
Definition: YControl.cpp:109
YSLib::UI::OnEvent_StopRouting
void OnEvent_StopRouting(_tEventArgs &&e)
处理事件：停止事件路由。
Definition: YControl.h:179
YSLib::UI::e
void e
Definition: YWidget.h:356
YSLib::Drawing::Rect
屏幕标准矩形：表示屏幕矩形区域。
Definition: YGDIBase.h:788
platform::KeyInput
std::bitset< KeyBitsetWidth > KeyInput
按键并行位宽。
Definition: Keys.h:67
YSLib
YSLib 命名空间。
Definition: AndroidHost.h:46
YSLib::UI::CursorState::Pressed
@ Pressed
YModules.h
YSLib 用户界面模块配置文件。
YSLib::UI::UIEventArgs
用户界面事件参数基类。
Definition: YWidgetEvent.h:61
YSLib::UI::wgt
IWidget & wgt
Definition: YControl.h:113
ystdex::map::at
mapped_type & at(const key_type &k)
Definition: map.hpp:334
YSLib::UI::CursorState::Over
@ Over
YSLib::_tParams
YB_ATTR_nodiscard YB_PURE typename _tParams
Definition: ValueNode.h:1294
YSLib::UI::HandlerOf
typename EventTypeMapping< _vID >::HandlerType HandlerOf
取索引指定的事件处理器类型。
Definition: YWidgetEvent.h:493
YSLib::UI::SetEnabledOf
SetEnabledOf
Definition: YControl.h:113
YSLib::UI::OnUIEvent_Invalidate
YF_API void OnUIEvent_Invalidate(UIEventArgs &&)
处理用户界面事件：无效化发送者。
Definition: YControl.cpp:103
DefGetter
#define DefGetter(_q, _t, _n,...)
Definition: YBaseMacro.h:241
YSLib::UI::ImplExpr
IWidget bool b ImplExpr(wgt.GetController().SetEnabled(b)) YF_API bool Enable(IWidget &
设置部件可用性，且当可用性改变时无效化部件区域。
YSLib::UI::Controller::event_mask
std::bitset< MaxEvent > event_mask
指定是否启用的掩码。
Definition: YControl.h:67
YSLib::UI::CursorState::Outside
@ Outside
YSLib::UI::Control::~Control
~Control() override
虚析构：类定义外默认实现。
YSLib::UI::BadEvent
错误或不存在的部件事件异常。
Definition: YWidgetEvent.h:559
const
const Decapsulate const Decapsulate &y ynothrow ContextNode &ctx const
Definition: NPLA1Forms.cpp:1629
YSLib::UI::Controller::EventMap
VisualEventMap EventMap
事件映射表。
Definition: YControl.h:60
TryRet
#define TryRet(...)
指定表达式在 try 块中求值并返回。
Definition: YBaseMacro.h:124
YSLib::UI::OnKey_Bound_TouchDown
YF_API void OnKey_Bound_TouchDown(KeyEventArgs &&)
处理按键事件：按键-指针设备接触开始。
Definition: YControl.cpp:166
YSLib::UI::OnTouchDown_RequestToFrontFocused
YF_API void OnTouchDown_RequestToFrontFocused(CursorEventArgs &&)
处理屏幕接触开始事件：使用一般接触策略。
Definition: YControl.cpp:119
YSLib::UI::ImplRet
const IWidget &wgt ImplRet(wgt.GetView().IsVisible()) YB_ATTR_nodiscard YB_PURE bool YF_API Contains(const IWidget &
判断点是否在部件的可视区域内。
YSLib::UI::Controller::Controller
Controller(bool b)
Definition: YControl.h:71
YSLib::UI::OnTouchHeld_Dragging
YF_API void OnTouchHeld_Dragging(CursorEventArgs &&)
处理屏幕接触移动事件：拖放按下部件。
Definition: YControl.cpp:145