FTXUI 6.1.9
C++ functional terminal UI.
Loading...
Searching...
No Matches
examples/component/selection.cpp
Go to the documentation of this file.
1// Copyright 2020 Arthur Sonzogni. All rights reserved.
2// Use of this source code is governed by the MIT license that can be found in
3// the LICENSE file.
4#include <string> // for char_traits, operator+, string, basic_string
5
6#include "ftxui/component/app.hpp" // for Component, App
7#include "ftxui/component/component.hpp" // for Input, Renderer, Vertical
8#include "ftxui/component/component_base.hpp" // for ComponentBase
9#include "ftxui/component/component_options.hpp" // for InputOption
10#include "ftxui/dom/elements.hpp" // for text, hbox, separator, Element, operator|, vbox, border
11#include "ftxui/util/ref.hpp" // for Ref
12
13using namespace ftxui;
14
16 return text(
17 "FTXUI: A powerful library for building user interfaces.\n"
18 "Enjoy a rich set of components and a declarative style.\n"
19 "Create beautiful and responsive UIs with minimal effort.\n"
20 "Join the community and experience the power of FTXUI.");
21}
22
23int main() {
24 auto screen = App::TerminalOutput();
25
26 auto quit =
27 Button("Quit", screen.ExitLoopClosure(), ButtonOption::Animated());
28
29 int selection_change_counter = 0;
30 std::string selection_content = "";
31 screen.SelectionChange([&] {
32 selection_change_counter++;
33 selection_content = screen.GetSelection();
34 });
35
36 // The components:
37 auto renderer = Renderer(quit, [&] {
38 return vbox({
39 text("Select changed: " + std::to_string(selection_change_counter) +
40 " times"),
41 text("Currently selected: "),
42 paragraph(selection_content) | vscroll_indicator | frame | border |
43 size(HEIGHT, EQUAL, 10),
44 window(text("Horizontal split"), hbox({
45 LoremIpsum(),
46 separator(),
47 LoremIpsum(),
48 separator(),
49 LoremIpsum(),
50 })),
51 window(text("Vertical split"), vbox({
52 LoremIpsum(),
53 separator(),
54 LoremIpsum(),
55 separator(),
56 LoremIpsum(),
57 })),
58 window(text("Grid split with different style"),
59 vbox({
60 hbox({
61 LoremIpsum(),
62 separator(),
63 LoremIpsum() //
64 | selectionBackgroundColor(Color::Yellow) //
65 | selectionColor(Color::Black) //
67 separator(),
68 LoremIpsum() | selectionColor(Color::Blue),
69 }),
70 separator(),
71 hbox({
72 LoremIpsum() | selectionColor(Color::Red),
73 separator(),
74 LoremIpsum() | selectionStyle([](Cell& pixel) {
75 pixel.underlined_double = true;
76 }),
77 separator(),
78 LoremIpsum(),
79 }),
80 })),
81 quit->Render(),
82 });
83 });
84
85 screen.Loop(renderer);
86}
Element LoremIpsum()
Component Button(ConstStringRef label, std::function< void()> on_click, ButtonOption options=ButtonOption::Simple())
Draw a button. Execute a function when clicked.
Component Renderer(Component child, std::function< Element()>)
Return a new Component, similar to |child|, but using |render| as the Component::Render() event.
Element window(Element title, Element content, BorderStyle border=ROUNDED)
Draw window with a title and a border around the element.
Element text(std::string_view text)
Display a piece of UTF8 encoded unicode text.
Decorator size(WidthOrHeight direction, Constraint constraint, int value)
Apply a constraint on the size of an element.
Element paragraph(std::string_view the_text)
Return an element drawing the paragraph on multiple lines.
Element separator()
Draw a vertical or horizontal separation in between two other elements.
Element vbox(Elements children)
A container displaying elements vertically one by one.
Definition vbox.cpp:96
The FTXUI ftxui:: namespace.
Definition animation.hpp:11
std::shared_ptr< Node > Element
Definition elements.hpp:24
Element hbox(Elements children)
A container displaying elements horizontally one by one.
Definition hbox.cpp:94
Decorator selectionBackgroundColor(Color foreground)
Set the background color of an element when selected. Note that the style is applied on top of the ex...
Decorator selectionColor(Color foreground)
Set the color of an element when selected.
Element selectionStyleReset(Element child)
Reset the selection style of an element.
Decorator selectionStyle(std::function< void(Cell &)> style)
Set the style of an element when selected.