FTXUI  5.0.0
C++ functional terminal UI.
Loading...
Searching...
No Matches
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 Useful to represent the effect of time and/or events. This display an
277/// ASCII art "video".
278/// @param charset_index The type of "video".
279/// @param image_index The "frame" of the video. You need to increase this for
280/// every "step".
281/// @ingroup dom
283 if (charset_index <= 0) {
284 const int progress_size = 40;
286 if (image_index > progress_size / 2) {
288 }
289 return gauge(float(image_index) * 0.05F); // NOLINT
290 }
291 charset_index %= int(elements.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
Decorator size(WidthOrHeight, Constraint, int value)
Apply a constraint on the size of an element.
Definition size.cpp:89
std::shared_ptr< Node > Element
Definition elements.hpp:22
std::shared_ptr< T > Make(Args &&... args)
Definition component.hpp:26
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:282
Element text(std::wstring text)
Display a piece of unicode text.
Definition text.cpp:119
Element gauge(float progress)
Draw a high definition progress bar.
Definition gauge.cpp:293
Element vbox(Elements)
A container displaying elements vertically one by one.
Definition vbox.cpp:83