FTXUI 7.0.3
C++ functional terminal UI.
Loading...
Searching...
No Matches
src/ftxui/dom/spinner.cpp
Go to the documentation of this file.
1// Copyright 2020 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#include <cstddef> // for size_t
5#include <string> // for basic_string, string
6#include <utility> // for move
7#include <vector> // for vector, __alloc_traits<>::value_type
8
9#include "ftxui/dom/elements.hpp" // for Element, gauge, text, vbox, spinner
10
11namespace ftxui {
12
13namespace {
14// NOLINTNEXTLINE
15const std::vector<std::vector<std::vector<std::string>>> elements = {
16 {
17 {"Replaced by the gauge"},
18 },
19 {
20 {". "},
21 {".. "},
22 {"..."},
23 },
24 {
25 {"|"},
26 {"/"},
27 {"-"},
28 {"\\"},
29 },
30 {
31 {"+"},
32 {"x"},
33 },
34 {
35 {"| "},
36 {"|| "},
37 {"|||"},
38 },
39 {
40 {"←"},
41 {"↖"},
42 {"↑"},
43 {"↗"},
44 {"→"},
45 {"↘"},
46 {"↓"},
47 {"↙"},
48 },
49 {
50 {"▁"},
51 {"▂"},
52 {"▃"},
53 {"▄"},
54 {"▅"},
55 {"▆"},
56 {"▇"},
57 {"█"},
58 {"▇"},
59 {"▆"},
60 {"▅"},
61 {"▄"},
62 {"▃"},
63 {"▁"},
64 },
65 {
66 {"▉"},
67 {"▊"},
68 {"▋"},
69 {"▌"},
70 {"▍"},
71 {"▎"},
72 {"▏"},
73 {"▎"},
74 {"▍"},
75 {"▌"},
76 {"▋"},
77 {"▊"},
78 },
79 {
80 {"▖"},
81 {"▘"},
82 {"▝"},
83 {"▗"},
84 },
85 {
86 {"◢"},
87 {"◣"},
88 {"◤"},
89 {"◥"},
90 },
91 {
92 {"◰"},
93 {"◳"},
94 {"◲"},
95 {"◱"},
96 },
97 {
98 {"◴"},
99 {"◷"},
100 {"◶"},
101 {"◵"},
102 },
103 {
104 {"◐"},
105 {"◓"},
106 {"◑"},
107 {"◒"},
108 },
109 {
110 {"◡"},
111 {"⊙"},
112 {"◠"},
113 },
114 {
115 {"⠁"},
116 {"⠂"},
117 {"⠄"},
118 {"⡀"},
119 {"⢀"},
120 {"⠠"},
121 {"⠐"},
122 {"⠈"},
123 },
124 {
125 {"⠋"},
126 {"⠙"},
127 {"⠹"},
128 {"⠸"},
129 {"⠼"},
130 {"⠴"},
131 {"⠦"},
132 {"⠧"},
133 {"⠇"},
134 {"⠏"},
135 },
136 {
137 {"(*----------)"}, {"(-*---------)"}, {"(--*--------)"},
138 {"(---*-------)"}, {"(----*------)"}, {"(-----*-----)"},
139 {"(------*----)"}, {"(-------*---)"}, {"(--------*--)"},
140 {"(---------*-)"}, {"(----------*)"}, {"(---------*-)"},
141 {"(--------*--)"}, {"(-------*---)"}, {"(------*----)"},
142 {"(-----*-----)"}, {"(----*------)"}, {"(---*-------)"},
143 {"(--*--------)"}, {"(-*---------)"},
144 },
145 {
146 {"[ ]"},
147 {"[= ]"},
148 {"[== ]"},
149 {"[=== ]"},
150 {"[==== ]"},
151 {"[===== ]"},
152 {"[======]"},
153 {"[===== ]"},
154 {"[==== ]"},
155 {"[=== ]"},
156 {"[== ]"},
157 {"[= ]"},
158 },
159 {
160 {"[ ]"},
161 {"[= ]"},
162 {"[== ]"},
163 {"[=== ]"},
164 {"[==== ]"},
165 {"[===== ]"},
166 {"[======]"},
167 {"[ =====]"},
168 {"[ ====]"},
169 {"[ ===]"},
170 {"[ ==]"},
171 {"[ =]"},
172 },
173 {
174 {"[== ]"},
175 {"[== ]"},
176 {"[== ]"},
177 {"[== ]"},
178 {"[== ]"},
179 {" [== ]"},
180 {"[ == ]"},
181 {"[ == ]"},
182 {"[ ==]"},
183 {"[ ==]"},
184 {"[ ==]"},
185 {"[ ==]"},
186 {"[ ==]"},
187 {"[ ==] "},
188 {"[ == ]"},
189 {"[ == ]"},
190 },
191 {
192 {
193 " ─╮",
194 " │",
195 " ",
196 },
197 {
198 " ╮",
199 " │",
200 " ╯",
201 },
202 {
203 " ",
204 " │",
205 " ─╯",
206 },
207 {
208 " ",
209 " ",
210 "╰─╯",
211 },
212 {
213 " ",
214 "│ ",
215 "╰─ ",
216 },
217 {
218 "╭ ",
219 "│ ",
220 "╰ ",
221 },
222 {
223 "╭─ ",
224 "│ ",
225 " ",
226 },
227 {
228 "╭─╮",
229 " ",
230 " ",
231 },
232 },
233 {
234 {
235 " /\\O ",
236 " /\\/",
237 " /\\ ",
238 " / \\ ",
239 "LOL LOL",
240 },
241 {
242 " _O ",
243 " //|_ ",
244 " | ",
245 " /| ",
246 " LLOL ",
247 },
248 {
249 " O ",
250 " /_ ",
251 " |\\ ",
252 " / | ",
253 " LOLLOL ",
254 },
255 },
256 {
257 {" ", "_______", " "},
258 {" ", "______/", " "},
259 {" _", "_____/ ", " "},
260 {" _ ", "____/ \\", " "},
261 {" _ ", "___/ \\ ", " \\"},
262 {" _ ", "__/ \\ ", " \\_"},
263 {" _ ", "_/ \\ ", " \\_/"},
264 {" _ ", "/ \\ _", " \\_/ "},
265 {"_ ", " \\ __", " \\_/ "},
266 {" ", "\\ ___", " \\_/ "},
267 {" ", " ___", "\\_/ "},
268 {" ", " _____", "_/ "},
269 {" ", " ______", "/ "},
270 {" ", "_______", " "},
271 },
272};
273
274} // namespace
275
276/// @brief Útil para representar el efecto del tiempo y/o eventos. Esto muestra
277/// un "video" de arte ASCII.
278/// @param charset_index El tipo de "video".
279/// @param image_index El "cuadro" del video. Necesitas aumentarlo para
280/// cada "paso".
281/// @ingroup dom
282Element spinner(int charset_index, size_t image_index) {
283 if (charset_index <= 0) {
284 const int progress_size = 40;
285 image_index %= progress_size;
286 if (image_index > progress_size / 2) {
287 image_index = progress_size - image_index;
288 }
289 return gauge(float(image_index) * 0.05F); // NOLINT
290 }
291 charset_index %= int(elements.size());
292 image_index %= int(elements[charset_index].size());
293 std::vector<Element> lines;
294 for (const auto& it : elements[charset_index][image_index]) {
295 lines.push_back(text(it));
296 }
297 return vbox(std::move(lines));
298}
299
300} // namespace ftxui
Element text(std::string_view text)
Muestra un fragmento de texto Unicode codificado en UTF8.
Decorator size(WidthOrHeight direction, Constraint constraint, int value)
Aplica una restricción al tamaño de un elemento.
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 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
size_t image_index
Definition elements.hpp:104
std::shared_ptr< Node > Element
Definition elements.hpp:25