mirror of
https://github.com/p-ranav/indicators.git
synced 2025-12-15 03:38:53 +08:00
API changes for readability/clarity
This commit is contained in:
@@ -10,46 +10,51 @@ class ProgressBar {
|
|||||||
public:
|
public:
|
||||||
enum class Color { GREY, RED, GREEN, YELLOW, BLUE, MAGENTA, CYAN, WHITE };
|
enum class Color { GREY, RED, GREEN, YELLOW, BLUE, MAGENTA, CYAN, WHITE };
|
||||||
|
|
||||||
void color(Color color) {
|
void set_foreground_color(Color color) {
|
||||||
std::unique_lock<std::mutex> lock{_mutex};
|
std::unique_lock<std::mutex> lock{_mutex};
|
||||||
_color = color;
|
_foreground_color = color;
|
||||||
}
|
}
|
||||||
|
|
||||||
void bar_width(size_t bar_width) {
|
void set_bar_width(size_t bar_width) {
|
||||||
std::unique_lock<std::mutex> lock{_mutex};
|
std::unique_lock<std::mutex> lock{_mutex};
|
||||||
_bar_width = bar_width;
|
_bar_width = bar_width;
|
||||||
}
|
}
|
||||||
|
|
||||||
void start_with(const std::string &start) {
|
void start_bar_with(const std::string &start) {
|
||||||
std::unique_lock<std::mutex> lock{_mutex};
|
std::unique_lock<std::mutex> lock{_mutex};
|
||||||
_start = start;
|
_start = start;
|
||||||
}
|
}
|
||||||
|
|
||||||
void fill_progress_with(const std::string &fill) {
|
void fill_bar_progress_with(const std::string &fill) {
|
||||||
std::unique_lock<std::mutex> lock{_mutex};
|
std::unique_lock<std::mutex> lock{_mutex};
|
||||||
_fill = fill;
|
_fill = fill;
|
||||||
}
|
}
|
||||||
|
|
||||||
void lead_progress_with(const std::string &lead) {
|
void lead_bar_progress_with(const std::string &lead) {
|
||||||
std::unique_lock<std::mutex> lock{_mutex};
|
std::unique_lock<std::mutex> lock{_mutex};
|
||||||
_lead = lead;
|
_lead = lead;
|
||||||
}
|
}
|
||||||
|
|
||||||
void fill_remainder_with(const std::string &remainder) {
|
void fill_bar_remainder_with(const std::string &remainder) {
|
||||||
std::unique_lock<std::mutex> lock{_mutex};
|
std::unique_lock<std::mutex> lock{_mutex};
|
||||||
_remainder = remainder;
|
_remainder = remainder;
|
||||||
}
|
}
|
||||||
|
|
||||||
void end_with(const std::string &end) {
|
void end_bar_with(const std::string &end) {
|
||||||
std::unique_lock<std::mutex> lock{_mutex};
|
std::unique_lock<std::mutex> lock{_mutex};
|
||||||
_end = end;
|
_end = end;
|
||||||
}
|
}
|
||||||
|
|
||||||
void set_status_text(const std::string& text) {
|
void set_prefix_text(const std::string& text) {
|
||||||
std::unique_lock<std::mutex> lock{_mutex};
|
std::unique_lock<std::mutex> lock{_mutex};
|
||||||
_status_text = text;
|
_prefix_text = text;
|
||||||
if (_status_text.length() > _max_status_text_length)
|
}
|
||||||
_max_status_text_length = _status_text.length();
|
|
||||||
|
void set_postfix_text(const std::string& text) {
|
||||||
|
std::unique_lock<std::mutex> lock{_mutex};
|
||||||
|
_postfix_text = text;
|
||||||
|
if (_postfix_text.length() > _max_postfix_text_length)
|
||||||
|
_max_postfix_text_length = _postfix_text.length();
|
||||||
}
|
}
|
||||||
|
|
||||||
void show_percentage(bool flag) { _show_percentage = flag; }
|
void show_percentage(bool flag) { _show_percentage = flag; }
|
||||||
@@ -80,23 +85,23 @@ public:
|
|||||||
private:
|
private:
|
||||||
float _progress{0.0};
|
float _progress{0.0};
|
||||||
size_t _bar_width{100};
|
size_t _bar_width{100};
|
||||||
std::string _text_before{""};
|
std::string _prefix_text{""};
|
||||||
std::string _start{"["};
|
std::string _start{"["};
|
||||||
std::string _fill{"="};
|
std::string _fill{"="};
|
||||||
std::string _lead{">"};
|
std::string _lead{">"};
|
||||||
std::string _remainder{" "};
|
std::string _remainder{" "};
|
||||||
std::string _end{"]"};
|
std::string _end{"]"};
|
||||||
std::string _status_text{""};
|
std::string _postfix_text{""};
|
||||||
std::atomic<size_t> _max_status_text_length{0};
|
std::atomic<size_t> _max_postfix_text_length{0};
|
||||||
std::atomic<bool> _completed{false};
|
std::atomic<bool> _completed{false};
|
||||||
std::atomic<bool> _show_percentage{true};
|
std::atomic<bool> _show_percentage{true};
|
||||||
std::mutex _mutex;
|
std::mutex _mutex;
|
||||||
Color _color;
|
Color _foreground_color;
|
||||||
|
|
||||||
void _print_progress() {
|
void _print_progress() {
|
||||||
std::unique_lock<std::mutex> lock{_mutex};
|
std::unique_lock<std::mutex> lock{_mutex};
|
||||||
std::cout << termcolor::bold;
|
std::cout << termcolor::bold;
|
||||||
switch(_color) {
|
switch(_foreground_color) {
|
||||||
case Color::GREY:
|
case Color::GREY:
|
||||||
std::cout << termcolor::grey;
|
std::cout << termcolor::grey;
|
||||||
break;
|
break;
|
||||||
@@ -122,6 +127,7 @@ private:
|
|||||||
std::cout << termcolor::white;
|
std::cout << termcolor::white;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
std::cout << _prefix_text;
|
||||||
std::cout << _start;
|
std::cout << _start;
|
||||||
float pos = _progress * static_cast<float>(_bar_width) / 100.0;
|
float pos = _progress * static_cast<float>(_bar_width) / 100.0;
|
||||||
for (size_t i = 0; i < _bar_width; ++i) {
|
for (size_t i = 0; i < _bar_width; ++i) {
|
||||||
@@ -136,8 +142,8 @@ private:
|
|||||||
if (_show_percentage) {
|
if (_show_percentage) {
|
||||||
std::cout << " " << std::min(static_cast<size_t>(_progress), size_t(100)) << "%";
|
std::cout << " " << std::min(static_cast<size_t>(_progress), size_t(100)) << "%";
|
||||||
}
|
}
|
||||||
if (_max_status_text_length == 0) _max_status_text_length = 10;
|
if (_max_postfix_text_length == 0) _max_postfix_text_length = 10;
|
||||||
std::cout << " " << _status_text << std::string(_max_status_text_length, ' ') << "\r";
|
std::cout << " " << _postfix_text << std::string(_max_postfix_text_length, ' ') << "\r";
|
||||||
std::cout.flush();
|
std::cout.flush();
|
||||||
if (_progress > 100.0) {
|
if (_progress > 100.0) {
|
||||||
_completed = true;
|
_completed = true;
|
||||||
|
|||||||
@@ -50,13 +50,13 @@ int main() {
|
|||||||
// PROGRESS BAR 1
|
// PROGRESS BAR 1
|
||||||
//
|
//
|
||||||
ProgressBar p1;
|
ProgressBar p1;
|
||||||
p1.bar_width(50);
|
p1.set_bar_width(50);
|
||||||
p1.start_with("[");
|
p1.start_bar_with("[");
|
||||||
p1.fill_progress_with("■");
|
p1.fill_bar_progress_with("■");
|
||||||
p1.lead_progress_with("■");
|
p1.lead_bar_progress_with("■");
|
||||||
p1.fill_remainder_with(" ");
|
p1.fill_bar_remainder_with(" ");
|
||||||
p1.end_with("]");
|
p1.end_bar_with("]");
|
||||||
p1.color(ProgressBar::Color::YELLOW);
|
p1.set_foreground_color(ProgressBar::Color::YELLOW);
|
||||||
|
|
||||||
std::atomic<size_t> index1{0};
|
std::atomic<size_t> index1{0};
|
||||||
std::vector<std::string> status_text1 = {"Rocket.exe is not responding",
|
std::vector<std::string> status_text1 = {"Rocket.exe is not responding",
|
||||||
@@ -73,7 +73,7 @@ int main() {
|
|||||||
while (true) {
|
while (true) {
|
||||||
if (p1.completed())
|
if (p1.completed())
|
||||||
break;
|
break;
|
||||||
p1.set_status_text(status_text1[index1 % status_text1.size()]);
|
p1.set_postfix_text(status_text1[index1 % status_text1.size()]);
|
||||||
p1.set_progress(index1 * 10);
|
p1.set_progress(index1 * 10);
|
||||||
index1 += 1;
|
index1 += 1;
|
||||||
std::this_thread::sleep_for(std::chrono::milliseconds(600));
|
std::this_thread::sleep_for(std::chrono::milliseconds(600));
|
||||||
@@ -86,20 +86,21 @@ int main() {
|
|||||||
// PROGRESS BAR 3
|
// PROGRESS BAR 3
|
||||||
//
|
//
|
||||||
ProgressBar p3;
|
ProgressBar p3;
|
||||||
p3.bar_width(40);
|
p3.set_bar_width(40);
|
||||||
p3.start_with("Reading package list... ");
|
p3.set_prefix_text("Reading package list... ");
|
||||||
p3.fill_progress_with("");
|
p3.start_bar_with("");
|
||||||
p3.lead_progress_with("");
|
p3.fill_bar_progress_with("");
|
||||||
p3.fill_remainder_with("");
|
p3.lead_bar_progress_with("");
|
||||||
p3.end_with("");
|
p3.fill_bar_remainder_with("");
|
||||||
p3.color(ProgressBar::Color::WHITE);
|
p3.end_bar_with("");
|
||||||
|
p3.set_foreground_color(ProgressBar::Color::WHITE);
|
||||||
p3.show_percentage(false);
|
p3.show_percentage(false);
|
||||||
auto job3 = [&p3]() {
|
auto job3 = [&p3]() {
|
||||||
while (true) {
|
while (true) {
|
||||||
p3.start_with("Reading package list... " + std::to_string(p3.current()) +
|
p3.set_prefix_text("Reading package list... " + std::to_string(p3.current()) +
|
||||||
"% ");
|
"% ");
|
||||||
if (p3.current() + 2 >= 100)
|
if (p3.current() + 2 >= 100)
|
||||||
p3.start_with("Reading package list... Done");
|
p3.set_prefix_text("Reading package list... Done");
|
||||||
p3.tick();
|
p3.tick();
|
||||||
if (p3.completed()) {
|
if (p3.completed()) {
|
||||||
break;
|
break;
|
||||||
@@ -114,25 +115,25 @@ int main() {
|
|||||||
// PROGRESS BAR 2
|
// PROGRESS BAR 2
|
||||||
//
|
//
|
||||||
ProgressBar p2;
|
ProgressBar p2;
|
||||||
p2.bar_width(50);
|
p2.set_bar_width(50);
|
||||||
p2.start_with("[");
|
p2.start_bar_with("[");
|
||||||
p2.fill_progress_with("=");
|
p2.fill_bar_progress_with("=");
|
||||||
p2.lead_progress_with(">");
|
p2.lead_bar_progress_with(">");
|
||||||
p2.fill_remainder_with(" ");
|
p2.fill_bar_remainder_with(" ");
|
||||||
p2.end_with("]");
|
p2.end_bar_with("]");
|
||||||
p2.set_status_text("Getting started");
|
p2.set_postfix_text("Getting started");
|
||||||
p2.color(ProgressBar::Color::GREEN);
|
p2.set_foreground_color(ProgressBar::Color::GREEN);
|
||||||
auto job2 = [&p2]() {
|
auto job2 = [&p2]() {
|
||||||
while (true) {
|
while (true) {
|
||||||
auto ticks = p2.current();
|
auto ticks = p2.current();
|
||||||
if (ticks > 20 && ticks < 50)
|
if (ticks > 20 && ticks < 50)
|
||||||
p2.set_status_text("Delaying the inevitable");
|
p2.set_postfix_text("Delaying the inevitable");
|
||||||
else if (ticks > 50 && ticks < 80)
|
else if (ticks > 50 && ticks < 80)
|
||||||
p2.set_status_text("Crying quietly");
|
p2.set_postfix_text("Crying quietly");
|
||||||
else if (ticks > 80 && ticks < 98)
|
else if (ticks > 80 && ticks < 98)
|
||||||
p2.set_status_text("Almost there");
|
p2.set_postfix_text("Almost there");
|
||||||
else if (ticks >= 98)
|
else if (ticks >= 98)
|
||||||
p2.set_status_text("Done");
|
p2.set_postfix_text("Done");
|
||||||
p2.tick();
|
p2.tick();
|
||||||
if (p2.completed())
|
if (p2.completed())
|
||||||
break;
|
break;
|
||||||
@@ -146,14 +147,14 @@ int main() {
|
|||||||
// PROGRESS BAR 5
|
// PROGRESS BAR 5
|
||||||
//
|
//
|
||||||
ProgressBar p5;
|
ProgressBar p5;
|
||||||
p5.bar_width(100);
|
p5.set_bar_width(100);
|
||||||
p5.start_with("🌏");
|
p5.start_bar_with("🌏");
|
||||||
p5.fill_progress_with("-");
|
p5.fill_bar_progress_with("-");
|
||||||
p5.lead_progress_with("🛸");
|
p5.lead_bar_progress_with("🛸");
|
||||||
p5.fill_remainder_with(" ");
|
p5.fill_bar_remainder_with(" ");
|
||||||
p5.end_with("🌑");
|
p5.end_bar_with("🌑");
|
||||||
p5.show_percentage(true);
|
p5.show_percentage(true);
|
||||||
p5.color(ProgressBar::Color::WHITE);
|
p5.set_foreground_color(ProgressBar::Color::WHITE);
|
||||||
auto job5 = [&p5]() {
|
auto job5 = [&p5]() {
|
||||||
while (true) {
|
while (true) {
|
||||||
p5.tick();
|
p5.tick();
|
||||||
@@ -172,21 +173,21 @@ int main() {
|
|||||||
std::vector<std::string> lead_spinner{"⠋", "⠙", "⠹", "⠸", "⠼",
|
std::vector<std::string> lead_spinner{"⠋", "⠙", "⠹", "⠸", "⠼",
|
||||||
"⠴", "⠦", "⠧", "⠇", "⠏"};
|
"⠴", "⠦", "⠧", "⠇", "⠏"};
|
||||||
ProgressBar p4;
|
ProgressBar p4;
|
||||||
p4.bar_width(50);
|
p4.set_bar_width(50);
|
||||||
p4.start_with("[");
|
p4.start_bar_with("[");
|
||||||
p4.fill_progress_with("⠸");
|
p4.fill_bar_progress_with("⠸");
|
||||||
p4.lead_progress_with("");
|
p4.lead_bar_progress_with("");
|
||||||
p4.fill_remainder_with(" ");
|
p4.fill_bar_remainder_with(" ");
|
||||||
p4.end_with(" ]");
|
p4.end_bar_with(" ]");
|
||||||
p4.color(ProgressBar::Color::CYAN);
|
p4.set_foreground_color(ProgressBar::Color::CYAN);
|
||||||
p4.set_status_text("Restoring system state");
|
p4.set_postfix_text("Restoring system state");
|
||||||
std::atomic<size_t> index4{0};
|
std::atomic<size_t> index4{0};
|
||||||
auto job4 = [&p4, &index4, &lead_spinner]() {
|
auto job4 = [&p4, &index4, &lead_spinner]() {
|
||||||
while (true) {
|
while (true) {
|
||||||
p4.lead_progress_with(lead_spinner[index4 % lead_spinner.size()]);
|
p4.lead_bar_progress_with(lead_spinner[index4 % lead_spinner.size()]);
|
||||||
index4 += 1;
|
index4 += 1;
|
||||||
if (p4.current() + 2 >= 100)
|
if (p4.current() + 2 >= 100)
|
||||||
p4.set_status_text("State restored to Restore_Point_1241531");
|
p4.set_postfix_text("State restored to Restore_Point_1241531");
|
||||||
p4.tick();
|
p4.tick();
|
||||||
if (p4.completed()) {
|
if (p4.completed()) {
|
||||||
break;
|
break;
|
||||||
|
|||||||
Reference in New Issue
Block a user