From a3e50e0862684b351fc4a908be1f3b6397b48e22 Mon Sep 17 00:00:00 2001 From: Pranav Srinivas Kumar Date: Mon, 6 Apr 2020 11:35:10 -0700 Subject: [PATCH] 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()