FTXUI 6.1.9
C++ functional terminal UI.
Loading...
Searching...
No Matches
ftxui / dom

title-img

Este módulo define un conjunto jerárquico de ftxui::Element. Un elemento gestiona el diseño y puede responder a los cambios de dimensión del terminal. Observe el siguiente ejemplo donde este módulo se utiliza para crear un diseño simple con una serie de operadores:

La sección Example proporciona una colección de ejemplos.

Ejemplo:

namespace ftxui {
...
// Definir el documento
Element document = vbox({
text("La ventana") | bold | color(Color::Blue),
gauge(0.5)
text("El pie de página")
});
// Añadir un borde, llamando a la función decoradora `ftxui::border`.
document = border(document);
// Añadir otro borde, usando el operador pipe.
document = document | border.
// Añadir otro borde, usando el operador |=.
document |= border
...
}
Element text(std::wstring text)
Muestra un fragmento de texto Unicode.
Definition text.cpp:160
Element gauge(float progress)
Dibuja una barra de progreso de alta definición.
Decorator color(Color)
Decora usando un color de primer plano.
El espacio de nombres ftxui:: de FTXUI.
Definition animation.hpp:10
Element vbox(Elements)

Lista de elementos

La lista de todos los elementos está incluida y se puede acceder a ella incluyendo el archivo de cabecera correspondiente:

