FTXUI 7.0.3
C++ functional terminal UI.
Loading...
Searching...
No Matches
elements.hpp
Go to the documentation of this file.
1// Copyright 2020 Arthur Sonzogni. All rights reserved.
2// Use of this source code is governed by the MIT license that can be found in
3// the LICENSE file.
4#ifndef FTXUI_DOM_ELEMENTS_HPP
5#define FTXUI_DOM_ELEMENTS_HPP
6
7#include <cstdint>
8#include <functional>
9#include <memory>
10
11#include <string_view>
12#include "ftxui/dom/canvas.hpp"
16#include "ftxui/dom/node.hpp"
17#include "ftxui/screen/box.hpp"
20#include "ftxui/util/export.hpp"
21#include "ftxui/util/ref.hpp"
22
23namespace ftxui {
24class Node;
25using Element = std::shared_ptr<Node>;
26using Elements = std::vector<Element>;
27using Decorator = std::function<Element(Element)>;
28using GraphFunction = std::function<std::vector<int>(int, int)>;
29
30/// @brief BorderStyle est une énumération qui représente les différents styles
31/// de bordures pouvant être appliqués aux éléments de l'interface utilisateur du terminal.
32///
33/// BorderStyle est une énumération qui représente les différents styles de
34/// bordures pouvant être appliqués aux éléments de l'interface utilisateur du terminal.
35/// Il est utilisé pour définir l'apparence visuelle des bordures autour des éléments,
36/// tels que les fenêtres, les cadres ou les séparateurs.
37/// @ingroup dom
46
47// Enchaîner les éléments dans des décorateurs.
48// Par exemple les lignes suivantes sont équivalentes :
49// -> text("ftxui") | bold | underlined
50// -> underlined(bold(text("FTXUI")))
55
56// --- Composant ---
57FTXUI_EXPORT(DOM) Element text(std::string_view text);
58FTXUI_EXPORT(DOM) Element vtext(std::string_view text);
67FTXUI_EXPORT(DOM) Element separatorCharacter(std::string_view);
68FTXUI_EXPORT(DOM)
70 float right,
71 Color unselected_color,
72 Color selected_color);
73FTXUI_EXPORT(DOM)
75 float down,
76 Color unselected_color,
77 Color selected_color);
78FTXUI_EXPORT(DOM) Element gauge(float progress);
79FTXUI_EXPORT(DOM) Element gaugeLeft(float progress);
80FTXUI_EXPORT(DOM) Element gaugeRight(float progress);
81FTXUI_EXPORT(DOM) Element gaugeUp(float progress);
82FTXUI_EXPORT(DOM) Element gaugeDown(float progress);
84
85// charset[0] est le glyphe "vide", charset.back() est "plein" ; les entrées entre
86// les deux ombrent la cellule limite.
87FTXUI_EXPORT(DOM)
88Element gaugeCharset(float progress,
89 std::vector<std::string> charset,
101FTXUI_EXPORT(DOM) Decorator borderWith(const Cell&);
102FTXUI_EXPORT(DOM)
103Element window(Element title, Element content, BorderStyle border = ROUNDED);
104FTXUI_EXPORT(DOM) Element spinner(int charset_index, size_t image_index);
105FTXUI_EXPORT(DOM) Element paragraph(std::string_view text);
106FTXUI_EXPORT(DOM) Element paragraphAlignLeft(std::string_view text);
107FTXUI_EXPORT(DOM) Element paragraphAlignRight(std::string_view text);
108FTXUI_EXPORT(DOM) Element paragraphAlignCenter(std::string_view text);
109FTXUI_EXPORT(DOM) Element paragraphAlignJustify(std::string_view text);
113FTXUI_EXPORT(DOM)
114Element canvas(int width, int height, std::function<void(Canvas&)>);
115FTXUI_EXPORT(DOM) Element canvas(std::function<void(Canvas&)>);
116
117// -- Décorateur ---
126FTXUI_EXPORT(DOM) Decorator color(Color);
127FTXUI_EXPORT(DOM) Decorator bgcolor(Color);
128FTXUI_EXPORT(DOM) Decorator color(const LinearGradient&);
129FTXUI_EXPORT(DOM) Decorator bgcolor(const LinearGradient&);
130FTXUI_EXPORT(DOM) Element color(Color, Element);
132FTXUI_EXPORT(DOM) Element color(const LinearGradient&, Element);
133FTXUI_EXPORT(DOM) Element bgcolor(const LinearGradient&, Element);
135FTXUI_EXPORT(DOM) Decorator focusPositionRelative(float x, float y);
137FTXUI_EXPORT(DOM) Decorator hyperlink(std::string_view link);
138FTXUI_EXPORT(DOM) Element hyperlink(std::string_view link, Element child);
140FTXUI_EXPORT(DOM) Decorator selectionColor(Color foreground);
141FTXUI_EXPORT(DOM) Decorator selectionBackgroundColor(Color foreground);
142FTXUI_EXPORT(DOM) Decorator selectionForegroundColor(Color foreground);
143FTXUI_EXPORT(DOM) Decorator selectionStyle(std::function<void(Cell&)> style);
144
145// --- Disposition ---
146// Horizontal, Vertical ou empilé d'éléments.
150FTXUI_EXPORT(DOM)
151Element flexbox(Elements, FlexboxConfig config = FlexboxConfig());
152FTXUI_EXPORT(DOM) Element gridbox(std::vector<Elements> lines);
153
154FTXUI_EXPORT(DOM)
155Element hflow(Elements); // Aide : flexbox par défaut avec direction de ligne.
156FTXUI_EXPORT(DOM)
157Element vflow(Elements); // Aide : flexbox par défaut avec direction de colonne.
158
159// -- Flexibilité ---
160// Définit comment partager l'espace restant lorsque tout n'est pas utilisé à l'intérieur d'un
161// conteneur.
162FTXUI_EXPORT(DOM) Element flex(Element); // Développer/Réduire si possible/nécessaire.
163FTXUI_EXPORT(DOM) Element flex_grow(Element); // Développer l'élément si possible.
164FTXUI_EXPORT(DOM) Element flex_shrink(Element); // Réduire l'élément si nécessaire.
168
169FTXUI_EXPORT(DOM)
170Element xflex(Element); // Développer/Réduire si possible/nécessaire sur l'axe X.
171FTXUI_EXPORT(DOM)
172Element xflex_grow(Element); // Développer l'élément si possible sur l'axe X.
173FTXUI_EXPORT(DOM)
174Element xflex_shrink(Element); // Réduire l'élément si nécessaire sur l'axe X.
175FTXUI_EXPORT(DOM) Decorator xflex_factor(int grow, int shrink);
178
179FTXUI_EXPORT(DOM)
180Element yflex(Element); // Développer/Réduire si possible/nécessaire sur l'axe Y.
181FTXUI_EXPORT(DOM)
182Element yflex_grow(Element); // Développer l'élément si possible sur l'axe Y.
183FTXUI_EXPORT(DOM)
184Element yflex_shrink(Element); // Réduire l'élément si nécessaire sur l'axe Y.
185FTXUI_EXPORT(DOM) Decorator yflex_factor(int grow, int shrink);
188
189FTXUI_EXPORT(DOM) Element notflex(Element); // Réinitialiser l'attribut flex.
190FTXUI_EXPORT(DOM) Element filler(); // Un élément vide extensible.
191
192// -- Surcharger la taille ---
193enum WidthOrHeight : uint8_t { WIDTH, HEIGHT };
196
197// --- Cadre ---
198// Un cadre est une zone défilante. La zone interne est potentiellement plus grande que
199// la zone externe. La zone interne est défilée afin de rendre visible l'élément focalisé.
204FTXUI_EXPORT(DOM) Element select(Element e); // Obsolète - Alias pour focus.
205
206// --- Curseur ---
207// Ceux-ci sont similaires à `focus`, mais changent également la forme du curseur.
214
215// --- Divers ---
218FTXUI_EXPORT(DOM) Decorator reflect(Box& box);
219// Avant de dessiner l'|element|, effacer le pixel en dessous. Ceci est utile en
220// combinaison avec dbox.
222
223// --- Utilitaire --------------------------------------------------------------------
229
230namespace Dimension {
231FTXUI_EXPORT(DOM) Dimensions Fit(Element&, bool extend_beyond_screen = false);
232} // namespace Dimension
233
234} // namespace ftxui
235
236// Rendre le conteneur capable de prendre n'importe quel nombre d'enfants en entrée.
237#include "ftxui/dom/take_any_args.hpp"
238
239// Inclure les anciennes définitions utilisant wstring.
241#endif // FTXUI_DOM_ELEMENTS_HPP
Un adaptateur. Possède ou référence un objet immuable.
Definition ref.hpp:20
#define FTXUI_EXPORT(component)
Definition export.hpp:24
Element window(Element title, Element content, BorderStyle border=ROUNDED)
Dessine une fenêtre avec un titre et une bordure autour de l'élément.
Element borderDouble(Element child)
Dessine une double bordure autour de l'élément.
Element text(std::string_view text)
Affiche un morceau de texte unicode encodé en UTF8.
Element focusCursorBarBlinking(Element child)
Identique à focus, mais définit la forme du curseur comme une barre clignotante.
Definition frame.cpp:189
Element xflex(Element)
Développer/Réduire si possible/nécessaire sur l'axe X.
Definition flex.cpp:101
Element gaugeDirection(float progress, Direction direction)
Dessine une barre de progression haute définition progressant dans la direction spécifiée.
Decorator focusPositionRelative(float x, float y)
Utilisé à l'intérieur d'un frame, cela force la vue à être défilée vers une position donnée....
Element separatorStyled(BorderStyle style)
Dessine une séparation verticale ou horizontale entre deux autres éléments.
Element xflex_grow(Element)
S'étend si possible sur l'axe X.
Definition flex.cpp:119
Element underlinedDouble(Element child)
Applique un double soulignement au texte.
Element clear_under(Element element)
Avant de dessiner |child|, efface les cellules en dessous. Ceci est utile en combinaison avec dbox.
Element borderDashed(Element child)
Dessine une bordure en pointillés autour de l'élément.
Element separatorEmpty()
Dessine une séparation verticale ou horizontale entre deux autres éléments, en utilisant le style EMP...
Element vscroll_indicator(Element child)
Affiche une barre de défilement verticale à droite. Les couleurs suivent le contenu.
Element nothing(Element element)
Une décoration qui ne fait absolument rien.
Definition dom/util.cpp:28
Element paragraphAlignLeft(std::string_view the_text)
Renvoie un élément affichant le paragraphe sur plusieurs lignes, aligné à gauche.
Decorator size(WidthOrHeight direction, Constraint constraint, int value)
Applique une contrainte sur la taille d'un élément.
Element flex(Element child)
Permet à un élément enfant de s'étendre proportionnellement à l'espace restant dans un conteneur.
Definition flex.cpp:95
Element hyperlink(std::string_view link, Element child)
Rend la zone affichée cliquable à l'aide d'un navigateur web. Le lien sera ouvert lorsque l'utilisate...
Definition hyperlink.cpp:52
Element gaugeRight(float progress)
Dessine une barre de progression en haute définition progressant de gauche à droite.
Element focusCursorUnderlineBlinking(Element child)
Identique à focus, mais définit la forme du curseur comme un soulignement clignotant.
Definition frame.cpp:217
Element bold(Element child)
Utilise une police en gras, pour les éléments avec plus d'emphase.
Definition bold.cpp:33
Element separatorLight()
Dessine une séparation verticale ou horizontale entre deux autres éléments, en utilisant le style LIG...
Element spinner(int charset_index, size_t image_index)
Utile pour représenter l'effet du temps et/ou des événements. Cela affiche une "vidéo" en art ASCII.
Element borderRounded(Element child)
Dessine une bordure arrondie autour de l'élément.
Element emptyElement()
Definition dom/util.cpp:140
Element yflex(Element)
Développer/Réduire si possible/nécessaire sur l'axe Y.
Definition flex.cpp:107
Element flex_shrink(Element child)
Minimiser si nécessaire.
Definition flex.cpp:131
Element focusCursorBar(Element child)
Identique à focus, mais définit la forme du curseur comme un bloc fixe.
Definition frame.cpp:175
Element focusCursorBlock(Element child)
Identique à focus, mais définit la forme du curseur comme un bloc fixe.
Definition frame.cpp:147
Element vtext(std::string_view text)
Affiche un morceau de texte unicode verticalement.
BorderStyle
BorderStyle est une énumération qui représente les différents styles de bordures pouvant être appliqu...
Definition elements.hpp:38
Element underlined(Element child)
Souligne l'élément donné.
Element center(Element child)
Centre un élément horizontalement et verticalement.
Element paragraphAlignJustify(std::string_view the_text)
Renvoie un élément affichant le paragraphe sur plusieurs lignes, aligné en utilisant un alignement ju...
Direction
Direction est une énumération qui représente les quatre directions cardinales.
Definition direction.hpp:15
Element focusCursorUnderline(Element child)
Identique à focus, mais définit la forme du curseur comme un soulignement fixe.
Definition frame.cpp:203
Element borderHeavy(Element child)
Dessine une bordure épaisse autour de l'élément.
Element inverted(Element child)
Ajoute un filtre qui inversera les couleurs de premier plan et d'arrière-plan.
Definition inverted.cpp:33
Element gaugeUp(float progress)
Dessine une barre de progression en haute définition progressant de bas en haut.
Element gaugeCharset(float progress, std::vector< std::string > charset, Direction direction=Direction::Right)
Dessine une barre de progression haute définition en utilisant un jeu de caractères personnalisé.
Element align_right(Element child)
Aligne un élément sur le côté droit.
Decorator focusPosition(int x, int y)
Utilisé à l'intérieur d'un frame, cela force la vue à être défilée vers une position donnée....
Element yflex_grow(Element)
S'étend si possible sur l'axe Y.
Definition flex.cpp:125
Element hscroll_indicator(Element child)
Affiche une barre de défilement horizontale en bas. Les couleurs suivent le contenu.
Element flex_grow(Element child)
S'étend si possible.
Definition flex.cpp:113
Element separatorDashed()
Dessine une séparation verticale ou horizontale entre deux autres éléments, en utilisant le style DAS...
Element notflex(Element child)
Rend l'élément non flexible.
Definition flex.cpp:149
Element strikethrough(Element child)
Applique un barré au texte.
Element italic(Element child)
Applique un double soulignement au texte.
Definition italic.cpp:17
Element dbox(Elements children_)
Empile plusieurs éléments les uns sur les autres.
Element xflex_shrink(Element)
Minimiser si nécessaire sur l'axe X.
Definition flex.cpp:137
Decorator borderWith(const Cell &pixel)
Identique à border mais avec une Cell constante autour de l'élément.
Element gaugeLeft(float progress)
Dessine une barre de progression en haute définition progressant de droite à gauche.
Element paragraphAlignCenter(std::string_view the_text)
Renvoie un élément affichant le paragraphe sur plusieurs lignes, aligné au centre.
Element borderLight(Element child)
Dessine une bordure fine autour de l'élément.
Element focus(Element child)
Définit l'élément child comme étant celui qui est focalisé parmi ses frères.
Definition frame.cpp:101
Element paragraph(std::string_view the_text)
Renvoie un élément affichant le paragraphe sur plusieurs lignes.
Element bgcolor(Color color, Element child)
Définit la couleur d'arrière-plan d'un élément.
Definition dom/color.cpp:96
Decorator borderStyled(BorderStyle style)
Identique à border mais avec différents styles.
Element paragraphAlignRight(std::string_view the_text)
Renvoie un élément affichant le paragraphe sur plusieurs lignes, aligné à droite.
Element separator()
Dessine une séparation verticale ou horizontale entre deux autres éléments.
Element filler()
Un élément qui s'étendra proportionnellement à l'espace restant dans un conteneur.
Definition flex.cpp:70
Element dim(Element child)
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 separatorCharacter(std::string_view value)
Dessine une séparation verticale ou horizontale entre deux autres éléments.
Element blink(Element child)
Le texte affiché alterne entre visible et masqué.
Definition blink.cpp:33
Element vcenter(Element child)
Centre un élément verticalement.
Element separatorDouble()
Dessine une séparation verticale ou horizontale entre deux autres éléments, en utilisant le style DOU...
Element focusCursorBlockBlinking(Element child)
Identique à focus, mais définit la forme du curseur comme un bloc clignotant.
Definition frame.cpp:161
Element color(Color color, Element child)
Définit la couleur de premier plan d'un élément.
Definition dom/color.cpp:81
Element gauge(float progress)
Dessine une barre de progression haute définition.
Element border(Element child)
Dessine une bordure autour de l'élément.
Element separatorHeavy()
Dessine une séparation verticale ou horizontale entre deux autres éléments, en utilisant le style HEA...
Element borderEmpty(Element child)
Dessine une bordure vide autour de l'élément.
Element yflex_shrink(Element)
Minimiser si nécessaire sur l'axe Y.
Definition flex.cpp:143
Element hcenter(Element child)
Centre un élément horizontalement.
Element vbox(Elements children)
Un conteneur affichant les éléments verticalement un par un.
Definition vbox.cpp:96
Element gaugeDown(float progress)
Dessine une barre de progression haute définition progressant de haut en bas.
@ EMPTY
Definition elements.hpp:44
@ DOUBLE
Definition elements.hpp:42
@ HEAVY
Definition elements.hpp:41
@ ROUNDED
Definition elements.hpp:43
@ DASHED
Definition elements.hpp:40
@ LIGHT
Definition elements.hpp:39
L'espace de noms ftxui::Dimension:: de FTXUI.
bool extend_beyond_screen
Definition elements.hpp:231
L'espace de noms FTXUI ftxui::
Definition animation.hpp:11
@ LESS_THAN
Definition elements.hpp:194
@ GREATER_THAN
Definition elements.hpp:194
Element flexbox(Elements, FlexboxConfig config=FlexboxConfig())
Un conteneur affichant des éléments sur des lignes/colonnes et capable de passer à la colonne/ligne s...
Definition flexbox.cpp:252
Element separatorVSelector(float up, float down, Color unselected_color, Color selected_color)
Dessine une barre verticale, avec la zone entre le haut et le bas colorée différemment.
Decorator yflex_shrink_factor(int shrink)
Definition flex.cpp:201
size_t image_index
Definition elements.hpp:104
std::shared_ptr< Node > Element
Definition elements.hpp:25
Element xframe(Element child)
Identique à frame, mais seulement sur l'axe x.
Definition frame.cpp:126
Decorator xflex_grow_factor(int grow)
Definition flex.cpp:177
FTXUI_EXPORT(DOM) Element gridbox(std Element hflow(Elements)
Un conteneur affichant des éléments en lignes de gauche à droite. Quand il est rempli,...
Definition flexbox.cpp:270
Decorator yflex_grow_factor(int grow)
Definition flex.cpp:195
FTXUI_EXPORT(DOM) Element separatorCharacter(std Element separatorHSelector(float left, float right, Color unselected_color, Color selected_color)
Dessine une barre horizontale, avec la zone entre la gauche et la droite colorée différemment.
Direction direction
Definition elements.hpp:83
Element hbox(Elements children)
Un conteneur affichant les éléments horizontalement un par un.
Definition hbox.cpp:94
std::vector< Element > Elements
Definition elements.hpp:26
Decorator selectionForegroundColor(Color foreground)
Définit la couleur de premier plan d'un élément lorsqu'il est sélectionné. Notez que le style est app...
Decorator yflex_factor(int grow, int shrink)
Definition flex.cpp:189
WidthOrHeight
Definition elements.hpp:193
Component operator|(Component component, ComponentDecorator decorator)
Decorator selectionBackgroundColor(Color foreground)
Définit la couleur d'arrière-plan d'un élément lorsqu'il est sélectionné. Notez que le style est appl...
std::function< Element(Element)> Decorator
Definition elements.hpp:27
Decorator flex_shrink_factor(int shrink)
Definition flex.cpp:165
Element yframe(Element child)
Identique à frame, mais seulement sur l'axe y.
Definition frame.cpp:134
Decorator flex_grow_factor(int grow)
Definition flex.cpp:159
Decorator selectionColor(Color foreground)
Définit la couleur d'un élément lorsqu'il est sélectionné.
int shrink
Definition elements.hpp:165
int y
Definition elements.hpp:134
Element selectionStyleReset(Element child)
Réinitialise le style de sélection d'un élément.
const Element & element
Definition node.hpp:94
Decorator reflect(Box &box)
Definition reflect.cpp:43
std::function< std::vector< int >(int, int)> GraphFunction
Definition elements.hpp:28
Decorator xflex_shrink_factor(int shrink)
Definition flex.cpp:183
Decorator xflex_factor(int grow, int shrink)
Definition flex.cpp:171
Decorator flex_factor(int grow, int shrink)
Definition flex.cpp:153
Element gridbox(std::vector< Elements > lines)
A container displaying a grid of elements.
int value
Definition elements.hpp:195
Element canvas(int width, int height, std::function< void(Canvas &)>)
Produit un élément dessinant un canevas de la taille demandée.
Element frame(Element child)
Permet à un élément d'être affiché dans une zone 'virtuelle'. Sa taille peut être plus grande que son...
Definition frame.cpp:118
Component & operator|=(Component &component, ComponentDecorator decorator)
Element select(Element e)
Définit child comme étant l'élément focalisé parmi ses frères et sœurs.
Definition frame.cpp:108
Decorator selectionStyle(std::function< void(Cell &)> style)
Définit le style d'un élément lorsqu'il est sélectionné.
Element vflow(Elements)
Un conteneur affichant des éléments en colonnes de haut en bas. Quand il est rempli,...
Definition flexbox.cpp:288
Element graph(GraphFunction graph_function)
Dessine un graphique en utilisant une GraphFunction.
std::uint8_t left
Definition screen.cpp:147
std::uint8_t down
Definition screen.cpp:150
std::uint8_t right
Definition screen.cpp:149