YSTest: Menu.h 源文件

YSTest PreAlpha_b700_20160611 The YSLib Test Project

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

- 文件列表
- 文件成员

Menu.h
浏览该文件的文档.
1 /*
2 © 2011-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_Menu_h_
29 #define YSL_INC_UI_Menu_h_ 1
30
31 #include "YModules.h"
32 #include YFM_YSLib_UI_ListControl
33 #include YFM_YSLib_UI_YUIContainer // for UI::ZOrder;
34 #include <ystdex/cast.hpp> // for ystdex::polymorphic_downcast;
35
36 namespace YSLib
37 {
38
39 namespace UI
40 {
41
42 class MenuHost;
43
48 yconstexpr const ZOrder DefaultMenuZOrder(224);
49
50
57 class YF_API Menu : public TextList
58 {
59 friend class MenuHost;
60
61 public:
63 using SubMap = map<IndexType, observer_ptr<Menu>>;
65 using ValueType = SubMap::value_type;
66
67 protected:
69
70 observer_ptr<MenuHost> pHost{};
73 observer_ptr<Menu> pParent{};
75 SubMap mSubMenus{};
78 mutable vector<bool> vDisabled;
79
80 public:
85 explicit
86 Menu(const Rect& = {}, const shared_ptr<ListType>& = {});
92 DefDelMoveCtor(Menu)
97 ~Menu() override;
98
103 void
104 operator+=(const ValueType&);
105
110 bool
111 operator-=(IndexType);
112
118 bool
119 IsItemEnabled(ListType::size_type) const;
120
122 DefGetter(const ynothrow, observer_ptr<Menu>, ParentPtr, pParent)
123
124
130 void
131 SetItemEnabled(ListType::size_type idx, bool = true);
132
133 protected:
138 void
139 AdjustSize() const;
140
141 public:
148 bool
149 Show();
150
157 observer_ptr<Menu>
158 ShowSub(IndexType);
159
165 void
166 TryShowingSub(IndexType);
167
172 bool
173 Hide();
174
180 PDefH(Menu&, at, size_t idx)
181 ImplRet(*mSubMenus.at(idx))
182 };
183
188 YF_API void
189 LocateMenu(Menu&, const Menu&, Menu::IndexType);
190
191
197 class YF_API MenuHost : private noncopyable
198 {
199 private:
201 set<lref<Menu>, ystdex::get_less<Menu>> menus{};
202
203 public:
210 map<lref<IWidget>, observer_ptr<Menu>, ystdex::get_less<IWidget>> Roots{};
211
213 DefDeCtor(MenuHost)
214
215
219 void
220 operator+=(Menu&);
221
227 bool
228 operator-=(Menu&);
229
234 bool
235 IsShowing(Menu&) const;
236
241 PDefH(bool, Contains, Menu& mnu) const
242 ImplRet(ystdex::exists(menus, ystdex::ref(mnu)))
243
248 void
249 Clear();
250
256 void
257 Show(Menu&);
258
263 void
264 ShowAll();
265
266 private:
272 void
273 ShowRaw(Menu& mnu);
274
275 public:
280 void
281 Hide(Menu&);
282
286 void
287 HideAll();
288
289 private:
294 void
295 HideRaw(Menu& mnu);
296
297 public:
304 void
305 HideUnrelated(Menu& mnu, Menu& mnuParent);
306 };
307
308
314 YF_API void
315 BindTopLevelPopupMenu(MenuHost&, Menu&, IWidget&,
316 KeyIndex k = KeyCodes::Secondary);
317
318 } // namespace UI;
319
320 } // namespace YSLib;
321
322 #endif
323
YSLib::UI::DefaultMenuZOrder
yconstexpr const ZOrder DefaultMenuZOrder(224)
默认菜单 Z 顺序值。
YSLib::UI::BindTopLevelPopupMenu
YF_API void BindTopLevelPopupMenu(MenuHost &, Menu &, IWidget &, KeyIndex k=KeyCodes::Secondary)
绑定顶层部件的按键事件弹出菜单。
Definition: Menu.cpp:374
ystdex::composed
复合函数。
Definition: functional.hpp:619
yconstexpr
#define yconstexpr
指定编译时常量表达式。
Definition: ydef.h:653
YSLib::UI::Hide
YF_API void Hide(IWidget &)
隐藏部件。
Definition: YWidget.cpp:100
YSLib::UI::ZOrder
std::uint8_t ZOrder
Z 顺序类型：覆盖顺序，值越大表示越接近顶层。
Definition: YUIContainer.h:176
platform::KeyCodes
本机按键编码。
Definition: Keys.h:203
YSLib
YSLib 命名空间。
Definition: AndroidHost.h:45
YSLib::UI::Menu::SubMap
map< IndexType, observer_ptr< Menu >> SubMap
子菜单映射表类型。
Definition: Menu.h:63
YSLib::UI::ImplRet
const IWidget &wgt ImplRet(wgt.GetView().IsVisible()) bool YF_API Contains(const IWidget &
判断点是否在部件的可视区域内。
DefDeCtor
#define DefDeCtor(_t)
简单通用成员函数定义。
Definition: YBaseMacro.h:156
YSLib::UI::Menu::vDisabled
vector< bool > vDisabled
未启用菜单项。
Definition: Menu.h:78
DefGetter
#define DefGetter(_q, _t, _n,...)
Definition: YBaseMacro.h:240
YSLib::ynothrow
YB_PURE const _type size_t n ynothrow
Definition: YCoreUtilities.h:168
cast.hpp
C++ 转换模板。
YSLib::Drawing::Rect
屏幕标准矩形：表示屏幕矩形区域。
Definition: YGDIBase.h:540
ystdex
特性测试宏。
Definition: ydef.h:796
YSLib::UI::Show
YF_API void Show(IWidget &)
显示部件。
Definition: YWidget.cpp:202
YSLib::UI::LocateMenu
void LocateMenu(Menu &dst, const Menu &src, Menu::IndexType idx)
Definition: Menu.cpp:263
UI
platform::KeyIndex
size_t KeyIndex
按键索引类型：标识特定的按键在按键集合中的位置。
Definition: Keys.h:42
YSLib::UI::MenuHost
菜单宿主。
Definition: Menu.h:197
YModules.h
ystdex::noncopyable
不可复制对象：禁止派生类调用默认原型的复制构造函数和复制赋值操作符。
Definition: base.h:41
platform::KeyCodes::DS::Secondary
Definition: Keys.h:263
YSLib::UI::TextList
文本列表。
Definition: ListControl.h:201
YF_API
#define YF_API
Definition: Platform.h:56
YSLib::UI::Menu::ValueType
SubMap::value_type ValueType
子菜单映射表项目类型。
Definition: Menu.h:65
YSLib::UI::PDefH
PDefH(void, DisplayFor, IWidget &wgt, Timers::TimeSpan delay) ImplExpr(Show(wgt)
在一定时间内显示部件。
platform::KeyCategory::Menu
表示菜单键（如 Menu 和 Win ）。
Definition: Keys.h:131
DefDelMoveCtor
#define DefDelMoveCtor(_t)
Definition: YBaseMacro.h:168
YSLib::UI::Menu
菜单。
Definition: Menu.h:57
ystdex::details::exists
bool exists(const _tCon &con, const _tKey &key, decltype(std::declval< _tCon >().count())=1U)
Definition: container.hpp:523
ystdex::ref
lref< _type > ref(_type &t)
构造引用包装。
Definition: ref.hpp:120