FTXUI  4.1.0
C++ functional terminal UI.
Loading...
Searching...
No Matches
spinner.cpp
Go to the documentation of this file.
1#include <cstddef> // for size_t
2#include <memory> // for allocator, allocator_traits<>::value_type
3#include <string> // for basic_string, string
4#include <utility> // for move
5#include <vector> // for vector, __alloc_traits<>::value_type
6
7#include "ftxui/dom/elements.hpp" // for Element, gauge, text, vbox, spinner
8
9namespace ftxui {
10
11namespace {
12// NOLINTNEXTLINE
13const std::vector<std::vector<std::vector<std::string>>> elements = {
14 {
15 {"Replaced by the gauge"},
16 },
17 {
18 {". "},
19 {".. "},
20 {"..."},
21 },
22 {
23 {"|"},
24 {"/"},
25 {"-"},
26 {"\\"},
27 },
28 {
29 {"+"},
30 {"x"},
31 },
32 {
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 " /\\O ",
234 " /\\/",
235 " /\\ ",
236 " / \\ ",
237 "LOL LOL",
238 },
239 {
240 " _O ",
241 " //|_ ",
242 " | ",
243 " /| ",
244 " LLOL ",
245 },
246 {
247 " O ",
248 " /_ ",
249 " |\\ ",
250 " / | ",
251 " LOLLOL ",
252 },
253 },
254 {
255 {" ", "_______", " "},
256 {" ", "______/", " "},
257 {" _", "_____/ ", " "},
258 {" _ ", "____/ \\", " "},
259 {" _ ", "___/ \\ ", " \\"},
260 {" _ ", "__/ \\ ", " \\_"},
261 {" _ ", "_/ \\ ", " \\_/"},
262 {" _ ", "/ \\ _", " \\_/ "},
263 {"_ ", " \\ __", " \\_/ "},
264 {" ", "\\ ___", " \\_/ "},
265 {" ", " ___", "\\_/ "},
266 {" ", " _____", "_/ "},
267 {" ", " ______", "/ "},
268 {" ", "_______", " "},
269 },
270};
271
272} // namespace
273
274/// @brief Useful to represent the effect of time and/or events. This display an
275/// ASCII art "video".
276/// @param charset_index The type of "video".
277/// @param image_index The "frame" of the video. You need to increase this for
278/// every "step".
279/// @ingroup dom
280Element spinner(int charset_index, size_t image_index) {
281 if (charset_index == 0) {
282 const int progress_size = 40;
283 image_index %= progress_size;
284 if (image_index > progress_size / 2) {
285 image_index = progress_size - image_index;
286 }
287 return gauge(float(image_index) * 0.05F); // NOLINT
288 }
289 charset_index %= (int)elements.size();
290 image_index %= (int)elements[charset_index].size();
291 std::vector<Element> lines;
292 for (const auto& it : elements[charset_index][image_index]) {
293 lines.push_back(text(it));
294 }
295 return vbox(std::move(lines));
296}
297
298} // namespace ftxui
299
300// Copyright 2020 Arthur Sonzogni. All rights reserved.
301// Use of this source code is governed by the MIT license that can be found in
302// the LICENSE file.
Decorator size(WidthOrHeight, Constraint, int value)
Apply a constraint on the size of an element.
Definition size.cpp:85
std::shared_ptr< Node > Element
Definition elements.hpp:20
Element spinner(int charset_index, size_t image_index)
Useful to represent the effect of time and/or events. This display an ASCII art "video".
Definition spinner.cpp:280
Element text(std::wstring text)
Display a piece of unicode text.
Definition text.cpp:111
Element gauge(float progress)
Draw a high definition progress bar.
Definition gauge.cpp:287
Element vbox(Elements)
A container displaying elements vertically one by one.
Definition vbox.cpp:78