FTXUI 6.1.9
C++ functional terminal UI.
Chargement...
Recherche...
Aucune correspondance
component_options.hpp
Aller à la documentation de ce fichier.
1// Copyright 2021 Arthur Sonzogni. All rights reserved.
2// Utilisation de ce code source régie par la licence MIT qui peut être trouvée dans
3// le fichier 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 arguments pour la transformation depuis |ButtonOption|, |CheckboxOption|,
23/// |RadioboxOption|, |MenuEntryOption|, |MenuOption|.
24struct EntryState {
25 std::string label; ///< Le libellé à afficher.
26 bool state; ///< L'état du bouton/checkbox/radiobox
27 bool active; ///< Indique si l'entrée est active.
28 bool focused; ///< Indique si l'entrée est celle sur laquelle l'utilisateur a le focus.
29 int index; ///< Index de l'entrée lorsqu'applicable ou -1.
30};
31
32/// @brief Option pour l'effet de soulignement.
33/// @ingroup component
56
57/// @brief Option concernant une couleur potentiellement animée.
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 Option pour le composant MenuEntry.
79/// @ingroup component
85
86/// @brief Option pour le composant Menu.
87/// @ingroup component
88struct MenuOption {
89 // Constructeurs standards:
90 static MenuOption Horizontal();
92 static MenuOption Vertical();
94 static MenuOption Toggle();
95
96 ConstStringListRef entries; ///> La liste des entrées.
97 Ref<int> selected = 0; ///> L'index de l'entrée sélectionnée.
98
99 // Style:
103 std::function<Element()> elements_prefix;
104 std::function<Element()> elements_infix;
105 std::function<Element()> elements_postfix;
106
107 // Observateurs:
108 std::function<void()> on_change; ///> Appelé lorsque l'entrée sélectionnée change.
109 std::function<void()> on_enter; ///> Appelé lorsque l'utilisateur appuie sur Entrée.
111};
112
113/// @brief Option pour le composant AnimatedButton.
114/// @ingroup component
116 // Constructeurs standards:
117 static ButtonOption Ascii();
118 static ButtonOption Simple();
119 static ButtonOption Border();
120 static ButtonOption Animated();
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 Option pour le composant Checkbox.
137/// @ingroup component
139 // Constructeurs standards:
140 static CheckboxOption Simple();
141
142 ConstStringRef label = "Checkbox";
143
145
146 // Style:
147 std::function<Element(const EntryState&)> transform;
148
149 // Observateur:
150 /// Appelé lorsque l'utilisateur change l'état.
151 std::function<void()> on_change = [] {};
152};
153
154/// @brief Utilisé pour définir le style du composant Input.
157 bool hovered; ///< Indique si l'entrée est survolée par la souris.
158 bool focused; ///< Indique si l'entrée a le focus de l'utilisateur.
159 bool is_placeholder; ///< Indique si l'entrée est vide et affiche le
160 ///< texte de substitution (placeholder).
161};
162
163/// @brief Option pour le composant Input.
164/// @ingroup component
166 // Un ensemble de styles prédéfinis:
167
168 /// @brief Crée le style d'entrée par défaut:
169 static InputOption Default();
170 /// @brief Un style blanc sur noir avec des marges élevées:
171 static InputOption Spacious();
172
173 /// Le contenu de l'entrée.
175
176 /// Le contenu de l'entrée lorsqu'elle est vide.
178
179 // Style:
180 std::function<Element(InputState)> transform;
181 Ref<bool> password = false; ///< Obscurcit le contenu de l'entrée en utilisant '*'.
182 Ref<bool> multiline = true; ///< Indique si l'entrée peut être multiligne.
183 Ref<bool> insert = true; ///< Mode d'insertion ou de remplacement des caractères.
184
185 /// Appelé lorsque le contenu change.
186 std::function<void()> on_change = [] {};
187 /// Appelé lorsque l'utilisateur appuie sur Entrée.
188 std::function<void()> on_enter = [] {};
189
190 // La position du curseur:
192};
193
194/// @brief Option pour le composant Radiobox.
195/// @ingroup component
197 // Constructeurs standards:
198 static RadioboxOption Simple();
199
200 // Contenu:
203
204 // Style:
205 std::function<Element(const EntryState&)> transform;
206
207 // Observateurs:
208 /// Appelé lorsque l'entrée sélectionnée change.
209 std::function<void()> on_change = [] {};
211};
212
219 : 10;
220 std::function<Element()> separator_func = [] { return ::ftxui::separator(); };
221
222 // Contraintes sur main_size:
224 Ref<int> max = std::numeric_limits<int>::max();
225};
226
227// @brief Option pour le composant `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; ///> Appelé lorsque `value` est mis à jour.
239};
240
241/// @brief État passé à la fonction de rendu du composant `Window`.
242/// @ingroup component
244 Element inner; ///< L'élément enveloppé à l'intérieur de cette fenêtre.
245 const std::string& title; ///< Le titre de la fenêtre.
246 bool active = false; ///< Indique si la fenêtre est active.
247 bool drag = false; ///< Indique si la fenêtre est en cours de déplacement.
248 bool resize = false; ///< Indique si la fenêtre est en cours de redimensionnement.
249 bool hover_left = false; ///< Indique si le côté gauche redimensionnable est survolé.
250 bool hover_right = false; ///< Indique si le côté droit redimensionnable est survolé.
251 bool hover_top = false; ///< Indique si le côté supérieur redimensionnable est survolé.
252 bool hover_down = false; ///< Indique si le côté inférieur redimensionnable est survolé.
253};
254
255// @brief Option pour le composant `Window`.
256// @ingroup component
258 Component inner; ///< Le composant enveloppé par cette fenêtre.
259 ConstStringRef title = ""; ///< Le titre affiché par cette fenêtre.
260
261 Ref<int> left = 0; ///< La position du côté gauche de la fenêtre.
262 Ref<int> top = 0; ///< La position du côté supérieur de la fenêtre.
263 Ref<int> width = 20; ///< La largeur de la fenêtre.
264 Ref<int> height = 10; ///< La hauteur de la fenêtre.
265
266 Ref<bool> resize_left = true; ///< Le côté gauche peut-il être redimensionné ?
267 Ref<bool> resize_right = true; ///< Le côté droit peut-il être redimensionné ?
268 Ref<bool> resize_top = true; ///< Le côté supérieur peut-il être redimensionné ?
269 Ref<bool> resize_down = true; ///< Le côté inférieur peut-il être redimensionné ?
270
271 /// Une fonction optionnelle pour personnaliser l'apparence de la fenêtre :
272 std::function<Element(const WindowRenderState&)> render;
273};
274
275/// @brief Option pour le composant Dropdown.
276/// @ingroup component
277/// Un menu déroulant est une case à cocher qui ouvre/ferme une radiobox.
279 /// Indique si le menu déroulant est ouvert ou fermé :
281 // Les options pour la case à cocher :
283 // Les options pour la radiobox :
285 // La fonction de transformation :
286 std::function<Element(bool open, Element checkbox, Element radiobox)>
288};
289
290} // namespace ftxui
291
292#endif /* end of include guard: FTXUI_COMPONENT_COMPONENT_OPTIONS_HPP */
Un adaptateur. Possède ou référence un objet immuable.
Definition ref.hpp:17
Un adaptateur. Référence une liste de chaînes de caractères.
Definition ref.hpp:116
Un adaptateur. Possède ou référence une chaîne constante. Par commodité, cette classe convertit plusi...
Definition ref.hpp:94
Un adaptateur. Possède ou référence un objet mutable.
Definition ref.hpp:46
Un adaptateur. Possède ou référence une chaîne constante. Par commodité, cette classe convertit plusi...
Definition ref.hpp:82
static ButtonOption Animated()
Crée une ButtonOption, utilisant des couleurs animées.
bool active
Indique si la fenêtre est active.
std::function< void()> on_click
std::function< Element()> elements_prefix
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
bool drag
Indique si la fenêtre est en cours de déplacement.
static InputOption Default()
Crée le style d'entrée par défaut:
animation::easing::Function function
animation::Duration follower_delay
static ButtonOption Border()
Crée une ButtonOption. Le bouton est affiché avec une bordure, inversée lorsqu'il est sélectionné....
bool hover_down
Indique si le côté inférieur redimensionnable est survolé.
const std::string & title
Le titre de la fenêtre.
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:
Ref< bool > insert
Mode d'insertion ou de remplacement des caractères.
static CheckboxOption Simple()
Option pour une case à cocher standard.
bool resize
Indique si la fenêtre est en cours de redimensionnement.
std::function< void()> on_enter
Element inner
L'élément enveloppé à l'intérieur de cette fenêtre.
static ButtonOption Simple()
Crée une ButtonOption, inversée lorsqu'elle est sélectionnée.
UnderlineOption underline
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é.
ConstStringListRef entries
animation::easing::Function follower_function
bool hover_right
Indique si le côté droit redimensionnable est survolé.
Ref< bool > password
Obscurcit le contenu de l'entrée en utilisant '*'.
std::function< Element(InputState)> transform
std::function< Element()> elements_infix
Ref< bool > open
Indique si le menu déroulant est ouvert ou fermé :
StringRef placeholder
Le contenu de l'entrée lorsqu'elle est vide.
std::function< Element()> elements_postfix
AnimatedColorsOption animated_colors
bool hover_left
Indique si le côté gauche redimensionnable est survolé.
std::function< void()> on_change
StringRef content
Le contenu de l'entrée.
bool hover_top
Indique si le côté supérieur redimensionnable est survolé.
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...
animation::Duration leader_delay
std::function< Element(bool open, Element checkbox, Element radiobox)> transform
static MenuOption HorizontalAnimated()
Options standard pour un menu horizontal animé. Cela peut être utile pour implémenter une barre d'ong...
Ref< bool > multiline
Indique si l'entrée peut être multiligne.
static RadioboxOption Simple()
Option pour un bouton radio standard.
std::function< Element(const EntryState &)> transform
Option concernant une couleur potentiellement animée.
Option pour le composant AnimatedButton.
Option pour le composant Checkbox.
Option pour le composant Dropdown.Un menu déroulant est une case à cocher qui ouvre/ferme une radiobo...
Option pour le composant Input.
Option pour le composant MenuEntry.
Option pour le composant Menu.
Option pour le composant Radiobox.
Option pour l'effet de soulignement.
État passé à la fonction de rendu du composant Window.
Direction
Direction est une énumération qui représente les quatre directions cardinales.
Definition direction.hpp:13
Color est une classe qui représente une couleur dans l'interface utilisateur du terminal.
Definition color.hpp:21
float QuadraticInOut(float p)
Definition animation.cpp:46
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
std::shared_ptr< ComponentBase > Component
arguments pour la transformation depuis |ButtonOption|, |CheckboxOption|, |RadioboxOption|,...
bool active
Indique si l'entrée est active.
std::string label
Le libellé à afficher.
bool focused
Indique si l'entrée est celle sur laquelle l'utilisateur a le focus.
int index
Index de l'entrée lorsqu'applicable ou -1.
bool state
L'état du bouton/checkbox/radiobox.
Utilisé pour définir le style du composant Input.
bool focused
Indique si l'entrée a le focus de l'utilisateur.
bool hovered
Indique si l'entrée est survolée par la souris.
std::function< Element()> separator_func
std::function< void()> on_change
Ref< bool > resize_down
Le côté inférieur peut-il être redimensionné ?
Component inner
Le composant enveloppé par cette fenêtre.
Ref< bool > resize_left
Le côté gauche peut-il être redimensionné ?
Ref< int > height
La hauteur de la fenêtre.
Ref< bool > resize_top
Le côté supérieur peut-il être redimensionné ?
Ref< int > width
La largeur de la fenêtre.
std::function< Element(const WindowRenderState &)> render
Une fonction optionnelle pour personnaliser l'apparence de la fenêtre :
ConstStringRef title
Le titre affiché par cette fenêtre.
Ref< bool > resize_right
Le côté droit peut-il être redimensionné ?
Ref< int > left
La position du côté gauche de la fenêtre.
Ref< int > top
La position du côté supérieur de la fenêtre.