37 auto screen = App::TerminalOutput();
39 std::vector<std::string> entries{
40 "Monkey",
"Dog",
"Cat",
"Bird",
"Elephant",
"Cat",
42 std::array<int, 12> selected = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
44 auto vmenu_1_ =
VMenu1(&entries, &selected[0]);
45 auto vmenu_2_ =
VMenu2(&entries, &selected[1]);
46 auto vmenu_3_ =
VMenu3(&entries, &selected[2]);
47 auto vmenu_4_ =
VMenu4(&entries, &selected[3]);
48 auto vmenu_5_ =
VMenu5(&entries, &selected[4]);
49 auto vmenu_6_ =
VMenu6(&entries, &selected[5]);
50 auto vmenu_7_ =
VMenu7(&entries, &selected[6]);
51 auto vmenu_8_ =
VMenu8(&entries, &selected[7]);
53 auto hmenu_1_ =
HMenu1(&entries, &selected[8]);
54 auto hmenu_2_ =
HMenu2(&entries, &selected[9]);
55 auto hmenu_3_ =
HMenu3(&entries, &selected[10]);
56 auto hmenu_4_ =
HMenu4(&entries, &selected[11]);
57 auto hmenu_5_ =
HMenu5(&entries, &selected[12]);
59 auto container = Container::Vertical({
60 Container::Horizontal({
77 auto renderer =
Renderer(container, [&] {
111 screen.Loop(renderer);
115 auto option = MenuOption::Vertical();
116 option.entries_option.transform = [](EntryState state) {
117 state.label = (state.active ?
"> " :
" ") + state.label;
127 return Menu(entries, selected, option);
131 auto option = MenuOption::Vertical();
132 option.entries_option.transform = [](EntryState state) {
133 state.label += (state.active ?
" <" :
" ");
143 return Menu(entries, selected, option);
147 auto option = MenuOption::Vertical();
148 option.entries_option.transform = [](EntryState state) {
149 Element e = state.active ?
text(
"[" + state.label +
"]")
150 :
text(
" " + state.label +
" ");
156 e = e |
color(Color::Blue);
163 return Menu(entries, selected, option);
167 auto option = MenuOption::Vertical();
168 option.entries_option.transform = [](EntryState state) {
169 if (state.active && state.focused) {
183 return Menu(entries, selected, option);
187 auto option = MenuOption::Vertical();
188 option.entries_option.transform = [](EntryState state) {
190 if (state.active && state.focused) {
201 return Menu(entries, selected, option);
205 auto option = MenuOption::VerticalAnimated();
206 option.underline.color_inactive = Color::Default;
207 option.underline.color_active = Color::Red;
208 option.underline.SetAnimationFunction(animation::easing::Linear);
209 return Menu(entries, selected, option);
213 auto option = MenuOption::Vertical();
214 option.entries_option.animated_colors.foreground.enabled =
true;
215 option.entries_option.animated_colors.background.enabled =
true;
216 option.entries_option.animated_colors.background.active = Color::Red;
217 option.entries_option.animated_colors.background.inactive = Color::Black;
218 option.entries_option.animated_colors.foreground.active = Color::White;
219 option.entries_option.animated_colors.foreground.inactive = Color::Red;
220 return Menu(entries, selected, option);
224 auto option = MenuOption::Vertical();
225 option.entries_option.animated_colors.foreground.Set(
226 Color::Red, Color::White, std::chrono::milliseconds(500));
227 return Menu(entries, selected, option);
231 return Menu(entries, selected, MenuOption::Horizontal());
235 return Menu(entries, selected, MenuOption::Toggle());
239 auto option = MenuOption::Toggle();
240 option.elements_infix = [] {
return text(
" 🮣🮠 "); };
242 return Menu(entries, selected, option);
246 return Menu(entries, selected, MenuOption::HorizontalAnimated());
250 auto option = MenuOption::HorizontalAnimated();
251 option.underline.SetAnimation(std::chrono::milliseconds(1500),
252 animation::easing::ElasticOut);
253 option.entries_option.transform = [](EntryState state) {
255 if (state.active && state.focused) {
258 if (!state.focused && !state.active) {
263 option.underline.color_inactive = Color::Default;
264 option.underline.color_active = Color::Red;
265 return Menu(entries, selected, option);
Component Renderer(Component child, std::function< Element()>)
回傳一個新的 Component,類似 |child|,但使用 |render| 作為 Component::Render() 事件。
Component Menu(ConstStringListRef entries, int *selected_, MenuOption options=MenuOption::Vertical())
一份文字清單。取得焦點的元素會被選取。
Element borderDouble(Element child)
在元素周圍繪製雙線邊框。
Element text(std::string_view text)
顯示一段 UTF8 編碼的 Unicode 文字。
Element flex(Element child)
讓子元素依比例擴展以填滿容器中剩餘的空間。
Element bold(Element child)
使用粗體字型,用於需要更多強調的元素。
Element bgcolor(Color color, Element child)
設定元素的背景顏色。
Element separator()
在兩個元素之間繪製垂直或水平分隔線。
Element filler()
一個會依照容器中剩餘空間 按比例擴展的元素。
Element dim(Element child)
使用淺色字體,適用於不那麼強調的元素。
Element color(Color color, Element child)
設定元素的前景顏色。
Element border(Element child)
在元素周圍繪製邊框。
Element vbox(Elements children)
一個垂直一個接一個顯示元素的容器。
std::shared_ptr< Node > Element
Element hbox(Elements children)
一個逐一水平顯示元素的容器。
std::shared_ptr< ComponentBase > Component