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()>)
|child| に似た、|render| をComponent::Render()イベントとして 使用する新しいComponentを返します。
Component Menu(ConstStringListRef entries, int *selected_, MenuOption options=MenuOption::Vertical())
テキストのリスト。フォーカスされた要素が選択されます。
Element borderDouble(Element child)
要素の周囲に二重線のボーダーを描画します。
Element text(std::string_view text)
UTF8エンコードされたユニコードテキストを表示します。
Element flex(Element child)
子要素をコンテナに残されたスペースに比例して拡大させます。
Element bold(Element child)
より強調したい要素に、太字フォントを使用します。
Element bgcolor(Color color, Element child)
要素の背景色を設定します。
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)
要素を水平方向に1つずつ表示するコンテナ。
std::shared_ptr< ComponentBase > Component