From 03823ff2e38f98e2ef9c443c55010d6f2df2e443 Mon Sep 17 00:00:00 2001 From: Martin Rotter Date: Thu, 21 Oct 2021 08:56:03 +0200 Subject: [PATCH] have text in progress bar elided if needed --- .../gui/reusable/progressbarwithtext.cpp | 31 +++++++------------ .../gui/reusable/progressbarwithtext.h | 5 --- 2 files changed, 11 insertions(+), 25 deletions(-) diff --git a/src/librssguard/gui/reusable/progressbarwithtext.cpp b/src/librssguard/gui/reusable/progressbarwithtext.cpp index f97838c52..790d31edf 100644 --- a/src/librssguard/gui/reusable/progressbarwithtext.cpp +++ b/src/librssguard/gui/reusable/progressbarwithtext.cpp @@ -5,25 +5,7 @@ #include "definitions/definitions.h" #include "miscellaneous/application.h" -ProgressBarWithText::ProgressBarWithText(QWidget* parent) : QProgressBar(parent) { - //setSizePolicy(QSizePolicy::Policy::Maximum, QSizePolicy::Policy::Preferred); -} - -/* - QSize ProgressBarWithText::minimumSizeHint() const { - QString txt = text(); - - return QSize(fontMetrics().boundingRect(txt).width() + 32, - QProgressBar::minimumSizeHint().height()); - } - - QSize ProgressBarWithText::sizeHint() const { - QString txt = text(); - - return QSize(fontMetrics().boundingRect(txt).width() + 32, - QProgressBar::sizeHint().height()); - } - */ +ProgressBarWithText::ProgressBarWithText(QWidget* parent) : QProgressBar(parent) {} QString ProgressBarWithText::text() const { qint64 total_steps = qint64(maximum()) - minimum(); @@ -45,5 +27,14 @@ QString ProgressBarWithText::text() const { const auto progress = static_cast((qint64(value()) - minimum()) * 100.0 / total_steps); result.replace(QLatin1String("%p"), locale.toString(progress)); - return result; + + // Now, shorten the text to fit the widget. + bool elide = false; + + while (fontMetrics().boundingRect(result + QSL("...")).width() > width() - 30) { + result.chop(1); + elide = true; + } + + return elide ? result + QSL("...") : result; } diff --git a/src/librssguard/gui/reusable/progressbarwithtext.h b/src/librssguard/gui/reusable/progressbarwithtext.h index ddcb7d99d..123f2f35a 100644 --- a/src/librssguard/gui/reusable/progressbarwithtext.h +++ b/src/librssguard/gui/reusable/progressbarwithtext.h @@ -9,11 +9,6 @@ class ProgressBarWithText : public QProgressBar { public: explicit ProgressBarWithText(QWidget* parent = nullptr); - // NOTE: Can be uncommented (along with constructor code) - // to enable automatic fit-to-contents progress bars. - //virtual QSize minimumSizeHint() const; - //virtual QSize sizeHint() const; - virtual QString text() const; };