FTXUI  0.10.0
C++ functional terminal UI.
Loading...
Searching...
No Matches
spinner.cpp
Go to the documentation of this file.
1#include <stddef.h> // for size_t
2#include <memory> // for allocator, allocator_traits<>::value_type
3#include <string> // for 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
11static const std::vector<std::vector<std::vector<std::string>>> elements = {
12 {
13 {"Replaced by the gauge"},
14 },
15 {
16 {". "},
17 {".. "},
18 {"..."},
19 },
20 {
21 {"|"},
22 {"/"},
23 {"-"},
24 {"\\"},
25 },
26 {
27 {"+"},
28 {"x"},
29 },
30 {
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 " /\\O ",
229 " /\\/",
230 " /\\ ",
231 " / \\ ",
232 "LOL LOL",
233 },
234 {
235 " _O ",
236 " //|_ ",
237 " | ",
238 " /| ",
239 " LLOL ",
240 },
241 {
242 " O ",
243 " /_ ",
244 " |\\ ",
245 " / | ",
246 " LOLLOL ",
247 }}};
248
249/// @brief Useful to represent the effect of time and/or events. This display an
250/// ASCII art "video".
251/// @param charset_index The type of "video".
252/// @param image_index The "frame" of the video. You need to increase this for
253/// every "step".
254/// @ingroup dom
255Element spinner(int charset_index, size_t image_index) {
256 if (charset_index == 0) {
257 image_index %= 40;
258 if (image_index > 20)
259 image_index = 40 - image_index;
260 return gauge(image_index * 0.05);
261 }
262 charset_index %= elements.size();
263 image_index %= elements[charset_index].size();
264 std::vector<Element> lines;
265 for (const auto& it : elements[charset_index][image_index])
266 lines.push_back(text(it));
267 return vbox(std::move(lines));
268}
269
270} // namespace ftxui
271
272// Copyright 2020 Arthur Sonzogni. All rights reserved.
273// Use of this source code is governed by the MIT license that can be found in
274// the LICENSE file.
std::shared_ptr< Node > Element
Definition elements.hpp:15
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:255
Element text(std::wstring text)
Display a piece of unicode text.
Definition text.cpp:106
Element gauge(float ratio)
Draw a high definition progress bar.
Definition gauge.cpp:75
Element vbox(Elements)
A container displaying elements vertically one by one.
Definition vbox.cpp:77