FTXUI 7.0.3
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 {
...
// Define the document
Element document = vbox({
text("The window") | bold | color(Color::Blue),
gauge(0.5)
text("The footer")
});
// Add a border, by calling the `ftxui::border` decorator function.
document = border(document);
// Add another border, using the pipe operator.
document = document | border.
// Add another border, using the |= operator.
document |= border
...
}
Element text(std::string_view text)
Muestra un fragmento de texto Unicode codificado en UTF8.
Element color(Color color, Element child)
Establece el color de primer plano de un elemento.
Definition dom/color.cpp:81
Element gauge(float progress)
Dibuja una barra de progreso de alta definición.
Element vbox(Elements children)
Un contenedor que muestra elementos verticalmente uno por uno.
Definition vbox.cpp:96
El espacio de nombres ftxui:: de FTXUI.
Definition animation.hpp:11

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. All rights reserved.
// Use of this source code is governed by the MIT license that can be found in
// the LICENSE file.
#ifndef FTXUI_DOM_ELEMENTS_HPP
#define FTXUI_DOM_ELEMENTS_HPP
#include <cstdint>
#include <functional>
#include <memory>
#include <string_view>
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
enum BorderStyle : uint8_t {
};
// Encadena elementos con decoradores mediante pipe.
// Por ejemplo, las siguientes líneas son equivalentes:
// -> text("ftxui") | bold | underlined
// -> underlined(bold(text("FTXUI")))
// --- Elemento de Interfaz ---
FTXUI_EXPORT(DOM) Element text(std::string_view text);
FTXUI_EXPORT(DOM) Element vtext(std::string_view text);
FTXUI_EXPORT(DOM) Element separatorCharacter(std::string_view);
float right,
Color unselected_color,
Color selected_color);
float down,
Color unselected_color,
Color selected_color);
FTXUI_EXPORT(DOM) Element gauge(float progress);
FTXUI_EXPORT(DOM) Element gaugeLeft(float progress);
FTXUI_EXPORT(DOM) Element gaugeRight(float progress);
FTXUI_EXPORT(DOM) Element gaugeUp(float progress);
FTXUI_EXPORT(DOM) Element gaugeDown(float progress);
// charset[0] es el glifo "vacío", charset.back() es "completo"; las entradas
// intermedias sombrean la celda de borde.
Element gaugeCharset(float progress,
std::vector<std::string> charset,
FTXUI_EXPORT(DOM) Decorator borderWith(const Cell&);
Element window(Element title, Element content, BorderStyle border = ROUNDED);
FTXUI_EXPORT(DOM) Element spinner(int charset_index, size_t image_index);
FTXUI_EXPORT(DOM) Element paragraph(std::string_view text);
FTXUI_EXPORT(DOM) Element paragraphAlignLeft(std::string_view text);
FTXUI_EXPORT(DOM) Element paragraphAlignRight(std::string_view text);
FTXUI_EXPORT(DOM) Element paragraphAlignCenter(std::string_view text);
FTXUI_EXPORT(DOM) Element paragraphAlignJustify(std::string_view text);
FTXUI_EXPORT(DOM) Element canvas(ConstRef<Canvas>);
Element canvas(int width, int height, std::function<void(Canvas&)>);
FTXUI_EXPORT(DOM) Element canvas(std::function<void(Canvas&)>);
// -- Decorador ---
FTXUI_EXPORT(DOM) Decorator color(const LinearGradient&);
FTXUI_EXPORT(DOM) Decorator bgcolor(const LinearGradient&);
FTXUI_EXPORT(DOM) Element color(const LinearGradient&, Element);
FTXUI_EXPORT(DOM) Element bgcolor(const LinearGradient&, Element);
FTXUI_EXPORT(DOM) Decorator hyperlink(std::string_view link);
FTXUI_EXPORT(DOM) Element hyperlink(std::string_view link, Element child);
FTXUI_EXPORT(DOM) Decorator selectionColor(Color foreground);
FTXUI_EXPORT(DOM) Decorator selectionStyle(std::function<void(Cell&)> style);
// --- Diseño ---
// Conjunto de elementos horizontales, verticales o apilados.
Element flexbox(Elements, FlexboxConfig config = FlexboxConfig());
FTXUI_EXPORT(DOM) Element gridbox(std::vector<Elements> lines);
Element hflow(Elements); // Ayudante: flexbox predeterminado con dirección de fila.
Element vflow(Elements); // Ayudante: flexbox predeterminado con dirección de columna.
// -- Flexibilidad ---
// Define cómo compartir el espacio restante cuando no todo se utiliza dentro de un
// contenedor.
FTXUI_EXPORT(DOM) Element flex(Element); // Expandir/Minimizar si es posible/necesario.
FTXUI_EXPORT(DOM) Element flex_grow(Element); // Expandir elemento si es posible.
FTXUI_EXPORT(DOM) 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.
FTXUI_EXPORT(DOM) Element notflex(Element); // Restablecer el atributo flex.
FTXUI_EXPORT(DOM) Element filler(); // Un elemento expandible en blanco.
// -- Anulación de tamaño;
enum WidthOrHeight : uint8_t { WIDTH, HEIGHT };
enum Constraint : uint8_t { LESS_THAN, EQUAL, GREATER_THAN };
// --- 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.
FTXUI_EXPORT(DOM) Element select(Element e); // Obsoleto - Alias para focus.
// --- Cursor ---
// Son similares a `focus`, pero también cambian la forma del cursor.
// --- Varios ---
// Antes de dibujar el |element| limpiar el píxel de abajo. Esto es útil en
// combinación con dbox.
// --- Utilidad --------------------------------------------------------------------
namespace Dimension {
FTXUI_EXPORT(DOM) 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
#define FTXUI_EXPORT(component)
Definition export.hpp:24
Element window(Element title, Element content, BorderStyle border=ROUNDED)
Dibuja una ventana con un título y un borde alrededor del elemento.
Element borderDouble(Element child)
Dibuja un borde doble alrededor del elemento.
Element focusCursorBarBlinking(Element child)
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:101
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 style)
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:119
Element underlinedDouble(Element child)
Aplica un doble subrayado al texto.
Element clear_under(Element element)
Antes de dibujar |child|, limpia las celdas debajo. Esto es útil en combinación con dbox.
Element borderDashed(Element child)
Dibuja un borde discontinuo alrededor del elemento.
Element separatorEmpty()
Dibuja una separación vertical u horizontal entre otros dos elementos, usando el estilo VACÍO.
Element vscroll_indicator(Element child)
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
Element paragraphAlignLeft(std::string_view the_text)
Devuelve un elemento que dibuja el párrafo en varias líneas, alineado a la izquierda.
Decorator size(WidthOrHeight direction, Constraint constraint, int value)
Aplica una restricción al tamaño de un elemento.
Element flex(Element child)
Hace que un elemento hijo se expanda proporcionalmente al espacio restante en un contenedor.
Definition flex.cpp:95
Element hyperlink(std::string_view link, Element child)
Hace que el área renderizada sea clicable usando un navegador web. El enlace se abrirá cuando el usua...
Definition hyperlink.cpp:52
Element gaugeRight(float progress)
Dibuja una barra de progreso de alta definición que avanza de izquierda a derecha.
Element focusCursorUnderlineBlinking(Element child)
Igual que focus, pero establece la forma del cursor como un subrayado parpadeante.
Definition frame.cpp:217
Element bold(Element child)
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 child)
Dibuja un borde redondeado alrededor del elemento.
Element emptyElement()
Definition dom/util.cpp:140
Element yflex(Element)
Expandir/Minimizar si es posible/necesario en el eje Y.
Definition flex.cpp:107
Element flex_shrink(Element child)
Minimizar si es necesario.
Definition flex.cpp:131
Element focusCursorBar(Element child)
Igual que focus, pero establece la forma del cursor como un bloque fijo.
Definition frame.cpp:175
Element focusCursorBlock(Element child)
Igual que focus, pero establece la forma del cursor como un bloque fijo.
Definition frame.cpp:147
Element vtext(std::string_view text)
Muestra un fragmento de texto Unicode verticalmente.
BorderStyle
BorderStyle es una enumeración que representa los diferentes estilos de bordes que se pueden aplicar ...
Definition elements.hpp:38
Element underlined(Element child)
Subraya el elemento dado.
Element center(Element child)
Centra un elemento horizontal y verticalmente.
Element paragraphAlignJustify(std::string_view the_text)
Devuelve un elemento que dibuja el párrafo en varias líneas, alineado utilizando una alineación justi...
Direction
Direction es una enumeración que representa las cuatro cardinales direcciones.
Definition direction.hpp:15
Element focusCursorUnderline(Element child)
Igual que focus, pero establece la forma del cursor como un subrayado fijo.
Definition frame.cpp:203
Element borderHeavy(Element child)
Dibuja un borde grueso alrededor del elemento.
Element inverted(Element child)
Agrega un filtro que invertirá los colores de primer plano y de fondo. colores.
Definition inverted.cpp:34
Element gaugeUp(float progress)
Dibuja una barra de progreso de alta definición que avanza de abajo hacia arriba.
Element gaugeCharset(float progress, std::vector< std::string > charset, Direction direction=Direction::Right)
Dibuja una barra de progreso de alta definición usando un conjunto de caracteres personalizado.
Element align_right(Element child)
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:125
Element hscroll_indicator(Element child)
Muestra una barra de desplazamiento horizontal en la parte inferior. Los colores siguen el contenido.
Element flex_grow(Element child)
Expandir si es posible.
Definition flex.cpp:113
Element separatorDashed()
Dibuja una separación vertical u horizontal entre otros dos elementos, usando el estilo DISCONTINUO.
Element notflex(Element child)
Hace que el elemento no sea flexible.
Definition flex.cpp:149
Element strikethrough(Element child)
Aplica un tachado al texto.
Element italic(Element child)
Aplica un doble subrayado al texto.
Definition italic.cpp:17
Element dbox(Elements children_)
Apila varios elementos uno encima de otro.
Element xflex_shrink(Element)
Minimizar si es necesario en el eje X.
Definition flex.cpp:137
Decorator borderWith(const Cell &pixel)
Igual que border pero con un Cell constante alrededor del elemento.
Element gaugeLeft(float progress)
Dibuja una barra de progreso de alta definición que avanza de derecha a izquierda.
Element paragraphAlignCenter(std::string_view the_text)
Devuelve un elemento que dibuja el párrafo en varias líneas, alineado al centro.
Element borderLight(Element child)
Dibuja un borde ligero alrededor del elemento.
Element focus(Element child)
Establece que child sea el elemento enfocado entre sus hermanos.
Definition frame.cpp:101
Element paragraph(std::string_view the_text)
Devuelve un elemento que dibuja el párrafo en varias líneas.
Element bgcolor(Color color, Element child)
Establece el color de fondo de un elemento.
Definition dom/color.cpp:96
Decorator borderStyled(BorderStyle style)
Igual que border pero con estilos diferentes.
Element paragraphAlignRight(std::string_view the_text)
Devuelve un elemento que dibuja el párrafo en varias líneas, alineado a la derecha.
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:70
Element dim(Element child)
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
Element separatorCharacter(std::string_view value)
Dibuja una separación vertical u horizontal entre otros dos elementos.
Element blink(Element child)
El texto dibujado alterna entre visible y oculto.
Definition blink.cpp:33
Element vcenter(Element child)
Centra un elemento verticalmente.
Element separatorDouble()
Dibuja una separación vertical u horizontal entre otros dos elementos, usando el estilo DOBLE.
Element focusCursorBlockBlinking(Element child)
Igual que focus, pero establece la forma del cursor como un bloque parpadeante.
Definition frame.cpp:161
Element border(Element child)
Dibuja un borde alrededor del elemento.
Element separatorHeavy()
Dibuja una separación vertical u horizontal entre otros dos elementos, usando el estilo GRUESO.
Element borderEmpty(Element child)
Dibuja un borde vacío alrededor del elemento.
Element yflex_shrink(Element)
Minimizar si es necesario en el eje Y.
Definition flex.cpp:143
Element hcenter(Element child)
Centra un elemento horizontalmente.
Element gaugeDown(float progress)
Dibuja una barra de progreso de alta definición que avanza de arriba hacia abajo.
@ 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
El espacio de nombres ftxui::Dimension:: de FTXUI.
bool extend_beyond_screen
Definition elements.hpp:232
@ LESS_THAN
Definition elements.hpp:194
@ GREATER_THAN
Definition elements.hpp:194
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:252
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.
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)
Igual que frame, pero solo en el eje 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 contenedor que muestra elementos en filas de izquierda a derecha. Cuando está lleno,...
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)
Dibuja una barra horizontal, con el área entre izquierda/derecha coloreada de forma diferente.
Direction direction
Definition elements.hpp:83
Element hbox(Elements children)
Un contenedor que muestra elementos horizontalmente uno por uno.
Definition hbox.cpp:94
std::vector< Element > Elements
Definition elements.hpp:26
Decorator selectionForegroundColor(Color foreground)
Establece el color de primer plano de un elemento cuando está seleccionado. Tenga en cuenta que el es...
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)
Establece el color de fondo de un elemento cuando está seleccionado. Tenga en cuenta que el estilo se...
std::function< Element(Element)> Decorator
Definition elements.hpp:27
Decorator flex_shrink_factor(int shrink)
Definition flex.cpp:165
Element yframe(Element child)
Igual que frame, pero solo en el eje y.
Definition frame.cpp:134
Decorator flex_grow_factor(int grow)
Definition flex.cpp:159
Decorator selectionColor(Color foreground)
Establece el color de un elemento cuando está seleccionado.
int shrink
Definition elements.hpp:165
int y
Definition elements.hpp:134
Element selectionStyleReset(Element child)
Restablece el estilo de selección de un elemento.
const Element & element
Definition node.hpp:95
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 &)>)
Produce un elemento dibujando un lienzo del tamaño solicitado.
Element frame(Element child)
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)
Element select(Element e)
Establece el child como el enfocado entre sus hermanos.
Definition frame.cpp:108
Decorator selectionStyle(std::function< void(Cell &)> style)
Establece el estilo de un elemento cuando está seleccionado.
Element vflow(Elements)
Un contenedor que muestra elementos en filas de arriba a abajo. Cuando está lleno,...
Definition flexbox.cpp:288
Element graph(GraphFunction graph_function)
Dibuja un gráfico usando una 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

