Merge pull request #40 from p-ranav/feature/font_styles

Feature/font styles
This commit is contained in:
Pranav
2020-04-06 11:49:27 -07:00
committed by GitHub
19 changed files with 241 additions and 43 deletions

View File

@@ -4,7 +4,7 @@ if(DEFINED PROJECT_NAME)
set(INDICATORS_SUBPROJECT ON) set(INDICATORS_SUBPROJECT ON)
endif() 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" HOMEPAGE_URL "https://github.com/p-ranav/indicators"
DESCRIPTION "Activity Indicators for Modern C++") DESCRIPTION "Activity Indicators for Modern C++")

View File

@@ -81,7 +81,8 @@ int main() {
option::Remainder{" "}, option::Remainder{" "},
option::End{"]"}, option::End{"]"},
option::PostfixText{"Extracting Archive"}, option::PostfixText{"Extracting Archive"},
option::ForegroundColor{Color::green} option::ForegroundColor{Color::green},
option::FontStyles{std::vector<FontStyle>{FontStyle::bold}}
}; };
// Update bar state // Update bar state
@@ -125,7 +126,8 @@ int main() {
option::Remainder{"-"}, option::Remainder{"-"},
option::End{" ]"}, option::End{" ]"},
option::PostfixText{"Loading dependency 1/4"}, option::PostfixText{"Loading dependency 1/4"},
option::ForegroundColor{Color::cyan} option::ForegroundColor{Color::cyan},
option::FontStyles{std::vector<FontStyle>{FontStyle::bold}}
}; };
// Update bar state // Update bar state
@@ -186,7 +188,8 @@ int main() {
option::PrefixText{"Training Gaze Network 👀"}, option::PrefixText{"Training Gaze Network 👀"},
option::ForegroundColor{Color::yellow}, option::ForegroundColor{Color::yellow},
option::ShowElapsedTime{true}, option::ShowElapsedTime{true},
option::ShowRemainingTime{true} option::ShowRemainingTime{true},
option::FontStyles{std::vector<FontStyle>{FontStyle::bold}}
}; };
// Update bar state // Update bar state
@@ -227,7 +230,8 @@ int main() {
option::BarWidth{80}, option::BarWidth{80},
option::Start{"["}, option::Start{"["},
option::End{"]"}, option::End{"]"},
option::ForegroundColor{Color::white} option::ForegroundColor{Color::white} ,
option::FontStyles{std::vector<FontStyle>{FontStyle::bold}}
}; };
// Update bar state // Update bar state
@@ -278,7 +282,8 @@ int main() {
option::ForegroundColor{Color::yellow}, option::ForegroundColor{Color::yellow},
option::ShowElapsedTime{true}, option::ShowElapsedTime{true},
option::ShowRemainingTime{true}, option::ShowRemainingTime{true},
option::PrefixText{"Progress Bar #1 "} option::PrefixText{"Progress Bar #1 "},
option::FontStyles{std::vector<FontStyle>{FontStyle::bold}}
}; };
// Configure second progress bar // Configure second progress bar
@@ -293,7 +298,8 @@ int main() {
option::ForegroundColor{Color::cyan}, option::ForegroundColor{Color::cyan},
option::ShowElapsedTime{true}, option::ShowElapsedTime{true},
option::ShowRemainingTime{true}, option::ShowRemainingTime{true},
option::PrefixText{"Progress Bar #2 "} option::PrefixText{"Progress Bar #2 "},
option::FontStyles{std::vector<FontStyle>{FontStyle::bold}}
}; };
// Configure third progress bar // Configure third progress bar
@@ -307,7 +313,8 @@ int main() {
option::ForegroundColor{Color::red}, option::ForegroundColor{Color::red},
option::ShowElapsedTime{true}, option::ShowElapsedTime{true},
option::ShowRemainingTime{true}, option::ShowRemainingTime{true},
option::PrefixText{"Progress Bar #3 "} option::PrefixText{"Progress Bar #3 "},
option::FontStyles{std::vector<FontStyle>{FontStyle::bold}}
}; };
// Construct MultiProgress object // Construct MultiProgress object
@@ -533,7 +540,8 @@ int main() {
indicators::ProgressSpinner spinner{ indicators::ProgressSpinner spinner{
option::PostfixText{"Checking credentials"}, option::PostfixText{"Checking credentials"},
option::ForegroundColor{Color::yellow}, option::ForegroundColor{Color::yellow},
option::SpinnerStates{std::vector<std::string>{"", "", "", "", "", "", "", ""}} option::SpinnerStates{std::vector<std::string>{"", "", "", "", "", "", "", ""}},
option::FontStyles{std::vector<FontStyle>{FontStyle::bold}}
}; };
// Update spinner state // Update spinner state

View File

@@ -17,7 +17,9 @@ int main() {
option::Lead{""}, option::Lead{""},
option::Remainder{" "}, option::Remainder{" "},
option::End{" ]"}, option::End{" ]"},
option::ForegroundColor{indicators::Color::yellow}}; option::ForegroundColor{indicators::Color::yellow},
option::FontStyles{
std::vector<indicators::FontStyle>{indicators::FontStyle::bold}}};
std::atomic<size_t> index{0}; std::atomic<size_t> index{0};
std::vector<std::string> status_text = {"Rocket.exe is not responding", std::vector<std::string> status_text = {"Rocket.exe is not responding",
@@ -58,6 +60,7 @@ int main() {
p.set_option(option::End{""}); p.set_option(option::End{""});
p.set_option(option::ForegroundColor{indicators::Color::white}); p.set_option(option::ForegroundColor{indicators::Color::white});
p.set_option(option::ShowPercentage{false}); p.set_option(option::ShowPercentage{false});
p.set_option(option::FontStyles{std::vector<indicators::FontStyle>{indicators::FontStyle::bold}});
auto job = [&p]() { auto job = [&p]() {
while (true) { while (true) {
p.set_option( p.set_option(
@@ -88,6 +91,7 @@ int main() {
p.set_option(option::End{"]"}); p.set_option(option::End{"]"});
p.set_option(option::PostfixText{"Getting started"}); p.set_option(option::PostfixText{"Getting started"});
p.set_option(option::ForegroundColor{indicators::Color::green}); p.set_option(option::ForegroundColor{indicators::Color::green});
p.set_option(option::FontStyles{std::vector<indicators::FontStyle>{indicators::FontStyle::bold}});
auto job = [&p]() { auto job = [&p]() {
while (true) { while (true) {
auto ticks = p.current(); auto ticks = p.current();
@@ -124,6 +128,7 @@ int main() {
p4.set_option(option::ForegroundColor{indicators::Color::cyan}); p4.set_option(option::ForegroundColor{indicators::Color::cyan});
p4.set_option(option::PostfixText{"Restoring system state"}); p4.set_option(option::PostfixText{"Restoring system state"});
p4.set_option(option::ShowPercentage{false}); p4.set_option(option::ShowPercentage{false});
p4.set_option(option::FontStyles{std::vector<indicators::FontStyle>{indicators::FontStyle::bold}});
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) {
@@ -163,7 +168,9 @@ int main() {
option::Remainder{"-"}, option::Remainder{"-"},
option::End{"]"}, option::End{"]"},
option::ForegroundColor{indicators::Color::white}, option::ForegroundColor{indicators::Color::white},
option::PostfixText{"Reverting system restore"}}; option::PostfixText{"Reverting system restore"},
option::FontStyles{
std::vector<indicators::FontStyle>{indicators::FontStyle::bold}}};
p.set_progress(100); // TODO backwards as an option? p.set_progress(100); // TODO backwards as an option?
std::atomic<size_t> progress{100}; std::atomic<size_t> progress{100};
auto job = [&p, &progress]() { auto job = [&p, &progress]() {
@@ -190,7 +197,8 @@ int main() {
indicators::ProgressSpinner p{ indicators::ProgressSpinner p{
option::PrefixText{""}, option::PostfixText{"Checking credentials"}, option::PrefixText{""}, option::PostfixText{"Checking credentials"},
option::ForegroundColor{indicators::Color::yellow}, option::ForegroundColor{indicators::Color::yellow},
option::SpinnerStates{std::vector<std::string>{"", "", "", "", "", "", "", ""}}}; option::SpinnerStates{std::vector<std::string>{"", "", "", "", "", "", "", ""}},
option::FontStyles{std::vector<indicators::FontStyle>{indicators::FontStyle::bold}}};
auto job = [&p]() { auto job = [&p]() {
while (true) { while (true) {
@@ -219,7 +227,8 @@ int main() {
indicators::ProgressSpinner p{ indicators::ProgressSpinner p{
option::PrefixText{" - "}, option::PostfixText{"Searching for the Moon"}, option::PrefixText{" - "}, option::PostfixText{"Searching for the Moon"},
option::ForegroundColor{indicators::Color::white}, option::ShowPercentage{false}, option::ForegroundColor{indicators::Color::white}, option::ShowPercentage{false},
option::SpinnerStates{std::vector<std::string>{"", "", "", ""}}}; option::SpinnerStates{std::vector<std::string>{"", "", "", ""}},
option::FontStyles{std::vector<indicators::FontStyle>{indicators::FontStyle::bold}}};
auto job = [&p]() { auto job = [&p]() {
while (true) { while (true) {
auto current = p.current(); auto current = p.current();
@@ -263,7 +272,9 @@ int main() {
option::Remainder{" "}, option::Remainder{" "},
option::End{"🌑"}, option::End{"🌑"},
option::PostfixText{"Achieved low-Earth orbit"}, option::PostfixText{"Achieved low-Earth orbit"},
option::ForegroundColor{indicators::Color::white}}; option::ForegroundColor{indicators::Color::white},
option::FontStyles{
std::vector<indicators::FontStyle>{indicators::FontStyle::bold}}};
std::vector<std::string> ship_trail{"", "", "", "", "", "", "", ""}; std::vector<std::string> ship_trail{"", "", "", "", "", "", "", ""};
std::atomic<int> ship_trail_index{0}; std::atomic<int> ship_trail_index{0};
auto job2 = [&p2, &ship_trail_index, &ship_trail]() { auto job2 = [&p2, &ship_trail_index, &ship_trail]() {

View File

@@ -46,7 +46,7 @@ class BlockProgressBar {
using Settings = std::tuple<option::ForegroundColor, option::BarWidth, option::Start, option::End, using Settings = std::tuple<option::ForegroundColor, option::BarWidth, option::Start, option::End,
option::PrefixText, option::PostfixText, option::ShowPercentage, option::PrefixText, option::PostfixText, option::ShowPercentage,
option::ShowElapsedTime, option::ShowRemainingTime, option::Completed, option::ShowElapsedTime, option::ShowRemainingTime, option::Completed,
option::SavedStartTime, option::MaxPostfixTextLen>; option::SavedStartTime, option::MaxPostfixTextLen, option::FontStyles>;
public: public:
template <typename... Args, template <typename... Args,
@@ -77,7 +77,9 @@ public:
details::get<details::ProgressBarOption::saved_start_time>( details::get<details::ProgressBarOption::saved_start_time>(
option::SavedStartTime{false}, std::forward<Args>(args)...), option::SavedStartTime{false}, std::forward<Args>(args)...),
details::get<details::ProgressBarOption::max_postfix_text_len>( details::get<details::ProgressBarOption::max_postfix_text_len>(
option::MaxPostfixTextLen{0}, std::forward<Args>(args)...)) {} option::MaxPostfixTextLen{0}, std::forward<Args>(args)...),
details::get<details::ProgressBarOption::font_styles>(
option::FontStyles{std::vector<FontStyle>{}}, std::forward<Args>(args)...)) {}
template <typename T, details::ProgressBarOption id> template <typename T, details::ProgressBarOption id>
void set_option(details::Setting<T, id> &&setting) { void set_option(details::Setting<T, id> &&setting) {
@@ -190,6 +192,10 @@ private:
if (get_value<details::ProgressBarOption::foreground_color>() != Color::unspecified) if (get_value<details::ProgressBarOption::foreground_color>() != Color::unspecified)
details::set_stream_color(std::cout, get_value<details::ProgressBarOption::foreground_color>()); details::set_stream_color(std::cout, get_value<details::ProgressBarOption::foreground_color>());
for (auto &style : get_value<details::ProgressBarOption::font_styles>())
details::set_font_style(std::cout, style);
std::cout << get_value<details::ProgressBarOption::prefix_text>(); std::cout << get_value<details::ProgressBarOption::prefix_text>();
std::cout << get_value<details::ProgressBarOption::start>(); std::cout << get_value<details::ProgressBarOption::start>();

View File

@@ -1,6 +1,7 @@
#pragma once #pragma once
#include <indicators/color.hpp> #include <indicators/color.hpp>
#include <indicators/font_style.hpp>
#include <indicators/termcolor.hpp> #include <indicators/termcolor.hpp>
#include <algorithm> #include <algorithm>
@@ -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) { inline std::ostream &write_duration(std::ostream &os, std::chrono::nanoseconds ns) {
using namespace std; using namespace std;
using namespace std::chrono; using namespace std::chrono;

View File

@@ -0,0 +1,33 @@
/*
Activity Indicators for Modern C++
https://github.com/p-ranav/indica
Licensed under the MIT License <http://opensource.org/licenses/MIT>.
SPDX-License-Identifier: MIT
Copyright (c) 2019 Pranav Srinivas Kumar <pranav.srinivas.kumar@gmail.com>.
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 };
}

View File

@@ -50,7 +50,7 @@ class ProgressBar {
option::End, option::Fill, option::Lead, option::Remainder, option::End, option::Fill, option::Lead, option::Remainder,
option::MaxPostfixTextLen, option::Completed, option::ShowPercentage, option::MaxPostfixTextLen, option::Completed, option::ShowPercentage,
option::ShowElapsedTime, option::ShowRemainingTime, option::SavedStartTime, option::ShowElapsedTime, option::ShowRemainingTime, option::SavedStartTime,
option::ForegroundColor>; option::ForegroundColor, option::FontStyles>;
public: public:
template <typename... Args, template <typename... Args,
@@ -87,7 +87,9 @@ public:
details::get<details::ProgressBarOption::saved_start_time>( details::get<details::ProgressBarOption::saved_start_time>(
option::SavedStartTime{false}, std::forward<Args>(args)...), option::SavedStartTime{false}, std::forward<Args>(args)...),
details::get<details::ProgressBarOption::foreground_color>( details::get<details::ProgressBarOption::foreground_color>(
option::ForegroundColor{Color::unspecified}, std::forward<Args>(args)...)) {} option::ForegroundColor{Color::unspecified}, std::forward<Args>(args)...),
details::get<details::ProgressBarOption::font_styles>(
option::FontStyles{std::vector<FontStyle>{}}, std::forward<Args>(args)...)) {}
template <typename T, details::ProgressBarOption id> template <typename T, details::ProgressBarOption id>
void set_option(details::Setting<T, id> &&setting) { void set_option(details::Setting<T, id> &&setting) {
@@ -203,6 +205,10 @@ private:
if (get_value<details::ProgressBarOption::foreground_color>() != Color::unspecified) if (get_value<details::ProgressBarOption::foreground_color>() != Color::unspecified)
details::set_stream_color(std::cout, get_value<details::ProgressBarOption::foreground_color>()); details::set_stream_color(std::cout, get_value<details::ProgressBarOption::foreground_color>());
for (auto &style : get_value<details::ProgressBarOption::font_styles>())
details::set_font_style(std::cout, style);
std::cout << get_value<details::ProgressBarOption::prefix_text>(); std::cout << get_value<details::ProgressBarOption::prefix_text>();
std::cout << get_value<details::ProgressBarOption::start>(); std::cout << get_value<details::ProgressBarOption::start>();

View File

@@ -49,7 +49,7 @@ class ProgressSpinner {
std::tuple<option::ForegroundColor, option::PrefixText, option::PostfixText, std::tuple<option::ForegroundColor, option::PrefixText, option::PostfixText,
option::ShowPercentage, option::ShowElapsedTime, option::ShowRemainingTime, option::ShowPercentage, option::ShowElapsedTime, option::ShowRemainingTime,
option::ShowSpinner, option::SavedStartTime, option::Completed, option::ShowSpinner, option::SavedStartTime, option::Completed,
option::MaxPostfixTextLen, option::SpinnerStates>; option::MaxPostfixTextLen, option::SpinnerStates, option::FontStyles>;
public: public:
template <typename... Args, template <typename... Args,
@@ -80,7 +80,9 @@ public:
details::get<details::ProgressBarOption::spinner_states>( details::get<details::ProgressBarOption::spinner_states>(
option::SpinnerStates{std::vector<std::string>{"", "", "", "", "", "", option::SpinnerStates{std::vector<std::string>{"", "", "", "", "", "",
"", "", "", ""}}, "", "", "", ""}},
std::forward<Args>(args)...)) {} std::forward<Args>(args)...),
details::get<details::ProgressBarOption::font_styles>(
option::FontStyles{std::vector<FontStyle>{}}, std::forward<Args>(args)...)) {}
template <typename T, details::ProgressBarOption id> template <typename T, details::ProgressBarOption id>
void set_option(details::Setting<T, id> &&setting) { void set_option(details::Setting<T, id> &&setting) {
@@ -184,6 +186,10 @@ private:
if (get_value<details::ProgressBarOption::foreground_color>() != Color::unspecified) if (get_value<details::ProgressBarOption::foreground_color>() != Color::unspecified)
details::set_stream_color(std::cout, get_value<details::ProgressBarOption::foreground_color>()); details::set_stream_color(std::cout, get_value<details::ProgressBarOption::foreground_color>());
for (auto &style : get_value<details::ProgressBarOption::font_styles>())
details::set_font_style(std::cout, style);
std::cout << get_value<details::ProgressBarOption::prefix_text>(); std::cout << get_value<details::ProgressBarOption::prefix_text>();
if (get_value<details::ProgressBarOption::spinner_show>()) if (get_value<details::ProgressBarOption::spinner_show>())
std::cout << get_value<details::ProgressBarOption::spinner_states>() std::cout << get_value<details::ProgressBarOption::spinner_states>()

View File

@@ -28,6 +28,7 @@ SOFTWARE.
#include <cstddef> #include <cstddef>
#include <indicators/color.hpp> #include <indicators/color.hpp>
#include <indicators/font_style.hpp>
#include <string> #include <string>
#include <type_traits> #include <type_traits>
#include <utility> #include <utility>
@@ -87,6 +88,7 @@ enum class ProgressBarOption {
foreground_color, foreground_color,
spinner_show, spinner_show,
spinner_states, spinner_states,
font_styles,
hide_bar_when_complete hide_bar_when_complete
}; };
@@ -200,5 +202,7 @@ using SpinnerStates =
details::Setting<std::vector<std::string>, details::ProgressBarOption::spinner_states>; details::Setting<std::vector<std::string>, details::ProgressBarOption::spinner_states>;
using HideBarWhenComplete = using HideBarWhenComplete =
details::BooleanSetting<details::ProgressBarOption::hide_bar_when_complete>; details::BooleanSetting<details::ProgressBarOption::hide_bar_when_complete>;
using FontStyles =
details::Setting<std::vector<FontStyle>, details::ProgressBarOption::font_styles>;
} // namespace option } // namespace option
} // namespace indicators } // namespace indicators

View File

@@ -7,7 +7,11 @@ int main() {
// Hide cursor // Hide cursor
std::cout << "\e[?25l"; 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>{indicators::FontStyle::bold}}
};
// Update bar state // Update bar state
auto progress = 0.0f; auto progress = 0.0f;

View File

@@ -6,27 +6,39 @@ int main() {
ProgressBar bar1{option::BarWidth{50}, option::ForegroundColor{Color::red}, ProgressBar bar1{option::BarWidth{50}, option::ForegroundColor{Color::red},
option::ShowElapsedTime{true}, option::ShowRemainingTime{true}, option::ShowElapsedTime{true}, option::ShowRemainingTime{true},
option::PrefixText{"5c90d4a2d1a8: Downloading "}}; option::PrefixText{"5c90d4a2d1a8: Downloading "},
indicators::option::FontStyles{
std::vector<indicators::FontStyle>{indicators::FontStyle::bold}}};
ProgressBar bar2{option::BarWidth{50}, option::ForegroundColor{Color::yellow}, ProgressBar bar2{option::BarWidth{50}, option::ForegroundColor{Color::yellow},
option::ShowElapsedTime{true}, option::ShowRemainingTime{true}, option::ShowElapsedTime{true}, option::ShowRemainingTime{true},
option::PrefixText{"22337bfd13a9: Downloading "}}; option::PrefixText{"22337bfd13a9: Downloading "},
indicators::option::FontStyles{
std::vector<indicators::FontStyle>{indicators::FontStyle::bold}}};
ProgressBar bar3{option::BarWidth{50}, option::ForegroundColor{Color::green}, ProgressBar bar3{option::BarWidth{50}, option::ForegroundColor{Color::green},
option::ShowElapsedTime{true}, option::ShowRemainingTime{true}, option::ShowElapsedTime{true}, option::ShowRemainingTime{true},
option::PrefixText{"10f26c680a34: Downloading "}}; option::PrefixText{"10f26c680a34: Downloading "},
indicators::option::FontStyles{
std::vector<indicators::FontStyle>{indicators::FontStyle::bold}}};
ProgressBar bar4{option::BarWidth{50}, option::ForegroundColor{Color::white}, ProgressBar bar4{option::BarWidth{50}, option::ForegroundColor{Color::white},
option::ShowElapsedTime{true}, option::ShowRemainingTime{true}, option::ShowElapsedTime{true}, option::ShowRemainingTime{true},
option::PrefixText{"6364e0d7a283: Downloading "}}; option::PrefixText{"6364e0d7a283: Downloading "},
indicators::option::FontStyles{
std::vector<indicators::FontStyle>{indicators::FontStyle::bold}}};
ProgressBar bar5{option::BarWidth{50}, option::ForegroundColor{Color::blue}, ProgressBar bar5{option::BarWidth{50}, option::ForegroundColor{Color::blue},
option::ShowElapsedTime{true}, option::ShowRemainingTime{true}, option::ShowElapsedTime{true}, option::ShowRemainingTime{true},
option::PrefixText{"ff1356ba118b: Downloading "}}; option::PrefixText{"ff1356ba118b: Downloading "},
indicators::option::FontStyles{
std::vector<indicators::FontStyle>{indicators::FontStyle::bold}}};
ProgressBar bar6{option::BarWidth{50}, option::ForegroundColor{Color::cyan}, ProgressBar bar6{option::BarWidth{50}, option::ForegroundColor{Color::cyan},
option::ShowElapsedTime{true}, option::ShowRemainingTime{true}, option::ShowElapsedTime{true}, option::ShowRemainingTime{true},
option::PrefixText{"5a17453338b4: Downloading "}}; option::PrefixText{"5a17453338b4: Downloading "},
indicators::option::FontStyles{
std::vector<indicators::FontStyle>{indicators::FontStyle::bold}}};
std::cout << termcolor::bold << termcolor::white << "Pulling image foo:bar/baz\n"; std::cout << termcolor::bold << termcolor::white << "Pulling image foo:bar/baz\n";

View File

@@ -5,15 +5,21 @@ int main() {
using namespace indicators; using namespace indicators;
BlockProgressBar bar1{option::BarWidth{50}, option::ForegroundColor{Color::yellow}, BlockProgressBar bar1{option::BarWidth{50}, option::ForegroundColor{Color::yellow},
option::ShowElapsedTime{true}, option::ShowRemainingTime{true}, option::ShowElapsedTime{true}, option::ShowRemainingTime{true},
option::PrefixText{"Progress Bar #1 "}}; option::PrefixText{"Progress Bar #1 "},
indicators::option::FontStyles{
std::vector<indicators::FontStyle>{indicators::FontStyle::bold}}};
BlockProgressBar bar2{option::BarWidth{50}, option::ForegroundColor{Color::cyan}, BlockProgressBar bar2{option::BarWidth{50}, option::ForegroundColor{Color::cyan},
option::ShowElapsedTime{true}, option::ShowRemainingTime{true}, option::ShowElapsedTime{true}, option::ShowRemainingTime{true},
option::PrefixText{"Progress Bar #2 "}}; option::PrefixText{"Progress Bar #2 "},
indicators::option::FontStyles{
std::vector<indicators::FontStyle>{indicators::FontStyle::bold}}};
BlockProgressBar bar3{option::BarWidth{50}, option::ForegroundColor{Color::red}, BlockProgressBar bar3{option::BarWidth{50}, option::ForegroundColor{Color::red},
option::ShowElapsedTime{true}, option::ShowRemainingTime{true}, option::ShowElapsedTime{true}, option::ShowRemainingTime{true},
option::PrefixText{"Progress Bar #3 "}}; option::PrefixText{"Progress Bar #3 "},
indicators::option::FontStyles{
std::vector<indicators::FontStyle>{indicators::FontStyle::bold}}};
indicators::MultiProgress<indicators::BlockProgressBar, 3> bars(bar1, bar2, bar3); indicators::MultiProgress<indicators::BlockProgressBar, 3> bars(bar1, bar2, bar3);

View File

@@ -12,7 +12,9 @@ int main() {
indicators::option::ForegroundColor{indicators::Color::yellow}, indicators::option::ForegroundColor{indicators::Color::yellow},
indicators::option::ShowElapsedTime{true}, indicators::option::ShowElapsedTime{true},
indicators::option::ShowRemainingTime{true}, indicators::option::ShowRemainingTime{true},
indicators::option::PrefixText{"Progress Bar #1 "}}; indicators::option::PrefixText{"Progress Bar #1 "},
indicators::option::FontStyles{
std::vector<indicators::FontStyle>{indicators::FontStyle::bold}}};
indicators::ProgressBar bar2{indicators::option::BarWidth{50}, indicators::ProgressBar bar2{indicators::option::BarWidth{50},
indicators::option::Start{"["}, indicators::option::Start{"["},
@@ -23,7 +25,9 @@ int main() {
indicators::option::ForegroundColor{indicators::Color::cyan}, indicators::option::ForegroundColor{indicators::Color::cyan},
indicators::option::ShowElapsedTime{true}, indicators::option::ShowElapsedTime{true},
indicators::option::ShowRemainingTime{true}, indicators::option::ShowRemainingTime{true},
indicators::option::PrefixText{"Progress Bar #2 "}}; indicators::option::PrefixText{"Progress Bar #2 "},
indicators::option::FontStyles{
std::vector<indicators::FontStyle>{indicators::FontStyle::bold}}};
indicators::ProgressBar bar3{indicators::option::BarWidth{50}, indicators::ProgressBar bar3{indicators::option::BarWidth{50},
indicators::option::Start{"["}, indicators::option::Start{"["},
@@ -34,7 +38,9 @@ int main() {
indicators::option::ForegroundColor{indicators::Color::red}, indicators::option::ForegroundColor{indicators::Color::red},
indicators::option::ShowElapsedTime{true}, indicators::option::ShowElapsedTime{true},
indicators::option::ShowRemainingTime{true}, indicators::option::ShowRemainingTime{true},
indicators::option::PrefixText{"Progress Bar #3 "}}; indicators::option::PrefixText{"Progress Bar #3 "},
indicators::option::FontStyles{
std::vector<indicators::FontStyle>{indicators::FontStyle::bold}}};
indicators::MultiProgress<indicators::ProgressBar, 3> bars(bar1, bar2, bar3); indicators::MultiProgress<indicators::ProgressBar, 3> bars(bar1, bar2, bar3);

View File

@@ -11,6 +11,8 @@ int main() {
indicators::option::Remainder{"-"}, indicators::option::Remainder{"-"},
indicators::option::End{" ]"}, indicators::option::End{" ]"},
indicators::option::ForegroundColor{indicators::Color::yellow}, indicators::option::ForegroundColor{indicators::Color::yellow},
indicators::option::FontStyles{
std::vector<indicators::FontStyle>{indicators::FontStyle::bold}}
}; };
// As configured, the bar will look like this: // As configured, the bar will look like this:

View File

@@ -16,6 +16,8 @@ int main() {
indicators::option::End{" ]"}, indicators::option::End{" ]"},
indicators::option::PostfixText{"Loading dependency 1/4"}, indicators::option::PostfixText{"Loading dependency 1/4"},
indicators::option::ForegroundColor{indicators::Color::cyan}, indicators::option::ForegroundColor{indicators::Color::cyan},
indicators::option::FontStyles{
std::vector<indicators::FontStyle>{indicators::FontStyle::bold}}
}; };
// Update bar state // Update bar state

View File

@@ -12,6 +12,8 @@ int main() {
indicators::option::End{" ]"}, indicators::option::End{" ]"},
indicators::option::PostfixText{"Getting started"}, indicators::option::PostfixText{"Getting started"},
indicators::option::ForegroundColor{indicators::Color::green}, indicators::option::ForegroundColor{indicators::Color::green},
indicators::option::FontStyles{
std::vector<indicators::FontStyle>{indicators::FontStyle::bold}}
}; };
// Update bar state // Update bar state

View File

@@ -10,6 +10,8 @@ int main() {
indicators::option::ForegroundColor{indicators::Color::yellow}, indicators::option::ForegroundColor{indicators::Color::yellow},
indicators::option::SpinnerStates{ indicators::option::SpinnerStates{
std::vector<std::string>{"", "", "", "", "", "", "", ""}}, std::vector<std::string>{"", "", "", "", "", "", "", ""}},
indicators::option::FontStyles{
std::vector<indicators::FontStyle>{indicators::FontStyle::bold}}
}; };
// Update spinner state // Update spinner state

View File

@@ -14,6 +14,8 @@ int main() {
indicators::option::ForegroundColor{indicators::Color::yellow}, indicators::option::ForegroundColor{indicators::Color::yellow},
indicators::option::ShowElapsedTime{true}, indicators::option::ShowElapsedTime{true},
indicators::option::ShowRemainingTime{true}, indicators::option::ShowRemainingTime{true},
indicators::option::FontStyles{
std::vector<indicators::FontStyle>{indicators::FontStyle::bold}}
}; };
// Update bar state // Update bar state

View File

@@ -49,6 +49,8 @@ SOFTWARE.
namespace indicators { namespace indicators {
enum class Color { grey, red, green, yellow, blue, magenta, cyan, white }; 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) { inline std::ostream &write_duration(std::ostream &os, std::chrono::nanoseconds ns) {
using namespace std; using namespace std;
using namespace std::chrono; using namespace std::chrono;
@@ -675,6 +708,7 @@ enum class ProgressBarOption {
foreground_color, foreground_color,
spinner_show, spinner_show,
spinner_states, spinner_states,
font_styles,
hide_bar_when_complete hide_bar_when_complete
}; };
@@ -788,6 +822,8 @@ using SpinnerStates =
details::Setting<std::vector<std::string>, details::ProgressBarOption::spinner_states>; details::Setting<std::vector<std::string>, details::ProgressBarOption::spinner_states>;
using HideBarWhenComplete = using HideBarWhenComplete =
details::BooleanSetting<details::ProgressBarOption::hide_bar_when_complete>; details::BooleanSetting<details::ProgressBarOption::hide_bar_when_complete>;
using FontStyles =
details::Setting<std::vector<FontStyle>, details::ProgressBarOption::font_styles>;
} // namespace option } // namespace option
} // namespace indicators } // namespace indicators
@@ -803,7 +839,7 @@ class ProgressBar {
option::End, option::Fill, option::Lead, option::Remainder, option::End, option::Fill, option::Lead, option::Remainder,
option::MaxPostfixTextLen, option::Completed, option::ShowPercentage, option::MaxPostfixTextLen, option::Completed, option::ShowPercentage,
option::ShowElapsedTime, option::ShowRemainingTime, option::SavedStartTime, option::ShowElapsedTime, option::ShowRemainingTime, option::SavedStartTime,
option::ForegroundColor>; option::ForegroundColor, option::FontStyles>;
public: public:
template <typename... Args, template <typename... Args,
@@ -840,7 +876,9 @@ public:
details::get<details::ProgressBarOption::saved_start_time>( details::get<details::ProgressBarOption::saved_start_time>(
option::SavedStartTime{false}, std::forward<Args>(args)...), option::SavedStartTime{false}, std::forward<Args>(args)...),
details::get<details::ProgressBarOption::foreground_color>( details::get<details::ProgressBarOption::foreground_color>(
option::ForegroundColor{Color::white}, std::forward<Args>(args)...)) {} option::ForegroundColor{Color::unspecified}, std::forward<Args>(args)...),
details::get<details::ProgressBarOption::font_styles>(
option::FontStyles{std::vector<FontStyle>{}}, std::forward<Args>(args)...)) {}
template <typename T, details::ProgressBarOption id> template <typename T, details::ProgressBarOption id>
void set_option(details::Setting<T, id> &&setting) { void set_option(details::Setting<T, id> &&setting) {
@@ -956,6 +994,10 @@ private:
std::cout << termcolor::bold; std::cout << termcolor::bold;
details::set_stream_color(std::cout, get_value<details::ProgressBarOption::foreground_color>()); details::set_stream_color(std::cout, get_value<details::ProgressBarOption::foreground_color>());
for (auto &style : get_value<details::ProgressBarOption::font_styles>())
details::set_font_style(std::cout, style);
std::cout << get_value<details::ProgressBarOption::prefix_text>(); std::cout << get_value<details::ProgressBarOption::prefix_text>();
std::cout << get_value<details::ProgressBarOption::start>(); std::cout << get_value<details::ProgressBarOption::start>();
@@ -1020,7 +1062,7 @@ class BlockProgressBar {
using Settings = std::tuple<option::ForegroundColor, option::BarWidth, option::Start, option::End, using Settings = std::tuple<option::ForegroundColor, option::BarWidth, option::Start, option::End,
option::PrefixText, option::PostfixText, option::ShowPercentage, option::PrefixText, option::PostfixText, option::ShowPercentage,
option::ShowElapsedTime, option::ShowRemainingTime, option::Completed, option::ShowElapsedTime, option::ShowRemainingTime, option::Completed,
option::SavedStartTime, option::MaxPostfixTextLen>; option::SavedStartTime, option::MaxPostfixTextLen, option::FontStyles>;
public: public:
template <typename... Args, template <typename... Args,
@@ -1029,7 +1071,7 @@ public:
void *>::type = nullptr> void *>::type = nullptr>
explicit BlockProgressBar(Args &&... args) explicit BlockProgressBar(Args &&... args)
: settings_(details::get<details::ProgressBarOption::foreground_color>( : settings_(details::get<details::ProgressBarOption::foreground_color>(
option::ForegroundColor{Color::white}, std::forward<Args>(args)...), option::ForegroundColor{Color::unspecified}, std::forward<Args>(args)...),
details::get<details::ProgressBarOption::bar_width>(option::BarWidth{100}, details::get<details::ProgressBarOption::bar_width>(option::BarWidth{100},
std::forward<Args>(args)...), std::forward<Args>(args)...),
details::get<details::ProgressBarOption::start>(option::Start{"["}, details::get<details::ProgressBarOption::start>(option::Start{"["},
@@ -1051,7 +1093,9 @@ public:
details::get<details::ProgressBarOption::saved_start_time>( details::get<details::ProgressBarOption::saved_start_time>(
option::SavedStartTime{false}, std::forward<Args>(args)...), option::SavedStartTime{false}, std::forward<Args>(args)...),
details::get<details::ProgressBarOption::max_postfix_text_len>( details::get<details::ProgressBarOption::max_postfix_text_len>(
option::MaxPostfixTextLen{0}, std::forward<Args>(args)...)) {} option::MaxPostfixTextLen{0}, std::forward<Args>(args)...),
details::get<details::ProgressBarOption::font_styles>(
option::FontStyles{std::vector<FontStyle>{}}, std::forward<Args>(args)...)) {}
template <typename T, details::ProgressBarOption id> template <typename T, details::ProgressBarOption id>
void set_option(details::Setting<T, id> &&setting) { void set_option(details::Setting<T, id> &&setting) {
@@ -1164,6 +1208,10 @@ private:
std::cout << termcolor::bold; std::cout << termcolor::bold;
details::set_stream_color(std::cout, get_value<details::ProgressBarOption::foreground_color>()); details::set_stream_color(std::cout, get_value<details::ProgressBarOption::foreground_color>());
for (auto &style : get_value<details::ProgressBarOption::font_styles>())
details::set_font_style(std::cout, style);
std::cout << get_value<details::ProgressBarOption::prefix_text>(); std::cout << get_value<details::ProgressBarOption::prefix_text>();
std::cout << get_value<details::ProgressBarOption::start>(); std::cout << get_value<details::ProgressBarOption::start>();
@@ -1224,7 +1272,7 @@ class ProgressSpinner {
std::tuple<option::ForegroundColor, option::PrefixText, option::PostfixText, std::tuple<option::ForegroundColor, option::PrefixText, option::PostfixText,
option::ShowPercentage, option::ShowElapsedTime, option::ShowRemainingTime, option::ShowPercentage, option::ShowElapsedTime, option::ShowRemainingTime,
option::ShowSpinner, option::SavedStartTime, option::Completed, option::ShowSpinner, option::SavedStartTime, option::Completed,
option::MaxPostfixTextLen, option::SpinnerStates>; option::MaxPostfixTextLen, option::SpinnerStates, option::FontStyles>;
public: public:
template <typename... Args, template <typename... Args,
@@ -1233,7 +1281,7 @@ public:
void *>::type = nullptr> void *>::type = nullptr>
explicit ProgressSpinner(Args &&... args) explicit ProgressSpinner(Args &&... args)
: settings_(details::get<details::ProgressBarOption::foreground_color>( : settings_(details::get<details::ProgressBarOption::foreground_color>(
option::ForegroundColor{Color::white}, std::forward<Args>(args)...), option::ForegroundColor{Color::unspecified}, std::forward<Args>(args)...),
details::get<details::ProgressBarOption::prefix_text>( details::get<details::ProgressBarOption::prefix_text>(
option::PrefixText{}, std::forward<Args>(args)...), option::PrefixText{}, std::forward<Args>(args)...),
details::get<details::ProgressBarOption::postfix_text>( details::get<details::ProgressBarOption::postfix_text>(
@@ -1255,7 +1303,9 @@ public:
details::get<details::ProgressBarOption::spinner_states>( details::get<details::ProgressBarOption::spinner_states>(
option::SpinnerStates{std::vector<std::string>{"", "", "", "", "", "", option::SpinnerStates{std::vector<std::string>{"", "", "", "", "", "",
"", "", "", ""}}, "", "", "", ""}},
std::forward<Args>(args)...)) {} std::forward<Args>(args)...),
details::get<details::ProgressBarOption::font_styles>(
option::FontStyles{std::vector<FontStyle>{}}, std::forward<Args>(args)...)) {}
template <typename T, details::ProgressBarOption id> template <typename T, details::ProgressBarOption id>
void set_option(details::Setting<T, id> &&setting) { void set_option(details::Setting<T, id> &&setting) {
@@ -1359,6 +1409,10 @@ private:
std::cout << termcolor::bold; std::cout << termcolor::bold;
details::set_stream_color(std::cout, get_value<details::ProgressBarOption::foreground_color>()); details::set_stream_color(std::cout, get_value<details::ProgressBarOption::foreground_color>());
for (auto &style : get_value<details::ProgressBarOption::font_styles>())
details::set_font_style(std::cout, style);
std::cout << get_value<details::ProgressBarOption::prefix_text>(); std::cout << get_value<details::ProgressBarOption::prefix_text>();
if (get_value<details::ProgressBarOption::spinner_show>()) if (get_value<details::ProgressBarOption::spinner_show>())
std::cout << get_value<details::ProgressBarOption::spinner_states>() std::cout << get_value<details::ProgressBarOption::spinner_states>()