FTXUI
6.1.9
C++ functional terminal UI.
Toggle main menu visibility
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
11
namespace
ftxui
{
12
13
namespace
{
14
// NOLINTNEXTLINE
15
const
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
282
Element
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
elements.hpp
ftxui
Definition
animation.hpp:10
ftxui::size
Decorator size(WidthOrHeight, Constraint, int value)
Apply a constraint on the size of an element.
Definition
size.cpp:89
ftxui::Element
std::shared_ptr< Node > Element
Definition
elements.hpp:22
ftxui::spinner
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
ftxui::text
Element text(std::wstring text)
Display a piece of unicode text.
Definition
text.cpp:160
ftxui::gauge
Element gauge(float progress)
Draw a high definition progress bar.
Definition
gauge.cpp:293
ftxui::vbox
Element vbox(Elements)
A container displaying elements vertically one by one.
Definition
vbox.cpp:96