1 #include <chrono>
2 #include <indicators/cursor_control.hpp>
3 #include <indicators/indeterminate_progress_bar.hpp>
4 #include <indicators/progress_bar.hpp>
5 #include <thread>
6 
main()7 int main() {
8 
9   indicators::show_console_cursor(false);
10 
11   {
12     // Plain old ASCII
13     indicators::ProgressBar bar{indicators::option::BarWidth{50},
14                                 indicators::option::Start{"["},
15                                 indicators::option::Fill{"="},
16                                 indicators::option::Lead{">"},
17                                 indicators::option::Remainder{" "},
18                                 indicators::option::End{" ]"},
19                                 indicators::option::PostfixText{"Plain-old ASCII"},
20                                 indicators::option::ForegroundColor{indicators::Color::green},
21                                 indicators::option::FontStyles{std::vector<indicators::FontStyle>{
22                                     indicators::FontStyle::bold}}};
23 
24     // Update bar state
25     while (true) {
26       bar.tick();
27       if (bar.is_completed())
28         break;
29       std::this_thread::sleep_for(std::chrono::milliseconds(10));
30     }
31   }
32 
33   {
34     // Unicode
35     indicators::ProgressBar bar{indicators::option::BarWidth{50},
36                                 indicators::option::Start{"["},
37                                 indicators::option::Fill{"驚くばかり"},
38                                 indicators::option::Lead{">"},
39                                 indicators::option::Remainder{" "},
40                                 indicators::option::End{" ]"},
41                                 indicators::option::PostfixText{"Japanese"},
42                                 indicators::option::ForegroundColor{indicators::Color::yellow},
43                                 indicators::option::FontStyles{std::vector<indicators::FontStyle>{
44                                     indicators::FontStyle::bold}}};
45 
46     // Update bar state
47     while (true) {
48       bar.tick();
49       if (bar.is_completed())
50         break;
51       std::this_thread::sleep_for(std::chrono::milliseconds(10));
52     }
53   }
54 
55   {
56     // Russian
57     indicators::ProgressBar bar{indicators::option::BarWidth{50},
58                                 indicators::option::Start{"["},
59                                 indicators::option::Fill{"Потрясающие"},
60                                 indicators::option::Remainder{" "},
61                                 indicators::option::End{" ]"},
62                                 indicators::option::PostfixText{"Russian"},
63                                 indicators::option::ForegroundColor{indicators::Color::red},
64                                 indicators::option::FontStyles{std::vector<indicators::FontStyle>{
65                                     indicators::FontStyle::bold}}};
66 
67     // Update bar state
68     while (true) {
69       bar.tick();
70       if (bar.is_completed())
71         break;
72       std::this_thread::sleep_for(std::chrono::milliseconds(10));
73     }
74   }
75 
76   {
77     // Greek
78     indicators::ProgressBar bar{indicators::option::BarWidth{50},
79                                 indicators::option::Start{"["},
80                                 indicators::option::Fill{"Φοβερός"},
81                                 indicators::option::Remainder{" "},
82                                 indicators::option::End{" ]"},
83                                 indicators::option::PostfixText{"Greek"},
84                                 indicators::option::ForegroundColor{indicators::Color::cyan},
85                                 indicators::option::FontStyles{std::vector<indicators::FontStyle>{
86                                     indicators::FontStyle::bold}}};
87 
88     // Update bar state
89     while (true) {
90       bar.tick();
91       if (bar.is_completed())
92         break;
93       std::this_thread::sleep_for(std::chrono::milliseconds(10));
94     }
95   }
96 
97   {
98     // Chinese
99     indicators::ProgressBar bar{indicators::option::BarWidth{50},
100                                 indicators::option::Start{"["},
101                                 indicators::option::Fill{"太棒了"},
102                                 indicators::option::Remainder{" "},
103                                 indicators::option::End{" ]"},
104                                 indicators::option::PostfixText{"Chinese"},
105                                 indicators::option::ForegroundColor{indicators::Color::green},
106                                 indicators::option::FontStyles{std::vector<indicators::FontStyle>{
107                                     indicators::FontStyle::bold}}};
108 
109     // Update bar state
110     while (true) {
111       bar.tick();
112       if (bar.is_completed())
113         break;
114       std::this_thread::sleep_for(std::chrono::milliseconds(10));
115     }
116   }
117 
118   {
119     // Emojis
120     indicators::ProgressBar bar{indicators::option::BarWidth{50},
121                                 indicators::option::Start{"["},
122                                 indicators::option::Fill{"��"},
123                                 indicators::option::Lead{"��"},
124                                 indicators::option::Remainder{" "},
125                                 indicators::option::End{" ]"},
126                                 indicators::option::PostfixText{"Emojis"},
127                                 indicators::option::ForegroundColor{indicators::Color::white},
128                                 indicators::option::FontStyles{std::vector<indicators::FontStyle>{
129                                     indicators::FontStyle::bold}}};
130 
131     // Update bar state
132     while (true) {
133       bar.tick();
134       if (bar.is_completed())
135         break;
136       std::this_thread::sleep_for(std::chrono::milliseconds(10));
137     }
138   }
139 
140   {
141     // Indeterminate progress bar
142     indicators::IndeterminateProgressBar bar{
143         indicators::option::BarWidth{50},
144         indicators::option::Start{"["},
145         indicators::option::Fill{"✯"},
146         indicators::option::Lead{"載入中"},
147         indicators::option::End{" ]"},
148         indicators::option::PostfixText{"Loading Progress Bar"},
149         indicators::option::ForegroundColor{indicators::Color::yellow},
150         indicators::option::FontStyles{
151             std::vector<indicators::FontStyle>{indicators::FontStyle::bold}}};
152 
153     auto job = [&bar]() {
154       std::this_thread::sleep_for(std::chrono::milliseconds(10000));
155       bar.mark_as_completed();
156     };
157     std::thread job_completion_thread(job);
158 
159     // Update bar state
160     while (!bar.is_completed()) {
161       bar.tick();
162       std::this_thread::sleep_for(std::chrono::milliseconds(100));
163     }
164 
165     job_completion_thread.join();
166   }
167 
168   indicators::show_console_cursor(true);
169 
170   return 0;
171 }
172