FTXUI 6.1.9
C++ functional terminal UI.
载入中...
搜索中...
未找到
component.hpp
浏览该文件的文档.
1// 版权所有 2021 Arthur Sonzogni。保留所有权利。
2// 此源代码的使用受 MIT 许可的约束,MIT 许可可在
3// LICENSE 文件中找到。
4#ifndef FTXUI_COMPONENT_HPP
5#define FTXUI_COMPONENT_HPP
6
7#include <functional> // for function
8#include <memory> // for make_shared, shared_ptr
9#include <utility> // for forward
10
12#include "ftxui/component/component_base.hpp" // for Component, Components
13#include "ftxui/component/component_options.hpp" // for ButtonOption, CheckboxOption, MenuOption
14#include "ftxui/dom/elements.hpp" // for Element
15#include "ftxui/util/ref.hpp" // for ConstRef, Ref, ConstStringRef, ConstStringListRef, StringRef
16
17namespace ftxui {
18struct ButtonOption;
19struct CheckboxOption;
20struct Event;
21struct InputOption;
22struct MenuOption;
23struct RadioboxOption;
24struct MenuEntryOption;
25
26template <class T, class... Args>
27std::shared_ptr<T> Make(Args&&... args) {
28 return std::make_shared<T>(std::forward<Args>(args)...);
29}
30
31// 用于装饰组件的管道运算符。
32using ComponentDecorator = std::function<Component(Component)>;
33using ElementDecorator = std::function<Element(Element)>;
35Component operator|(Component component, ElementDecorator decorator);
36Component& operator|=(Component& component, ComponentDecorator decorator);
37Component& operator|=(Component& component, ElementDecorator decorator);
38
39namespace Container {
41Component Vertical(Components children, int* selector);
43Component Horizontal(Components children, int* selector);
44Component Tab(Components children, int* selector);
46} // namespace Container
47
50 std::function<void()> on_click,
52
55 bool* checked,
57
58Component Input(InputOption options = {});
59Component Input(StringRef content, InputOption options = {});
60Component Input(StringRef content,
61 StringRef placeholder,
62 InputOption options = {});
63
64Component Menu(MenuOption options);
65Component Menu(ConstStringListRef entries,
66 int* selected_,
67 MenuOption options = MenuOption::Vertical());
68Component MenuEntry(MenuEntryOption options);
69Component MenuEntry(ConstStringRef label, MenuEntryOption options = {});
70
71Component Radiobox(RadioboxOption options);
72Component Radiobox(ConstStringListRef entries,
73 int* selected_,
74 RadioboxOption options = {});
75
76Component Dropdown(ConstStringListRef entries, int* selected);
77Component Dropdown(DropdownOption options);
78
79Component Toggle(ConstStringListRef entries, int* selected);
80
81// 通用滑块构造函数:
82template <typename T>
83Component Slider(SliderOption<T> options);
84
85// 不带“SliderOption”构造函数的简写:
86Component Slider(ConstStringRef label,
87 Ref<int> value,
88 ConstRef<int> min = 0,
89 ConstRef<int> max = 100,
90 ConstRef<int> increment = 5);
91Component Slider(ConstStringRef label,
92 Ref<float> value,
93 ConstRef<float> min = 0.f,
94 ConstRef<float> max = 100.f,
95 ConstRef<float> increment = 5.f);
96Component Slider(ConstStringRef label,
97 Ref<long> value,
98 ConstRef<long> min = 0L,
99 ConstRef<long> max = 100L,
100 ConstRef<long> increment = 5L);
101
102Component ResizableSplit(ResizableSplitOption options);
105Component ResizableSplitTop(Component main, Component back, int* main_size);
107
108Component Renderer(Component child, std::function<Element()>);
109Component Renderer(std::function<Element()>);
110Component Renderer(std::function<Element(bool /* focused */)>);
112
113Component CatchEvent(Component child, std::function<bool(Event)>);
114ComponentDecorator CatchEvent(std::function<bool(Event)> on_event);
115
116Component Maybe(Component, const bool* show);
117Component Maybe(Component, std::function<bool()>);
118ComponentDecorator Maybe(const bool* show);
119ComponentDecorator Maybe(std::function<bool()>);
120
121Component Modal(Component main, Component modal, const bool* show_modal);
122ComponentDecorator Modal(Component modal, const bool* show_modal);
123
125 Component child,
126 Ref<bool> show = false);
127
128Component Hoverable(Component component, bool* hover);
130 std::function<void()> on_enter,
131 std::function<void()> on_leave);
132Component Hoverable(Component component, //
133 std::function<void(bool)> on_change);
134ComponentDecorator Hoverable(bool* hover);
135ComponentDecorator Hoverable(std::function<void()> on_enter,
136 std::function<void()> on_leave);
137ComponentDecorator Hoverable(std::function<void(bool)> on_change);
138
140
141} // namespace ftxui
142
143#endif /* end of include guard: FTXUI_COMPONENT_HPP */
一个适配器。拥有或引用一个常量字符串。为了方便,这个 类将多个不可变字符串转换为共享表示。
定义 ref.hpp:94
一个适配器。拥有或引用一个可变对象。
定义 ref.hpp:46
static CheckboxOption Simple()
标准Checkbox的选项。
static ButtonOption Simple()
创建一个ButtonOption,聚焦时反转显示。
static MenuOption Vertical()
垂直菜单的标准选项。 这对于实现可选择项目列表非常有用。
Component Horizontal(Components children)
一个组件列表,水平逐个绘制,并使用左/右箭头键或“h”/“l”键水平导航。
Component Maybe(Component, const bool *show)
装饰一个组件 |child|。它仅在 |show| 为 true 时显示。
Component ResizableSplitTop(Component main, Component back, int *main_size)
两个组件之间的垂直分割,可通过鼠标配置。
Component Menu(MenuOption options)
文本列表。選定的元素是焦點。
Component MenuEntry(MenuEntryOption options)
一個特定的菜單條目。它們可以放入 Container::Vertical 中形成一個菜單。
Component Toggle(ConstStringListRef entries, int *selected)
元素的水平列表。用戶可以瀏覽它們。
Component Radiobox(RadioboxOption options)
元素列表,其中只能选择一个。
Component Button(ButtonOption options)
绘制一个按钮。点击时执行一个函数。
Component Modal(Component main, Component modal, const bool *show_modal)
Component Renderer(Component child, std::function< Element()>)
返回一个新组件,类似于 |child|,但使用 |render| 作为 Component::Render() 事件。
Component Hoverable(Component component, bool *hover)
Component Window(WindowOptions option)
一个可拖动/可调整大小的窗口。要使用多个窗口,它们必须 使用 Container::Stacked({...}) 组件进行堆叠;
Component Vertical(Components children)
一个组件列表,垂直逐个绘制,并使用上/下箭头键或“j”/“k”键垂直导航。
Component Input(InputOption options={})
用于编辑文本的输入框。
Component ResizableSplitRight(Component main, Component back, int *main_size)
两个组件之间的水平分割,可通过鼠标配置。
Component Dropdown(ConstStringListRef entries, int *selected)
一个下拉菜单。
Component Stacked(Components children)
一个组件列表,它们相互堆叠。 事件传播到第一个组件,如果未处理,则传播到第二个,依此类推。 组件以给定顺序的相反顺序绘制。 当一个组件获得焦点时,它会被置于最前面,而不改变其他元素的相对顺序。
Component ResizableSplitBottom(Component main, Component back, int *main_size)
两个组件之间的垂直分割,可通过鼠标配置。
Component Checkbox(CheckboxOption options)
绘制可勾选元素。
Component ResizableSplitLeft(Component main, Component back, int *main_size)
两个组件之间的水平分割,可通过鼠标配置。
Component Tab(Components children, int *selector)
一个组件列表,一次只绘制并与其交互一个。|selector| 提供所选组件的索引。这对于实现选项卡很有用。
AnimatedButton 组件的选项。
Checkbox 组件的选项。
代表一个事件。它可以是按键事件、终端大小调整等等...
Input 组件的选项。
FTXUI ftxui::Container:: 命名空间
#include "ftxui/component/component_base.hpp" // 用于 ComponentBase
std::shared_ptr< T > Make(Args &&... args)
std::shared_ptr< Node > Element
std::function< Element(Element)> ElementDecorator
std::vector< Component > Components
Component ResizableSplit(ResizableSplitOption options)
两个组件之间的分割。
Component operator|(Component component, ComponentDecorator decorator)
Component Slider(SliderOption< T > options)
任意方向的滑块。
Component & operator|=(Component &component, ComponentDecorator decorator)
std::function< Component(Component)> ComponentDecorator
std::shared_ptr< ComponentBase > Component
Component Collapsible(ConstStringRef label, Component child, Ref< bool > show=false)
Component CatchEvent(Component child, std::function< bool(Event)>)