mirror of
https://github.com/Sude-/lgogdownloader.git
synced 2024-11-20 03:39:17 +01:00
Progressbar: add function to get bar as string
This commit is contained in:
parent
3fe58a06a1
commit
037582d3b1
@ -16,6 +16,7 @@ class ProgressBar
|
|||||||
ProgressBar(bool bUnicode, bool bColor);
|
ProgressBar(bool bUnicode, bool bColor);
|
||||||
virtual ~ProgressBar();
|
virtual ~ProgressBar();
|
||||||
void draw(unsigned int length, double fraction);
|
void draw(unsigned int length, double fraction);
|
||||||
|
std::string createBarString(unsigned int length, double fraction);
|
||||||
protected:
|
protected:
|
||||||
private:
|
private:
|
||||||
std::vector<std::string> const m_bar_chars;
|
std::vector<std::string> const m_bar_chars;
|
||||||
|
@ -6,6 +6,7 @@
|
|||||||
|
|
||||||
#include "progressbar.h"
|
#include "progressbar.h"
|
||||||
#include <cmath>
|
#include <cmath>
|
||||||
|
#include <sstream>
|
||||||
|
|
||||||
ProgressBar::ProgressBar(bool bUnicode, bool bColor)
|
ProgressBar::ProgressBar(bool bUnicode, bool bColor)
|
||||||
:
|
:
|
||||||
@ -46,6 +47,12 @@ ProgressBar::~ProgressBar()
|
|||||||
|
|
||||||
void ProgressBar::draw(unsigned int length, double fraction)
|
void ProgressBar::draw(unsigned int length, double fraction)
|
||||||
{
|
{
|
||||||
|
std::cout << createBarString(length, fraction);
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string ProgressBar::createBarString(unsigned int length, double fraction)
|
||||||
|
{
|
||||||
|
std::ostringstream ss;
|
||||||
// validation
|
// validation
|
||||||
if (!std::isnormal(fraction) || (fraction < 0.0)) fraction = 0.0;
|
if (!std::isnormal(fraction) || (fraction < 0.0)) fraction = 0.0;
|
||||||
else if (fraction > 1.0) fraction = 1.0;
|
else if (fraction > 1.0) fraction = 1.0;
|
||||||
@ -57,29 +64,31 @@ void ProgressBar::draw(unsigned int length, double fraction)
|
|||||||
unsigned int partial_bar_char_index = (unsigned int) std::floor((bar_part - whole_bar_chars) * 8.0);
|
unsigned int partial_bar_char_index = (unsigned int) std::floor((bar_part - whole_bar_chars) * 8.0);
|
||||||
|
|
||||||
// left border
|
// left border
|
||||||
if (m_use_color) std::cout << m_border_color;
|
if (m_use_color) ss << m_border_color;
|
||||||
std::cout << (m_use_unicode ? m_left_border : m_simple_left_border);
|
ss << (m_use_unicode ? m_left_border : m_simple_left_border);
|
||||||
|
|
||||||
// whole completed bars
|
// whole completed bars
|
||||||
if (m_use_color) std::cout << m_bar_color;
|
if (m_use_color) ss << m_bar_color;
|
||||||
unsigned int i = 0;
|
unsigned int i = 0;
|
||||||
for (; i < whole_bar_chars_i; i++)
|
for (; i < whole_bar_chars_i; i++)
|
||||||
{
|
{
|
||||||
std::cout << (m_use_unicode ? m_bar_chars[8] : m_simple_bar_char);
|
ss << (m_use_unicode ? m_bar_chars[8] : m_simple_bar_char);
|
||||||
}
|
}
|
||||||
|
|
||||||
// partial completed bar
|
// partial completed bar
|
||||||
if (i < length) std::cout << (m_use_unicode ? m_bar_chars[partial_bar_char_index] : m_simple_empty_fill);
|
if (i < length) ss << (m_use_unicode ? m_bar_chars[partial_bar_char_index] : m_simple_empty_fill);
|
||||||
|
|
||||||
// whole unfinished bars
|
// whole unfinished bars
|
||||||
if (m_use_color) std::cout << COLOR_RESET;
|
if (m_use_color) ss << COLOR_RESET;
|
||||||
for (i = whole_bar_chars_i + 1; i < length; i++)
|
for (i = whole_bar_chars_i + 1; i < length; i++)
|
||||||
{ // first entry in m_bar_chars is assumed to be the empty bar
|
{ // first entry in m_bar_chars is assumed to be the empty bar
|
||||||
std::cout << (m_use_unicode ? m_bar_chars[0] : m_simple_empty_fill);
|
ss << (m_use_unicode ? m_bar_chars[0] : m_simple_empty_fill);
|
||||||
}
|
}
|
||||||
|
|
||||||
// right border
|
// right border
|
||||||
if (m_use_color) std::cout << m_border_color;
|
if (m_use_color) ss << m_border_color;
|
||||||
std::cout << (m_use_unicode ? m_right_border : m_simple_right_border);
|
ss << (m_use_unicode ? m_right_border : m_simple_right_border);
|
||||||
if (m_use_color) std::cout << COLOR_RESET;
|
if (m_use_color) ss << COLOR_RESET;
|
||||||
|
|
||||||
|
return ss.str();
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user