FTXUI 7.0.3
C++ functional terminal UI.
Loading...
Searching...
No Matches
flexbox_config.hpp
Go to the documentation of this file.
1// Copyright 2021 Arthur Sonzogni. All rights reserved.
2// Use of this source code is governed by the MIT license that can be found in
3// the LICENSE file.
4#ifndef FTXUI_DOM_FLEXBOX_CONFIG_HPP
5#define FTXUI_DOM_FLEXBOX_CONFIG_HPP
6
7#include <cstdint>
8
9#include "ftxui/util/export.hpp" // for FTXUI_EXPORT
10
11/*
12 Esto replica el modelo flexbox de CSS.
13 Ver guía para la documentación:
14 https://css-tricks.com/snippets/css/a-guide-to-flexbox/
15*/
16
17namespace ftxui {
18
19/// @brief FlexboxConfig es una estructura de configuración que define las
20/// propiedades de diseño para un contenedor flexbox.
21//
22/// Permite especificar la dirección de los elementos flex, si deben
23/// ajustarse (wrap), cómo deben justificarse a lo largo del eje principal y cómo
24/// deben alinearse a lo largo del eje transversal.
25/// También incluye propiedades para los espacios entre los elementos flex en
26/// ambos ejes, principal y transversal.
27/// Esta estructura se utiliza para configurar el comportamiento de diseño de los
28/// contenedores flexbox en una interfaz de usuario de terminal.
29///
30/// @ingroup dom
31struct FTXUI_EXPORT(DOM) FlexboxConfig {
32 /// Esto establece el eje principal, definiendo así la dirección en la que los
33 /// elementos flex se colocan en el contenedor flex. Flexbox es (aparte del
34 /// ajuste) un concepto de diseño de una sola dirección. Piense en los
35 /// elementos flex como si se dispusieran principalmente en filas
36 /// horizontales o columnas verticales.
37 enum class Direction : uint8_t {
38 Row, ///< Los elementos flex se distribuyen en una fila.
39 RowInversed, ///< Los elementos flex se distribuyen en una fila, pero en orden inverso.
40 Column, ///< Los elementos flex se distribuyen en una columna.
41 ColumnInversed ///< Los elementos flex se distribuyen en una columna, pero en orden
42 ///< inverso.
43 };
44 Direction direction = Direction::Row;
45
46 /// Por defecto, todos los elementos flex intentarán ajustarse en una sola línea. Puede
47 /// cambiar eso y permitir que los elementos se ajusten según sea necesario con esta
48 /// propiedad.
49 enum class Wrap : uint8_t {
50 NoWrap, ///< Todos los elementos flex intentarán ajustarse en una sola línea.
51 Wrap, ///< Los elementos flex se ajustarán en varias líneas.
52 WrapInversed, ///< Los elementos flex se ajustarán en varias líneas, pero en orden
53 ///< inverso.
54 };
55 Wrap wrap = Wrap::Wrap;
56
57 /// Esto define la alineación a lo largo del eje principal. Ayuda a distribuir el espacio
58 /// libre sobrante cuando todos los elementos flex en una línea son inflexibles, o
59 /// son flexibles pero han alcanzado su tamaño máximo. También ejerce cierto
60 /// control sobre la alineación de los elementos cuando desbordan la línea.
61 enum class JustifyContent : uint8_t {
62 /// Los elementos se alinean al inicio de la dirección del flexbox.
63 FlexStart,
64 /// Los elementos se alinean al final de la dirección del flexbox.
65 FlexEnd,
66 /// Los elementos se centran a lo largo de la línea.
67 Center,
68 /// Los elementos se estiran para llenar la línea.
69 Stretch,
70 /// Los elementos se distribuyen uniformemente en la línea; el primer elemento está al
71 // inicio de la línea, el último elemento al final de la línea.
72 SpaceBetween,
73 /// Los elementos se distribuyen uniformemente en la línea con igual espacio a su
74 /// alrededor. Tenga en cuenta que visualmente los espacios no son iguales, ya que
75 /// todos los elementos tienen el mismo espacio en ambos lados. El primer elemento
76 /// tendrá una unidad de espacio contra el borde del contenedor, pero dos unidades
77 /// de espacio entre el siguiente elemento porque ese siguiente elemento tiene su
78 /// propio espaciado que se aplica.
79 SpaceAround,
80 /// Los elementos se distribuyen de manera que el espacio entre dos elementos (y el
81 /// espacio a los bordes) sea igual.
82 SpaceEvenly,
83 };
84 JustifyContent justify_content = JustifyContent::FlexStart;
85
86 /// Esto define el comportamiento predeterminado de cómo se disponen los elementos flex
87 /// a lo largo del eje transversal en la línea actual. Piense en ello como la versión
88 /// de justify-content para el eje transversal (perpendicular al eje principal).
89 enum class AlignItems : uint8_t {
90 FlexStart, ///< Los elementos se colocan al inicio del eje transversal.
91 FlexEnd, ///< Los elementos se colocan al final del eje transversal.
92 Center, ///< Los elementos se centran a lo largo del eje transversal.
93 Stretch, ///< Los elementos se estiran para llenar el eje transversal.
94 };
95 AlignItems align_items = AlignItems::FlexStart;
96
97 // Esto alinea las líneas de un contenedor flex cuando hay espacio extra en
98 // el eje transversal, de manera similar a cómo justify-content alinea los elementos
99 // individuales dentro del eje principal.
100 enum class AlignContent : uint8_t {
101 FlexStart, ///< Los elementos se colocan al inicio del eje transversal.
102 FlexEnd, ///< Los elementos se colocan al final del eje transversal.
103 Center, ///< Los elementos se centran a lo largo del eje transversal.
104 Stretch, ///< Los elementos se estiran para llenar el eje transversal.
105 SpaceBetween, ///< Los elementos se distribuyen uniformemente en el eje transversal.
106 SpaceAround, ///< Los elementos se distribuyen uniformemente con igual espacio alrededor de cada
107 ///< línea.
108 SpaceEvenly, ///< Los elementos se distribuyen uniformemente en el eje transversal con igual
109 ///< espacio a su alrededor.
110 };
111 AlignContent align_content = AlignContent::FlexStart;
112
113 int gap_x = 0;
114 int gap_y = 0;
115
116 // Patrón de constructor. Para uso encadenado como:
117 // ```
118 // FlexboxConfig()
119 // .Set(FlexboxConfig::Direction::Row)
120 // .Set(FlexboxConfig::Wrap::Wrap);
121 // ```
122 FlexboxConfig& Set(FlexboxConfig::Direction);
123 FlexboxConfig& Set(FlexboxConfig::Wrap);
124 FlexboxConfig& Set(FlexboxConfig::JustifyContent);
125 FlexboxConfig& Set(FlexboxConfig::AlignItems);
126 FlexboxConfig& Set(FlexboxConfig::AlignContent);
127 FlexboxConfig& SetGap(int gap_x, int gap_y);
128};
129
130} // namespace ftxui
131
132#endif // FTXUI_DOM_FLEXBOX_CONFIG_HPP
Component Wrap(std::string name, Component component)
Definition gallery.cpp:18
Direction
Direction es una enumeración que representa las cuatro cardinales direcciones.
Definition direction.hpp:15
El espacio de nombres ftxui:: de FTXUI.
Definition animation.hpp:11
Direction direction
Definition elements.hpp:83