From 07b9eede8a96ec6a94d37bb1365a15dc2c8d0f01 Mon Sep 17 00:00:00 2001 From: Pranav Srinivas Kumar Date: Mon, 6 Apr 2020 11:05:44 -0700 Subject: [PATCH 1/7] Minor updates to support FontStyles --- include/indicators/details/stream_helper.hpp | 32 +++++++++++++++++++ include/indicators/font_style.hpp | 33 ++++++++++++++++++++ include/indicators/progress_bar.hpp | 6 +++- include/indicators/setting.hpp | 5 +++ 4 files changed, 75 insertions(+), 1 deletion(-) create mode 100644 include/indicators/font_style.hpp diff --git a/include/indicators/details/stream_helper.hpp b/include/indicators/details/stream_helper.hpp index eececed..fbc4e88 100644 --- a/include/indicators/details/stream_helper.hpp +++ b/include/indicators/details/stream_helper.hpp @@ -1,6 +1,7 @@ #pragma once #include +#include #include #include @@ -47,6 +48,37 @@ inline void set_stream_color(std::ostream &os, Color color) { } } +inline void set_font_style(std::ostream &os, FontStyle style) { + switch (style) { + case FontStyle::bold: + os << termcolor::bold; + break; + case FontStyle::dark: + os << termcolor::dark; + break; + case FontStyle::italic: + os << termcolor::italic; + break; + case FontStyle::underline: + os << termcolor::underline; + break; + case FontStyle::blink: + os << termcolor::blink; + break; + case FontStyle::reverse: + os << termcolor::reverse; + break; + case FontStyle::concealed: + os << termcolor::concealed; + break; + case FontStyle::crossed: + os << termcolor::crossed; + break; + default: + break; + } +} + inline std::ostream &write_duration(std::ostream &os, std::chrono::nanoseconds ns) { using namespace std; using namespace std::chrono; diff --git a/include/indicators/font_style.hpp b/include/indicators/font_style.hpp new file mode 100644 index 0000000..a82183c --- /dev/null +++ b/include/indicators/font_style.hpp @@ -0,0 +1,33 @@ +/* +Activity Indicators for Modern C++ +https://github.com/p-ranav/indica + +Licensed under the MIT License . +SPDX-License-Identifier: MIT +Copyright (c) 2019 Pranav Srinivas Kumar . + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +*/ +#pragma once + +namespace indicators { + +enum class FontStyle { bold, dark, italic, underline, blink, reverse, concealed, crossed }; + +} diff --git a/include/indicators/progress_bar.hpp b/include/indicators/progress_bar.hpp index 4959755..0de4b7d 100644 --- a/include/indicators/progress_bar.hpp +++ b/include/indicators/progress_bar.hpp @@ -50,7 +50,7 @@ class ProgressBar { option::End, option::Fill, option::Lead, option::Remainder, option::MaxPostfixTextLen, option::Completed, option::ShowPercentage, option::ShowElapsedTime, option::ShowRemainingTime, option::SavedStartTime, - option::ForegroundColor>; + option::ForegroundColor, option::FontStyles>; public: template ()); + + for (auto &style : get_value()) + details::set_font_style(std::cout, style); + std::cout << get_value(); std::cout << get_value(); diff --git a/include/indicators/setting.hpp b/include/indicators/setting.hpp index 09e4e10..fb5c341 100644 --- a/include/indicators/setting.hpp +++ b/include/indicators/setting.hpp @@ -28,9 +28,11 @@ SOFTWARE. #include #include +#include #include #include #include +#include namespace indicators { @@ -86,6 +88,7 @@ enum class ProgressBarOption { foreground_color, spinner_show, spinner_states, + font_styles, hide_bar_when_complete }; @@ -199,5 +202,7 @@ using SpinnerStates = details::Setting, details::ProgressBarOption::spinner_states>; using HideBarWhenComplete = details::BooleanSetting; +using FontStyles = + details::Setting, details::ProgressBarOption::font_styles>; } // namespace option } // namespace indicators \ No newline at end of file From 833e1cd6dbfa4b192204706568ed6bee983fc0cc Mon Sep 17 00:00:00 2001 From: Pranav Srinivas Kumar Date: Mon, 6 Apr 2020 11:10:41 -0700 Subject: [PATCH 2/7] Initial commit --- CMakeLists.txt | 4 +--- include/indicators/block_progress_bar.hpp | 6 +++--- include/indicators/color.hpp | 2 +- include/indicators/progress_bar.hpp | 6 +++--- include/indicators/progress_spinner.hpp | 6 +++--- include/indicators/setting.hpp | 2 +- samples/progress_bar_tick.cpp | 1 + 7 files changed, 13 insertions(+), 14 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 3965793..ae78db2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -4,9 +4,7 @@ if(DEFINED PROJECT_NAME) set(INDICATORS_SUBPROJECT ON) endif() -project(indicators VERSION 1.8.0 LANGUAGES CXX - HOMEPAGE_URL "https://github.com/p-ranav/indicators" - DESCRIPTION "Activity Indicators for Modern C++") +project(indicators VERSION 1.8.0 LANGUAGES CXX) if(EXISTS "${CMAKE_BINARY_DIR}/conanbuildinfo.cmake") include("${CMAKE_BINARY_DIR}/conanbuildinfo.cmake") diff --git a/include/indicators/block_progress_bar.hpp b/include/indicators/block_progress_bar.hpp index 0ce42fa..451eac4 100644 --- a/include/indicators/block_progress_bar.hpp +++ b/include/indicators/block_progress_bar.hpp @@ -55,7 +55,7 @@ public: void *>::type = nullptr> explicit BlockProgressBar(Args &&... args) : settings_(details::get( - option::ForegroundColor{Color::white}, std::forward(args)...), + option::ForegroundColor{Color::unspecified}, std::forward(args)...), details::get(option::BarWidth{100}, std::forward(args)...), details::get(option::Start{"["}, @@ -188,8 +188,8 @@ private: auto now = std::chrono::high_resolution_clock::now(); auto elapsed = std::chrono::duration_cast(now - start_time_point_); - std::cout << termcolor::bold; - details::set_stream_color(std::cout, get_value()); + if (get_value() != Color::unspecified) + details::set_stream_color(std::cout, get_value()); std::cout << get_value(); std::cout << get_value(); diff --git a/include/indicators/color.hpp b/include/indicators/color.hpp index a772dcd..a7d8f97 100644 --- a/include/indicators/color.hpp +++ b/include/indicators/color.hpp @@ -28,5 +28,5 @@ SOFTWARE. #include namespace indicators { -enum class Color { grey, red, green, yellow, blue, magenta, cyan, white }; +enum class Color { grey, red, green, yellow, blue, magenta, cyan, white, unspecified }; } diff --git a/include/indicators/progress_bar.hpp b/include/indicators/progress_bar.hpp index 0de4b7d..4e26175 100644 --- a/include/indicators/progress_bar.hpp +++ b/include/indicators/progress_bar.hpp @@ -87,7 +87,7 @@ public: details::get( option::SavedStartTime{false}, std::forward(args)...), details::get( - option::ForegroundColor{Color::white}, std::forward(args)...)) {} + option::ForegroundColor{Color::unspecified}, std::forward(args)...)) {} template void set_option(details::Setting &&setting) { @@ -201,8 +201,8 @@ private: if (!get_value()) elapsed_ = std::chrono::duration_cast(now - start_time_point_); - std::cout << termcolor::bold; - details::set_stream_color(std::cout, get_value()); + if (get_value() != Color::unspecified) + details::set_stream_color(std::cout, get_value()); for (auto &style : get_value()) details::set_font_style(std::cout, style); diff --git a/include/indicators/progress_spinner.hpp b/include/indicators/progress_spinner.hpp index a69c316..c931449 100644 --- a/include/indicators/progress_spinner.hpp +++ b/include/indicators/progress_spinner.hpp @@ -58,7 +58,7 @@ public: void *>::type = nullptr> explicit ProgressSpinner(Args &&... args) : settings_(details::get( - option::ForegroundColor{Color::white}, std::forward(args)...), + option::ForegroundColor{Color::unspecified}, std::forward(args)...), details::get( option::PrefixText{}, std::forward(args)...), details::get( @@ -182,8 +182,8 @@ private: auto now = std::chrono::high_resolution_clock::now(); auto elapsed = std::chrono::duration_cast(now - start_time_point_); - std::cout << termcolor::bold; - details::set_stream_color(std::cout, get_value()); + if (get_value() != Color::unspecified) + details::set_stream_color(std::cout, get_value()); std::cout << get_value(); if (get_value()) std::cout << get_value() diff --git a/include/indicators/setting.hpp b/include/indicators/setting.hpp index fb5c341..e4a09d5 100644 --- a/include/indicators/setting.hpp +++ b/include/indicators/setting.hpp @@ -205,4 +205,4 @@ using HideBarWhenComplete = using FontStyles = details::Setting, details::ProgressBarOption::font_styles>; } // namespace option -} // namespace indicators \ No newline at end of file +} // namespace indicators diff --git a/samples/progress_bar_tick.cpp b/samples/progress_bar_tick.cpp index 978fedc..d75bbb8 100644 --- a/samples/progress_bar_tick.cpp +++ b/samples/progress_bar_tick.cpp @@ -12,6 +12,7 @@ int main() { indicators::option::End{" ]"}, indicators::option::PostfixText{"Getting started"}, indicators::option::ForegroundColor{indicators::Color::green}, + indicators::option::FontStyles{std::vector{indicators::FontStyle::bold}} }; // Update bar state From 16d3484788aa2064b211b4842708a013ef343e83 Mon Sep 17 00:00:00 2001 From: Pranav Srinivas Kumar Date: Mon, 6 Apr 2020 11:25:54 -0700 Subject: [PATCH 3/7] Fixed build --- demo/demo.cpp | 21 +++++++++++++++----- include/indicators/block_progress_bar.hpp | 10 ++++++++-- include/indicators/progress_bar.hpp | 4 +++- include/indicators/progress_spinner.hpp | 12 +++++++++--- samples/block_progress_bar.cpp | 6 +++++- samples/dynamic_progress.cpp | 24 +++++++++++++++++------ samples/multi_block_progress_bar.cpp | 12 +++++++++--- samples/multi_progress_bar.cpp | 12 +++++++++--- samples/multi_threaded_bar.cpp | 2 ++ samples/progress_bar_set_progress.cpp | 2 ++ samples/progress_bar_tick.cpp | 3 ++- samples/progress_spinner.cpp | 2 ++ samples/time_meter.cpp | 2 ++ 13 files changed, 87 insertions(+), 25 deletions(-) diff --git a/demo/demo.cpp b/demo/demo.cpp index 91d025b..eaa787c 100644 --- a/demo/demo.cpp +++ b/demo/demo.cpp @@ -17,7 +17,9 @@ int main() { option::Lead{"■"}, option::Remainder{" "}, option::End{" ]"}, - option::ForegroundColor{indicators::Color::yellow}}; + option::ForegroundColor{indicators::Color::yellow}, + option::FontStyles{ + std::vector{indicators::FontStyle::bold}}}; std::atomic index{0}; std::vector status_text = {"Rocket.exe is not responding", @@ -58,6 +60,7 @@ int main() { p.set_option(option::End{""}); p.set_option(option::ForegroundColor{indicators::Color::white}); p.set_option(option::ShowPercentage{false}); + p.set_option(option::FontStyles{std::vector{indicators::FontStyle::bold}}); auto job = [&p]() { while (true) { p.set_option( @@ -88,6 +91,7 @@ int main() { p.set_option(option::End{"]"}); p.set_option(option::PostfixText{"Getting started"}); p.set_option(option::ForegroundColor{indicators::Color::green}); + p.set_option(option::FontStyles{std::vector{indicators::FontStyle::bold}}); auto job = [&p]() { while (true) { auto ticks = p.current(); @@ -124,6 +128,7 @@ int main() { p4.set_option(option::ForegroundColor{indicators::Color::cyan}); p4.set_option(option::PostfixText{"Restoring system state"}); p4.set_option(option::ShowPercentage{false}); + p4.set_option(option::FontStyles{std::vector{indicators::FontStyle::bold}}); std::atomic index4{0}; auto job4 = [&p4, &index4, &lead_spinner]() { while (true) { @@ -163,7 +168,9 @@ int main() { option::Remainder{"-"}, option::End{"]"}, option::ForegroundColor{indicators::Color::white}, - option::PostfixText{"Reverting system restore"}}; + option::PostfixText{"Reverting system restore"}, + option::FontStyles{ + std::vector{indicators::FontStyle::bold}}}; p.set_progress(100); // TODO backwards as an option? std::atomic progress{100}; auto job = [&p, &progress]() { @@ -190,7 +197,8 @@ int main() { indicators::ProgressSpinner p{ option::PrefixText{""}, option::PostfixText{"Checking credentials"}, option::ForegroundColor{indicators::Color::yellow}, - option::SpinnerStates{std::vector{"⠈", "⠐", "⠠", "⢀", "⡀", "⠄", "⠂", "⠁"}}}; + option::SpinnerStates{std::vector{"⠈", "⠐", "⠠", "⢀", "⡀", "⠄", "⠂", "⠁"}}, + option::FontStyles{std::vector{indicators::FontStyle::bold}}}; auto job = [&p]() { while (true) { @@ -219,7 +227,8 @@ int main() { indicators::ProgressSpinner p{ option::PrefixText{" - "}, option::PostfixText{"Searching for the Moon"}, option::ForegroundColor{indicators::Color::white}, option::ShowPercentage{false}, - option::SpinnerStates{std::vector{"▖", "▘", "▝", "▗"}}}; + option::SpinnerStates{std::vector{"▖", "▘", "▝", "▗"}}, + option::FontStyles{std::vector{indicators::FontStyle::bold}}}; auto job = [&p]() { while (true) { auto current = p.current(); @@ -263,7 +272,9 @@ int main() { option::Remainder{" "}, option::End{"🌑"}, option::PostfixText{"Achieved low-Earth orbit"}, - option::ForegroundColor{indicators::Color::white}}; + option::ForegroundColor{indicators::Color::white}, + option::FontStyles{ + std::vector{indicators::FontStyle::bold}}}; std::vector ship_trail{"⠁", "⠂", "⠄", "⡀", "⢀", "⠠", "⠐", "⠈"}; std::atomic ship_trail_index{0}; auto job2 = [&p2, &ship_trail_index, &ship_trail]() { diff --git a/include/indicators/block_progress_bar.hpp b/include/indicators/block_progress_bar.hpp index 451eac4..c3108bd 100644 --- a/include/indicators/block_progress_bar.hpp +++ b/include/indicators/block_progress_bar.hpp @@ -46,7 +46,7 @@ class BlockProgressBar { using Settings = std::tuple; + option::SavedStartTime, option::MaxPostfixTextLen, option::FontStyles>; public: template ( option::SavedStartTime{false}, std::forward(args)...), details::get( - option::MaxPostfixTextLen{0}, std::forward(args)...)) {} + option::MaxPostfixTextLen{0}, std::forward(args)...), + details::get( + option::FontStyles{std::vector{}}, std::forward(args)...)) {} template void set_option(details::Setting &&setting) { @@ -190,6 +192,10 @@ private: if (get_value() != Color::unspecified) details::set_stream_color(std::cout, get_value()); + + for (auto &style : get_value()) + details::set_font_style(std::cout, style); + std::cout << get_value(); std::cout << get_value(); diff --git a/include/indicators/progress_bar.hpp b/include/indicators/progress_bar.hpp index 4e26175..11004b7 100644 --- a/include/indicators/progress_bar.hpp +++ b/include/indicators/progress_bar.hpp @@ -87,7 +87,9 @@ public: details::get( option::SavedStartTime{false}, std::forward(args)...), details::get( - option::ForegroundColor{Color::unspecified}, std::forward(args)...)) {} + option::ForegroundColor{Color::unspecified}, std::forward(args)...), + details::get( + option::FontStyles{std::vector{}}, std::forward(args)...)) {} template void set_option(details::Setting &&setting) { diff --git a/include/indicators/progress_spinner.hpp b/include/indicators/progress_spinner.hpp index c931449..62571d9 100644 --- a/include/indicators/progress_spinner.hpp +++ b/include/indicators/progress_spinner.hpp @@ -1,4 +1,4 @@ -/* + /* Activity Indicators for Modern C++ https://github.com/p-ranav/indicators @@ -49,7 +49,7 @@ class ProgressSpinner { std::tuple; + option::MaxPostfixTextLen, option::SpinnerStates, option::FontStyles>; public: template ( option::SpinnerStates{std::vector{"⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏"}}, - std::forward(args)...)) {} + std::forward(args)...), + details::get( + option::FontStyles{std::vector{}}, std::forward(args)...)) {} template void set_option(details::Setting &&setting) { @@ -184,6 +186,10 @@ private: if (get_value() != Color::unspecified) details::set_stream_color(std::cout, get_value()); + + for (auto &style : get_value()) + details::set_font_style(std::cout, style); + std::cout << get_value(); if (get_value()) std::cout << get_value() diff --git a/samples/block_progress_bar.cpp b/samples/block_progress_bar.cpp index 18357eb..d21a4d7 100644 --- a/samples/block_progress_bar.cpp +++ b/samples/block_progress_bar.cpp @@ -7,7 +7,11 @@ int main() { // Hide cursor std::cout << "\e[?25l"; - indicators::BlockProgressBar bar{indicators::option::BarWidth{80}}; + indicators::BlockProgressBar bar{ + indicators::option::BarWidth{80}, + indicators::option::FontStyles{ + std::vector{indicators::FontStyle::bold}} + }; // Update bar state auto progress = 0.0f; diff --git a/samples/dynamic_progress.cpp b/samples/dynamic_progress.cpp index d16b04c..a5ccefb 100644 --- a/samples/dynamic_progress.cpp +++ b/samples/dynamic_progress.cpp @@ -6,27 +6,39 @@ int main() { ProgressBar bar1{option::BarWidth{50}, option::ForegroundColor{Color::red}, option::ShowElapsedTime{true}, option::ShowRemainingTime{true}, - option::PrefixText{"5c90d4a2d1a8: Downloading "}}; + option::PrefixText{"5c90d4a2d1a8: Downloading "}, + indicators::option::FontStyles{ + std::vector{indicators::FontStyle::bold}}}; ProgressBar bar2{option::BarWidth{50}, option::ForegroundColor{Color::yellow}, option::ShowElapsedTime{true}, option::ShowRemainingTime{true}, - option::PrefixText{"22337bfd13a9: Downloading "}}; + option::PrefixText{"22337bfd13a9: Downloading "}, + indicators::option::FontStyles{ + std::vector{indicators::FontStyle::bold}}}; ProgressBar bar3{option::BarWidth{50}, option::ForegroundColor{Color::green}, option::ShowElapsedTime{true}, option::ShowRemainingTime{true}, - option::PrefixText{"10f26c680a34: Downloading "}}; + option::PrefixText{"10f26c680a34: Downloading "}, + indicators::option::FontStyles{ + std::vector{indicators::FontStyle::bold}}}; ProgressBar bar4{option::BarWidth{50}, option::ForegroundColor{Color::white}, option::ShowElapsedTime{true}, option::ShowRemainingTime{true}, - option::PrefixText{"6364e0d7a283: Downloading "}}; + option::PrefixText{"6364e0d7a283: Downloading "}, + indicators::option::FontStyles{ + std::vector{indicators::FontStyle::bold}}}; ProgressBar bar5{option::BarWidth{50}, option::ForegroundColor{Color::blue}, option::ShowElapsedTime{true}, option::ShowRemainingTime{true}, - option::PrefixText{"ff1356ba118b: Downloading "}}; + option::PrefixText{"ff1356ba118b: Downloading "}, + indicators::option::FontStyles{ + std::vector{indicators::FontStyle::bold}}}; ProgressBar bar6{option::BarWidth{50}, option::ForegroundColor{Color::cyan}, option::ShowElapsedTime{true}, option::ShowRemainingTime{true}, - option::PrefixText{"5a17453338b4: Downloading "}}; + option::PrefixText{"5a17453338b4: Downloading "}, + indicators::option::FontStyles{ + std::vector{indicators::FontStyle::bold}}}; std::cout << termcolor::bold << termcolor::white << "Pulling image foo:bar/baz\n"; diff --git a/samples/multi_block_progress_bar.cpp b/samples/multi_block_progress_bar.cpp index 9e0cc6e..0d7277c 100644 --- a/samples/multi_block_progress_bar.cpp +++ b/samples/multi_block_progress_bar.cpp @@ -5,15 +5,21 @@ int main() { using namespace indicators; BlockProgressBar bar1{option::BarWidth{50}, option::ForegroundColor{Color::yellow}, option::ShowElapsedTime{true}, option::ShowRemainingTime{true}, - option::PrefixText{"Progress Bar #1 "}}; + option::PrefixText{"Progress Bar #1 "}, + indicators::option::FontStyles{ + std::vector{indicators::FontStyle::bold}}}; BlockProgressBar bar2{option::BarWidth{50}, option::ForegroundColor{Color::cyan}, option::ShowElapsedTime{true}, option::ShowRemainingTime{true}, - option::PrefixText{"Progress Bar #2 "}}; + option::PrefixText{"Progress Bar #2 "}, + indicators::option::FontStyles{ + std::vector{indicators::FontStyle::bold}}}; BlockProgressBar bar3{option::BarWidth{50}, option::ForegroundColor{Color::red}, option::ShowElapsedTime{true}, option::ShowRemainingTime{true}, - option::PrefixText{"Progress Bar #3 "}}; + option::PrefixText{"Progress Bar #3 "}, + indicators::option::FontStyles{ + std::vector{indicators::FontStyle::bold}}}; indicators::MultiProgress bars(bar1, bar2, bar3); diff --git a/samples/multi_progress_bar.cpp b/samples/multi_progress_bar.cpp index c022612..a457cab 100644 --- a/samples/multi_progress_bar.cpp +++ b/samples/multi_progress_bar.cpp @@ -12,7 +12,9 @@ int main() { indicators::option::ForegroundColor{indicators::Color::yellow}, indicators::option::ShowElapsedTime{true}, indicators::option::ShowRemainingTime{true}, - indicators::option::PrefixText{"Progress Bar #1 "}}; + indicators::option::PrefixText{"Progress Bar #1 "}, + indicators::option::FontStyles{ + std::vector{indicators::FontStyle::bold}}}; indicators::ProgressBar bar2{indicators::option::BarWidth{50}, indicators::option::Start{"["}, @@ -23,7 +25,9 @@ int main() { indicators::option::ForegroundColor{indicators::Color::cyan}, indicators::option::ShowElapsedTime{true}, indicators::option::ShowRemainingTime{true}, - indicators::option::PrefixText{"Progress Bar #2 "}}; + indicators::option::PrefixText{"Progress Bar #2 "}, + indicators::option::FontStyles{ + std::vector{indicators::FontStyle::bold}}}; indicators::ProgressBar bar3{indicators::option::BarWidth{50}, indicators::option::Start{"["}, @@ -34,7 +38,9 @@ int main() { indicators::option::ForegroundColor{indicators::Color::red}, indicators::option::ShowElapsedTime{true}, indicators::option::ShowRemainingTime{true}, - indicators::option::PrefixText{"Progress Bar #3 "}}; + indicators::option::PrefixText{"Progress Bar #3 "}, + indicators::option::FontStyles{ + std::vector{indicators::FontStyle::bold}}}; indicators::MultiProgress bars(bar1, bar2, bar3); diff --git a/samples/multi_threaded_bar.cpp b/samples/multi_threaded_bar.cpp index d5cc88c..d8b2c8e 100644 --- a/samples/multi_threaded_bar.cpp +++ b/samples/multi_threaded_bar.cpp @@ -11,6 +11,8 @@ int main() { indicators::option::Remainder{"-"}, indicators::option::End{" ]"}, indicators::option::ForegroundColor{indicators::Color::yellow}, + indicators::option::FontStyles{ + std::vector{indicators::FontStyle::bold}} }; // As configured, the bar will look like this: diff --git a/samples/progress_bar_set_progress.cpp b/samples/progress_bar_set_progress.cpp index d8ea013..bbfe325 100644 --- a/samples/progress_bar_set_progress.cpp +++ b/samples/progress_bar_set_progress.cpp @@ -16,6 +16,8 @@ int main() { indicators::option::End{" ]"}, indicators::option::PostfixText{"Loading dependency 1/4"}, indicators::option::ForegroundColor{indicators::Color::cyan}, + indicators::option::FontStyles{ + std::vector{indicators::FontStyle::bold}} }; // Update bar state diff --git a/samples/progress_bar_tick.cpp b/samples/progress_bar_tick.cpp index d75bbb8..c8a0e51 100644 --- a/samples/progress_bar_tick.cpp +++ b/samples/progress_bar_tick.cpp @@ -12,7 +12,8 @@ int main() { indicators::option::End{" ]"}, indicators::option::PostfixText{"Getting started"}, indicators::option::ForegroundColor{indicators::Color::green}, - indicators::option::FontStyles{std::vector{indicators::FontStyle::bold}} + indicators::option::FontStyles{ + std::vector{indicators::FontStyle::bold}} }; // Update bar state diff --git a/samples/progress_spinner.cpp b/samples/progress_spinner.cpp index 8b694da..bbbe834 100644 --- a/samples/progress_spinner.cpp +++ b/samples/progress_spinner.cpp @@ -10,6 +10,8 @@ int main() { indicators::option::ForegroundColor{indicators::Color::yellow}, indicators::option::SpinnerStates{ std::vector{"⠈", "⠐", "⠠", "⢀", "⡀", "⠄", "⠂", "⠁"}}, + indicators::option::FontStyles{ + std::vector{indicators::FontStyle::bold}} }; // Update spinner state diff --git a/samples/time_meter.cpp b/samples/time_meter.cpp index b19679e..e57c956 100644 --- a/samples/time_meter.cpp +++ b/samples/time_meter.cpp @@ -14,6 +14,8 @@ int main() { indicators::option::ForegroundColor{indicators::Color::yellow}, indicators::option::ShowElapsedTime{true}, indicators::option::ShowRemainingTime{true}, + indicators::option::FontStyles{ + std::vector{indicators::FontStyle::bold}} }; // Update bar state From 936b8e66d82d1fbbb3d95c84e945a138c289d0ed Mon Sep 17 00:00:00 2001 From: Pranav Date: Mon, 6 Apr 2020 13:30:57 -0500 Subject: [PATCH 4/7] Update README.md --- README.md | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 17cdafe..e4147a3 100644 --- a/README.md +++ b/README.md @@ -81,7 +81,8 @@ int main() { option::Remainder{" "}, option::End{"]"}, option::PostfixText{"Extracting Archive"}, - option::ForegroundColor{Color::green} + option::ForegroundColor{Color::green}, + option::FontStyles{std::vector{FontStyle::bold}} }; // Update bar state @@ -125,7 +126,8 @@ int main() { option::Remainder{"-"}, option::End{" ]"}, option::PostfixText{"Loading dependency 1/4"}, - option::ForegroundColor{Color::cyan} + option::ForegroundColor{Color::cyan}, + option::FontStyles{std::vector{FontStyle::bold}} }; // Update bar state @@ -186,7 +188,8 @@ int main() { option::PrefixText{"Training Gaze Network 👀"}, option::ForegroundColor{Color::yellow}, option::ShowElapsedTime{true}, - option::ShowRemainingTime{true} + option::ShowRemainingTime{true}, + option::FontStyles{std::vector{FontStyle::bold}} }; // Update bar state @@ -227,7 +230,8 @@ int main() { option::BarWidth{80}, option::Start{"["}, option::End{"]"}, - option::ForegroundColor{Color::white} + option::ForegroundColor{Color::white} , + option::FontStyles{std::vector{FontStyle::bold}} }; // Update bar state @@ -278,7 +282,8 @@ int main() { option::ForegroundColor{Color::yellow}, option::ShowElapsedTime{true}, option::ShowRemainingTime{true}, - option::PrefixText{"Progress Bar #1 "} + option::PrefixText{"Progress Bar #1 "}, + option::FontStyles{std::vector{FontStyle::bold}} }; // Configure second progress bar @@ -293,7 +298,8 @@ int main() { option::ForegroundColor{Color::cyan}, option::ShowElapsedTime{true}, option::ShowRemainingTime{true}, - option::PrefixText{"Progress Bar #2 "} + option::PrefixText{"Progress Bar #2 "}, + option::FontStyles{std::vector{FontStyle::bold}} }; // Configure third progress bar @@ -307,7 +313,8 @@ int main() { option::ForegroundColor{Color::red}, option::ShowElapsedTime{true}, option::ShowRemainingTime{true}, - option::PrefixText{"Progress Bar #3 "} + option::PrefixText{"Progress Bar #3 "}, + option::FontStyles{std::vector{FontStyle::bold}} }; // Construct MultiProgress object @@ -533,7 +540,8 @@ int main() { indicators::ProgressSpinner spinner{ option::PostfixText{"Checking credentials"}, option::ForegroundColor{Color::yellow}, - option::SpinnerStates{std::vector{"⠈", "⠐", "⠠", "⢀", "⡀", "⠄", "⠂", "⠁"}} + option::SpinnerStates{std::vector{"⠈", "⠐", "⠠", "⢀", "⡀", "⠄", "⠂", "⠁"}}, + option::FontStyles{std::vector{FontStyle::bold}} }; // Update spinner state From a3e50e0862684b351fc4a908be1f3b6397b48e22 Mon Sep 17 00:00:00 2001 From: Pranav Srinivas Kumar Date: Mon, 6 Apr 2020 11:35:10 -0700 Subject: [PATCH 5/7] Updated single include --- single_include/indicators/indicators.hpp | 70 +++++++++++++++++++++--- 1 file changed, 62 insertions(+), 8 deletions(-) diff --git a/single_include/indicators/indicators.hpp b/single_include/indicators/indicators.hpp index be0e964..75cefea 100644 --- a/single_include/indicators/indicators.hpp +++ b/single_include/indicators/indicators.hpp @@ -49,6 +49,8 @@ SOFTWARE. namespace indicators { enum class Color { grey, red, green, yellow, blue, magenta, cyan, white }; +enum class FontStyle { bold, dark, italic, underline, blink, reverse, concealed, crossed }; + } //! @@ -538,6 +540,37 @@ inline void set_stream_color(std::ostream &os, Color color) { } } +inline void set_font_style(std::ostream &os, FontStyle style) { + switch (style) { + case FontStyle::bold: + os << termcolor::bold; + break; + case FontStyle::dark: + os << termcolor::dark; + break; + case FontStyle::italic: + os << termcolor::italic; + break; + case FontStyle::underline: + os << termcolor::underline; + break; + case FontStyle::blink: + os << termcolor::blink; + break; + case FontStyle::reverse: + os << termcolor::reverse; + break; + case FontStyle::concealed: + os << termcolor::concealed; + break; + case FontStyle::crossed: + os << termcolor::crossed; + break; + default: + break; + } +} + inline std::ostream &write_duration(std::ostream &os, std::chrono::nanoseconds ns) { using namespace std; using namespace std::chrono; @@ -675,6 +708,7 @@ enum class ProgressBarOption { foreground_color, spinner_show, spinner_states, + font_styles, hide_bar_when_complete }; @@ -788,6 +822,8 @@ using SpinnerStates = details::Setting, details::ProgressBarOption::spinner_states>; using HideBarWhenComplete = details::BooleanSetting; +using FontStyles = + details::Setting, details::ProgressBarOption::font_styles>; } // namespace option } // namespace indicators @@ -803,7 +839,7 @@ class ProgressBar { option::End, option::Fill, option::Lead, option::Remainder, option::MaxPostfixTextLen, option::Completed, option::ShowPercentage, option::ShowElapsedTime, option::ShowRemainingTime, option::SavedStartTime, - option::ForegroundColor>; + option::ForegroundColor, option::FontStyles>; public: template ( option::SavedStartTime{false}, std::forward(args)...), details::get( - option::ForegroundColor{Color::white}, std::forward(args)...)) {} + option::ForegroundColor{Color::unspecified}, std::forward(args)...), + details::get( + option::FontStyles{std::vector{}}, std::forward(args)...)) {} template void set_option(details::Setting &&setting) { @@ -956,6 +994,10 @@ private: std::cout << termcolor::bold; details::set_stream_color(std::cout, get_value()); + + for (auto &style : get_value()) + details::set_font_style(std::cout, style); + std::cout << get_value(); std::cout << get_value(); @@ -1020,7 +1062,7 @@ class BlockProgressBar { using Settings = std::tuple; + option::SavedStartTime, option::MaxPostfixTextLen, option::FontStyles>; public: template ::type = nullptr> explicit BlockProgressBar(Args &&... args) : settings_(details::get( - option::ForegroundColor{Color::white}, std::forward(args)...), + option::ForegroundColor{Color::unspecified}, std::forward(args)...), details::get(option::BarWidth{100}, std::forward(args)...), details::get(option::Start{"["}, @@ -1051,7 +1093,9 @@ public: details::get( option::SavedStartTime{false}, std::forward(args)...), details::get( - option::MaxPostfixTextLen{0}, std::forward(args)...)) {} + option::MaxPostfixTextLen{0}, std::forward(args)...), + details::get( + option::FontStyles{std::vector{}}, std::forward(args)...)) {} template void set_option(details::Setting &&setting) { @@ -1164,6 +1208,10 @@ private: std::cout << termcolor::bold; details::set_stream_color(std::cout, get_value()); + + for (auto &style : get_value()) + details::set_font_style(std::cout, style); + std::cout << get_value(); std::cout << get_value(); @@ -1224,7 +1272,7 @@ class ProgressSpinner { std::tuple; + option::MaxPostfixTextLen, option::SpinnerStates, option::FontStyles>; public: template ::type = nullptr> explicit ProgressSpinner(Args &&... args) : settings_(details::get( - option::ForegroundColor{Color::white}, std::forward(args)...), + option::ForegroundColor{Color::unspecified}, std::forward(args)...), details::get( option::PrefixText{}, std::forward(args)...), details::get( @@ -1255,7 +1303,9 @@ public: details::get( option::SpinnerStates{std::vector{"⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏"}}, - std::forward(args)...)) {} + std::forward(args)...), + details::get( + option::FontStyles{std::vector{}}, std::forward(args)...)) {} template void set_option(details::Setting &&setting) { @@ -1359,6 +1409,10 @@ private: std::cout << termcolor::bold; details::set_stream_color(std::cout, get_value()); + + for (auto &style : get_value()) + details::set_font_style(std::cout, style); + std::cout << get_value(); if (get_value()) std::cout << get_value() From 446b0d3147202ad5f0f42fc0399c8e4d7de52a50 Mon Sep 17 00:00:00 2001 From: Pranav Srinivas Kumar Date: Mon, 6 Apr 2020 11:41:18 -0700 Subject: [PATCH 6/7] Recovered CMakeLists --- CMakeLists.txt | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index ae78db2..28a0986 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -4,8 +4,10 @@ if(DEFINED PROJECT_NAME) set(INDICATORS_SUBPROJECT ON) endif() -project(indicators VERSION 1.8.0 LANGUAGES CXX) - +project(indicators VERSION 1.8.0 LANGUAGES CXX + HOMEPAGE_URL "https://github.com/p-ranav/indicators" + DESCRIPTION "Activity Indicators for Modern C++") + if(EXISTS "${CMAKE_BINARY_DIR}/conanbuildinfo.cmake") include("${CMAKE_BINARY_DIR}/conanbuildinfo.cmake") conan_basic_setup() From 78a98fec4d8e992d44041d73ff65dfe954086e33 Mon Sep 17 00:00:00 2001 From: Pranav Srinivas Kumar Date: Mon, 6 Apr 2020 11:48:16 -0700 Subject: [PATCH 7/7] Minor updates --- CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index e2b402e..6a50e54 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -5,8 +5,8 @@ if(DEFINED PROJECT_NAME) endif() project(indicators VERSION 1.8.0 LANGUAGES CXX) -# HOMEPAGE_URL "https://github.com/p-ranav/indicators" -# DESCRIPTION "Activity Indicators for Modern C++") + HOMEPAGE_URL "https://github.com/p-ranav/indicators" + DESCRIPTION "Activity Indicators for Modern C++") if(EXISTS "${CMAKE_BINARY_DIR}/conanbuildinfo.cmake") include("${CMAKE_BINARY_DIR}/conanbuildinfo.cmake")