
Ce module définit un ensemble hiérarchique de ftxui::Element. Un élément gère la disposition et peut être réactif aux changements de dimensions du terminal. Considérez l'exemple suivant où ce module est utilisé pour créer une disposition simple avec un certain nombre d'opérateurs :
La section Example fournit une collection d'exemples.
Exemple :
...
Element document =
vbox({
text(
"The window") | bold |
color(Color::Blue),
text("The footer")
});
document = border(document);
document = document | border.
document |= border
...
}
Element text(std::string_view text)
Affiche un morceau de texte unicode encodé en UTF8.
Element color(Color color, Element child)
Définit la couleur de premier plan d'un élément.
Element gauge(float progress)
Dessine une barre de progression haute définition.
Element vbox(Elements children)
Un conteneur affichant les éléments verticalement un par un.
L'espace de noms FTXUI ftxui::
Liste des éléments
La liste de tous les éléments est incluse et peut être accédée en incluant le fichier d'en-tête correspondant :
#ifndef FTXUI_DOM_ELEMENTS_HPP
#define FTXUI_DOM_ELEMENTS_HPP
#include <cstdint>
#include <functional>
#include <memory>
#include <string_view>
class Node;
using Element = std::shared_ptr<Node>;
};
Color unselected_color,
Color selected_color);
Color unselected_color,
Color selected_color);
std::vector<std::string> charset,
Element canvas(
int width,
int height, std::function<
void(Canvas&)>);
}
}
#include "ftxui/dom/take_any_args.hpp"
#endif
#define FTXUI_EXPORT(component)
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 focusCursorBarBlinking(Element child)
Identique à focus, mais définit la forme du curseur comme une barre clignotante.
Element xflex(Element)
Développer/Réduire si possible/nécessaire sur l'axe X.
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.
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.
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.
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...
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.
Element bold(Element child)
Utilise une police en gras, pour les éléments avec plus d'emphase.
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 yflex(Element)
Développer/Réduire si possible/nécessaire sur l'axe Y.
Element flex_shrink(Element child)
Minimiser si nécessaire.
Element focusCursorBar(Element child)
Identique à focus, mais définit la forme du curseur comme un bloc fixe.
Element focusCursorBlock(Element child)
Identique à focus, mais définit la forme du curseur comme un bloc fixe.
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...
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.
Element focusCursorUnderline(Element child)
Identique à focus, mais définit la forme du curseur comme un soulignement fixe.
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.
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.
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.
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.
Element strikethrough(Element child)
Applique un barré au texte.
Element italic(Element child)
Applique un double soulignement au texte.
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.
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.
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.
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.
Element dim(Element child)
Utilise une police de caractères claire, pour les éléments moins mis en valeur.
Element automerge(Element child)
Permet aux caractères d'être fusionnés automatiquement avec d'autres à proximité.
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é.
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.
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.
Element hcenter(Element child)
Centre un élément horizontalement.
Element gaugeDown(float progress)
Dessine une barre de progression haute définition progressant de haut en bas.
L'espace de noms ftxui::Dimension:: de FTXUI.
bool extend_beyond_screen
Element flexbox(Elements, FlexboxConfig config=FlexboxConfig())
Un conteneur affichant des éléments sur des lignes/colonnes et capable de passer à la colonne/ligne s...
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)
std::shared_ptr< Node > Element
Element xframe(Element child)
Identique à frame, mais seulement sur l'axe x.
Decorator xflex_grow_factor(int grow)
FTXUI_EXPORT(DOM) Element gridbox(std Element hflow(Elements)
Un conteneur affichant des éléments en lignes de gauche à droite. Quand il est rempli,...
Decorator yflex_grow_factor(int grow)
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.
Element hbox(Elements children)
Un conteneur affichant les éléments horizontalement un par un.
std::vector< Element > Elements
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)
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
Decorator flex_shrink_factor(int shrink)
Element yframe(Element child)
Identique à frame, mais seulement sur l'axe y.
Decorator flex_grow_factor(int grow)
Decorator selectionColor(Color foreground)
Définit la couleur d'un élément lorsqu'il est sélectionné.
Element selectionStyleReset(Element child)
Réinitialise le style de sélection d'un élément.
Decorator reflect(Box &box)
std::function< std::vector< int >(int, int)> GraphFunction
Decorator xflex_shrink_factor(int shrink)
Decorator xflex_factor(int grow, int shrink)
Decorator flex_factor(int grow, int shrink)
Element gridbox(std::vector< Elements > lines)
A container displaying a grid of elements.
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...
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.
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,...
Element graph(GraphFunction graph_function)
Dessine un graphique en utilisant une GraphFunction.
text
Le widget le plus simple. Il affiche un texte.
text("I am a piece of text");
vtext
Identique à ftxui::text, mais affiché verticalement.
Code :
Sortie terminale :
paragraph
Similaire à ftxui::text, mais les mots individuels sont enveloppés sur plusieurs lignes, en fonction de la largeur de son conteneur.
Exemple de code :
paragraph("A very long text")

