FTXUI 6.1.9
C++ functional terminal UI.
Chargement...
Recherche...
Aucune correspondance
component_options.cpp
Aller à la documentation de ce fichier.
1// Copyright 2022 Arthur Sonzogni. Tous droits réservés.
2// L'utilisation de ce code source est régie par la licence MIT qui se trouve
3// dans le fichier 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 Une option de couleur qui peut être animée.
16/// @params _inactive La couleur lorsque le composant est inactif.
17/// @params _active La couleur lorsque le composant est actif.
18/// @params _duration La durée de l'animation.
19/// @params _function La fonction d'interpolation de l'animation.
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 Définit comment le soulignement doit être animé.
32/// @param d La durée de l'animation.
33/// @param f La fonction d'interpolation de l'animation.
39
40/// @brief Définit comment le soulignement doit être animé.
41/// @param d La durée de l'animation.
46
47/// @brief Définit comment le soulignement doit être animé.
48/// @param f La fonction d'interpolation de l'animation.
53
54/// @brief Définit comment le soulignement doit être animé.
55/// Ceci est utile pour désynchroniser l'animation du leader et du
56/// follower.
57/// @param f_leader La durée de l'animation pour le leader.
58/// @param f_follower La durée de l'animation pour le follower.
61 animation::easing::Function f_follower) {
62 leader_function = std::move(f_leader);
63 follower_function = std::move(f_follower);
64}
65
66/// @brief Options standard pour un menu horizontal.
67/// Cela peut être utile pour implémenter une barre d'onglets.
68// static
70 MenuOption option;
72 option.entries_option.transform = [](const EntryState& state) {
73 Element e = text(state.label);
74 if (state.focused) {
75 e |= inverted;
76 }
77 if (state.active) {
78 e |= bold;
79 }
80 if (!state.focused && !state.active) {
81 e |= dim;
82 }
83 return e;
84 };
85 option.elements_infix = [] { return text(" "); };
86
87 return option;
88}
89
90/// @brief Options standard pour un menu horizontal animé.
91/// Cela peut être utile pour implémenter une barre d'onglets.
92// static
94 auto option = Horizontal();
95 option.underline.enabled = true;
96 return option;
97}
98
99/// @brief Options standard pour un menu vertical.
100/// Cela peut être utile pour implémenter une liste d'éléments sélectionnables.
101// static
103 MenuOption option;
104 option.entries_option.transform = [](const EntryState& state) {
105 Element e = text((state.active ? "> " : " ") + state.label); // NOLINT
106 if (state.focused) {
107 e |= inverted;
108 }
109 if (state.active) {
110 e |= bold;
111 }
112 if (!state.focused && !state.active) {
113 e |= dim;
114 }
115 return e;
116 };
117 return option;
118}
119
120/// @brief Options standard pour un menu vertical animé.
121/// Cela peut être utile pour implémenter une liste d'éléments sélectionnables.
122// static
124 auto option = MenuOption::Vertical();
125 option.entries_option.transform = [](const EntryState& state) {
126 Element e = text(state.label);
127 if (state.focused) {
128 e |= inverted;
129 }
130 if (state.active) {
131 e |= bold;
132 }
133 if (!state.focused && !state.active) {
134 e |= dim;
135 }
136 return e;
137 };
138 option.underline.enabled = true;
139 return option;
140}
141
142/// @brief Options standard pour un menu horizontal avec un séparateur.
143/// Cela peut être utile pour implémenter une barre d'onglets.
144// static
146 auto option = MenuOption::Horizontal();
147 option.elements_infix = [] { return text("│") | automerge; };
148 return option;
149}
150
151/// @brief Crée une ButtonOption, mise en évidence à l'aide des caractères [].
152// static
154 ButtonOption option;
155 option.transform = [](const EntryState& s) {
156 const std::string t = s.focused ? "[" + s.label + "]" //
157 : " " + s.label + " ";
158 return text(t);
159 };
160 return option;
161}
162
163/// @brief Crée une ButtonOption, inversée lorsqu'elle est sélectionnée.
164// static
166 ButtonOption option;
167 option.transform = [](const EntryState& s) {
168 auto element = text(s.label) | borderLight;
169 if (s.focused) {
170 element |= inverted;
171 }
172 return element;
173 };
174 return option;
175}
176
177/// @brief Crée une ButtonOption. Le bouton est affiché avec une bordure, inversée
178/// lorsqu'il est sélectionné. C'est la valeur par défaut actuelle.
180 ButtonOption option;
181 option.transform = [](const EntryState& s) {
182 auto element = text(s.label) | border;
183 if (s.active) {
184 element |= bold;
185 }
186 if (s.focused) {
187 element |= inverted;
188 }
189 return element;
190 };
191 return option;
192}
193
194/// @brief Crée une ButtonOption, utilisant des couleurs animées.
195// static
200
201/// @brief Crée une ButtonOption, utilisant des couleurs animées.
202// static
205 Color::Interpolate(0.85F, color, Color::Black), // NOLINT
206 Color::Interpolate(0.10F, color, Color::White), // NOLINT
207 Color::Interpolate(0.10F, color, Color::Black), // NOLINT
208 Color::Interpolate(0.85F, color, Color::White)); // NOLINT
209}
210
211/// @brief Crée une ButtonOption, utilisant des couleurs animées.
212// static
214 // NOLINTBEGIN
216 /*bakground=*/background,
217 /*foreground=*/foreground,
218 /*background_active=*/foreground,
219 /*foreground_active=*/background);
220 // NOLINTEND
221}
222
223/// @brief Crée une ButtonOption, utilisant des couleurs animées.
224// static
226 Color foreground,
227 Color background_active,
228 Color foreground_active) {
229 ButtonOption option;
230 option.transform = [](const EntryState& s) {
231 auto element = text(s.label) | borderEmpty;
232 if (s.focused) {
233 element |= bold;
234 }
235 return element;
236 };
237 option.animated_colors.foreground.Set(foreground, foreground_active);
238 option.animated_colors.background.Set(background, background_active);
239 return option;
240}
241
242/// @brief Option pour une case à cocher standard.
243// static
245 auto option = CheckboxOption();
246 option.transform = [](const EntryState& s) {
247#if defined(FTXUI_MICROSOFT_TERMINAL_FALLBACK)
248 // Le terminal Microsoft n'utilise pas de polices capables de rendre correctement le glyphe
249 // de la case à cocher par défaut.
250 auto prefix = text(s.state ? "[X] " : "[ ] "); // NOLINT
251#else
252 auto prefix = text(s.state ? "▣ " : "☐ "); // NOLINT
253#endif
254 auto t = text(s.label);
255 if (s.active) {
256 t |= bold;
257 }
258 if (s.focused) {
259 t |= inverted;
260 }
261 return hbox({prefix, t});
262 };
263 return option;
264}
265
266/// @brief Option pour un bouton radio standard
267// static
269 auto option = RadioboxOption();
270 option.transform = [](const EntryState& s) {
271#if defined(FTXUI_MICROSOFT_TERMINAL_FALLBACK)
272 // Le terminal Microsoft n'utilise pas de polices capables de rendre correctement le glyphe
273 // de la case d'option par défaut.
274 auto prefix = text(s.state ? "(*) " : "( ) "); // NOLINT
275#else
276 auto prefix = text(s.state ? "◉ " : "○ "); // NOLINT
277#endif
278 auto t = text(s.label);
279 if (s.active) {
280 t |= bold;
281 }
282 if (s.focused) {
283 t |= inverted;
284 }
285 return hbox({prefix, t});
286 };
287 return option;
288}
289
290/// @brief Options standard pour le composant d'entrée.
291// static
293 InputOption option;
294 option.transform = [](InputState state) {
295 state.element |= color(Color::White);
296
297 if (state.is_placeholder) {
298 state.element |= dim;
299 }
300
301 if (state.focused) {
302 state.element |= inverted;
303 } else if (state.hovered) {
304 state.element |= bgcolor(Color::GrayDark);
305 }
306
307 return state.element;
308 };
309 return option;
310}
311
312/// @brief Options standard pour un composant d'entrée plus esthétique.
313// static
315 InputOption option;
316 option.transform = [](InputState state) {
317 state.element |= borderEmpty;
318 state.element |= color(Color::White);
319
320 if (state.is_placeholder) {
321 state.element |= dim;
322 }
323
324 if (state.focused) {
325 state.element |= bgcolor(Color::Black);
326 }
327
328 if (state.hovered) {
329 state.element |= bgcolor(Color::GrayDark);
330 }
331
332 return state.element;
333 };
334 return option;
335}
336
337} // namespace ftxui
static ButtonOption Animated()
Crée une ButtonOption, utilisant des couleurs animées.
static MenuOption Toggle()
Options standard pour un menu horizontal avec un séparateur. Cela peut être utile pour implémenter un...
animation::Duration follower_duration
animation::easing::Function leader_function
MenuEntryOption entries_option
static InputOption Default()
Crée le style d'entrée par défaut:
animation::easing::Function function
static ButtonOption Border()
Crée une ButtonOption. Le bouton est affiché avec une bordure, inversée lorsqu'il est sélectionné....
void SetAnimationFunction(animation::easing::Function f)
Définit comment le soulignement doit être animé.
static InputOption Spacious()
Un style blanc sur noir avec des marges élevées:
static CheckboxOption Simple()
Option pour une case à cocher standard.
static ButtonOption Simple()
Crée une ButtonOption, inversée lorsqu'elle est sélectionnée.
std::function< Element(const EntryState &state)> transform
static MenuOption Horizontal()
Options standard pour un menu horizontal. Cela peut être utile pour implémenter une barre d'onglets.
static MenuOption VerticalAnimated()
Options standard pour un menu vertical animé. Cela peut être utile pour implémenter une liste d'éléme...
animation::Duration leader_duration
static MenuOption Vertical()
Options standard pour un menu vertical. Cela peut être utile pour implémenter une liste d'éléments sé...
static ButtonOption Ascii()
Crée une ButtonOption, mise en évidence à l'aide des caractères [].
void SetAnimation(animation::Duration d, animation::easing::Function f)
Définit comment le soulignement doit être animé.
void SetAnimationDuration(animation::Duration d)
Définit comment le soulignement doit être animé.
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)
Une option de couleur qui peut être animée. @params _inactive La couleur lorsque le composant est ina...
static MenuOption HorizontalAnimated()
Options standard pour un menu horizontal animé. Cela peut être utile pour implémenter une barre d'ong...
static RadioboxOption Simple()
Option pour un bouton radio standard.
std::function< Element(const EntryState &)> transform
Option pour le composant AnimatedButton.
Option pour le composant Checkbox.
Option pour le composant Input.
Option pour le composant Menu.
Option pour le composant Radiobox.
Decorator bgcolor(Color)
Décore en utilisant une couleur d'arrière-plan.
Element bold(Element)
Utilise une police en gras, pour les éléments avec plus d'emphase.
Definition bold.cpp:33
Element inverted(Element)
Ajoute un filtre qui inversera les couleurs de premier plan et d'arrière-plan.
Definition inverted.cpp:33
Element text(std::wstring text)
Affiche un morceau de texte unicode.
Definition text.cpp:160
Element borderLight(Element)
Dessine une bordure fine autour de l'élément.
Element dim(Element)
Utilise une police de caractères claire, pour les éléments moins mis en valeur.
Definition dim.cpp:33
Element automerge(Element child)
Permet aux caractères d'être fusionnés automatiquement avec d'autres à proximité.
Definition automerge.cpp:17
Element border(Element)
Dessine une bordure autour de l'élément.
Element borderEmpty(Element)
Dessine une bordure vide autour de l'élément.
Decorator color(Color)
Décore en utilisant une couleur de premier plan.
static Color Interpolate(float t, const Color &a, const Color &b)
Color est une classe qui représente une couleur dans l'interface utilisateur du terminal.
Definition color.hpp:21
std::function< float(float)> Function
Definition animation.hpp:45
std::chrono::duration< float > Duration
Definition animation.hpp:30
L'espace de noms FTXUI ftxui::
Definition animation.hpp:10
std::shared_ptr< Node > Element
Definition elements.hpp:22
Element hbox(Elements)
Un conteneur affichant les éléments horizontalement un par un.
Definition hbox.cpp:94
arguments pour la transformation depuis |ButtonOption|, |CheckboxOption|, |RadioboxOption|,...
Utilisé pour définir le style du composant Input.