// Copyright 2020 Arthur Sonzogni. Todos los derechos reservados.
// El uso de este código fuente se rige por la licencia MIT que se puede encontrar en
// el archivo LICENSE.
#ifndef FTXUI_DOM_ELEMENTS_HPP
#define FTXUI_DOM_ELEMENTS_HPP
#include <functional>
#include <memory>
namespace ftxui {
class Node;
using Element = std::shared_ptr<Node>;
using Elements = std::vector<Element>;
using Decorator = std::function<Element(Element)>;
using GraphFunction = std::function<std::vector<int>(int, int)>;
/// @brief BorderStyle es una enumeración que representa los diferentes estilos
/// de bordes que se pueden aplicar a los elementos en la interfaz de usuario de la terminal.
///
/// BorderStyle es una enumeración que representa los diferentes estilos de
/// bordes que se pueden aplicar a los elementos en la interfaz de usuario de la terminal.
/// Se utiliza para definir la apariencia visual de los bordes alrededor de los elementos,
/// como ventanas, marcos o separadores.
/// @ingroup dom
};
// Encadenar elementos en el decorador juntos.
// Por ejemplo, las siguientes líneas son equivalentes:
// -> text("ftxui") | bold | underlined
// -> underlined(bold(text("FTXUI")))
// --- Elemento de Interfaz ---
Element text(std::string text);
Element vtext(std::string text);
float right,
Color unselected_color,
Color selected_color);
float down,
Color unselected_color,
Color selected_color);
Decorator borderWith(const Pixel&);
Element spinner(int charset_index, size_t image_index);
Element paragraph(const std::string& text);
Element paragraphAlignLeft(const std::string& text);
Element paragraphAlignRight(const std::string& text);
Element paragraphAlignCenter(const std::string& text);
Element paragraphAlignJustify(const std::string& text);
Element canvas(ConstRef<Canvas>);
Element canvas(int width, int height, std::function<void(Canvas&)>);
Element canvas(std::function<void(Canvas&)>);
// -- Decorador ---
Decorator color(const LinearGradient&);
Decorator bgcolor(const LinearGradient&);
Element color(const LinearGradient&, Element);
Element bgcolor(const LinearGradient&, Element);
Decorator focusPosition(int x, int y);
Decorator focusPositionRelative(float x, float y);
Decorator hyperlink(std::string link);
Element hyperlink(std::string link, Element child);
Decorator selectionColor(Color foreground);
Decorator selectionStyle(std::function<void(Pixel&)> style);
// --- Diseño ---
// Conjunto de elementos horizontales, verticales o apilados.
Element flexbox(Elements, FlexboxConfig config = FlexboxConfig());
Element gridbox(std::vector<Elements> lines);
Element hflow(Elements); // Helper: default flexbox with row direction.
Element vflow(Elements); // Helper: default flexbox with column direction.
// -- Flexibilidad ---
// Define cómo compartir el espacio restante cuando no todo se utiliza dentro de un
// contenedor.
Element flex(Element); // Expandir/Minimizar si es posible/necesario.
Element flex_grow(Element); // Expandir elemento si es posible.
Element flex_shrink(Element); // Minimizar elemento si es necesario.
Element xflex(Element); // Expandir/Minimizar si es posible/necesario en el eje X.
Element xflex_grow(Element); // Expandir elemento si es posible en el eje X.
Element xflex_shrink(Element); // Minimizar elemento si es necesario en el eje X.
Element yflex(Element); // Expandir/Minimizar si es posible/necesario en el eje Y.
Element yflex_grow(Element); // Expandir elemento si es posible en el eje Y.
Element yflex_shrink(Element); // Minimizar elemento si es necesario en el eje Y.
Element notflex(Element); // Restablecer el atributo flex.
Element filler(); // Un elemento expandible en blanco.
// -- Anulación de tamaño;
// --- Marco ---
// Un marco es un área desplazable. El área interna es potencialmente más grande que
// la externa. El área interna se desplaza para hacer visible el
// elemento enfocado.
Element select(Element e); // Obsoleto - Alias para focus.
// --- Cursor ---
// Son similares a `focus`, pero también cambian la forma del cursor.
// --- Varios ---
Decorator reflect(Box& box);
// Antes de dibujar el |element|, borra el píxel de abajo. Esto es útil en
// combinación con dbox.
// --- Utilidad --------------------------------------------------------------------
namespace Dimension {
Dimensions Fit(Element&, bool extend_beyond_screen = false);
} // namespace Dimension
} // namespace ftxui
// Hace que el contenedor pueda tomar cualquier número de hijos como entrada.
#include "ftxui/dom/take_any_args.hpp"
// Incluir definiciones antiguas usando wstring.
#endif // FTXUI_DOM_ELEMENTS_HPP
Decorator bgcolor(Color)
Decora usando un color de fondo.
Element window(Element title, Element content, BorderStyle border=ROUNDED)
Draw window with a title and a border around the element.
Element borderDouble(Element)
Draw a double border around the element.
Element focusCursorBarBlinking(Element)
Igual que focus, pero establece la forma del cursor como una barra parpadeante.
Definition frame.cpp:189
Element xflex(Element)
Expandir/Minimizar si es posible/necesario en el eje X.
Definition flex.cpp:129
Element gaugeDirection(float progress, Direction direction)
Dibuja una barra de progreso de alta definición que avanza en la dirección especificada.
Decorator focusPositionRelative(float x, float y)
Utilizado dentro de un frame, esto fuerza que la vista se desplace hacia una posición determinada....
Element separatorStyled(BorderStyle)
Dibuja una separación vertical u horizontal entre otros dos elementos.
Element xflex_grow(Element)
Expandir si es posible en el eje X.
Definition flex.cpp:147
Element underlinedDouble(Element)
Aplica un doble subrayado al texto.
Element clear_under(Element element)
Antes de dibujar |child|, limpia los píxeles de abajo. Esto es útil en combinación con dbox.
Element borderDashed(Element)
Draw a dashed border around the element.
Element separatorEmpty()
Dibuja una separación vertical u horizontal entre otros dos elementos, usando el estilo VACÍO.
Element vscroll_indicator(Element)
Muestra una barra de desplazamiento vertical a la derecha. Los colores siguen el contenido.
Element nothing(Element element)
Una decoración que no hace absolutamente nada.
Definition dom/util.cpp:28
Decorator size(WidthOrHeight, Constraint, int value)
Aplica una restricción al tamaño de un elemento.
Direction
Direction es una enumeración que representa las cuatro cardinales direcciones.
Definition direction.hpp:13
Element flex(Element)
Hace que un elemento hijo se expanda proporcionalmente al espacio restante en un contenedor.
Definition flex.cpp:123
Element paragraphAlignRight(const std::string &text)
Devuelve un elemento que dibuja el párrafo en varias líneas, alineado a la derecha.
Element gaugeRight(float progress)
Dibuja una barra de progreso de alta definición que avanza de izquierda a derecha.
Element focusCursorUnderlineBlinking(Element)
Igual que focus, pero establece la forma del cursor como un subrayado parpadeante.
Definition frame.cpp:217
Element bold(Element)
Utiliza una fuente en negrita, para elementos con más énfasis.
Definition bold.cpp:33
Element separatorLight()
Dibuja una separación vertical u horizontal entre otros dos elementos, usando el estilo LIGERO.
Element spinner(int charset_index, size_t image_index)
Útil para representar el efecto del tiempo y/o eventos. Esto muestra un "video" de arte ASCII.
Element borderRounded(Element)
Draw a rounded border around the element.
Element emptyElement()
Definition dom/util.cpp:140
Element yflex(Element)
Expandir/Minimizar si es posible/necesario en el eje Y.
Definition flex.cpp:135
Element flex_shrink(Element)
Minimizar si es necesario.
Definition flex.cpp:159
Element focusCursorBar(Element)
Igual que focus, pero establece la forma del cursor como un bloque fijo.
Definition frame.cpp:175
Element focusCursorBlock(Element)
Igual que focus, pero establece la forma del cursor como un bloque fijo.
Definition frame.cpp:147
Element underlined(Element)
Subraya el elemento dado.
Element center(Element)
Centra un elemento horizontal y verticalmente.
Element focusCursorUnderline(Element)
Igual que focus, pero establece la forma del cursor como un subrayado fijo.
Definition frame.cpp:203
Element borderHeavy(Element)
Draw a heavy border around the element.
Element inverted(Element)
Agrega un filtro que invertirá los colores de primer plano y de fondo. colores.
Definition inverted.cpp:34
Element paragraphAlignCenter(const std::string &text)
Devuelve un elemento que dibuja el párrafo en varias líneas, alineado al centro.
Element gaugeUp(float progress)
Dibuja una barra de progreso de alta definición que avanza de abajo hacia arriba.
Element align_right(Element)
Alinea un elemento a la derecha.
Decorator focusPosition(int x, int y)
Utilizado dentro de un frame, esto fuerza que la vista se desplace hacia una posición determinada....
Element yflex_grow(Element)
Expandir si es posible en el eje Y.
Definition flex.cpp:153
Element hscroll_indicator(Element)
Muestra una barra de desplazamiento horizontal en la parte inferior. Los colores siguen el contenido.
Element flex_grow(Element)
Expandir si es posible.
Definition flex.cpp:141
Element separatorDashed()
Dibuja una separación vertical u horizontal entre otros dos elementos, usando el estilo DISCONTINUO.
Element notflex(Element)
Hace que el elemento no sea flexible.
Definition flex.cpp:177
Element strikethrough(Element)
Aplica un tachado al texto.
Element italic(Element)
Aplica un subrayado doble al texto.
Definition italic.cpp:17
Element dbox(Elements)
Apila varios elementos uno encima del otro.
Element xflex_shrink(Element)
Minimizar si es necesario en el eje X.
Definition flex.cpp:165
Element gaugeLeft(float progress)
Dibuja una barra de progreso de alta definición que avanza de derecha a izquierda.
Element separatorCharacter(std::string)
Dibuja una separación vertical u horizontal entre otros dos elementos.
Element vtext(std::wstring text)
Muestra un fragmento de texto Unicode verticalmente.
Definition text.cpp:220
Element borderLight(Element)
Draw a light border around the element.
Element focus(Element)
Establece que child sea el elemento enfocado entre sus hermanos.
Definition frame.cpp:101
Element paragraphAlignLeft(const std::string &text)
Devuelve un elemento que dibuja el párrafo en varias líneas, alineado a la izquierda.
Decorator borderWith(const Pixel &)
Same as border but with a constant Pixel around the element.
Decorator borderStyled(BorderStyle)
Same as border but with different styles.
Element separator()
Dibuja una separación vertical u horizontal entre otros dos elementos.
Element filler()
Un elemento que se expandirá proporcionalmente al espacio restante en un contenedor.
Definition flex.cpp:98
Element dim(Element)
Usa una fuente clara para elementos con menos énfasis.
Definition dim.cpp:33
Element automerge(Element child)
Permite que los caracteres se fusionen automáticamente con otros cercanos.
Definition automerge.cpp:17
Decorator hyperlink(std::string link)
Decora usando un hipervínculo. El enlace se abrirá cuando el usuario haga clic en él....
Definition hyperlink.cpp:70
Element blink(Element)
El texto dibujado alterna entre visible y oculto.
Definition blink.cpp:33
Element vcenter(Element)
Centra un elemento verticalmente.
Element separatorDouble()
Dibuja una separación vertical u horizontal entre otros dos elementos, usando el estilo DOBLE.
Element focusCursorBlockBlinking(Element)
Igual que focus, pero establece la forma del cursor como un bloque parpadeante.
Definition frame.cpp:161
Element paragraphAlignJustify(const std::string &text)
Devuelve un elemento que dibuja el párrafo en varias líneas, alineado utilizando una alineación justi...
Element border(Element)
Draw a border around the element.
Element separatorHeavy()
Dibuja una separación vertical u horizontal entre otros dos elementos, usando el estilo GRUESO.
Element borderEmpty(Element)
Draw an empty border around the element.
Element yflex_shrink(Element)
Minimizar si es necesario en el eje Y.
Definition flex.cpp:171
Element hcenter(Element)
Centra un elemento horizontalmente.
BorderStyle
BorderStyle es una enumeración que representa los diferentes estilos de bordes que se pueden aplicar ...
Definition elements.hpp:35
Element gaugeDown(float progress)
Dibuja una barra de progreso de alta definición que avanza de arriba hacia abajo.
@ EMPTY
Definition elements.hpp:41
@ DOUBLE
Definition elements.hpp:39
@ HEAVY
Definition elements.hpp:38
@ ROUNDED
Definition elements.hpp:40
@ DASHED
Definition elements.hpp:37
@ LIGHT
Definition elements.hpp:36
std::string title
float progress
El espacio de nombres ftxui::Dimension:: de FTXUI.
Dimensions Fit(Element &, bool extend_beyond_screen=false)
WidthOrHeight
Definition elements.hpp:161
std::function< Element(Element)> Decorator
Definition elements.hpp:24
Element flexbox(Elements, FlexboxConfig config=FlexboxConfig())
Un contenedor que muestra elementos en filas/columnas y es capaz de ajustarse a la siguiente columna/...
Definition flexbox.cpp:251
Element separatorVSelector(float up, float down, Color unselected_color, Color selected_color)
Dibuja una barra vertical, con el área entre arriba/abajo coloreada de forma diferente.
std::shared_ptr< Node > Element
Definition elements.hpp:22
Element xframe(Element)
Igual que frame, pero solo en el eje x.
Definition frame.cpp:126
Element hflow(Elements)
Un contenedor que muestra elementos en filas de izquierda a derecha. Cuando está lleno,...
Definition flexbox.cpp:269
Decorator selectionStyle(std::function< void(Pixel &)> style)
Establece el estilo de un elemento cuando está seleccionado.
Element separatorHSelector(float left, float right, Color unselected_color, Color selected_color)
Dibuja una barra horizontal, con el área entre izquierda/derecha coloreada de forma diferente.
Element hbox(Elements)
Un contenedor que muestra elementos horizontalmente uno por uno.
Definition hbox.cpp:94
std::vector< Element > Elements
Definition elements.hpp:23
Decorator selectionForegroundColor(Color foreground)
Establece el color de primer plano de un elemento cuando está seleccionado. Tenga en cuenta que el es...
Component operator|(Component component, ComponentDecorator decorator)
Decorator selectionBackgroundColor(Color foreground)
Establece el color de fondo de un elemento cuando está seleccionado. Tenga en cuenta que el estilo se...
Element yframe(Element)
Igual que frame, pero solo en el eje y.
Definition frame.cpp:134
Decorator selectionColor(Color foreground)
Establece el color de un elemento cuando está seleccionado.
Element select(Element e)
Establece que child sea el elemento enfocado entre sus hermanos.
Definition frame.cpp:108
Element selectionStyleReset(Element)
Restablece el estilo de selección de un elemento.
Element canvas(ConstRef< Canvas >)
Decorator reflect(Box &box)
Definition reflect.cpp:43
std::function< std::vector< int >(int, int)> GraphFunction
Definition elements.hpp:25
Element gridbox(std::vector< Elements > lines)
Un contenedor que muestra una cuadrícula de elementos.
Elements paragraph(std::wstring text)
Element frame(Element)
Permite que un elemento se muestre dentro de un área 'virtual'. Su tamaño puede ser mayor que su cont...
Definition frame.cpp:118
Component & operator|=(Component &component, ComponentDecorator decorator)
@ LESS_THAN
Definition elements.hpp:162
@ GREATER_THAN
Definition elements.hpp:162
Element vflow(Elements)
Un contenedor que muestra elementos en filas de arriba a abajo. Cuando está lleno,...
Definition flexbox.cpp:287
Element graph(GraphFunction)
Dibuja un gráfico usando una GraphFunction.
std::uint8_t left
Definition screen.cpp:130
std::uint8_t down
Definition screen.cpp:133
std::uint8_t right
Definition screen.cpp:132

