From 58287c147a650fe026e112371571ad8c2acee638 Mon Sep 17 00:00:00 2001 From: ArthurSonzogni Date: Fri, 14 May 2021 00:45:03 +0200 Subject: [PATCH] Update every component examples. Use the functional style instead of classes. --- examples/component/input.cpp | 38 +++--- examples/component/menu2.cpp | 26 ++-- examples/component/menu_style.cpp | 96 ++++++--------- examples/component/modal_dialog.cpp | 147 +++++++++-------------- examples/component/radiobox_in_frame.cpp | 30 ++--- examples/component/slider_rgb.cpp | 74 +++++------- examples/component/tab_horizontal.cpp | 54 ++++----- examples/component/tab_vertical.cpp | 58 ++++----- examples/component/toggle.cpp | 68 ++++------- 9 files changed, 233 insertions(+), 358 deletions(-) diff --git a/examples/component/input.cpp b/examples/component/input.cpp index f9ab866d..e9d2841b 100644 --- a/examples/component/input.cpp +++ b/examples/component/input.cpp @@ -8,38 +8,34 @@ #include "ftxui/component/screen_interactive.hpp" // for Component, ScreenInteractive #include "ftxui/dom/elements.hpp" // for text, hbox, separator, border, vbox, Element -using namespace ftxui; +int main(int argc, const char* argv[]) { + using namespace ftxui; -class MyComponent : public ComponentBase { - private: std::wstring first_name_; std::wstring last_name_; std::wstring first_name_placeholder_ = L"first_name"; std::wstring last_name_placeholder_ = L"last_name"; + Component input_first_name_ = Input(&first_name_, &first_name_placeholder_); Component input_last_name_ = Input(&last_name_, &last_name_placeholder_); - Element Render() override { - return border(vbox({ - text(L"Hello " + first_name_ + L" " + last_name_), - separator(), - hbox({text(L" First name : "), input_first_name_->Render()}), - hbox({text(L" Last name : "), input_last_name_->Render()}), - })); - } + auto component = Container::Vertical({ + input_first_name_, + input_last_name_, + }); - public: - MyComponent() { - Add(Container::Vertical({ - input_first_name_, - input_last_name_, - })); - } -}; + auto renderer = Renderer(component, [&] { + return vbox({ + text(L"Hello " + first_name_ + L" " + last_name_), + separator(), + hbox({text(L" First name : "), input_first_name_->Render()}), + hbox({text(L" Last name : "), input_last_name_->Render()}), + }) | + border; + }); -int main(int argc, const char* argv[]) { auto screen = ScreenInteractive::TerminalOutput(); - screen.Loop(Make()); + screen.Loop(renderer); } // Copyright 2020 Arthur Sonzogni. All rights reserved. diff --git a/examples/component/menu2.cpp b/examples/component/menu2.cpp index 292d663d..8bb71a45 100644 --- a/examples/component/menu2.cpp +++ b/examples/component/menu2.cpp @@ -12,10 +12,9 @@ #include "ftxui/dom/elements.hpp" // for text, separator, bold, hcenter, vbox, hbox, gauge, Element, operator|, border #include "ftxui/screen/string.hpp" // for to_wstring -using namespace ftxui; +int main(int argc, const char* argv[]) { + using namespace ftxui; -class MyComponent : public ComponentBase { - private: std::vector left_menu_entries = { L"0%", L"10%", L"20%", L"30%", L"40%", L"50%", L"60%", L"70%", L"80%", L"90%", @@ -28,12 +27,13 @@ class MyComponent : public ComponentBase { int right_menu_selected = 0; Component left_menu_ = Menu(&left_menu_entries, &left_menu_selected); Component right_menu_ = Menu(&right_menu_entries, &right_menu_selected); + Component container = Container::Horizontal({ left_menu_, right_menu_, }); - Element Render() override { + auto renderer = Renderer(container, [&] { int sum = left_menu_selected * 10 + right_menu_selected; return vbox({ // -------- Top panel -------------- @@ -67,22 +67,12 @@ class MyComponent : public ComponentBase { }), }) | border; - } + }); - public: - MyComponent() { - Add(container); - MenuBase::From(left_menu_)->on_enter = [this]() { on_enter(); }; - MenuBase::From(right_menu_)->on_enter = [this]() { on_enter(); }; - } - std::function on_enter = []() {}; -}; - -int main(int argc, const char* argv[]) { auto screen = ScreenInteractive::TerminalOutput(); - auto component = Make(); - component->on_enter = screen.ExitLoopClosure(); - screen.Loop(component); + MenuBase::From(left_menu_)->on_enter = screen.ExitLoopClosure(); + MenuBase::From(right_menu_)->on_enter = screen.ExitLoopClosure(); + screen.Loop(renderer); } // Copyright 2020 Arthur Sonzogni. All rights reserved. diff --git a/examples/component/menu_style.cpp b/examples/component/menu_style.cpp index 79f8ce10..65a0dce9 100644 --- a/examples/component/menu_style.cpp +++ b/examples/component/menu_style.cpp @@ -13,62 +13,24 @@ #include "ftxui/dom/elements.hpp" // for operator|, Element, separator, bgcolor, color, flex, Decorator, bold, hbox, border, dim #include "ftxui/screen/color.hpp" // for Color, Color::Blue, Color::BlueLight, Color::Red, Color::Yellow -using namespace ftxui; - -std::vector entries = { - L"Monkey", L"Dog", L"Cat", L"Bird", L"Elephant", -}; - -class MyComponent : public ComponentBase { - public: - MyComponent(std::function exit) { - on_enter_ = exit; - - Add(container); - - for (Component menu : - {menu_1_, menu_2_, menu_3_, menu_4_, menu_5_, menu_6_}) - MenuBase::From(menu)->on_enter = [this] { on_enter_(); }; - - MenuBase::From(menu_2_)->focused_style = bold | color(Color::Blue); - MenuBase::From(menu_2_)->selected_style = color(Color::Blue); - MenuBase::From(menu_2_)->selected_focused_style = bold | color(Color::Blue); - - MenuBase::From(menu_3_)->selected_style = color(Color::Blue); - MenuBase::From(menu_3_)->focused_style = bgcolor(Color::Blue); - MenuBase::From(menu_3_)->selected_focused_style = bgcolor(Color::Blue); - - MenuBase::From(menu_4_)->selected_style = bgcolor(Color::Blue); - MenuBase::From(menu_4_)->focused_style = bgcolor(Color::BlueLight); - MenuBase::From(menu_4_)->selected_focused_style = bgcolor(Color::BlueLight); - - MenuBase::From(menu_5_)->normal_style = bgcolor(Color::Blue); - MenuBase::From(menu_5_)->selected_style = bgcolor(Color::Yellow); - MenuBase::From(menu_5_)->focused_style = bgcolor(Color::Red); - MenuBase::From(menu_5_)->selected_focused_style = bgcolor(Color::Red); - - MenuBase::From(menu_6_)->normal_style = dim | color(Color::Blue); - MenuBase::From(menu_6_)->selected_style = color(Color::Blue); - MenuBase::From(menu_6_)->focused_style = bold | color(Color::Blue); - MenuBase::From(menu_6_)->selected_focused_style = bold | color(Color::Blue); - } - - std::function on_enter_; - - private: +int main(int argc, const char* argv[]) { + using namespace ftxui; + std::vector entries = { + L"Monkey", L"Dog", L"Cat", L"Bird", L"Elephant", + }; int menu_1_selected_ = 0; int menu_2_selected_ = 0; int menu_3_selected_ = 0; int menu_4_selected_ = 0; int menu_5_selected_ = 0; int menu_6_selected_ = 0; - Component menu_1_ = Menu(&entries, &menu_1_selected_); - Component menu_2_ = Menu(&entries, &menu_2_selected_); - Component menu_3_ = Menu(&entries, &menu_3_selected_); - Component menu_4_ = Menu(&entries, &menu_4_selected_); - Component menu_5_ = Menu(&entries, &menu_5_selected_); - Component menu_6_ = Menu(&entries, &menu_6_selected_); - Component container = Container::Horizontal({ + auto menu_1_ = Menu(&entries, &menu_1_selected_); + auto menu_2_ = Menu(&entries, &menu_2_selected_); + auto menu_3_ = Menu(&entries, &menu_3_selected_); + auto menu_4_ = Menu(&entries, &menu_4_selected_); + auto menu_5_ = Menu(&entries, &menu_5_selected_); + auto menu_6_ = Menu(&entries, &menu_6_selected_); + auto container = Container::Horizontal({ menu_1_, menu_2_, menu_3_, @@ -78,7 +40,7 @@ class MyComponent : public ComponentBase { }); // clang-format off - Element Render() override { + auto renderer = Renderer(container, [&] { return hbox({ menu_1_->Render() | flex, separator(), @@ -88,13 +50,35 @@ class MyComponent : public ComponentBase { menu_5_->Render() | flex, separator(), menu_6_->Render() | flex, }) | border; - } + }); // clang-format on -}; - -int main(int argc, const char* argv[]) { auto screen = ScreenInteractive::TerminalOutput(); - screen.Loop(Make(screen.ExitLoopClosure())); + for (Component menu : {menu_1_, menu_2_, menu_3_, menu_4_, menu_5_, menu_6_}) + MenuBase::From(menu)->on_enter = screen.ExitLoopClosure(); + + MenuBase::From(menu_2_)->focused_style = bold | color(Color::Blue); + MenuBase::From(menu_2_)->selected_style = color(Color::Blue); + MenuBase::From(menu_2_)->selected_focused_style = bold | color(Color::Blue); + + MenuBase::From(menu_3_)->selected_style = color(Color::Blue); + MenuBase::From(menu_3_)->focused_style = bgcolor(Color::Blue); + MenuBase::From(menu_3_)->selected_focused_style = bgcolor(Color::Blue); + + MenuBase::From(menu_4_)->selected_style = bgcolor(Color::Blue); + MenuBase::From(menu_4_)->focused_style = bgcolor(Color::BlueLight); + MenuBase::From(menu_4_)->selected_focused_style = bgcolor(Color::BlueLight); + + MenuBase::From(menu_5_)->normal_style = bgcolor(Color::Blue); + MenuBase::From(menu_5_)->selected_style = bgcolor(Color::Yellow); + MenuBase::From(menu_5_)->focused_style = bgcolor(Color::Red); + MenuBase::From(menu_5_)->selected_focused_style = bgcolor(Color::Red); + + MenuBase::From(menu_6_)->normal_style = dim | color(Color::Blue); + MenuBase::From(menu_6_)->selected_style = color(Color::Blue); + MenuBase::From(menu_6_)->focused_style = bold | color(Color::Blue); + MenuBase::From(menu_6_)->selected_focused_style = bold | color(Color::Blue); + + screen.Loop(renderer); } // Copyright 2020 Arthur Sonzogni. All rights reserved. diff --git a/examples/component/modal_dialog.cpp b/examples/component/modal_dialog.cpp index 1528d3c2..91317dee 100644 --- a/examples/component/modal_dialog.cpp +++ b/examples/component/modal_dialog.cpp @@ -10,121 +10,84 @@ #include "ftxui/component/screen_interactive.hpp" // for Component, ScreenInteractive #include "ftxui/dom/elements.hpp" // for Element, operator|, filler, text, hbox, separator, center, vbox, bold, border, clear_under, dbox, size, GREATER_THAN, HEIGHT -using namespace ftxui; +int main(int argc, const char* argv[]) { + using namespace ftxui; + auto screen = ScreenInteractive::TerminalOutput(); -// The main screen, at depth 0. It display the main content. -class Content : public ComponentBase { - private: - std::wstring label_rate_ftxui_ = L"Rate FTXUI"; - std::wstring label_quit_ = L"Quit"; - bool modal_open_ = false; + // There are two layers. One at depth = 0 and the modal window at depth = 1; + int depth = 0; - Component button_rate_ftxui_ = - Button(&label_rate_ftxui_, [this] { on_rate_ftxui(); }); - Component button_quit_ = Button(&label_quit_, [this] { on_quit(); }); - Component container_ = Container::Horizontal({ - button_rate_ftxui_, - button_quit_, - }); - - public: + // The current rating of FTXUI. std::wstring rating = L"3/5 stars"; - std::function on_rate_ftxui; - std::function on_quit; - Content() { Add(container_); } + // At depth=0, two buttons. One for rating FTXUI and one for quitting. + std::wstring label_rate_ftxui = L"Rate FTXUI"; + std::wstring label_quit = L"Quit"; + auto button_rate_ftxui = Button(&label_rate_ftxui, [&] { depth = 1; }); + auto button_quit = Button(&label_quit, screen.ExitLoopClosure()); - Element Render() final { - auto document = // - vbox({ - text(L"Modal dialog example"), - separator(), - text(L"☆☆☆ FTXUI:" + rating + L" ☆☆☆") | bold, - filler(), - hbox({ - button_rate_ftxui_->Render(), - filler(), - button_quit_->Render(), - }), - }) | - border; - - return document | size(HEIGHT, GREATER_THAN, 18) | center; - } -}; - -std::vector rating_labels = { - L"1/5 stars", L"2/5 stars", L"3/5 stars", L"4/5 stars", L"5/5 stars", -}; - -// The "modal" screen, at depth 1. It display the modal dialog. -class Modal : public ComponentBase { - private: - Component container_ = Container::Horizontal({ - Button(&rating_labels[0], [this] { on_click(rating_labels[0]); }), - Button(&rating_labels[1], [this] { on_click(rating_labels[1]); }), - Button(&rating_labels[2], [this] { on_click(rating_labels[2]); }), - Button(&rating_labels[3], [this] { on_click(rating_labels[3]); }), - Button(&rating_labels[4], [this] { on_click(rating_labels[4]); }), + auto depth_0_container = Container::Horizontal({ + button_rate_ftxui, + button_quit, + }); + auto depth_0_renderer = Renderer(depth_0_container, [&] { + return vbox({ + text(L"Modal dialog example"), + separator(), + text(L"☆☆☆ FTXUI:" + rating + L" ☆☆☆") | bold, + filler(), + hbox({ + button_rate_ftxui->Render(), + filler(), + button_quit->Render(), + }), + }) | + border | size(HEIGHT, GREATER_THAN, 18) | center; }); - public: - std::function on_click; + // At depth=1, The "modal" window. + std::vector rating_labels = { + L"1/5 stars", L"2/5 stars", L"3/5 stars", L"4/5 stars", L"5/5 stars", + }; + auto on_rating = [&](std::wstring new_rating) { + rating = new_rating; + depth = 0; + }; + auto depth_1_container = Container::Horizontal({ + Button(&rating_labels[0], [&] { on_rating(rating_labels[0]); }), + Button(&rating_labels[1], [&] { on_rating(rating_labels[1]); }), + Button(&rating_labels[2], [&] { on_rating(rating_labels[2]); }), + Button(&rating_labels[3], [&] { on_rating(rating_labels[3]); }), + Button(&rating_labels[4], [&] { on_rating(rating_labels[4]); }), + }); - Modal() { Add(container_); } - - Element Render() final { + auto depth_1_renderer = Renderer(depth_1_container, [&] { return vbox({ text(L"Do you like FTXUI?"), separator(), - hbox(container_->Render()), + hbox(depth_1_container->Render()), }) | border; - } -}; + }); -class MyComponent : public ComponentBase { - private: - std::shared_ptr content_ = std::make_shared(); - std::shared_ptr modal_ = std::make_shared(); + auto main_container = Container::Tab(&depth, { + depth_0_renderer, + depth_1_renderer, + }); - int depth = 0; - Component container_ = Container::Tab(&depth, - { - content_, - modal_, - }); - - std::function on_quit_; - - public: - MyComponent(std::function on_quit) : on_quit_(on_quit) { - Add(container_); - - content_->on_quit = [&] { on_quit(); }; - content_->on_rate_ftxui = [this] { depth = 1; }; - modal_->on_click = [&](std::wstring rating) { - content_->rating = rating; - depth = 0; - }; - } - - Element Render() final { - Element document = content_->Render(); + auto main_renderer = Renderer(main_container, [&] { + Element document = depth_0_renderer->Render(); if (depth == 1) { document = dbox({ document, - modal_->Render() | clear_under | center, + depth_1_renderer->Render() | clear_under | center, }); } return document; - } -}; + }); -int main(int argc, const char* argv[]) { - auto screen = ScreenInteractive::TerminalOutput(); - screen.Loop(Make(screen.ExitLoopClosure())); + screen.Loop(main_renderer); return 0; } diff --git a/examples/component/radiobox_in_frame.cpp b/examples/component/radiobox_in_frame.cpp index 31b36ad5..ff5514ee 100644 --- a/examples/component/radiobox_in_frame.cpp +++ b/examples/component/radiobox_in_frame.cpp @@ -10,27 +10,19 @@ using namespace ftxui; -class MyComponent : public ComponentBase { - private: - std::vector entries_; - int selected_ = 0; - - public: - MyComponent() { - for (int i = 0; i < 30; ++i) - entries_.push_back(L"RadioBox " + to_wstring(i)); - Add(Radiobox(&entries_, &selected_)); - } - - Element Render() override { - return ComponentBase::Render() | frame | size(HEIGHT, LESS_THAN, 10) | - border; - } -}; - int main(int argc, const char* argv[]) { + std::vector entries; + int selected = 0; + + for (int i = 0; i < 30; ++i) + entries.push_back(L"RadioBox " + to_wstring(i)); + auto radiobox = Radiobox(&entries, &selected); + auto renderer = Renderer(radiobox, [&] { + return radiobox->Render() | frame | size(HEIGHT, LESS_THAN, 10) | border; + }); + auto screen = ScreenInteractive::FitComponent(); - screen.Loop(Make()); + screen.Loop(renderer); return 0; } diff --git a/examples/component/slider_rgb.cpp b/examples/component/slider_rgb.cpp index 1d046010..07f4b00b 100644 --- a/examples/component/slider_rgb.cpp +++ b/examples/component/slider_rgb.cpp @@ -26,56 +26,38 @@ Element ColorString(int red, int green, int blue) { ); } -class MyComponent : public ComponentBase { - private: - int* red_; - int* green_; - int* blue_; - Component slider_red_ = Slider(L"Red :", red_, 0, 255, 1); - Component slider_green_ = Slider(L"Green:", green_, 0, 255, 1); - Component slider_blue_ = Slider(L"Blue :", blue_, 0, 255, 1); - std::function quit_; - - public: - MyComponent(int* red, int* green, int* blue, std::function quit) - : red_(red), green_(green), blue_(blue), quit_(quit) { - Add(Container::Vertical({ - slider_red_, - slider_green_, - slider_blue_, - })); - } - - Element Render() { - return hbox({ - ColorTile(*red_, *green_, *blue_), - separator(), - vbox({ - slider_red_->Render(), - separator(), - slider_green_->Render(), - separator(), - slider_blue_->Render(), - separator(), - ColorString(*red_, *green_, *blue_), - }) | xflex, - }) | - border | size(WIDTH, LESS_THAN, 80); - } - - bool OnEvent(Event event) { - if (event == Event::Return || event == Event::Escape) - quit_(); - return ComponentBase::OnEvent(event); - } -}; - int main(int argc, const char* argv[]) { - auto screen = ScreenInteractive::TerminalOutput(); int red = 128; int green = 25; int blue = 100; - screen.Loop(Make(&red, &green, &blue, screen.ExitLoopClosure())); + auto slider_red = Slider(L"Red :", &red, 0, 255, 1); + auto slider_green = Slider(L"Green:", &green, 0, 255, 1); + auto slider_blue = Slider(L"Blue :", &blue, 0, 255, 1); + + auto container = Container::Vertical({ + slider_red, + slider_green, + slider_blue, + }); + + auto renderer = Renderer(container, [&] { + return hbox({ + ColorTile(red, green, blue), + separator(), + vbox({ + slider_red->Render(), + separator(), + slider_green->Render(), + separator(), + slider_blue->Render(), + separator(), + ColorString(red, green, blue), + }) | xflex, + }) | + border | size(WIDTH, LESS_THAN, 80); + }); + auto screen = ScreenInteractive::TerminalOutput(); + screen.Loop(renderer); } // Copyright 2020 Arthur Sonzogni. All rights reserved. diff --git a/examples/component/tab_horizontal.cpp b/examples/component/tab_horizontal.cpp index 4897e7b9..5b849c19 100644 --- a/examples/component/tab_horizontal.cpp +++ b/examples/component/tab_horizontal.cpp @@ -11,67 +11,59 @@ using namespace ftxui; -class MyComponent : public ComponentBase { - private: - std::vector tab_values_ = { +int main(int argc, const char* argv[]) { + std::vector tab_values{ L"tab_1", L"tab_2", L"tab_3", }; - int tab_selected_ = 0; - Component tab_toggle_ = Toggle(&tab_values_, &tab_selected_); + int tab_selected = 0; + auto tab_toggle = Toggle(&tab_values, &tab_selected); - std::vector tab_1_entries_ = { + std::vector tab_1_entries{ L"Forest", L"Water", L"I don't know", }; - int tab_1_selected_ = 0; + int tab_1_selected = 0; - std::vector tab_2_entries_ = { + std::vector tab_2_entries{ L"Hello", L"Hi", L"Hay", }; - int tab_2_selected_ = 0; + int tab_2_selected = 0; - std::vector tab_3_entries_ = { + std::vector tab_3_entries{ L"Table", L"Nothing", L"Is", L"Empty", }; - int tab_3_selected_ = 0; - - Component tab_container_ = - Container::Tab(&tab_selected_, - { - Radiobox(&tab_1_entries_, &tab_1_selected_), - Radiobox(&tab_2_entries_, &tab_2_selected_), - Radiobox(&tab_3_entries_, &tab_3_selected_), + int tab_3_selected = 0; + auto tab_container = Container::Tab( + &tab_selected, { + Radiobox(&tab_1_entries, &tab_1_selected), + Radiobox(&tab_2_entries, &tab_2_selected), + Radiobox(&tab_3_entries, &tab_3_selected), }); - Component container_ = Container::Vertical({ - tab_toggle_, - tab_container_, + auto container = Container::Vertical({ + tab_toggle, + tab_container, }); - public: - MyComponent() { Add(container_); } - - Element Render() { + auto renderer = Renderer(container, [&] { return vbox({ - tab_toggle_->Render(), + tab_toggle->Render(), separator(), - tab_container_->Render(), + tab_container->Render(), }) | border; - } -}; + }); -int main(int argc, const char* argv[]) { auto screen = ScreenInteractive::TerminalOutput(); - screen.Loop(Make()); + screen.Loop(renderer); } // Copyright 2020 Arthur Sonzogni. All rights reserved. diff --git a/examples/component/tab_vertical.cpp b/examples/component/tab_vertical.cpp index b49127ca..f2c6c5f4 100644 --- a/examples/component/tab_vertical.cpp +++ b/examples/component/tab_vertical.cpp @@ -3,75 +3,67 @@ #include // for vector #include "ftxui/component/captured_mouse.hpp" // for ftxui -#include "ftxui/component/component.hpp" // for Radiobox, Make, Menu +#include "ftxui/component/component.hpp" // for Radiobox, Make, Toggle #include "ftxui/component/component_base.hpp" // for ComponentBase #include "ftxui/component/container.hpp" // for Container #include "ftxui/component/screen_interactive.hpp" // for Component, ScreenInteractive -#include "ftxui/dom/elements.hpp" // for Element, separator, hbox, operator|, border +#include "ftxui/dom/elements.hpp" // for Element, separator, operator|, vbox, border using namespace ftxui; -class MyComponent : public ComponentBase { - private: - std::vector tab_values_ = { +int main(int argc, const char* argv[]) { + std::vector tab_values{ L"tab_1", L"tab_2", L"tab_3", }; - int tab_selected_ = 0; - Component tab_toggle_ = Menu(&tab_values_, &tab_selected_); + int tab_selected = 0; + auto tab_menu = Menu(&tab_values, &tab_selected); - std::vector tab_1_entries_ = { + std::vector tab_1_entries{ L"Forest", L"Water", L"I don't know", }; - int tab_1_selected_ = 0; + int tab_1_selected = 0; - std::vector tab_2_entries_ = { + std::vector tab_2_entries{ L"Hello", L"Hi", L"Hay", }; - int tab_2_selected_ = 0; + int tab_2_selected = 0; - std::vector tab_3_entries_ = { + std::vector tab_3_entries{ L"Table", L"Nothing", L"Is", L"Empty", }; - int tab_3_selected_ = 0; - - Component tab_container_ = - Container::Tab(&tab_selected_, - { - Radiobox(&tab_1_entries_, &tab_1_selected_), - Radiobox(&tab_2_entries_, &tab_2_selected_), - Radiobox(&tab_3_entries_, &tab_3_selected_), + int tab_3_selected = 0; + auto tab_container = Container::Tab( + &tab_selected, { + Radiobox(&tab_1_entries, &tab_1_selected), + Radiobox(&tab_2_entries, &tab_2_selected), + Radiobox(&tab_3_entries, &tab_3_selected), }); - Component container_ = Container::Horizontal({ - tab_toggle_, - tab_container_, + auto container = Container::Horizontal({ + tab_menu, + tab_container, }); - public: - MyComponent() { Add(container_); } - - Element Render() { + auto renderer = Renderer(container, [&] { return hbox({ - tab_toggle_->Render(), + tab_menu->Render(), separator(), - tab_container_->Render(), + tab_container->Render(), }) | border; - } -}; + }); -int main(int argc, const char* argv[]) { auto screen = ScreenInteractive::TerminalOutput(); - screen.Loop(Make()); + screen.Loop(renderer); } // Copyright 2020 Arthur Sonzogni. All rights reserved. diff --git a/examples/component/toggle.cpp b/examples/component/toggle.cpp index cae234e4..6159d438 100644 --- a/examples/component/toggle.cpp +++ b/examples/component/toggle.cpp @@ -13,70 +13,54 @@ using namespace ftxui; -class MyComponent : public ComponentBase { - private: - std::vector toggle_1_entries_ = { +int main(int argc, const char* argv[]) { + std::vector toggle_1_entries = { L"On", L"Off", }; - std::vector toggle_2_entries_ = { + std::vector toggle_2_entries = { L"Enabled", L"Disabled", }; - std::vector toggle_3_entries_ = { + std::vector toggle_3_entries = { L"10€", L"0€", }; - std::vector toggle_4_entries_ = { + std::vector toggle_4_entries = { L"Nothing", L"One element", L"Several elements", }; - int toggle_1_selected_ = 0; - int toggle_2_selected_ = 0; - int toggle_3_selected_ = 0; - int toggle_4_selected_ = 0; - Component toggle_1_ = Toggle(&toggle_1_entries_, &toggle_1_selected_); - Component toggle_2_ = Toggle(&toggle_2_entries_, &toggle_2_selected_); - Component toggle_3_ = Toggle(&toggle_3_entries_, &toggle_3_selected_); - Component toggle_4_ = Toggle(&toggle_4_entries_, &toggle_4_selected_); + int toggle_1_selected = 0; + int toggle_2_selected = 0; + int toggle_3_selected = 0; + int toggle_4_selected = 0; + Component toggle_1 = Toggle(&toggle_1_entries, &toggle_1_selected); + Component toggle_2 = Toggle(&toggle_2_entries, &toggle_2_selected); + Component toggle_3 = Toggle(&toggle_3_entries, &toggle_3_selected); + Component toggle_4 = Toggle(&toggle_4_entries, &toggle_4_selected); - std::function exit_; + auto container = Container::Vertical({ + toggle_1, + toggle_2, + toggle_3, + toggle_4, + }); - Element Render() override { + auto renderer = Renderer(container, [&] { return vbox({ text(L"Choose your options:"), text(L""), - hbox(text(L" * Poweroff on startup : "), toggle_1_->Render()), - hbox(text(L" * Out of process : "), toggle_2_->Render()), - hbox(text(L" * Price of the information : "), toggle_3_->Render()), - hbox(text(L" * Number of elements : "), toggle_4_->Render()), + hbox(text(L" * Poweroff on startup : "), toggle_1->Render()), + hbox(text(L" * Out of process : "), toggle_2->Render()), + hbox(text(L" * Price of the information : "), toggle_3->Render()), + hbox(text(L" * Number of elements : "), toggle_4->Render()), }); - } + }); - bool OnEvent(Event event) override { - if (event == Event::Return) { - exit_(); - return true; - } - return ComponentBase::OnEvent(event); - } - - public: - MyComponent(std::function exit) : exit_(exit) { - Add(Container::Vertical({ - toggle_1_, - toggle_2_, - toggle_3_, - toggle_4_, - })); - } -}; - -int main(int argc, const char* argv[]) { auto screen = ScreenInteractive::TerminalOutput(); - screen.Loop(Make(screen.ExitLoopClosure())); + screen.Loop(renderer); } // Copyright 2020 Arthur Sonzogni. All rights reserved.