FTXUI 6.1.9
C++ functional terminal UI.
Loading...
Searching...
No Matches
component_options.cpp
Go to the documentation of this file.
1// Copyright 2022 Arthur Sonzogni. Todos los derechos reservados.
2// El uso de este código fuente se rige por la licencia MIT que se puede encontrar
3// en el archivo LICENSE.
5
6#include <ftxui/screen/color.hpp> // for Color, Color::White, Color::Black, Color::GrayDark, Color::Blue, Color::GrayLight, Color::Red
7#include <memory> // for shared_ptr
8#include <utility> // for move
9#include "ftxui/component/animation.hpp" // for Function, Duration
11#include "ftxui/dom/elements.hpp" // for operator|=, Element, text, bgcolor, inverted, bold, dim, operator|, color, borderEmpty, hbox, automerge, border, borderLight
12
13namespace ftxui {
14
15/// @brief Una opción de color que puede ser animada.
16/// @param _inactive El color cuando el componente está inactivo.
17/// @param _active El color cuando el componente está activo.
18/// @param _duration La duración de la animación.
19/// @param _function La función de aceleración de la animación.
21 Color _active,
22 animation::Duration _duration,
24 enabled = true;
25 inactive = _inactive;
26 active = _active;
27 duration = _duration;
28 function = std::move(_function);
29}
30
31/// @brief Establece cómo debe animarse el subrayado.
32/// @param d La duración de la animación.
33/// @param f La función de aceleración de la animación.
39
40/// @brief Establece cómo debe animarse el subrayado.
41/// @param d La duración de la animación.
46
47/// @brief Establece cómo debe animarse el subrayado.
48/// @param f La función de aceleración de la animación.
53
54/// @brief Establece cómo debe animarse el subrayado.
55/// Esto es útil para desincronizar la animación del líder y el seguidor.
56/// @param f_leader La duración de la animación para el líder.
57/// @param f_follower La duración de la animación para el seguidor.
60 animation::easing::Function f_follower) {
61 leader_function = std::move(f_leader);
62 follower_function = std::move(f_follower);
63}
64
65/// @brief Opciones estándar para un menú horizontal.
66/// Esto puede ser útil para implementar una barra de pestañas.
67// static
69 MenuOption option;
71 option.entries_option.transform = [](const EntryState& state) {
72 Element e = text(state.label);
73 if (state.focused) {
74 e |= inverted;
75 }
76 if (state.active) {
77 e |= bold;
78 }
79 if (!state.focused && !state.active) {
80 e |= dim;
81 }
82 return e;
83 };
84 option.elements_infix = [] { return text(" "); };
85
86 return option;
87}
88
89/// @brief Opciones estándar para un menú horizontal animado.
90/// Esto puede ser útil para implementar una barra de pestañas.
91// static
93 auto option = Horizontal();
94 option.underline.enabled = true;
95 return option;
96}
97
98/// @brief Opciones estándar para un menú vertical.
99/// Esto puede ser útil para implementar una lista de elementos seleccionables.
100// static
102 MenuOption option;
103 option.entries_option.transform = [](const EntryState& state) {
104 Element e = text((state.active ? "> " : " ") + state.label); // NOLINT
105 if (state.focused) {
106 e |= inverted;
107 }
108 if (state.active) {
109 e |= bold;
110 }
111 if (!state.focused && !state.active) {
112 e |= dim;
113 }
114 return e;
115 };
116 return option;
117}
118
119/// @brief Opciones estándar para un menú vertical animado.
120/// Esto puede ser útil para implementar una lista de elementos seleccionables.
121// static
123 auto option = MenuOption::Vertical();
124 option.entries_option.transform = [](const EntryState& state) {
125 Element e = text(state.label);
126 if (state.focused) {
127 e |= inverted;
128 }
129 if (state.active) {
130 e |= bold;
131 }
132 if (!state.focused && !state.active) {
133 e |= dim;
134 }
135 return e;
136 };
137 option.underline.enabled = true;
138 return option;
139}
140
141/// @brief Opciones estándar para un menú horizontal con un separador.
142/// Esto puede ser útil para implementar una barra de pestañas.
143// static
145 auto option = MenuOption::Horizontal();
146 option.elements_infix = [] { return text("│") | automerge; };
147 return option;
148}
149
150/// @brief Crea una ButtonOption, resaltada usando los caracteres [].
151// static
153 ButtonOption option;
154 option.transform = [](const EntryState& s) {
155 const std::string t = s.focused ? "[" + s.label + "]" //
156 : " " + s.label + " ";
157 return text(t);
158 };
159 return option;
160}
161
162/// @brief Crea una ButtonOption, invertida cuando está enfocada.
163// static
165 ButtonOption option;
166 option.transform = [](const EntryState& s) {
167 auto element = text(s.label) | borderLight;
168 if (s.focused) {
169 element |= inverted;
170 }
171 return element;
172 };
173 return option;
174}
175
176/// @brief Crea una ButtonOption. El botón se muestra usando un borde, invertido
177/// cuando está enfocado. Este es el valor predeterminado actual.
179 ButtonOption option;
180 option.transform = [](const EntryState& s) {
181 auto element = text(s.label) | border;
182 if (s.active) {
183 element |= bold;
184 }
185 if (s.focused) {
186 element |= inverted;
187 }
188 return element;
189 };
190 return option;
191}
192
193/// @brief Crea una ButtonOption, usando colores animados.
196}
197
198/// @brief Crea una ButtonOption, usando colores animados.
199// static
200ButtonOption ButtonOption::Animated(Color color) {
201 return ButtonOption::Animated(
202 Color::Interpolate(0.85F, color, Color::Black), // NOLINT
203 Color::Interpolate(0.10F, color, Color::White), // NOLINT
204 Color::Interpolate(0.10F, color, Color::Black), // NOLINT
205 Color::Interpolate(0.85F, color, Color::White)); // NOLINT
206}
207
208/// @brief Crea una ButtonOption, usando colores animados.
209// static
210ButtonOption ButtonOption::Animated(Color background, Color foreground) {
211 // NOLINTBEGIN
212 return ButtonOption::Animated(
213 /*bakground=*/background,
214 /*foreground=*/foreground,
215 /*background_active=*/foreground,
216 /*foreground_active=*/background);
217 // NOLINTEND
218}
219
220/// @brief Crea una ButtonOption, usando colores animados.
221// static
222ButtonOption ButtonOption::Animated(Color background,
223 Color foreground,
224 Color background_active,
225 Color foreground_active) {
226 ButtonOption option;
227 option.transform = [](const EntryState& s) {
228 auto element = text(s.label) | borderEmpty;
229 if (s.focused) {
230 element |= bold;
231 }
232 return element;
233 };
234 option.animated_colors.foreground.Set(foreground, foreground_active);
235 option.animated_colors.background.Set(background, background_active);
236 return option;
237}
238
239/// @brief Opción para Checkbox estándar.
240// static
241CheckboxOption CheckboxOption::Simple() {
242 auto option = CheckboxOption();
243 option.transform = [](const EntryState& s) {
244#if defined(FTXUI_MICROSOFT_TERMINAL_FALLBACK)
245 // La terminal de Microsoft no utiliza fuentes capaces de renderizar correctamente el glifo
246 // predeterminado del radiobox.
247 auto prefix = text(s.state ? "[X] " : "[ ] "); // NOLINT
248#else
249 auto prefix = text(s.state ? "▣ " : "☐ "); // NOLINT
250#endif
251 auto t = text(s.label);
252 if (s.active) {
253 t |= bold;
254 }
255 if (s.focused) {
256 t |= inverted;
257 }
258 return hbox({prefix, t});
259 };
260 return option;
261}
262
263/// @brief Opción para Radiobox estándar
264// static
265RadioboxOption RadioboxOption::Simple() {
266 auto option = RadioboxOption();
267 option.transform = [](const EntryState& s) {
268#if defined(FTXUI_MICROSOFT_TERMINAL_FALLBACK)
269 // La terminal de Microsoft no utiliza fuentes capaces de renderizar correctamente el glifo
270 // predeterminado del radiobox.
271 auto prefix = text(s.state ? "(*) " : "( ) "); // NOLINT
272#else
273 auto prefix = text(s.state ? "◉ " : "○ "); // NOLINT
274#endif
275 auto t = text(s.label);
276 if (s.active) {
277 t |= bold;
278 }
279 if (s.focused) {
280 t |= inverted;
281 }
282 return hbox({prefix, t});
283 };
284 return option;
285}
286
287/// @brief Opciones estándar para el componente de entrada.
288// static
289InputOption InputOption::Default() {
290 InputOption option;
291 option.transform = [](InputState state) {
292 state.element |= color(Color::White);
293
294 if (state.is_placeholder) {
295 state.element |= dim;
296 }
297
298 if (state.focused) {
299 state.element |= inverted;
300 } else if (state.hovered) {
301 state.element |= bgcolor(Color::GrayDark);
302 }
303
304 return state.element;
305 };
306 return option;
307}
308
309/// @brief Opciones estándar para un componente de entrada más bonito.
310// static
311InputOption InputOption::Spacious() {
312 InputOption option;
313 option.transform = [](InputState state) {
314 state.element |= borderEmpty;
315 state.element |= color(Color::White);
316
317 if (state.is_placeholder) {
318 state.element |= dim;
319 }
320
321 if (state.focused) {
322 state.element |= bgcolor(Color::Black);
323 }
324
325 if (state.hovered) {
326 state.element |= bgcolor(Color::GrayDark);
327 }
328
329 return state.element;
330 };
331 return option;
332}
333
334} // namespace ftxui
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
animation::easing::Function function
static ButtonOption Border()
Crea una ButtonOption. El botón se muestra usando un borde, invertido cuando está enfocado....
void SetAnimationFunction(animation::easing::Function f)
Establece cómo debe animarse el subrayado.
static ButtonOption Simple()
Crea una ButtonOption, invertida cuando está enfocada.
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.
animation::easing::Function follower_function
std::function< Element(InputState)> transform
std::function< Element()> elements_infix
AnimatedColorsOption animated_colors
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.
static MenuOption HorizontalAnimated()
Opciones estándar para un menú horizontal animado. Esto puede ser útil para implementar una barra de ...
std::function< Element(const EntryState &)> transform
Opción para el componente AnimatedButton.
Opción para el componente Checkbox.
Opción para el componente Input.
Opción para el componente Menu.
Opción para el componente Radiobox.
Element bold(Element)
Utiliza una fuente en negrita, para elementos con más énfasis.
Definition bold.cpp:33
Element inverted(Element)
Agrega un filtro que invertirá los colores de primer plano y de fondo. colores.
Definition inverted.cpp:34
Element text(std::wstring text)
Muestra un fragmento de texto Unicode.
Definition text.cpp:160
Element borderLight(Element)
Draw a light border around the element.
Element dim(Element)
Usa una fuente clara para elementos con menos énfasis.
Definition dim.cpp:33
Element automerge(Element child)
Permite que los caracteres se fusionen automáticamente con otros cercanos.
Definition automerge.cpp:17
Element border(Element)
Draw a border around the element.
Color es una clase que representa un color en la interfaz de usuario de la terminal.
Definition color.hpp:21
return hbox({ text(std::to_string(int(progress *100))+"% ")|size(WIDTH, EQUAL, 5), gauge(progress), })
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
return Animated(Color::Black, Color::GrayLight, Color::GrayDark, Color::White)
Crea una ButtonOption, usando colores animados.
std::shared_ptr< Node > Element
Definition elements.hpp:22
Argumentos para la transformación de |ButtonOption|, |CheckboxOption|, |RadioboxOption|,...
Usado para definir el estilo del componente Input.