texto

El widget más simple. Muestra un texto.

text("Soy un trozo de texto");
Soy un trozo de texto.

vtext

Código:

vtext("HELLO");

Salida del terminal:

H
E
L
L
O

párrafo

Similar a ftxui::text, pero las palabras individuales se ajustan a lo largo de múltiples líneas, dependiendo del ancho de su contenedor.

Código de ejemplo:

paragraph("Un texto muy largo")

ezgif com-gif-maker (4)

Para un ejemplo más detallado, consulte ejemplo detallado. Párrafo también incluye una serie de otras variantes como se muestra a continuación:

namespace ftxui {
Element paragraph(std::string text);
Element paragraphAlignLeft(std::string text);
Element paragraphAlignRight(std::string text);
Element paragraphAlignCenter(std::string text);
Element paragraphAlignJustify(std::string text);
}

borde

Añade un borde alrededor de un elemento.

Código:

border(text("El elemento"))

Salida del terminal:

┌───────────┐
│El elemento│
└───────────┘

‍[!nota] Puedes lograr el mismo comportamiento usando el operador pipe.

Código:

text("El elemento") | border

El borde también viene en una variedad de estilos como se muestra a continuación:

ventana

Una ftxui::window es un ftxui::border, pero con una cabecera adicional. Para añadir una ventana alrededor de un elemento, envuélvalo y especifique una cadena como cabecera. Código:

