From 55022392494b870451e5b02bd23595d45120fa5c Mon Sep 17 00:00:00 2001 From: Pranav Date: Wed, 4 Dec 2019 19:21:34 -0600 Subject: [PATCH] Updated README.md with examples for ProgressBar usage --- README.md | 120 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 120 insertions(+) diff --git a/README.md b/README.md index 67a6204..da7c4ea 100644 --- a/README.md +++ b/README.md @@ -5,3 +5,123 @@

+ +## Progress bar + +To introduce a progress bar in your application, include `indica/progress_bar.hpp` and create a `ProgressBar` object. + +```cpp +#include + +int main() { + indica::ProgressBar bar; + return 0; +} +``` + +Here's the general structure of a progress bar: + +``` + + ^^^^^^^^^^^^^^^^^^ Bar Width ^^^^^^^^^^^^^^^^^^ ^^^^^ Show/Hide ^^^^^ +``` + +Each of these elements can be configured using the ProgressBar API: + +```cpp +#include + +int main() { + indica::ProgressBar bar; + + // Configure the bar + bar.set_bar_width(50); + bar.start_bar_with("["); + bar.fill_bar_progress_with("="); + bar.lead_bar_progress_with(">"); + bar.fill_bar_remainder_with(" "); + bar.end_bar_with("]"); + bar.set_postfix_text("Getting started"); + bar.set_foreground_color(indica::Color::GREEN); + + return 0; +} +``` + +Now that the bar is configured, let's update the state of the bar. The amount of progress in ProgressBar is maintained as a float in range `[0, 100]`. When progress reaches 100, the progression is complete. + +From application-level code, there are two ways in which you can update this progress: + +### Update progress using `tick()` + +You can update the progress bar using `bar.tick()` which increments progress by exactly `1%`. + +```cpp +#include +#include +#include + +int main() { + indica::ProgressBar bar; + + // Configure the bar + bar.set_bar_width(50); + bar.start_bar_with("["); + bar.fill_bar_progress_with("="); + bar.lead_bar_progress_with(">"); + bar.fill_bar_remainder_with(" "); + bar.end_bar_with("]"); + bar.set_postfix_text("Getting started"); + bar.set_foreground_color(indica::Color::GREEN); + + // Update bar state + while (true) { + bar.tick(); + if (bar.is_completed()) + break; + std::this_thread::sleep_for(std::chrono::milliseconds(100)); + } + + return 0; +} +``` + +The above code will print a progress bar that goes from 0 to 100% at the rate of 1% every 100 ms. + +### Updating progress using `bar.set_progress(value)` + +If you'd rather control progress of the bar in discrete steps, consider using `bar.set_progress(value)`. Example: + +```cpp +#include +#include +#include + +int main() { + indica::ProgressBar bar; + + // Configure the bar + bar.set_bar_width(50); + bar.start_bar_with("["); + bar.fill_bar_progress_with("="); + bar.lead_bar_progress_with(">"); + bar.fill_bar_remainder_with(" "); + bar.end_bar_with("]"); + bar.set_postfix_text("Getting started"); + bar.set_foreground_color(indica::Color::GREEN); + + // Update bar state + size_t i = 0; + while (i < 101) { + bar.set_progress(i); + std::this_thread::sleep_for(std::chrono::milliseconds(100)); + i += 10; + } + + return 0; +} +``` + +The above code will print a progress bar that goes from 0 to 100% at the rate of 10% every 100 ms. + +For more examples, checkout the examples in the `samples/` directory.