YSTest: YSLib::UI::Menu类 参考

YSTest PreAlpha_b700_20160611 The YSLib Test Project

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

- 类列表
- 类索引
- 类继承关系
- 类成员

Public 类型 | Public 成员函数 | Protected 成员函数 | Protected 属性 | 友元 | 相关函数 | 所有成员列表
YSLib::UI::Menu类 参考

菜单。 更多...

`#include <Menu.h>`

类 YSLib::UI::Menu 继承关系图:
[图例]
YSLib::UI::Menu 的协作图:
[图例]

## Public 类型

using | SubMap = map< IndexType, observer_ptr< Menu >>
| 子菜单映射表类型。 更多...
using | ValueType = SubMap::value_type
| 子菜单映射表项目类型。 更多...
Public 类型 继承自 YSLib::UI::TextList
enum | SelectionOption : size_t { ClearSelectionOnConfirm, ClearSelectionOnLeave, SelectOnHover, SelectionOptionMax }
| 选择操作选项。 更多...
Public 类型 继承自 YSLib::UI::MTextList
using | ItemType = String
| 项目类型：字符串。 更多...
using | ListType = vector< ItemType >
| 列表类型。 更多...
using | IndexType = typename ListType::size_type
| 索引类型。 更多...
Public 类型 继承自 YSLib::UI::AMUnitControlList
using | ViewArgs = GValueEventArgs< bool >
| 视图参数类型。 更多...

## Public 成员函数

