diff --git a/include/progress/bar.hpp b/include/progress/bar.hpp index e476491..7ac8582 100644 --- a/include/progress/bar.hpp +++ b/include/progress/bar.hpp @@ -6,12 +6,22 @@ #include class ProgressBar { - std::string _name{"Running"}; - size_t _bar_width{80}; - std::string _start{"|"}; - std::string _end{"|"}; - std::mutex _mutex; + std::string _name{""}; float _progress{0.0}; + size_t _bar_width{80}; + std::string _start{"["}; + std::string _step{"■"}; + std::string _head{"■"}; + std::string _end{"]"}; + std::mutex _mutex; + + void hide_cursor() { + std::cout << "\e[?25l"; + } + + void show_cursor() { + std::cout << "\e[?25h"; + } public: @@ -20,14 +30,17 @@ public: void increment(float value) { std::unique_lock lock{_mutex}; _progress = value / 100.0; - std::cout << _name << " ["; + hide_cursor(); + std::cout << _start; float pos = _progress * static_cast(_bar_width); for (size_t i = 0; i < _bar_width; ++i) { - if (i < pos) std::cout << '#'; - else if (i == pos) std::cout << ">"; - else std::cout << " "; + if (i < pos) std::cout << _step; + else if (i == pos) std::cout << _head; + else std::cout << "-"; } - std::cout << "] " << static_cast(value) << "%\r"; + std::cout << _end << " " << static_cast(value) << "%"; + std::cout << " " << _name << "\r"; std::cout.flush(); + show_cursor(); } }; diff --git a/include/progress/spinner.hpp b/include/progress/spinner.hpp index dad5f2f..10440c6 100644 --- a/include/progress/spinner.hpp +++ b/include/progress/spinner.hpp @@ -9,12 +9,18 @@ class ProgressSpinner { std::string _name{"Running"}; size_t _bar_width{80}; - std::string _start{"|"}; - std::string _end{"|"}; std::mutex _mutex; float _progress{0.0}; size_t _index{0}; - std::vector _states{"⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏"}; //{"-", "\\", "|", "/"}; + std::vector _states{"⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏"}; + + void hide_cursor() { + std::cout << "\e[?25l"; + } + + void show_cursor() { + std::cout << "\e[?25h"; + } public: @@ -22,11 +28,14 @@ public: void increment(float value) { std::unique_lock lock{_mutex}; - std::cout << _name << " ["; _progress = value / 100.0; float pos = _progress * static_cast(_bar_width); - std::cout << _states[_index % _states.size()] << "] " << static_cast(value) << "%\r"; + hide_cursor(); + std::cout << _states[_index % _states.size()]; + std::cout << " " << static_cast(value) << "%"; + std::cout << " " << _name << "\r"; std::cout.flush(); + show_cursor(); _index += 1; } };