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 Ceci reproduit le modèle CSS flexbox.
13 Voir le guide pour la documentation :
14 https://css-tricks.com/snippets/css/a-guide-to-flexbox/
15*/
16
17namespace ftxui {
18
19/// @brief FlexboxConfig est une structure de configuration qui définit les
20/// propriétés de mise en page pour un conteneur flexbox.
21//
22/// Elle vous permet de spécifier la direction des éléments flexibles, s'ils
23/// doivent s'enrouler, comment ils doivent être justifiés le long de l'axe
24/// principal, et comment ils doivent être alignés le long de l'axe transversal.
25/// Elle inclut également des propriétés pour les espacements entre les
26/// éléments flexibles dans les deux axes principal et transversal.
27/// Cette structure est utilisée pour configurer le comportement de la mise en
28/// page des conteneurs flexbox dans une interface utilisateur de terminal.
29///
30/// @ingroup dom
31struct FTXUI_EXPORT(DOM) FlexboxConfig {
32 /// Ceci établit l'axe principal, définissant ainsi la direction dans laquelle
33 /// les éléments flexibles sont placés dans le conteneur flex. Flexbox est (à
34 /// part l'enveloppement) un concept de mise en page unidirectionnel. Pensez
35 /// aux éléments flexibles comme étant principalement disposés en rangées
36 /// horizontales ou en colonnes verticales.
37 enum class Direction : uint8_t {
38 Row, ///< Les éléments flexibles sont disposés en ligne.
39 RowInversed, ///< Les éléments flexibles sont disposés en ligne, mais en
40 ///< ordre inverse.
41 Column, ///< Les éléments flexibles sont disposés en colonne.
42 ColumnInversed ///< Les éléments flexibles sont disposés en colonne, mais
43 ///< en ordre inverse.
44 };
45 Direction direction = Direction::Row;
46
47 /// Par défaut, tous les éléments flexibles tenteront de tenir sur une seule
48 /// ligne. Vous pouvez modifier cela et permettre aux éléments de s'enrouler
49 /// si nécessaire avec cette propriété.
50 enum class Wrap : uint8_t {
51 NoWrap, ///< Tous les éléments flexibles tenteront de tenir sur une
52 ///< seule ligne.
53 Wrap, ///< Les éléments flexibles s'enrouleront sur plusieurs
54 ///< lignes.
55 WrapInversed, ///< Les éléments flexibles s'enrouleront sur plusieurs
56 ///< lignes, mais en ordre inverse.
57 };
58 Wrap wrap = Wrap::Wrap;
59
60 /// Ceci définit l'alignement le long de l'axe principal. Il aide à distribuer
61 /// l'espace libre supplémentaire restant lorsque tous les éléments flexibles
62 /// sur une ligne sont inflexibles, ou sont flexibles mais ont atteint leur
63 /// taille maximale. Il exerce également un certain contrôle sur l'alignement
64 /// des éléments lorsqu'ils débordent de la ligne.
65 enum class JustifyContent : uint8_t {
66 /// Les éléments sont alignés au début de la direction du flexbox.
67 FlexStart,
68 /// Les éléments sont alignés à la fin de la direction du flexbox.
69 FlexEnd,
70 /// Les éléments sont centrés le long de la ligne.
71 Center,
72 /// Les éléments sont étirés pour remplir la ligne.
73 Stretch,
74 /// Les éléments sont répartis uniformément sur la ligne ; le premier
75 /// élément est sur la ligne de début, le dernier élément sur la ligne de fin.
76 SpaceBetween,
77 /// Les éléments sont répartis uniformément sur la ligne avec un espace égal
78 /// autour d'eux. Notez que visuellement les espaces ne sont pas égaux, car
79 /// tous les éléments ont un espace égal des deux côtés. Le premier élément
80 /// aura une unité d'espace contre le bord du conteneur, mais deux unités
81 /// d'espace entre le prochain élément car cet élément a son propre
82 /// espacement qui s'applique.
83 SpaceAround,
84 /// Les éléments sont répartis de sorte que l'espacement entre deux éléments
85 /// (et l'espace jusqu'aux bords) soit égal.
86 SpaceEvenly,
87 };
88 JustifyContent justify_content = JustifyContent::FlexStart;
89
90 /// Ceci définit le comportement par défaut de la disposition des éléments
91 /// flexibles le long de l'axe transversal sur la ligne actuelle. Considérez-le
92 /// comme la version de justify-content pour l'axe transversal
93 /// (perpendiculaire à l'axe principal).
94 enum class AlignItems : uint8_t {
95 FlexStart, ///< Les éléments sont placés au début de l'axe transversal.
96 FlexEnd, ///< Les éléments sont placés à la fin de l'axe transversal.
97 Center, ///< Les éléments sont centrés le long de l'axe transversal.
98 Stretch, ///< Les éléments sont étirés pour remplir l'axe transversal.
99 };
100 AlignItems align_items = AlignItems::FlexStart;
101
102 // Ceci aligne les lignes d'un conteneur flex lorsqu'il y a un espace
103 // supplémentaire dans l'axe transversal, de manière similaire à la façon dont
104 // justify-content aligne les éléments individuels dans l'axe principal.
105 enum class AlignContent : uint8_t {
106 FlexStart, ///< Les éléments sont placés au début de l'axe transversal.
107 FlexEnd, ///< Les éléments sont placés à la fin de l'axe transversal.
108 Center, ///< Les éléments sont centrés le long de l'axe transversal.
109 Stretch, ///< Les éléments sont étirés pour remplir l'axe transversal.
110 SpaceBetween, ///< Les éléments sont répartis uniformément dans l'axe
111 ///< transversal.
112 SpaceAround, ///< Les éléments sont répartis uniformément avec un espace
113 ///< égal autour de chaque ligne.
114 SpaceEvenly, ///< Les éléments sont répartis uniformément dans l'axe
115 ///< transversal avec un espace égal autour d'eux.
116 };
117 AlignContent align_content = AlignContent::FlexStart;
118
119 int gap_x = 0;
120 int gap_y = 0;
121
122 // Modèle de constructeur. Pour une utilisation chaînée comme :
123 // ```
124 // FlexboxConfig()
125 // .Set(FlexboxConfig::Direction::Row)
126 // .Set(FlexboxConfig::Wrap::Wrap);
127 // ```
128 FlexboxConfig& Set(FlexboxConfig::Direction);
129 FlexboxConfig& Set(FlexboxConfig::Wrap);
130 FlexboxConfig& Set(FlexboxConfig::JustifyContent);
131 FlexboxConfig& Set(FlexboxConfig::AlignItems);
132 FlexboxConfig& Set(FlexboxConfig::AlignContent);
133 FlexboxConfig& SetGap(int gap_x, int gap_y);
134};
135
136} // namespace ftxui
137
138#endif // FTXUI_DOM_FLEXBOX_CONFIG_HPP
Component Wrap(std::string name, Component component)
Definition gallery.cpp:18
Direction
Direction est une énumération qui représente les quatre directions cardinales.
Definition direction.hpp:15
L'espace de noms FTXUI ftxui::
Definition animation.hpp:11
Direction direction
Definition elements.hpp:83