41 Add(Container::Vertical({
43 Maybe(radiobox_, checkbox.checked),
49 util::clamp(radiobox.selected(), 0,
int(radiobox.entries.size()) - 1);
50 selected_ = util::clamp(selected_(), 0,
int(radiobox.entries.size()) - 1);
52 if (selected_() >= 0 && selected_() <
int(radiobox.entries.size())) {
53 title_ = radiobox.entries[selected_()];
56 return transform(*open_, checkbox_->Render(), radiobox_->Render());
61 const bool open_old = open_();
62 const int selected_old = selected_();
63 bool handled = ComponentBase::OnEvent(event);
66 if (!open_old && open_()) {
67 radiobox_->TakeFocus();
72 if (open_old && open_()) {
73 const bool should_close =
74 (selected_() != selected_old) ||
75 (event == Event::Return) ||
76 (
event == Event::Character(
' ')) ||
77 (event == Event::Escape) ||
78 (
event.is_mouse() &&
event.mouse().button == Mouse::Left &&
79 event.mouse().motion == Mouse::Pressed);
82 checkbox_->TakeFocus();
92 open_ = checkbox.checked;
93 selected_ = radiobox.selected;
94 checkbox.checked = &*open_;
95 radiobox.selected = &*selected_;
96 checkbox.label = &title_;
98 if (!checkbox.transform) {
100 auto prefix =
text(s.state ?
"↓ " :
"→ ");
101 auto t =
text(s.label);
108 return hbox({prefix, t});
113 transform = [](
bool is_open,
Element checkbox_element,
116 const int max_height = 12;
118 std::move(checkbox_element),
138 return Make<Impl>(option);
An adapter. Reference a list of strings.
An adapter. Own or reference an mutable object.
ConstStringListRef entries
It implement rendering itself as ftxui::Element. It implement keyboard navigation by responding to ft...
Component Maybe(Component, const bool *show)
Decorate a component |child|. It is shown only when |show| is true.
Component Radiobox(RadioboxOption options)
A list of element, where only one can be selected.
Component Dropdown(ConstStringListRef entries, int *selected)
A dropdown menu.
Component Checkbox(CheckboxOption options)
Draw checkable element.
Option for the Dropdown component.A dropdown menu is a checkbox opening/closing a radiobox.
Represent an event. It can be key press event, a terminal resize, or more ...
Element vscroll_indicator(Element)
Display a vertical scrollbar on the right. Colors follow the content.
Decorator size(WidthOrHeight, Constraint, int value)
Apply a constraint on the size of an element.
Element bold(Element)
Use a bold font, for elements with more emphasis.
Element inverted(Element)
Add a filter that will invert the foreground and the background colors.
Element text(std::wstring text)
Display a piece of unicode text.
Element separator()
Draw a vertical or horizontal separation in between two other elements.
Element filler()
An element that will take expand proportionally to the space left in a container.
Element border(Element)
Draw a border around the element.
Element vbox(Elements)
A container displaying elements vertically one by one.
The FTXUI ftxui:: namespace.
std::shared_ptr< Node > Element
std::shared_ptr< ComponentBase > Component
Element hbox(Elements)
A container displaying elements horizontally one by one.
Element frame(Element)
Allow an element to be displayed inside a 'virtual' area. It size can be larger than its container....
arguments for transform from |ButtonOption|, |CheckboxOption|, |RadioboxOption|, |MenuEntryOption|,...