texto

El widget más simple. Muestra un texto.

text("I am a piece of text");
I am a piece of text.

vtext

vtext

Salida del terminal:
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("A very long text")

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.

Salida del terminal:
border(text("The element"))

Salida del terminal:

┌───────────┐
│The element│
└───────────┘

‍[!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("The window", text("The element"))

Salida del terminal:

┌The window─┐
│The element│
└───────────┘

separador

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

Salida del terminal:
border(
hbox({
text("Left"),
separator(),
text("Right")
})
)

Salida del terminal:

┌────┬─────┐
│left│right│
└────┴─────┘

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.

Salida del terminal:
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

Vea:

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("Blue foreground") | color(Color::Blue);
text("Blue background") | bgcolor(Color::Blue);
text("Black on white") | 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);

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

Ejemplo

image

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

underlined(bold(text("This text is bold and underlined")))

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

text("This text is bold") | 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.

Salida del terminal:
hbox({
text("left") | border ,
text("middle") | border | flex,
text("right") | border,
});

Salida en la terminal:

┌────┐┌─────────────────────────────────────────────────────┐┌─────┐
│left││middle ││right│
└────┘└─────────────────────────────────────────────────────┘└─────┘
Salida del terminal:
hbox({
text("left") | border ,
text("middle") | border | flex,
text("right") | border | flex,
});