Pour un exemple plus détaillé, reportez-vous à exemple détaillé. Paragraph inclut également un certain nombre d'autres variantes comme indiqué ci-dessous :
border
Ajoute une bordure autour d'un élément.
Code :
border(text("The element"))
Sortie terminale :
┌───────────┐
│The element│
└───────────┘
- Note
- Vous pouvez obtenir le même comportement en utilisant l'opérateur pipe.
Code : text("L'élément") | border
Border est également disponible dans une variété de styles, comme indiqué ci-dessous :
window
Une ftxui::window est une ftxui::border, mais avec un en-tête supplémentaire. Pour ajouter une fenêtre autour d'un élément, enveloppez-le et spécifiez une chaîne de caractères comme en-tête. Code :
window("The window", text("The element"))
Sortie terminale :
┌The window─┐
│The element│
└───────────┘
separator
Affiche une ligne verticale/horizontale pour diviser visuellement le contenu d'un conteneur en deux.
Code :
border(
hbox({
text("Left"),
separator(),
text("Right")
})
)
Sortie terminale :
┌────┬─────┐
│left│right│
└────┴─────┘
Les séparateurs sont disponibles dans une variété de styles, comme indiqué ci-dessous :
Color background,
Color foreground);
Color background,
Color foreground);
}
gauge
Ceci est un élément visuel qui représente un ratio de progression.
Code :
Sortie terminale :
┌────────────────────────────────────────────────────────────────────────────┐
│██████████████████████████████████████ │
└────────────────────────────────────────────────────────────────────────────┘
Les jauges peuvent être affichées dans de nombreuses orientations, comme indiqué ci-dessous :
namespace {
Element gauge(float ratio);
Element gaugeLeft(float ratio);
Element gaugeRight(float ratio);
Element gaugeUp(float ratio);
Element gaugeDown(float ratio);
Element gaugeDirection(float ratio, GaugeDirection);
}
graph
Voir :
Element graph(GraphFunction);
Couleurs
La plupart des consoles de terminal peuvent afficher du texte coloré et des arrière-plans colorés. FTXUI prend en charge toutes les palettes de couleurs :
Decorator color(Color);
Decorator bgcolor(Color);
Galerie de couleurs : 
Palette16
Sur la plupart des terminaux, les couleurs suivantes sont prises en charge :
- Par défaut
- Noir
- GrisFoncé
- GrisClair
- Blanc
- Bleu
- BleuClair
- Cyan
- CyanClair
- Vert
- VertClair
- Magenta
- MagentaClair
- Rouge
- RougeClair
- Jaune
- JauneClair
Exemple d'utilisation des couleurs ci-dessus avec l'opérateur pipe :
text("Blue foreground") | color(Color::Blue);
text("Blue background") | bgcolor(Color::Blue);
text("Black on white") | color(Color::Black) | bgcolor(Color::White);
Palette256
Sur les terminaux prenant en charge 256 couleurs.
text("HotPink") | color(Color::HotPink);
TrueColor
Sur les terminaux prenant en charge TrueColor, vous pouvez utiliser directement l'espace colorimétrique RVB 24 bits :
Utilisez les constructeurs ci-dessous pour spécifier les valeurs RVB ou TSV de votre couleur :
Il existe deux constructeurs :
ftxui::Color::RGB(uint8_t red, uint8_t green, uint8_t blue);
ftxui::Color::HSV(uint8_t hue, uint8_t saturation, uint8_t value);
LinearGradient
FTXUI prend en charge le dégradé linéaire. Soit au premier plan, soit à l'arrière-plan.
Decorator color(const LinearGradient&);
Decorator bgcolor(const LinearGradient&);
Un ftxui::LinearGradient est défini par un angle en degrés et une liste de points de couleur.
auto gradient = LinearGradient()
.Angle(45)
.AddStop(0.0, Color::Red)
.AddStop(0.5, Color::Green)
.AddStop(1.0, Color::Blue);
Vous pouvez également utiliser des constructeurs simplifiés :
LinearGradient(Color::Red, Color::Blue);
LinearGradient(45, Color::Red, Color::Blue);
Voir la démo.
Style
En plus du texte coloré et des arrière-plans colorés. De nombreux terminaux prennent en charge les effets de texte tels que : bold, italic, dim, underlined, inverted, blink.
Element bold(Element);
Element italic(Element);
Element dim(Element);
Element inverted(Element);
Element underlined(Element);
Element underlinedDouble(Element);
Element strikethrough(Element);
Element blink(Element);
Decorator color(Color);
Decorator bgcolor(Color);
Decorator colorgrad(LinearGradient);
Decorator bgcolorgrad(LinearGradient);
Exemple

