YSTest: YControl.h 源文件

YSTest PreAlpha_b800_20170810 The YSLib Test Project

- 首页
- 相关页面
- 模块
- 命名空间
- 类
- 文件

- 文件列表
- 文件成员

YControl.h
浏览该文件的文档.
1 /*
2 © 2010-2016 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
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 EventMapping::MapType 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 PDefH(EventMapping::ItemType&, GetItem, VisualEvent id) const
86 ImplI(AController)
87 ImplRet(EventMap.at(id))
88 EventMapping::ItemType&
89 GetItemRef(VisualEvent, EventMapping::MappedType(&)()) const override;
91 DefGetter(const ynothrow, EventMapping::MapType&, EventMap, EventMap)
93
95 PDefH(void, SetEventEnabled, VisualEvent id, bool b) ImplI(AController)
96 ImplExpr(event_mask[id] = !b)
97
99 DefClone(const ImplI(AController), Controller)
100 };
101
102
106 inline PDefH(bool, IsEnabled, const IWidget& wgt)
107 ImplRet(wgt.GetController().IsEnabled())
108
112 inline PDefH(void, SetEnabledOf, IWidget& wgt, bool b)
113 ImplExpr(wgt.GetController().SetEnabled(b))
114
120 YF_API bool
121 Enable(IWidget&, bool = true);
122
123
134 template<VisualEvent _vID>
135 inline GEvent<typename EventTypeMapping<_vID>::HandlerType::FuncType>&
136 FetchEvent(IWidget& wgt)
137 {
138 return FetchEvent<_vID>(wgt.GetController());
139 }
140
146 template<VisualEvent _vID, typename _tEventArgs>
147 inline size_t
148 CallEvent(IWidget& wgt, _tEventArgs&& e)
149 {
150 using HandlerType = typename EventTypeMapping<_vID>::HandlerType;
151 static_assert(std::is_convertible<ystdex::remove_reference_t<_tEventArgs>,
152 ystdex::remove_reference_t<typename EventArgsHead<typename
153 HandlerType::TupleType>::type>>(),
154 "Invalid event argument type found @ CallEvent;");
155
156 TryRet(DoEvent<HandlerType>(wgt.GetController(), _vID, std::move(e)))
157 CatchIgnore(BadEvent&)
158 return 0;
159 }
160
161
162 //公共事件处理器。
163
171 template<VisualEvent _vID, class _tEventArgs>
172 inline void
173 OnEvent_Call(_tEventArgs&& e)
174 {
175 CallEvent<_vID>(e.GetSender(), e);
176 }
177
182 template<class _tEventArgs>
183 inline void
184 OnEvent_StopRouting(_tEventArgs&& e)
185 {
186 e.Handled = true;
187 }
188
189
194 YF_API void
195 OnUIEvent_Invalidate(UIEventArgs&&);
196
197
201 YF_API void
202 OnKeyHeld(KeyEventArgs&&);
203
213 YF_API void
214 OnTouchDown_RequestToFrontFocused(CursorEventArgs&&);
215
221 YF_API void
222 OnTouchHeld(CursorEventArgs&&);
223
229 YF_API void
230 OnTouchHeld_Dragging(CursorEventArgs&&);
231
237 YF_API void
238 OnTouchHeld_DraggingRaw(CursorEventArgs&&, IWidget&);
239
240
248 YF_API void
249 OnKey_Bound_TouchUp(KeyEventArgs&&);
250
258 YF_API void
259 OnKey_Bound_TouchDown(KeyEventArgs&&);
260
267 YF_API void
268 OnKey_Bound_Click(KeyEventArgs&&);
269
270
275 class YF_API Control : public Widget
276 {
277 protected:
283 DefExtendEventMap(YF_API ControlEventMap, VisualEventMap)
284
285 public:
292 std::function<observer_ptr<IWidget>(const KeyInput&)> BoundControlPtr;
293
302 explicit
303 Control(const Rect& = {});
309 explicit
310 Control(const Rect&, HBrush);
314 Control(const Control&);
315 DefDeMoveCtor(Control)
320 ~Control() override;
321
326 virtual PDefH(observer_ptr<IWidget>, GetBoundControlPtr, const KeyInput&)
327 ImplRet(nullptr)
328
329
335 void
336 OnTouch_Close(CursorEventArgs&&);
337 };
338
339
344 enum class CursorState
345 {
346 Outside,
347 Over,
348 Pressed
349 };
350
351 } // namespace UI;
352
353 } // namespace YSLib;
354
355 #endif
356
YSLib::UI::BadEvent
错误或不存在的部件事件异常。
Definition: YWidgetEvent.h:499
YSLib::UI::EventMapping::MappedType
GEventPointerWrapper< UIEventArgs && > MappedType
映射项类型。
Definition: YWidgetEvent.h:482
YSLib::UI::PDefH
PDefH(void, DisplayFor, IWidget &wgt, Timers::TimeSpan delay) ImplExpr(Show(wgt)
在一定时间内显示部件。
YSLib::UI::ynothrow
AView &y ynothrow
Definition: YWidgetView.cpp:47
YSLib::UI::Controller
部件控制器。
Definition: YControl.h:53
YSLib::UI::args
yconstfn const string _tParams && args
Definition: Loader.h:131
YSLib::GEvent
事件模板。
Definition: YEvent.hpp:306
YSLib
YSLib 命名空间。
Definition: AndroidHost.h:45
YSLib::UI::Controller::Controller
Controller(bool b, _tParams &&...args)
Definition: YControl.h:76
YSLib::UI::EventTypeMapping
Definition: YWidgetEvent.h:440
UI
YSLib::UI::CursorEventArgs
指针设备输入事件参数类。
Definition: YWidgetEvent.h:210
YSLib::UI::OnKey_Bound_Click
YF_API void OnKey_Bound_Click(KeyEventArgs &&)
处理按键事件：按键-指针设备按下。
Definition: YControl.cpp:172
YSLib::UI::FetchEvent
GEvent< typename EventTypeMapping< _vID >::HandlerType::FuncType > & FetchEvent(IWidget &wgt)
取部件事件。
Definition: YControl.h:136
YSLib::UI::OnTouchDown_RequestToFrontFocused
YF_API void OnTouchDown_RequestToFrontFocused(CursorEventArgs &&)
处理屏幕接触开始事件：使用一般接触策略。
Definition: YControl.cpp:119
YSLib::UI::Controller::event_mask
std::bitset< MaxEvent > event_mask
指定是否启用的掩码。
Definition: YControl.h:67
YSLib::UI::wgt
IWidget & wgt
Definition: YControl.h:112
DefDeMoveCtor
#define DefDeMoveCtor(_t)
Definition: YBaseMacro.h:167
ImplI
#define ImplI(...)
Definition: YBaseMacro.h:388
YSLib::UI::ImplRet
const IWidget &wgt ImplRet(wgt.GetView().IsVisible()) bool YF_API Contains(const IWidget &
判断点是否在部件的可视区域内。
YSLib::UI::OnKeyHeld
YF_API void OnKeyHeld(KeyEventArgs &&)
处理键接触保持事件。
Definition: YControl.cpp:109
TryRet
#define TryRet(...)
指定表达式在 try 块中求值并返回。
Definition: YBaseMacro.h:124
CatchIgnore
#define CatchIgnore(_ex)
指定异常处理器忽略指定异常。
Definition: YBaseMacro.h:133
YSLib::UI::OnEvent_StopRouting
void OnEvent_StopRouting(_tEventArgs &&e)
处理事件：停止事件路由。
Definition: YControl.h:184
DefClone
#define DefClone(_q, _t)
动态复制。
Definition: YBaseMacro.h:294
YSLib::UI::OnUIEvent_Invalidate
YF_API void OnUIEvent_Invalidate(UIEventArgs &&)
处理用户界面事件：无效化发送者。
Definition: YControl.cpp:103
YSLib::UI::EventMapping::ItemType
GIHEvent< UIEventArgs && > ItemType
Definition: YWidgetEvent.h:483
YSLib::UI::CursorState
CursorState
指针设备光标相对控件的状态。
Definition: YControl.h:344
YSLib::UI::CallEvent
size_t CallEvent(IWidget &wgt, _tEventArgs &&e)
调用部件事件，并忽略 BadEvent 异常。
Definition: YControl.h:148
YSLib::UI::VisualEvent
VisualEvent
标准控件事件空间。
Definition: YWidgetEvent.h:370
YSLib::UI::Controller::Controller
Controller(bool b)
Definition: YControl.h:71
YSLib::UI::Widget
部件。
Definition: YWidget.h:369
YSLib::UI::Enable
bool Enable(IWidget &wgt, bool b)
Definition: YControl.cpp:91
YSLib::UI::OnTouchHeld_Dragging
YF_API void OnTouchHeld_Dragging(CursorEventArgs &&)
处理屏幕接触移动事件：拖放按下部件。
Definition: YControl.cpp:145
YSLib::UI::VisualEventMap
EventMapping::MapType VisualEventMap
Definition: YWidgetEvent.h:491
YSLib::EventArgsHead
Definition: YEvent.hpp:787
YSLib::UI::AController
抽象控制器。
Definition: YWidgetEvent.h:539
YF_API
#define YF_API
Definition: Platform.h:56
Drawing
YSLib::UI::HBrush
std::function< void(PaintEventArgs &&)> HBrush
画刷回调函数。
Definition: YComponent.h:81
platform::KeyInput
std::bitset< KeyBitsetWidth > KeyInput
按键并行位宽。
Definition: Keys.h:67
YSLib::UI::e
void e
Definition: YWidget.h:352
YModules.h
YSLib::UI::KeyEventArgs
按键输入事件参数类。
Definition: YWidgetEvent.h:186
YSLib::Drawing::Rect
屏幕标准矩形：表示屏幕矩形区域。
Definition: YGDIBase.h:540
YSLib::UI::SetEnabledOf
SetEnabledOf
Definition: YControl.h:112
YSLib::UI::OnKey_Bound_TouchDown
YF_API void OnKey_Bound_TouchDown(KeyEventArgs &&)
处理按键事件：按键-指针设备接触开始。
Definition: YControl.cpp:166
ystdex::cpp2014::remove_reference_t
typename remove_reference< _type >::type remove_reference_t
Definition: type_traits.hpp:299
YSLib::UI::Control
控件。
Definition: YControl.h:275
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::CursorState::Outside
yforward
#define yforward(_expr)
根据参数类型使用 std::forward 传递对应参数。
Definition: ydef.h:995
YSLib::UI::UIEventArgs
用户界面事件参数基类。
Definition: YWidgetEvent.h:59
DefExtendEventMap
#define DefExtendEventMap(_n, _b)
定义扩展事件映射类。
Definition: YEvent.hpp:956
YSLib::UI::Controller::EventMap
EventMapping::MapType EventMap
事件映射表。
Definition: YControl.h:60
YSLib::UI::OnEvent_Call
void OnEvent_Call(_tEventArgs &&e)
处理事件：直接转发至发送者。
Definition: YControl.h:173
YSLib::UI::EventMapping::MapType
map< VisualEvent, MappedType > MapType
映射表类型。
Definition: YWidgetEvent.h:485
YSLib::UI::CursorState::Pressed
YSLib::UI::OnTouchHeld_DraggingRaw
YF_API void OnTouchHeld_DraggingRaw(CursorEventArgs &&, IWidget &)
处理屏幕接触移动事件：拖放指定部件。
Definition: YControl.cpp:152
YSLib::UI::OnKey_Bound_TouchUp
YF_API void OnKey_Bound_TouchUp(KeyEventArgs &&)
处理按键事件：按键-指针设备接触结束。
Definition: YControl.cpp:160
YSLib::UI::CursorState::Over
YSLib::UI::OnTouchHeld
YF_API void OnTouchHeld(CursorEventArgs &&)
处理屏幕接触保持事件。
Definition: YControl.cpp:132