From 6d75cb27484aa4b580e3afcd6b75140ae605cbd3 Mon Sep 17 00:00:00 2001 From: ArthurSonzogni Date: Sun, 9 May 2021 20:32:27 +0200 Subject: [PATCH 1/8] Make component more functionnal --- CMakeLists.txt | 2 +- doc/example_list.md | 1 + doc/mainpage.md | 9 +- examples/component/CMakeLists.txt | 1 + examples/component/button.cpp | 58 +-- examples/component/checkbox.cpp | 40 +- examples/component/checkbox_in_frame.cpp | 57 ++- examples/component/gallery.cpp | 161 +++---- examples/component/homescreen.cpp | 288 +++++------ examples/component/input.cpp | 57 +-- examples/component/menu.cpp | 28 +- examples/component/menu2.cpp | 140 +++--- examples/component/menu_style.cpp | 136 +++--- examples/component/modal_dialog.cpp | 152 +++--- examples/component/radiobox.cpp | 15 +- examples/component/radiobox_in_frame.cpp | 29 +- examples/component/slider.cpp | 78 +-- examples/component/tab_horizontal.cpp | 116 ++--- examples/component/tab_vertical.cpp | 117 +++-- examples/component/toggle.cpp | 93 ++-- examples/index.html | 11 +- examples/util/print_key_press.cpp | 22 +- include/ftxui/component/button.hpp | 29 +- include/ftxui/component/checkbox.hpp | 25 +- include/ftxui/component/component.hpp | 92 ++-- include/ftxui/component/component_base.hpp | 81 ++++ include/ftxui/component/container.hpp | 24 +- include/ftxui/component/event.hpp | 4 +- include/ftxui/component/input.hpp | 25 +- include/ftxui/component/menu.hpp | 29 +- include/ftxui/component/radiobox.hpp | 28 +- .../ftxui/component/screen_interactive.hpp | 15 +- include/ftxui/component/slider.hpp | 23 - include/ftxui/component/toggle.hpp | 27 +- iwyu.imp | 3 + src/ftxui/component/button.cpp | 47 +- src/ftxui/component/checkbox.cpp | 51 +- src/ftxui/component/component.cpp | 93 ++-- src/ftxui/component/container.cpp | 80 +++- src/ftxui/component/container_test.cpp | 448 +++++++++--------- src/ftxui/component/event.cpp | 7 +- src/ftxui/component/input.cpp | 93 ++-- src/ftxui/component/input_test.cpp | 222 +++++---- src/ftxui/component/menu.cpp | 96 ++-- src/ftxui/component/radiobox.cpp | 90 +++- src/ftxui/component/radiobox_test.cpp | 156 +++--- src/ftxui/component/screen_interactive.cpp | 41 +- src/ftxui/component/slider.cpp | 77 +-- src/ftxui/component/toggle.cpp | 58 ++- src/ftxui/component/toggle_test.cpp | 170 +++---- src/ftxui/dom/blink.cpp | 13 +- src/ftxui/dom/bold.cpp | 13 +- src/ftxui/dom/border.cpp | 11 +- src/ftxui/dom/clear_under.cpp | 13 +- src/ftxui/dom/color.cpp | 13 +- src/ftxui/dom/composite_decorator.cpp | 4 +- src/ftxui/dom/dim.cpp | 13 +- src/ftxui/dom/flex.cpp | 14 +- src/ftxui/dom/frame.cpp | 9 +- src/ftxui/dom/gauge.cpp | 11 +- src/ftxui/dom/inverted.cpp | 13 +- src/ftxui/dom/node_decorator.cpp | 5 +- src/ftxui/dom/reflect.cpp | 15 +- src/ftxui/dom/separator.cpp | 11 +- src/ftxui/dom/size.cpp | 11 +- src/ftxui/dom/spinner.cpp | 12 +- src/ftxui/dom/text_test.cpp | 7 +- src/ftxui/dom/underlined.cpp | 13 +- src/ftxui/screen/screen.cpp | 3 +- tools/license_headers.cpp | 2 +- 70 files changed, 2182 insertions(+), 1769 deletions(-) create mode 100644 include/ftxui/component/component_base.hpp delete mode 100644 include/ftxui/component/slider.hpp diff --git a/CMakeLists.txt b/CMakeLists.txt index f1cc6b97..e9f9bd9f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -80,6 +80,7 @@ add_library(component include/ftxui/component/captured_mouse.hpp include/ftxui/component/checkbox.hpp include/ftxui/component/component.hpp + include/ftxui/component/component_base.hpp include/ftxui/component/container.hpp include/ftxui/component/event.hpp include/ftxui/component/input.hpp @@ -88,7 +89,6 @@ add_library(component include/ftxui/component/radiobox.hpp include/ftxui/component/receiver.hpp include/ftxui/component/screen_interactive.hpp - include/ftxui/component/slider.hpp include/ftxui/component/toggle.hpp src/ftxui/component/button.cpp src/ftxui/component/checkbox.cpp diff --git a/doc/example_list.md b/doc/example_list.md index efddeab1..5f654036 100644 --- a/doc/example_list.md +++ b/doc/example_list.md @@ -34,6 +34,7 @@ @example ./examples/component/input.cpp @example ./examples/component/homescreen.cpp @example ./examples/component/radiobox.cpp +@example ./examples/component/slider_rgb.cpp @example ./examples/component/menu.cpp @example ./examples/component/menu_style.cpp @example ./examples/component/radiobox_in_frame.cpp diff --git a/doc/mainpage.md b/doc/mainpage.md index 672fda19..94fe5d8a 100644 --- a/doc/mainpage.md +++ b/doc/mainpage.md @@ -31,7 +31,7 @@ int main(void) { Dimension::Fit(document) // Height ); Render(screen, document); - std::cout << screen.ToString() << std::endl; + screen.Print(); return EXIT_SUCCESS; } @@ -142,6 +142,13 @@ This provides: 3. A predefined implementation of "keyboard navigation". 4. A set of predefined widget: CheckBox, RadioBox, Input, Menu, Toggle. + +**List of Component** + +You only need one header: ftxui/dom/component.hpp + +\include ftxui/component/component.hpp + # ftxui/dom Every elements of the dom are declared from: diff --git a/examples/component/CMakeLists.txt b/examples/component/CMakeLists.txt index 07dc0b31..3f4e5f15 100644 --- a/examples/component/CMakeLists.txt +++ b/examples/component/CMakeLists.txt @@ -17,6 +17,7 @@ example(modal_dialog) example(radiobox) example(radiobox_in_frame) example(slider) +example(slider_rgb) example(tab_horizontal) example(tab_vertical) example(toggle) diff --git a/examples/component/button.cpp b/examples/component/button.cpp index dc3ceaf1..2716d5c5 100644 --- a/examples/component/button.cpp +++ b/examples/component/button.cpp @@ -1,51 +1,43 @@ -#include // for function -#include // for unique_ptr, make_u... -#include // for wstring -#include // for move -#include // for vector +#include // for operator+, to_wstring, allocator, wstring -#include "ftxui/component/button.hpp" // for Button -#include "ftxui/component/component.hpp" // for Component +#include "ftxui/component/captured_mouse.hpp" // for ftxui +#include "ftxui/component/component.hpp" // for Button, Make +#include "ftxui/component/component_base.hpp" // for ComponentBase #include "ftxui/component/container.hpp" // for Container #include "ftxui/component/screen_interactive.hpp" // for ScreenInteractive -#include "ftxui/screen/box.hpp" // for ftxui +#include "ftxui/dom/elements.hpp" // for separator, Element, gauge, text, operator|, vbox, border using namespace ftxui; -class MyComponent : public Component { +class MyComponent : public ComponentBase { private: - std::vector> buttons_; - Container container_ = Container::Horizontal(); + std::wstring label_add = L"Increase"; + std::wstring label_rm = L"Decrease"; + int value_ = 50; public: MyComponent() { - Add(&container_); + Add(Container::Horizontal({ + Button(&label_rm, [&] { value_--; }), + Button(&label_add, [&] { value_++; }), + })); + } - auto button_add = std::make_unique