13bool GeneratorBool(
const char*& data,
size_t& size) {
18 auto out = bool(data[0] % 2);
24std::string GeneratorString(
const char*& data,
size_t& size) {
26 while (index < size && data[index]) {
30 auto out = std::string(data, data + index);
40 return std::move(
out);
43int GeneratorInt(
const char* data,
size_t size) {
47 auto out = int(data[0]);
53Color GeneratorColor(
const char* data,
size_t size) {
54 return Color::RGB(GeneratorInt(data, size), GeneratorInt(data, size),
55 GeneratorInt(data, size));
61 option.
enabled = GeneratorBool(data, size);
62 option.
inactive = GeneratorColor(data, size);
63 option.
active = GeneratorColor(data, size);
64 option.
duration = std::chrono::milliseconds(GeneratorInt(data, size));
71 option.
background = GeneratorAnimatedColorOption(data, size);
72 option.
foreground = GeneratorAnimatedColorOption(data, size);
76ButtonOption GeneratorButtonOption(
const char* data,
size_t size) {
82UnderlineOption GeneratorUnderlineOption(
const char* data,
size_t size) {
84 option.
enabled = GeneratorBool(data, size);
87 option.
leader_duration = std::chrono::milliseconds(GeneratorInt(data, size));
89 std::chrono::milliseconds(GeneratorInt(data, size));
90 option.
leader_delay = std::chrono::milliseconds(GeneratorInt(data, size));
91 option.
follower_delay = std::chrono::milliseconds(GeneratorInt(data, size));
95MenuEntryOption GeneratorMenuEntryOption(
const char* data,
size_t size) {
101MenuOption GeneratorMenuOption(
const char* data,
size_t size) {
103 option.
underline = GeneratorUnderlineOption(data, size);
111std::vector<std::string> g_list;
113Components GeneratorComponents(
const char*& data,
size_t& size,
int depth);
115Component GeneratorComponent(
const char*& data,
size_t& size,
int depth) {
117 int value = GeneratorInt(data, size);
119 return Button(GeneratorString(data, size), [] {});
122 constexpr int value_max = 19;
123 value = (value % value_max + value_max) % value_max;
127 GeneratorString(data, size), [] {},
128 GeneratorButtonOption(data, size));
130 return Checkbox(GeneratorString(data, size), &g_bool);
132 return Input(GeneratorString(data, size), GeneratorString(data, size));
134 return Menu(&g_list, &g_int, GeneratorMenuOption(data, size));
138 return Toggle(&g_list, &g_int);
140 return Slider(GeneratorString(data, size), &g_int,
141 GeneratorInt(data, size), GeneratorInt(data, size),
142 GeneratorInt(data, size));
145 GeneratorComponent(data, size, depth - 1),
149 GeneratorComponent(data, size, depth - 1),
153 GeneratorComponent(data, size, depth - 1),
157 GeneratorComponent(data, size, depth - 1),
160 return Container::Vertical(GeneratorComponents(data, size, depth - 1));
163 return Container::Vertical(GeneratorComponents(data, size, depth - 1),
167 return Container::Horizontal(GeneratorComponents(data, size, depth - 1));
169 return Container::Horizontal(GeneratorComponents(data, size, depth - 1),
172 return Container::Tab(GeneratorComponents(data, size, depth - 1), &g_int);
174 return Maybe(GeneratorComponent(data, size, depth - 1), &g_bool);
179 GeneratorComponent(data, size, depth - 1),
180 GeneratorBool(data, size));
186Components GeneratorComponents(
const char*& data,
size_t& size,
int depth) {
189 while (size && GeneratorInt(data, size) % 2) {
190 out.push_back(GeneratorComponent(data, size, depth - 1));
193 return std::move(
out);
198 g_bool = GeneratorBool(data, size);
199 g_int = GeneratorInt(data, size);
201 "test_1",
"test_2",
"test_3",
"test_4",
"test_5",
205 auto component = GeneratorComponent(data, size, depth);
207 int width = GeneratorInt(data, size);
208 int height = GeneratorInt(data, size);
217 Screen::Create(Dimension::Fixed(width), Dimension::Fixed(height));
220 std::vector<Event> events;
224 for (
size_t i = 0; i <
size; ++i) {
228 for (
const auto& event : events) {
229 component->OnEvent(event);
230 auto document = component->Render();
int LLVMFuzzerTestOneInput(const char *data, size_t size)
animation::Duration follower_duration
MenuEntryOption entries_option
animation::Duration follower_delay
UnderlineOption underline
animation::Duration leader_duration
animation::Duration duration
AnimatedColorsOption animated_colors
animation::Duration leader_delay
Component Maybe(Component, const bool *show)
Decora un componente |child|. Se muestra solo cuando |show| es verdadero.
Component ResizableSplitTop(Component main, Component back, int *main_size)
Una división vertical entre dos componentes, configurable usando el ratón.
Component Menu(MenuOption options)
Una lista de texto. El elemento enfocado es seleccionado.
Component Toggle(ConstStringListRef entries, int *selected)
Una lista horizontal de elementos. El usuario puede navegar a través de ellos.
Component Radiobox(RadioboxOption options)
Una lista de elementos, donde solo uno puede ser seleccionado.
Component Button(ButtonOption options)
Dibuja un botón. Ejecuta una función al hacer clic.
Component Input(InputOption options={})
Un cuadro de entrada para editar texto.
Component ResizableSplitRight(Component main, Component back, int *main_size)
Una división horizontal entre dos componentes, configurable usando el ratón.
Component Dropdown(ConstStringListRef entries, int *selected)
Un menú desplegable.
Component ResizableSplitBottom(Component main, Component back, int *main_size)
Una división vertical entre dos componentes, configurable usando el ratón.
Component Checkbox(CheckboxOption options)
Dibuja un elemento seleccionable.
Component ResizableSplitLeft(Component main, Component back, int *main_size)
Una división horizontal entre dos componentes, configurable usando el ratón.
Opción sobre un color potencialmente animado.
Representa un evento. Puede ser un evento de pulsación de tecla, un redimensionamiento de terminal,...
Opción para el efecto de subrayado.
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.
void Render(Screen &screen, const Element &element)
Muestra un elemento en un ftxui::Screen.
static Screen Create(Dimensions dimension)
Crea una pantalla con la dimensión dada.
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.
Color es una clase que representa un color en la interfaz de usuario de la terminal.
El espacio de nombres ftxui:: de FTXUI.
std::vector< Component > Components
std::wstring to_wstring(const std::string &s)
Component Collapsible(ConstStringRef label, Component child, Ref< bool > show=false)
Un componente plegable. Muestra una casilla de verificación con una flecha. Una vez activado,...
Component Slider(SliderOption< T > options)
Un deslizador en cualquier dirección.
std::shared_ptr< ComponentBase > Component
AnimatedColorOption foreground
AnimatedColorOption background