
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("Le pied de page")
});
document = border(document);
document = document | border.
document |= border
...
}
Element text(std::wstring text)
Affiche un morceau de texte unicode.
Decorator color(Color)
Décore en utilisant une couleur de premier plan.
Element vbox(Elements)
Un conteneur affichant les éléments verticalement un par un.
L'espace de noms FTXUI ftxui::
Element gauge(float progress)
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 <functional>
#include <memory>
class Node;
using Element = std::shared_ptr<Node>;
};
float right,
Color unselected_color,
Color selected_color);
float down,
Color unselected_color,
Color selected_color);
Element canvas(
int width,
int height, std::function<
void(Canvas&)>);
Dimensions
Fit(
Element&,
bool extend_beyond_screen =
false);
}
}
#include "ftxui/dom/take_any_args.hpp"
#endif
Decorator bgcolor(Color)
Décore en utilisant une couleur d'arrière-plan.
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)
Dessine une double bordure autour de l'élément.
Element focusCursorBarBlinking(Element)
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.
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)
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)
Applique un double soulignement au texte.
Element clear_under(Element element)
Avant de dessiner |child|, effacez les pixels en dessous. Ceci est utile en combinaison avec dbox.
Element borderDashed(Element)
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)
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.
Decorator size(WidthOrHeight, Constraint, int value)
Applique une contrainte sur la taille d'un élément.
Direction
Direction est une énumération qui représente les quatre directions cardinales.
Element flex(Element)
Permet à un élément enfant de s'étendre proportionnellement à l'espace restant dans un conteneur.
Element paragraphAlignRight(const std::string &text)
Renvoie un élément affichant le paragraphe sur plusieurs lignes, aligné à droite.
Element focusCursorUnderlineBlinking(Element)
Identique à focus, mais définit la forme du curseur comme un soulignement clignotant.
Element bold(Element)
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)
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)
Minimiser si nécessaire.
Element focusCursorBar(Element)
Identique à focus, mais définit la forme du curseur comme un bloc fixe.
Element focusCursorBlock(Element)
Identique à focus, mais définit la forme du curseur comme un bloc fixe.
Element underlined(Element)
Souligne l'élément donné.
Element center(Element)
Centre un élément horizontalement et verticalement.
Element focusCursorUnderline(Element)
Identique à focus, mais définit la forme du curseur comme un soulignement fixe.
Element borderHeavy(Element)
Dessine une bordure épaisse autour de l'élément.
Element inverted(Element)
Ajoute un filtre qui inversera les couleurs de premier plan et d'arrière-plan.
Element paragraphAlignCenter(const std::string &text)
Renvoie un élément affichant le paragraphe sur plusieurs lignes, aligné au centre.
Element align_right(Element)
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)
Affiche une barre de défilement horizontale en bas. Les couleurs suivent le contenu.
Element flex_grow(Element)
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)
Rend l'élément non flexible.
Element strikethrough(Element)
Applique un barré au texte.
Element italic(Element)
Applique un style italique au texte.
Element dbox(Elements)
Empile plusieurs éléments les uns sur les autres.
Element xflex_shrink(Element)
Minimiser si nécessaire sur l'axe X.
Element separatorCharacter(std::string)
Dessine une séparation verticale ou horizontale entre deux autres éléments.
Element vtext(std::wstring text)
Affiche un morceau de texte unicode verticalement.
Element borderLight(Element)
Dessine une bordure fine autour de l'élément.
Element focus(Element)
Définit l'élément child comme étant celui qui est focalisé parmi ses frères.
Element paragraphAlignLeft(const std::string &text)
Renvoie un élément affichant le paragraphe sur plusieurs lignes, aligné à gauche.
Decorator borderWith(const Pixel &)
Identique à border mais avec un Pixel constant autour de l'élément.
Decorator borderStyled(BorderStyle)
Identique à border mais avec différents styles.
Element separator()
Dessine une séparation verticale ou horizontale entre deux autres éléments.
Element filler()
Un élément qui occupera proportionnellement l'espace disponible dans un conteneur.
Element dim(Element)
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 blink(Element)
Le texte affiché alterne entre visible et masqué.
Element vcenter(Element)
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)
Identique à focus, mais définit la forme du curseur comme un bloc clignotant.
Element paragraphAlignJustify(const std::string &text)
Renvoie un élément affichant le paragraphe sur plusieurs lignes, aligné en utilisant un alignement ju...
Element border(Element)
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)
Dessine une bordure vide autour de l'élément.
Element yflex_shrink(Element)
Minimiser si nécessaire sur l'axe Y.
Element hcenter(Element)
Centre un élément horizontalement.
BorderStyle
BorderStyle est une énumération qui représente les différents styles de bordures pouvant être appliqu...
L'espace de noms FTXUI ftxui::Dimension::
Dimensions Fit(Element &, bool extend_beyond_screen=false)
Element gaugeDirection(float progress, Direction direction)
std::function< Element(Element)> Decorator
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.
std::shared_ptr< Node > Element
Element xframe(Element)
Identique à frame, mais seulement sur l'axe x.
Element gaugeRight(float progress)
Element hflow(Elements)
Un conteneur affichant des éléments en lignes de gauche à droite. Quand il est rempli,...
Decorator selectionStyle(std::function< void(Pixel &)> style)
Définit le style d'un élément lorsqu'il est sélectionné.
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)
Un conteneur affichant les éléments horizontalement un par un.
Element canvas(ConstRef< Canvas >)
Produit un élément à partir d'un Canevas, ou une référence à un Canevas.
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...
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...
Element gaugeUp(float progress)
Element yframe(Element)
Identique à frame, mais seulement sur l'axe y.
Decorator selectionColor(Color foreground)
Définit la couleur d'un élément lorsqu'il est sélectionné.
Element gaugeLeft(float progress)
Element select(Element e)
Définit l'élément child comme étant celui qui est focalisé parmi ses frères.
Element selectionStyleReset(Element)
Réinitialise le style de sélection d'un élément.
Decorator reflect(Box &box)
std::function< std::vector< int >(int, int)> GraphFunction
Element gridbox(std::vector< Elements > lines)
Un conteneur affichant une grille d'éléments.
Elements paragraph(std::wstring text)
Element frame(Element)
Permet à un élément d'être affiché dans une zone 'virtuelle'. Sa taille peut être plus grande que son...
Decorator hyperlink(std::string link)
Component & operator|=(Component &component, ComponentDecorator decorator)
Element vflow(Elements)
Un conteneur affichant des éléments en colonnes de haut en bas. Quand il est rempli,...
Element graph(GraphFunction)
Dessine un graphique en utilisant une GraphFunction.
Element gaugeDown(float progress)
text
Le widget le plus simple. Il affiche un texte.
text("Je suis un morceau de texte");
vtext
Identique à ftxui::text, mais affiché verticalement.
Code:
Terminal output:
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("Un très long texte")

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("L'élément"))
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("La fenêtre", text("L'élément"))
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("Gauche"),
separator(),
text("Droite")
})
)
Sortie terminale :
┌────┬─────┐
│left│right│
└────┴─────┘
Les séparateurs sont disponibles dans une variété de styles, comme indiqué ci-dessous :
float right,
Color background,
Color foreground);
float down,
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 :
Element color(const LinearGradient &gradient, Element child)
Définit la couleur de premier plan d'un élément avec un effet de dégradé linéaire.
Element bgcolor(const LinearGradient &gradient, Element child)
Définit la couleur de fond d'un élément avec un effet de dégradé linéaire.
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(
"Premier plan bleu") |
color(Color::Blue);
text(
"Arrière-plan bleu") |
bgcolor(Color::Blue);
text(
"Noir sur blanc") |
color(Color::Black) |
bgcolor(Color::White);
Palette256
Sur les terminaux prenant en charge 256 couleurs.
text(
"RoseVif") |
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 :
static Color HSV(uint8_t hue, uint8_t saturation, uint8_t value)
Construit une couleur à partir de sa représentation HSV. https://en.wikipedia.org/wiki/HSL_and_HSV.
static Color RGB(uint8_t red, uint8_t green, uint8_t blue)
Construit une couleur à partir de sa représentation RGB. https://en.wikipedia.org/wiki/RGB_color_mode...
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 colorgrad(LinearGradient);
Decorator bgcolorgrad(LinearGradient);
Exemple

Pour utiliser ces effets, enveloppez simplement vos éléments avec l'effet désiré :
underlined(bold(text("Ce texte est en gras et souligné")))
Alternativement, utilisez l'opérateur pipe pour le chaîner sur votre élément :
text("Ce texte est en gras") | 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("gauche") | border ,
text("milieu") | border | flex,
text("droite") | border,
});
Sortie terminale :
┌────┐┌─────────────────────────────────────────────────────┐┌─────┐
│left││middle ││right│
└────┘└─────────────────────────────────────────────────────┘└─────┘
Code :
hbox({
text("gauche") | border ,
text("milieu") | border | flex,
text("droite") | border | flex,
});
Sortie terminale :
┌────┐┌───────────────────────────────┐┌───────────────────────────────┐
│left││middle ││right │
└────┘└───────────────────────────────┘└───────────────────────────────┘
Table
Permet un formatage facile des données sous une forme visuelle de tableau ordonné.
Exemple de code:

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 :