window("La ventana", text("El elemento"))
return window(text(title)|hcenter|bold, text("contenido")|hcenter|dim)|size(WIDTH

Salida del terminal:

┌La ventana─┐
│El elemento│
└───────────┘

separador

Muestra una línea vertical/horizontal para dividir visualmente el contenido de un contenedor en dos.

Código:

border(
hbox({
text("Izquierda"),
separator(),
text("Derecha")
})
)
return hbox({ text(std::to_string(int(progress *100))+"% ")|size(WIDTH, EQUAL, 5), gauge(progress), })

Salida del terminal:

┌────┬─────┐
│izquierda│derecha│
└────┴─────┘

Los separadores vienen en una variedad de estilos como se muestra a continuación:

namespace ftxui {
float right,
Color background,
Color foreground);
float down,
Color background,
Color foreground);
}

medidor

Este es un elemento visual que representa una proporción de progreso.

Código:

border(gauge(0.5))

Salida del terminal:

┌────────────────────────────────────────────────────────────────────────────┐
│██████████████████████████████████████ │
└────────────────────────────────────────────────────────────────────────────┘

Los medidores pueden mostrarse en muchas orientaciones como se muestra a continuación:

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);
}

gráfico

See:

Element graph(GraphFunction);

Colores

La mayoría de las consolas de terminal pueden mostrar texto y fondos de colores. FTXUI soporta todas las paletas de colores:

Decorator color(Color);
Decorator bgcolor(Color);

Galería de colores: image

Paleta16

En la mayoría de los terminales se admiten los siguientes colores:

  • Default
  • Black
  • GrayDark
  • GrayLight
  • White
  • Blue
  • BlueLight
  • Cyan
  • CyanLight
  • Green
  • GreenLight
  • Magenta
  • MagentaLight
  • Red
  • RedLight
  • Yellow
  • YellowLight

Ejemplo de uso de los colores anteriores usando el operador pipe:

text("Primer plano azul") | color(Color::Blue);
text("Fondo azul") | bgcolor(Color::Blue);
text("Negro sobre blanco") | color(Color::Black) | bgcolor(Color::White);

Paleta256

En terminales que soportan 256 colores.

text("HotPink") | color(Color::HotPink);

ColorVerdadero

En terminales que soportan TrueColor, puedes usar directamente el espacio de color RGB de 24 bits:

Usa los constructores a continuación para especificar los valores RGB o HSV para tu color:

Hay dos constructores:

ftxui::Color::RGB(uint8_t red, uint8_t green, uint8_t blue);
ftxui::Color::HSV(uint8_t hue, uint8_t saturation, uint8_t value);
static Color HSV(uint8_t hue, uint8_t saturation, uint8_t value)
Construye un Color a partir de su representación HSV. https://en.wikipedia.org/wiki/HSL_and_HSV.
static Color RGB(uint8_t red, uint8_t green, uint8_t blue)
Construye un Color a partir de su representación RGB. https://en.wikipedia.org/wiki/RGB_color_model.