| Menu (const Rect &={}, const shared_ptr< ListType > &={})
| 构造：使用指定边界、文本列表和菜单标识。 更多...
| DefDelMoveCtor (Menu)~Menu() override
| 禁止转移构造。 更多...
void | operator+= (const ValueType &)
| 向子菜单组添加关联索引和指针指定的菜单。 更多...
bool | operator-= (IndexType)
| 向菜单组移除指定子菜单索引项。 更多...
bool | IsItemEnabled (ListType::size_type) const
| 判断菜单项是否有效。 更多...
bool | Show ()
| 显示菜单。 更多...
observer_ptr< Menu > | ShowSub (IndexType)
| 显示索引指定的子菜单。 更多...
void | TryShowingSub (IndexType)
| 尝试显示索引指定的子菜单并选择子菜单的首个菜单项。 更多...
bool | Hide ()
| 隐藏菜单。 更多...
Public 成员函数 继承自 YSLib::UI::TextList
| TextList (const Rect &={}, const shared_ptr< ListType > &={}, const pair< Color, Color > &=FetchGUIConfiguration().Colors.GetPair(Styles::Highlight, Styles::HighlightText))
| 构造：使用指定边界、文本列表和高亮背景色/文本色对。 更多...
| DefDeMoveCtor (TextList) DefPredMem(const ynothrow
vwList | PDefH (bool, Contains, ListType::size_type i) const ynothrow ImplRet(vwList.Contains(i)) DefGetter(override
vwList | WidgetRange (begin(), end())) DefGetterMem(const ynothrow
vwList vwList size_t | GetLastLabelIndex () const
| DefGetterMem (const ynothrow, ListType::size_type, SelectedIndex, vwList) PDefH(Rect
size_t idx | ImplRet (Rect(GetUnitLocation(idx), GetWidth(), GetItemHeight())) void SetList(const shared_ptr< ListType > &)
| 设置文本列表。 更多...
void | SetSelected (ListType::size_type)
| 按指定项目索引设置选中项目。 更多...
void | LocateViewPosition (SDst)
| 定位视图顶端至指定竖直位置。 更多...
void | Refresh (PaintEventArgs &&) override
| 刷新：按指定参数绘制界面并更新状态。 更多...
void | ResetView ()
| 复位视图：调用 MUnitList::ResetView 和 UpdateView 。 更多...
void | SelectFirst ()
| 选择第一个项目。 更多...
void | SelectLast ()
| 选择最后一个项目。 更多...
WidgetIterator | begin ()
WidgetIterator | end ()
Public 成员函数 继承自 YSLib::UI::Widget
| Widget (const Rect &={})
| Widget (const Rect &, HBrush)
template<typename _tView , typename _tRenderer , typename _tController >
| Widget (_tView &&pView_=make_unique< View >(), _tRenderer &&pRenderer_=make_unique< Renderer >(), _tController &&pController_={})
| 构造：使用视图指针、渲染器指针和控制器指针，无背景。 更多...
| Widget (const Widget &)
| 复制构造：除容器指针为空外深复制。 更多...
| DefDelMoveCtor (Widget) virtual ~Widget()
| since build 428 更多...
| DefGetter (ImplI(IWidget), WidgetRange, Children, WidgetRange()) static HBrush MakeBlankBrush()
| 取空白画刷。 更多...
| DefGetter (const ImplI(IWidget), AController &, Controller, Deref(controller_ptr)) DefGetterMem(const ynothrow
| GetView ()) DefGetter(const ImplI(IWidget)
Renderer | Deref (renderer_ptr)) DefGetter(const ImplI(IWidget)
Renderer AView | Deref (view_ptr)) DefGetterMem(const ynothrow
Renderer AView | GetView ()) DefGetterMem(const ynothrow
Renderer AView | GetView ()) DefGetterMem(const ynothrow
Renderer AView | GetView ()) DefSetterMem(
Renderer AView | GetView ()) DefSetterMem(
Renderer AView | GetView ()) DefSetterMem(
Renderer AView | GetView ()) DefSetterMem(
Renderer AView | GetView ()) void SetRenderer(unique_ptr< Renderer >)
| 设置渲染器为指定指针指向的对象，同时更新渲染器状态。 更多...
void | SetView (unique_ptr< AView >)
| 设置视图为指定指针指向的对象。 更多...
Public 成员函数 继承自 YSLib::UI::MTextList
| MTextList (const shared_ptr< ListType > &={})
| 构造：使用文本列表句柄。 更多...
| DefDeMoveCtor (MTextList) DefGetter(const ynothrow
| 取文本列表。 更多...
size_t | GetTotal () const ImplI(AMUnitList)
| 取文本列表引用。 更多...
void | SetList (const shared_ptr< ListType > &)
| 设置文本列表。 更多...
Public 成员函数 继承自 YSLib::UI::AMUnitControlList
| AMUnitControlList (unique_ptr< IWidget >)
| 构造：使用部件指针。 更多...
IWidget & | GetUnitRef () const ImplI(AMUnitList)
void | SetUnit (unique_ptr< IWidget >)
| 设置单元部件。 更多...
WidgetIterator | MakeIterator (size_t)
| 构造共享子部件迭代器。 更多...

## Protected 成员函数

void | AdjustSize () const
| 设置 idx 指定的菜单项的可用性。 更多...
Protected 成员函数 继承自 YSLib::UI::TextList
void | InvalidateSelected (ListType::difference_type offset, ListType::size_type diff=1)
| 按内容大小依次调整视图中选中和首个项目的索引，然后按需调整竖直偏移量。 更多...
void | InvalidateSelected2 (ListType::difference_type, ListType::difference_type)
| 无效化偏移量对应的列表项区域。 更多...
Protected 成员函数 继承自 YSLib::UI::Control
| Control (const Rect &, HBrush)
| 构造：使用指定边界和背景画刷。 更多...
| Control (const Control &)
| 复制构造：除容器为空外深复制。 更多...
| DefDeMoveCtor (Control)~Control() override
| 虚析构：类定义外默认实现。 更多...
virtual | PDefH (observer_ptr< IWidget >, GetBoundControlPtr, const KeyInput &) ImplRet(nullptr) void OnTouch_Close(CursorEventArgs &&)
| 取按键-指针设备输入默认事件组映射。 更多...
Protected 成员函数 继承自 YSLib::UI::AMUnitList
virtual SDst | GetItemHeightCore () const
| 取默认行高：实现。 更多...
virtual | DefDeDtor (AMUnitList) bool CyclicTraverse
| 循环选择遍历。 更多...
SDst | GetFullViewHeight () const
| 取完整视图高。 更多...
SDst | GetItemHeight () const
| 取项目行高：调用 GetItemHeightCore 取结果。 更多...
size_t | GetLastLabelIndexClipped (SPos, SDst) const
| DefGetter (const ynothrow, size_t, SharedIndex, idxShared) DefGetter(const ynothrow
uTopOffset | DeclIEntry (size_t GetTotal() const) DeclIEntry(IWidget &GetUnitRef() const ) Point GetUnitLocation(size_t) const
| 取单元总数。 更多...
SDst | GetViewPosition () const
| 取视图顶端竖直位置。 更多...
SDst | AdjustBottomForHeight (SDst, SDst)
| 调整列表视图底项目（可能不完全）超出下边界以上的竖直偏移量为零。 更多...
SDst | AdjustOffsetForHeight (SDst, bool)
| 调整列表视图底项目的竖直偏移量为零。 更多...
void | AdjustViewForContent (SDst)
| 按内容大小依次调整视图中选中和首个项目的索引，然后按需调整竖直偏移量。 更多...
void | AdjustViewLengthForHeight (SDst, SDst)
| 根据指定的单元部件的高和视图可视区域的高调整视图长度。 更多...
size_t | CheckPoint (const Size &, const Point &)
| 检查点（相对左上角）是否在选择范围内， 更多...
void | ResetView ()
| 复位视图。 更多...
Protected 成员函数 继承自 YSLib::UI::MHilightText
| MHilightText (const Color &bc, const Color &fc)
template<class _type >
| MHilightText (const _type &pr)

## Protected 属性

SubMap | mSubMenus {}
| 子菜单映射表：存储非空子菜单指针。 更多...
vector< bool > | vDisabled
| 未启用菜单项。 更多...
observer_ptr< MenuHost > | pHost {}
| 宿主指针。 更多...
observer_ptr< Menu > | pParent {}
| 父菜单指针。 更多...
Protected 属性 继承自 YSLib::UI::MTextList
shared_ptr< ListType > | hList
| 文本列表句柄。 更多...
Protected 属性 继承自 YSLib::UI::AMUnitList
SequenceViewer | vwList {}
| 列表视图。 更多...
SDst | uTopOffset = 0
| 列表视图首项目超出上边界的竖直偏移量。 更多...
size_t | idxShared = size_t(-1)
| SDst
| TopOffset
Protected 属性 继承自 YSLib::UI::MHilightText
Color | HilightBackColor
| 高亮背景色。 更多...
Color | HilightTextColor
| 高亮文本色。 更多...

## 友元

class | MenuHost

## 相关函数

(请注意: 这些不是成员函数.)
YF_API void | LocateMenu (Menu &, const Menu &, Menu::IndexType)
| 定位菜单：以第二个参数作为参考父菜单，按指定参考偏移索引定位菜单。 更多...
相关函数 继承自 YSLib::UI::TextList
YF_API void | ResizeForContent (TextList &)
| 根据文本内容调整文本列表大小。 更多...
YF_API void | UpdateView (TextList &, bool is_active={})
| 更新文本列表视图。 更多...
相关函数 继承自 YSLib::UI::Widget
template<class... _tWidgets>
void | InvalidateWidgets (_tWidgets &...wgts)
| 向无效化部件。 更多...
template<class _tRenderer >
_tRenderer & | WrapRenderer (Widget &wgt, unique_ptr< _tRenderer > p_renderer)
| 包装渲染器：设置渲染器并返回被设置的渲染器引用。 更多...

## 额外继承的成员函数

Public 属性 继承自 YSLib::UI::TextList
Color | ForeColor {Drawing::ColorSpace::Black}
| 默认前景色。 更多...
| Selected
vwList | WidgetRange
vwList | Children
vwList | HeadIndex
| GetUnitBounds
std::bitset< SelectionOptionMax > | SelectionOptions {}
| 选择操作选项。 更多...
std::function< bool(IWidget &)> | IsRelated {}
| 判断是否为 Leave 目标时不取消选择的相关部件。 更多...
Public 属性 继承自 YSLib::UI::Widget
HBrush | Background
| 背景。 更多...
| SDst
| Height
Renderer | Renderer
Renderer AView | View
Renderer AView | SDst
Renderer AView | Width
Renderer AView | SPos
Renderer AView | X
Renderer AView | Y
Renderer AView | Height
Public 属性 继承自 YSLib::UI::MTextList
MLabel | LabelBrush {}
const ListType | List
Public 属性 继承自 YSLib::UI::AMUnitControlList
GEvent< void(ViewArgs)> | ViewChanged
| 视图变更事件。 更多...
GEvent< void(IndexEventArgs)> | Selected
| 项目选择状态变更事件。 更多...
GEvent< void(IndexEventArgs)> | Confirmed
| 项目选中确认事件。 更多...
GEvent< void(size_t)> | Iterated
| 迭代器迭代事件。 更多...

## 详细描述

菜单。

注解
  LabelBrush 非强异常安全：不抛出异常时保持每次绘制最后项目的状态。

自从
  build 252

待办事项:
  允许表示非文本内容。

在文件 Menu.h 第 57 行定义.

## 成员类型定义说明

using YSLib::UI::Menu::SubMap = map<IndexType, observer_ptr<Menu>>

子菜单映射表类型。

在文件 Menu.h 第 63 行定义.

using YSLib::UI::Menu::ValueType = SubMap::value_type

子菜单映射表项目类型。

在文件 Menu.h 第 65 行定义.

## 构造及析构函数说明

YSLib::UI::Menu::Menu | ( | const Rect & | r = `{}`,
|  | const shared_ptr< ListType > & | h = `{}`
| ) |  |

explicit

构造：使用指定边界、文本列表和菜单标识。

自从
  build 537

在文件 Menu.cpp 第 42 行定义.

参考 YSLib::UI::Widget::Background, YSLib::UI::BackgroundPriority(), YSLib::UI::RoutedEventArgs::Bubble, YSLib::UI::AMUnitList::CheckPoint(), YSLib::UI::TextList::ClearSelectionOnConfirm, YSLib::UI::TextList::ClearSelectionOnLeave, YSLib::UI::AMUnitControlList::Confirmed, YSLib::Drawing::DrawArrow(), YSLib::UI::e, platform::KeyCodes::DS::Esc, ystdex::exists(), YSLib::UI::FetchGUIConfiguration(), YSLib::UI::FetchGUIState(), YSLib::UI::MLabel::ForeColor, YSLib::UI::GetBoundsOf, YSLib::UI::GetSizeOf, YSLib::UI::AMUnitControlList::GetUnitRef(), YSLib::UI::Styles::GrayText, Hide(), YSLib::i, YSLib::UI::AMUnitList::idxShared, IsItemEnabled(), YSLib::UI::TextList::IsRelated, YSLib::UI::AMUnitControlList::Iterated, YSLib::UI::MTextList::LabelBrush, YSLib::UI::Left, ystdex::make_observer(), YSLib::UI::MLabel::Margin, mSubMenus, platform::p, YSLib::UI::Styles::Panel, pHost, YSLib::Drawing::RDeg0, YSLib::UI::Right, YSLib::UI::TextList::SelectionOptions, YSLib::UI::TextList::SelectOnHover, YSLib::UI::SetEnabledOf, ShowSub(), TryShowingSub(), YSLib::UI::wgt, YB_LIKELY , 以及 yunseq.

函数调用图:

## 成员函数说明

void YSLib::UI::Menu::AdjustSize | ( |  | ) | const

protected

设置 idx 指定的菜单项的可用性。

自从
  build 672

前置条件
  断言： `IsInInterval(idx, GetList().size())` 。

后置条件
  `vDisabled.size() == GetList().size()` ； IsItemEnabled(idx) 。

调整 vDisabled 大小。

后置条件
  `vDisabled.size() == GetList().size()` 。

在文件 Menu.cpp 第 206 行定义.

参考 ystdex::size() , 以及 vDisabled.

参考自 IsItemEnabled().

函数调用图:

这是这个函数的调用关系图:

YSLib::UI::Menu::DefDelMoveCtor | ( | Menu |  | ) |

override

禁止转移构造。

自从
  build 379

待办事项:
  实现转移操作。

虚析构：类定义外默认实现。

自从
  build 586

bool YSLib::UI::Menu::Hide | ( |  | ) |

隐藏菜单。

注解
  菜单宿主指针为空时忽略。

在文件 Menu.cpp 第 215 行定义.

参考 pHost.

参考自 Menu().

这是这个函数的调用关系图:

bool YSLib::UI::Menu::IsItemEnabled | ( | ListType::size_type | idx | ) | const

判断菜单项是否有效。

前置条件
  断言： `IsInInterval(idx, GetList().size())` 。

后置条件
  `vDisabled.size() == GetList().size()` 。

在文件 Menu.cpp 第 190 行定义.

参考 AdjustSize(), YSLib::IsInInterval(), ystdex::size(), vDisabled , 以及 YSLib::YAssert().

参考自 Menu().

函数调用图:

这是这个函数的调用关系图:

void YSLib::UI::Menu::operator+= | ( | const ValueType & |  | ) |

向子菜单组添加关联索引和指针指定的菜单。

注解
  若索引越界或菜单指针为空则忽略。

bool YSLib::UI::Menu::operator-= | ( | IndexType | idx | ) |

向菜单组移除指定子菜单索引项。

注解
  若索引越界或不存在则忽略。

在文件 Menu.cpp 第 173 行定义.

参考 YSLib::i, YSLib::IsInInterval(), mSubMenus , 以及 ystdex::size().

函数调用图:

bool YSLib::UI::Menu::Show | ( |  | ) |

显示菜单。

注解
  菜单宿主指针为空时忽略。

返回
  菜单宿主指针非空。

自从
  build 574

在文件 Menu.cpp 第 226 行定义.

参考 pHost.

observer_ptr< Menu > YSLib::UI::Menu::ShowSub | ( | IndexType | idx | ) |

显示索引指定的子菜单。

注解
  菜单宿主指针为空时忽略。

返回
  菜单宿主指针非空且索引指定的子菜单存在时为子菜单指针，否则为空指针。

自从
  build 672

在文件 Menu.cpp 第 237 行定义.

参考 YSLib::i, LocateMenu(), ystdex::make_observer(), mSubMenus , 以及 pHost.

参考自 Menu() , 以及 TryShowingSub().

函数调用图:

这是这个函数的调用关系图:

void YSLib::UI::Menu::TryShowingSub | ( | IndexType | idx | ) |

尝试显示索引指定的子菜单并选择子菜单的首个菜单项。

注解
  若不存在子菜单，不进行操作。

自从
  build 581

在文件 Menu.cpp 第 256 行定义.

参考 ShowSub().

参考自 Menu().

函数调用图:

这是这个函数的调用关系图:

## 友元及相关函数文档

YF_API void LocateMenu | ( | Menu & | ,
|  | const Menu & | ,
|  | Menu::IndexType |
| ) |  |

related

定位菜单：以第二个参数作为参考父菜单，按指定参考偏移索引定位菜单。

在文件 Menu.cpp 第 263 行定义.

参考自 ShowSub().

这是这个函数的调用关系图:

friend class MenuHost

friend

在文件 Menu.h 第 59 行定义.

## 类成员变量说明

SubMap YSLib::UI::Menu::mSubMenus {}

protected

子菜单映射表：存储非空子菜单指针。

在文件 Menu.h 第 76 行定义.

参考自 Menu(), operator-=() , 以及 ShowSub().

observer_ptr<MenuHost> YSLib::UI::Menu::pHost {}

protected

宿主指针。

自从
  build 672

在文件 Menu.h 第 71 行定义.

参考自 Hide(), YSLib::UI::LocateMenu(), Menu(), YSLib::UI::MenuHost::operator-=(), Show() , 以及 ShowSub().

observer_ptr<Menu> YSLib::UI::Menu::pParent {}

protected

父菜单指针。

在文件 Menu.h 第 73 行定义.

参考自 YSLib::UI::ImplDeDtor().

vector<bool> YSLib::UI::Menu::vDisabled

mutableprotected

未启用菜单项。

在文件 Menu.h 第 78 行定义.

参考自 AdjustSize() , 以及 IsItemEnabled().

该类的文档由以下文件生成:

- Menu.h
- Menu.cpp