FTXUI 6.1.9
C++ functional terminal UI.
Loading...
Searching...
No Matches
component_options.hpp
Go to the documentation of this file.
1// Copyright 2021 Arthur Sonzogni. Todos los derechos reservados.
2// El uso de este código fuente se rige por la licencia MIT que se puede encontrar en
3// el archivo LICENSE.
4#ifndef FTXUI_COMPONENT_COMPONENT_OPTIONS_HPP
5#define FTXUI_COMPONENT_COMPONENT_OPTIONS_HPP
6
7#include <chrono> // for milliseconds
8#include <ftxui/component/animation.hpp> // for Duration, QuadraticInOut, Function
9#include <ftxui/dom/direction.hpp> // for Direction, Direction::Left, Direction::Right, Direction::Down
10#include <ftxui/dom/elements.hpp> // for Element, separator
11#include <ftxui/util/ref.hpp> // for Ref, ConstRef, StringRef
13#include <functional> // for function
14#include <limits> // for numeric_limits
15#include <string> // for string
16
17#include "ftxui/component/component_base.hpp" // for Component
18#include "ftxui/screen/color.hpp" // for Color, Color::GrayDark, Color::White
19
20namespace ftxui {
21
22/// @brief Argumentos para la transformación de |ButtonOption|, |CheckboxOption|,
23/// |RadioboxOption|, |MenuEntryOption|, |MenuOption|.
24struct EntryState {
25 std::string label; ///< La etiqueta a mostrar.
26 bool state; ///< El estado del botón/checkbox/radiobox
27 bool active; ///< Si la entrada es la activa.
28 bool focused; ///< Si la entrada está enfocada por el usuario.
29 int index; ///< Índice de la entrada cuando sea aplicable o -1.
30};
31
32/// @brief Opción para el efecto de subrayado.
33/// @ingroup component
56
57/// @brief Opción sobre un color potencialmente animado.
58/// @ingroup component
60 void Set(
63 animation::Duration duration = std::chrono::milliseconds(250),
64 animation::easing::Function function = animation::easing::QuadraticInOut);
65
66 bool enabled = false;
69 animation::Duration duration = std::chrono::milliseconds(250);
71};
72
77
78/// @brief Opción para el componente MenuEntry.
79/// @ingroup component
85
86/// @brief Opción para el componente Menu.
87/// @ingroup component
88struct MenuOption {
89 // Constructores estándar:
90 static MenuOption Horizontal();
92 static MenuOption Vertical();
94 static MenuOption Toggle();
95
96 ConstStringListRef entries; ///> La lista de entradas.
97 Ref<int> selected = 0; ///> El índice de la entrada seleccionada.
98
99 // Estilo:
103 std::function<Element()> elements_prefix;
104 std::function<Element()> elements_infix;
105 std::function<Element()> elements_postfix;
106
107 // Observadores:
108 std::function<void()> on_change; ///> Llamado cuando la entrada seleccionada cambia.
109 std::function<void()> on_enter; ///> Llamado cuando el usuario presiona enter.
111};
112
113/// @brief Opción para el componente AnimatedButton.
114/// @ingroup component
116 // Standard constructors:
117 static ButtonOption Ascii();
118 static ButtonOption Simple();
119 static ButtonOption Border();
121 static ButtonOption Animated(Color color);
122 static ButtonOption Animated(Color background, Color foreground);
123 static ButtonOption Animated(Color background,
124 Color foreground,
125 Color background_active,
126 Color foreground_active);
127
129 std::function<void()> on_click = [] {};
130
131 // Style:
132 std::function<Element(const EntryState&)> transform;
134};
135
136/// @brief Opción para el componente Checkbox.
137/// @ingroup component
139 // Constructores estándar:
140 static CheckboxOption Simple();
141
142 ConstStringRef label = "Checkbox";
143
145
146 // Style:
147 std::function<Element(const EntryState&)> transform;
148
149 // Observer:
150 /// Llamado cuando el usuario cambia el estado.
151 std::function<void()> on_change = [] {};
152};
153
154/// @brief Usado para definir el estilo del componente Input.
157 bool hovered; ///< Si el input está siendo "hovered" por el ratón.
158 bool focused; ///< Si el input está enfocado por el usuario.
159 bool is_placeholder; ///< Si el input está vacío y mostrando el
160 ///< marcador de posición.
161};
162
163/// @brief Opción para el componente Input.
164/// @ingroup component
166 // Un conjunto de estilos predefinidos:
167
168 /// @brief Crea el estilo de entrada predeterminado:
169 static InputOption Default();
170 /// @brief Un estilo blanco sobre negro con márgenes altos:
171 static InputOption Spacious();
172
173 /// El contenido del input.
175
176 /// El contenido del input cuando está vacío.
178
179 // Estilo:
180 std::function<Element(InputState)> transform;
181 Ref<bool> password = false; ///< Oscurece el contenido del input usando '*'.
182 Ref<bool> multiline = true; ///< Si el input puede ser multilínea.
183 Ref<bool> insert = true; ///< Modo de inserción o sobrescritura de caracteres.
184
185 /// Llamado cuando el contenido cambia.
186 std::function<void()> on_change = [] {};
187 /// Llamado cuando el usuario presiona enter.
188 std::function<void()> on_enter = [] {};
189
190 // La posición del caracter del cursor:
192};
193
194/// @brief Opción para el componente Radiobox.
195/// @ingroup component
197 // Constructores estándar:
198 static RadioboxOption Simple();
199
200 // Contenido:
203
204 // Estilo:
205 std::function<Element(const EntryState&)> transform;
206
207 // Observadores:
208 /// Llamado cuando la entrada seleccionada cambia.
209 std::function<void()> on_change = [] {};
211};
212
219 : 10;
220 std::function<Element()> separator_func = [] { return ::ftxui::separator(); };
221
222 // Constraints on main_size:
224 Ref<int> max = std::numeric_limits<int>::max();
225};
226
227// @brief Opción para el componente `Slider`.
228// @ingroup component
229template <typename T>
233 ConstRef<T> max = T(100);
234 ConstRef<T> increment = (max() - min()) / 20;
238 std::function<void()> on_change; ///> Llamado cuando `value` es actualizado.
239};
240
241/// @brief Estado pasado a la función de renderizado del componente `Window`.
242/// @ingroup component
244 Element inner; ///< El elemento envuelto dentro de esta ventana.
245 const std::string& title; ///< El título de la ventana.
246 bool active = false; ///< Si la ventana es la activa.
247 bool drag = false; ///< Si la ventana está siendo arrastrada.
248 bool resize = false; ///< Si la ventana está siendo redimensionada.
249 bool hover_left = false; ///< Si el lado izquierdo redimensionable está siendo "hovered".
250 bool hover_right = false; ///< Si el lado derecho redimensionable está siendo "hovered".
251 bool hover_top = false; ///< Si el lado superior redimensionable está siendo "hovered".
252 bool hover_down = false; ///< Si el lado inferior redimensionable está siendo "hovered".
253};
254
255// @brief Opción para el componente `Window`.
256// @ingroup component
258 Component inner; ///< El componente envuelto por esta ventana.
259 ConstStringRef title = ""; ///< El título mostrado por esta ventana.
260
261 Ref<int> left = 0; ///< La posición del lado izquierdo de la ventana.
262 Ref<int> top = 0; ///< La posición del lado superior de la ventana.
263 Ref<int> width = 20; ///< El ancho de la ventana.
264 Ref<int> height = 10; ///< La altura de la ventana.
265
266 Ref<bool> resize_left = true; ///< ¿Se puede redimensionar el lado izquierdo?
267 Ref<bool> resize_right = true; ///< ¿Se puede redimensionar el lado derecho?
268 Ref<bool> resize_top = true; ///< ¿Se puede redimensionar el lado superior?
269 Ref<bool> resize_down = true; ///< ¿Se puede redimensionar el lado inferior?
270
271 /// Una función opcional para personalizar la apariencia de la ventana:
272 std::function<Element(const WindowRenderState&)> render;
273};
274
275/// @brief Opción para el componente Dropdown.
276/// @ingroup component
277/// Un menú desplegable es un checkbox que abre/cierra un radiobox.
279 /// Si el desplegable está abierto o cerrado:
281 // Las opciones para el checkbox:
283 // Las opciones para el radiobox:
285 // La función de transformación:
286 std::function<Element(bool open, Element checkbox, Element radiobox)>
288};
289
290} // namespace ftxui
291
292#endif /* fin de la guarda de inclusión: FTXUI_COMPONENT_COMPONENT_OPTIONS_HPP */
Un adaptador. Posee o referencia un objeto inmutable.
Definition ref.hpp:17
Un adaptador. Referencia una lista de cadenas.
Definition ref.hpp:116
Un adaptador. Posee o referencia una cadena constante. Para mayor comodidad, esta clase convierte múl...
Definition ref.hpp:94
Un adaptador. Posee o referencia un objeto mutable.
Definition ref.hpp:46
Un adaptador. Posee o referencia una cadena constante. Para mayor comodidad, esta clase convierte múl...
Definition ref.hpp:82
bool active
Si la ventana es la activa.
std::function< void()> on_click
std::function< Element()> elements_prefix
static MenuOption Toggle()
Opciones estándar para un menú horizontal con un separador. Esto puede ser útil para implementar una ...
animation::Duration follower_duration
animation::easing::Function leader_function
MenuEntryOption entries_option
bool drag
Si la ventana está siendo arrastrada.
static InputOption Default()
Crea el estilo de entrada predeterminado:
animation::easing::Function function
animation::Duration follower_delay
static ButtonOption Border()
Crea una ButtonOption. El botón se muestra usando un borde, invertido cuando está enfocado....
bool hover_down
Si el lado inferior redimensionable está siendo "hovered".
const std::string & title
El título de la ventana.
void SetAnimationFunction(animation::easing::Function f)
Establece cómo debe animarse el subrayado.
static InputOption Spacious()
Un estilo blanco sobre negro con márgenes altos:
Ref< bool > insert
Modo de inserción o sobrescritura de caracteres.
static CheckboxOption Simple()
Opción para Checkbox estándar.
bool resize
Si la ventana está siendo redimensionada.
std::function< void()> on_enter
Element inner
El elemento envuelto dentro de esta ventana.
static ButtonOption Simple()
Crea una ButtonOption, invertida cuando está enfocada.
UnderlineOption underline
std::function< Element(const EntryState &state)> transform
static MenuOption Horizontal()
Opciones estándar para un menú horizontal. Esto puede ser útil para implementar una barra de pestañas...
static MenuOption VerticalAnimated()
Opciones estándar para un menú vertical animado. Esto puede ser útil para implementar una lista de el...
animation::Duration leader_duration
static MenuOption Vertical()
Opciones estándar para un menú vertical. Esto puede ser útil para implementar una lista de elementos ...
static ButtonOption Ascii()
Crea una ButtonOption, resaltada usando los caracteres [].
void SetAnimation(animation::Duration d, animation::easing::Function f)
Establece cómo debe animarse el subrayado.
void SetAnimationDuration(animation::Duration d)
Establece cómo debe animarse el subrayado.
ConstStringListRef entries
animation::easing::Function follower_function
bool hover_right
Si el lado derecho redimensionable está siendo "hovered".
Ref< bool > password
Oscurece el contenido del input usando '*'.
std::function< Element(InputState)> transform
std::function< Element()> elements_infix
Ref< bool > open
Si el desplegable está abierto o cerrado:
StringRef placeholder
El contenido del input cuando está vacío.
std::function< Element()> elements_postfix
AnimatedColorsOption animated_colors
bool hover_left
Si el lado izquierdo redimensionable está siendo "hovered".
std::function< void()> on_change
StringRef content
El contenido del input.
bool hover_top
Si el lado superior redimensionable está siendo "hovered".
void Set(Color inactive, Color active, animation::Duration duration=std::chrono::milliseconds(250), animation::easing::Function function=animation::easing::QuadraticInOut)
Una opción de color que puede ser animada.
animation::Duration leader_delay
std::function< Element(bool open, Element checkbox, Element radiobox)> transform
static MenuOption HorizontalAnimated()
Opciones estándar para un menú horizontal animado. Esto puede ser útil para implementar una barra de ...
Ref< bool > multiline
Si el input puede ser multilínea.
static RadioboxOption Simple()
Opción para Radiobox estándar.
std::function< Element(const EntryState &)> transform
static ButtonOption Animated()
Opción sobre un color potencialmente animado.
Opción para el componente AnimatedButton.
Opción para el componente Checkbox.
Opción para el componente Dropdown.Un menú desplegable es un checkbox que abre/cierra un radiobox.
Opción para el componente Input.
Opción para el componente MenuEntry.
Opción para el componente Menu.
Opción para el componente Radiobox.
Opción para el efecto de subrayado.
Estado pasado a la función de renderizado del componente Window.
Direction
Direction es una enumeración que representa las cuatro cardinales direcciones.
Definition direction.hpp:13
Color es una clase que representa un color en la interfaz de usuario de la terminal.
Definition color.hpp:21
float QuadraticInOut(float p)
Definition animation.cpp:46
std::function< float(float)> Function
Definition animation.hpp:44
std::chrono::duration< float > Duration
Definition animation.hpp:29
El espacio de nombres ftxui:: de FTXUI.
Definition animation.hpp:10
std::shared_ptr< Node > Element
Definition elements.hpp:22
std::shared_ptr< ComponentBase > Component
Argumentos para la transformación de |ButtonOption|, |CheckboxOption|, |RadioboxOption|,...
bool active
Si la entrada es la activa.
std::string label
La etiqueta a mostrar.
bool focused
Si la entrada está enfocada por el usuario.
int index
Índice de la entrada cuando sea aplicable o -1.
bool state
El estado del botón/checkbox/radiobox.
Usado para definir el estilo del componente Input.
bool focused
Si el input está enfocado por el usuario.
bool hovered
Si el input está siendo "hovered" por el ratón.
std::function< Element()> separator_func
std::function< void()> on_change
Ref< bool > resize_down
¿Se puede redimensionar el lado inferior?
Component inner
El componente envuelto por esta ventana.
Ref< bool > resize_left
¿Se puede redimensionar el lado izquierdo?
Ref< int > height
La altura de la ventana.
Ref< bool > resize_top
¿Se puede redimensionar el lado superior?
Ref< int > width
El ancho de la ventana.
std::function< Element(const WindowRenderState &)> render
Una función opcional para personalizar la apariencia de la ventana:
ConstStringRef title
El título mostrado por esta ventana.
Ref< bool > resize_right
¿Se puede redimensionar el lado derecho?
Ref< int > left
La posición del lado izquierdo de la ventana.
Ref< int > top
La posición del lado superior de la ventana.