DegradadoLineal

FTXUI soporta degradado lineal. Ya sea en primer plano o en segundo plano.

Decorator color(const LinearGradient&);
Decorator bgcolor(const LinearGradient&);

Un ftxui::LinearGradient se define por un ángulo en grados y una lista de paradas de color.

auto gradient = LinearGradient()
.Angle(45)
.AddStop(0.0, Color::Red)
.AddStop(0.5, Color::Green)
.AddStop(1.0, Color::Blue);

También puedes usar constructores simplificados:

LinearGradient(Color::Red, Color::Blue);
LinearGradient(45, Color::Red, Color::Blue);

Ver demostración.

Estilo

Además de texto y fondos de colores. Muchos terminales soportan efectos de texto como: 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);

Example

image

Para usar estos efectos, simplemente envuelve tus elementos con el efecto deseado:

underlined(bold(text("Este texto está en negrita y subrayado")))

Alternativamente, usa el operador pipe para encadenarlo en tu elemento:

text("Este texto está en negrita") | bold | underlined

Diseño

Permite que los elementos se organicen de las siguientes maneras:

  • Horizontalmente con ftxui::hbox
  • Verticalmente con ftxui::vbox
  • Dentro de una cuadrícula con ftxui::gridbox
  • Envuelto en una dirección usando ftxui::flexbox.

Ejemplo usando ftxui::hbox, ftxui::vbox y ftxui::filler.

image

Ejemplo usando ftxui::gridbox:

image

Ejemplo usando flexbox:

image

Consulta este ejemplo y la demostración asociada.

El elemento también puede volverse flexible usando el decorador ftxui::flex.

Código:

text("izquierda") | border ,
text("medio") | border | flex,
text("derecha") | border,
});

Salida del terminal: bash ┌────┐┌─────────────────────────────────────────────────────┐┌─────┐ │izquierda││medio ││derecha│ └────┘└─────────────────────────────────────────────────────┘└─────┘

Código:

text("izquierda") | border ,
text("medio") | border | flex,
text("derecha") | border | flex,
});

Salida del terminal:

┌────┐┌───────────────────────────────┐┌───────────────────────────────┐
│izquierda││medio ││derecha │
└────┘└───────────────────────────────┘└───────────────────────────────┘

Tabla

Permite un formato sencillo de datos en una tabla visual ordenada.

Ejemplo de código:

image

Lienzo

Ver la API <ftxui/dom/canvas.hpp>

auto c = Canvas(100, 100);
c.DrawPointLine(10, 10, 80, 10, Color::Red);
auto element = canvas(c);
Element canvas(ConstRef< Canvas > canvas)
Produce un elemento a partir de un Canvas, o una referencia a un Canvas.

El dibujo se puede realizar en un ftxui::Canvas, usando caracteres braille, de bloque o simples:

Ejemplo simple:

image

Ejemplo complejo:

ezgif com-gif-maker (3)