Salida del terminal:

┌────┐┌───────────────────────────────┐┌───────────────────────────────┐
│left││middle ││right │
└────┘└───────────────────────────────┘└───────────────────────────────┘

Tabla

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

Ejemplo básico:

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

Ejemplo de código:

image

Selección y estilo

Puede seleccionar partes de la tabla y aplicarles decoradores o bordes. Los métodos de selección incluyen:

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

Una vez hecha una selección, puede aplicar:

ftxui::TableSelection::Decorate(Decorator); // Apply a decorator to the whole selection (cells and borders).
ftxui::TableSelection::DecorateCells(Decorator); // Apply a decorator only to the cells.
ftxui::TableSelection::Border(BorderStyle); // Add a border around the selection.
ftxui::TableSelection::Separator(BorderStyle); //

Bordes coloreados

También puede aplicar decoradores específicamente a bordes y separadores:

// Apply a red border to the whole table.
table.SelectAll().Border(LIGHT, color(Color::Red));
// Apply a blue separator to the first row.
table.SelectRow(0).SeparatorVertical(LIGHT, color(Color::Blue));

Los siguientes métodos están disponibles para una decoración de bordes detallada:

ftxui::TableSelection::DecorateBorder(Decorator); // Apply a decorator to all borders of the selection.
ftxui::TableSelection::DecorateBorderLeft(Decorator); // Apply a decorator to the left border of the selection.
ftxui::TableSelection::DecorateBorderRight(Decorator); // Apply a decorator to the right border of the selection.
ftxui::TableSelection::DecorateBorderTop(Decorator); // Apply a decorator to the top border of the selection.
ftxui::TableSelection::DecorateBorderBottom(Decorator); // Apply a decorator to the bottom border of the selection.
ftxui::TableSelection::DecorateSeparator(Decorator); // Apply a decorator to all separators of the selection.
ftxui::TableSelection::DecorateSeparatorVertical(Decorator); // Apply a decorator to all vertical separators of the selection.
ftxui::TableSelection::DecorateSeparatorHorizontal(Decorator); // Apply a decorator to all horizontal separators of the selection.

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

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)