From 4ad4946de3af17007d53d561fb68f279f2a4acdd Mon Sep 17 00:00:00 2001 From: ArthurSonzogni Date: Wed, 26 Aug 2020 17:58:18 +0200 Subject: [PATCH] Add the modal dialog example. New component: clear_under. --- CMakeLists.txt | 3 +- examples/component/CMakeLists.txt | 1 + examples/component/modal_dialog.cpp | 128 ++++++++++++++++++++++++++++ include/ftxui/dom/elements.hpp | 4 + src/ftxui/dom/clear_under.cpp | 35 ++++++++ 5 files changed, 170 insertions(+), 1 deletion(-) create mode 100644 examples/component/modal_dialog.cpp create mode 100644 src/ftxui/dom/clear_under.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 56a2468..2400b34 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -9,7 +9,7 @@ execute_process( project(ftxui LANGUAGES CXX - VERSION 0.2.${git_version} + VERSION 0.3.${git_version} ) option(FTXUI_BUILD_EXAMPLES "Set to ON to build examples" ON) @@ -41,6 +41,7 @@ add_library(dom src/ftxui/dom/blink.cpp src/ftxui/dom/bold.cpp src/ftxui/dom/border.cpp + src/ftxui/dom/clear_under.cpp src/ftxui/dom/color.cpp src/ftxui/dom/composite_decorator.cpp src/ftxui/dom/dbox.cpp diff --git a/examples/component/CMakeLists.txt b/examples/component/CMakeLists.txt index 90633ab..d20f899 100644 --- a/examples/component/CMakeLists.txt +++ b/examples/component/CMakeLists.txt @@ -18,3 +18,4 @@ example(radiobox_in_frame) example(tab_horizontal) example(tab_vertical) example(toggle) +example(modal_dialog) diff --git a/examples/component/modal_dialog.cpp b/examples/component/modal_dialog.cpp new file mode 100644 index 0000000..abdfff2 --- /dev/null +++ b/examples/component/modal_dialog.cpp @@ -0,0 +1,128 @@ +// Copyright 2020 Arthur Sonzogni. All rights reserved. +// Use of this source code is governed by the MIT license that can be found in +// the LICENSE file. + +#include "ftxui/component/button.hpp" +#include "ftxui/component/component.hpp" +#include "ftxui/component/container.hpp" +#include "ftxui/component/screen_interactive.hpp" + +using namespace ftxui; + +// The main screen, at depth 0. It display the main content. +class Content : public Component { + public: + std::function on_rate_ftxui = [] {}; + std::function on_quit = [] {}; + std::wstring rating_ = L"3/5 stars"; + Content() { + Add(&container_); + container_.Add(&button_rate_ftxui); + container_.Add(&button_quit_); + button_rate_ftxui.on_click = [&] { on_rate_ftxui(); }; + button_quit_.on_click = [&] { on_quit(); }; + } + + Element Render() final { + auto button_elements= hbox({ + button_rate_ftxui.Render(), + filler(), + button_quit_.Render(), + }); + + auto document = // + vbox({ + text(L"Modal dialog example"), + separator(), + text(L"☆☆☆ FTXUI:" + rating_ + L" ☆☆☆") | bold, + filler(), + button_elements, + }) | + border; + + return document | size(HEIGHT, GREATER_THAN, 18) | center; + } + + private: + Container container_ = Container::Horizontal(); + Button button_rate_ftxui = Button(L"Rate FTXUI"); + Button button_quit_ = Button(L"Quit"); +}; + +// The "modal" screen, at depth 1. It display the modal dialog. +class Modal : public Component { + public: + std::function on_click; + + Modal() { + Add(&container_); + buttons_.resize(5); + for (int i = 0; i < 5; ++i) { + std::wstring stars = std::to_wstring(i + 1) + L"/5 stars"; + buttons_[i] = Button(stars); + buttons_[i].on_click = [&, stars] { on_click(stars); }; + container_.Add(&buttons_[i]); + } + } + + Element Render() final { + return vbox({ + text(L"Do you like FTXUI?"), + separator(), + hbox({ + buttons_[0].Render(), + buttons_[1].Render(), + buttons_[2].Render(), + buttons_[3].Render(), + buttons_[4].Render(), + }), + }) | + border; + } + + private: + Container container_ = Container::Horizontal(); + std::vector