Pour utiliser ces effets, enveloppez simplement vos éléments avec l'effet désiré :
underlined(bold(text("This text is bold and underlined")))
Alternativement, utilisez l'opérateur pipe pour le chaîner sur votre élément :
text("This text is bold") | bold | underlined
Layout
Permet d'organiser les éléments des manières suivantes :
- Horizontalement avec
ftxui::hbox
- Verticalement avec
ftxui::vbox
- À l'intérieur d'une grille avec
ftxui::gridbox
- Enveloppé dans une direction en utilisant le
ftxui::flexbox.
Exemple utilisant ftxui::hbox, ftxui::vbox et ftxui::filler.

Exemple utilisant ftxui::gridbox :

Exemple utilisant flexbox :

Consultez cet exemple et la démo associée.
L'élément peut également devenir flexible en utilisant le décorateur ftxui::flex.
Code :
hbox({
text("left") | border ,
text("middle") | border | flex,
text("right") | border,
});
Sortie terminale :
┌────┐┌─────────────────────────────────────────────────────┐┌─────┐
│left││middle ││right│
└────┘└─────────────────────────────────────────────────────┘└─────┘
Code :
hbox({
text("left") | border ,
text("middle") | border | flex,
text("right") | border | flex,
});
Sortie terminale :
┌────┐┌───────────────────────────────┐┌───────────────────────────────┐
│left││middle ││right │
└────┘└───────────────────────────────┘└───────────────────────────────┘
Table
Permet un formatage facile des données sous une forme visuelle de tableau ordonné.
Exemple simple :
auto table = Table({
{"Planet", "Radius", "Mass"},
{"Mercury", "2440", "0.330"},
{"Venus", "6052", "4.87"},
{"Earth", "6371", "5.97"},
{"Mars", "3390", "0.642"},
});
table.SelectAll().Border(LIGHT);
table.SelectRow(0).Decorate(bold);
table.SelectRow(0).SeparatorVertical(LIGHT);
table.SelectRow(0).Border(DOUBLE);
auto document = table.Render();
Exemple de code:

Sélection et style
Vous pouvez sélectionner des parties du tableau et leur appliquer des décorateurs ou des bordures. Les méthodes de sélection incluent :
ftxui::TableSelection::SelectAll();
ftxui::TableSelection::SelectCell(column, row);
ftxui::TableSelection::SelectRow(row_index);
ftxui::TableSelection::SelectRows(row_min, row_max);
ftxui::TableSelection::SelectColumn(column_index);
ftxui::TableSelection::SelectColumns(column_min, column_max);
ftxui::TableSelection::SelectRectangle(column_min, column_max, row_min, row_max);
Une fois une sélection effectuée, vous pouvez appliquer :
ftxui::TableSelection::Decorate(Decorator);
ftxui::TableSelection::DecorateCells(Decorator);
ftxui::TableSelection::Border(BorderStyle);
ftxui::TableSelection::Separator(BorderStyle);
Bordures colorées
Vous pouvez également appliquer des décorateurs spécifiquement aux bordures et séparateurs :
table.SelectAll().Border(LIGHT, color(Color::Red));
table.SelectRow(0).SeparatorVertical(LIGHT, color(Color::Blue));
Les méthodes suivantes sont disponibles pour un contrôle fin de la décoration des bordures :
ftxui::TableSelection::DecorateBorder(Decorator);
ftxui::TableSelection::DecorateBorderLeft(Decorator);
ftxui::TableSelection::DecorateBorderRight(Decorator);
ftxui::TableSelection::DecorateBorderTop(Decorator);
ftxui::TableSelection::DecorateBorderBottom(Decorator);
ftxui::TableSelection::DecorateSeparator(Decorator);
ftxui::TableSelection::DecorateSeparatorVertical(Decorator);
ftxui::TableSelection::DecorateSeparatorHorizontal(Decorator);
Canvas
Voir l'API <ftxui/dom/canvas.hpp>
auto c = Canvas(100, 100);
c.DrawPointLine(10, 10, 80, 10, Color::Red);
auto element = canvas(c);
Le dessin peut être effectué sur un ftxui::Canvas, en utilisant des caractères braille, des blocs ou de simples caractères :
Exemple simple :

Exemple complexe :