diff --git a/src/base/preferences.cpp b/src/base/preferences.cpp index de5845fe3..ef0ad708b 100644 --- a/src/base/preferences.cpp +++ b/src/base/preferences.cpp @@ -186,6 +186,19 @@ void Preferences::setAlternatingRowColors(const bool b) setValue(u"Preferences/General/AlternatingRowColors"_s, b); } +bool Preferences::getProgressBarFollowsTextColor() const +{ + return value(u"GUI/TransferList/ProgressBarFollowsTextColor"_s, false); +} + +void Preferences::setProgressBarFollowsTextColor(const bool value) +{ + if (value == getProgressBarFollowsTextColor()) + return; + + setValue(u"GUI/TransferList/ProgressBarFollowsTextColor"_s, value); +} + bool Preferences::getHideZeroValues() const { return value(u"Preferences/General/HideZeroValues"_s, false); diff --git a/src/base/preferences.h b/src/base/preferences.h index bfe53d150..bf08fde3d 100644 --- a/src/base/preferences.h +++ b/src/base/preferences.h @@ -113,6 +113,8 @@ public: void showSpeedInTitleBar(bool show); bool useAlternatingRowColors() const; void setAlternatingRowColors(bool b); + bool getProgressBarFollowsTextColor() const; + void setProgressBarFollowsTextColor(bool value); bool getHideZeroValues() const; void setHideZeroValues(bool b); int getHideZeroComboValues() const; diff --git a/src/gui/optionsdialog.cpp b/src/gui/optionsdialog.cpp index 2d184daea..70eb43c43 100644 --- a/src/gui/optionsdialog.cpp +++ b/src/gui/optionsdialog.cpp @@ -261,6 +261,7 @@ void OptionsDialog::loadBehaviorTabOptions() m_ui->confirmDeletion->setChecked(pref->confirmTorrentDeletion()); m_ui->checkAltRowColors->setChecked(pref->useAlternatingRowColors()); + m_ui->checkProgressBarFollowsTextColor->setChecked(pref->getProgressBarFollowsTextColor()); m_ui->checkHideZero->setChecked(pref->getHideZeroValues()); m_ui->comboHideZero->setCurrentIndex(pref->getHideZeroComboValues()); m_ui->comboHideZero->setEnabled(m_ui->checkHideZero->isChecked()); @@ -389,6 +390,7 @@ void OptionsDialog::loadBehaviorTabOptions() connect(m_ui->confirmDeletion, &QAbstractButton::toggled, this, &ThisType::enableApplyButton); connect(m_ui->checkAltRowColors, &QAbstractButton::toggled, this, &ThisType::enableApplyButton); + connect(m_ui->checkProgressBarFollowsTextColor, &QAbstractButton::toggled, this, &ThisType::enableApplyButton); connect(m_ui->checkHideZero, &QAbstractButton::toggled, m_ui->comboHideZero, &QWidget::setEnabled); connect(m_ui->checkHideZero, &QAbstractButton::toggled, this, &ThisType::enableApplyButton); connect(m_ui->comboHideZero, qComboBoxCurrentIndexChanged, this, &ThisType::enableApplyButton); @@ -483,6 +485,7 @@ void OptionsDialog::saveBehaviorTabOptions() const pref->setConfirmTorrentDeletion(m_ui->confirmDeletion->isChecked()); pref->setAlternatingRowColors(m_ui->checkAltRowColors->isChecked()); + pref->setProgressBarFollowsTextColor(m_ui->checkProgressBarFollowsTextColor->isChecked()); pref->setHideZeroValues(m_ui->checkHideZero->isChecked()); pref->setHideZeroComboValues(m_ui->comboHideZero->currentIndex()); diff --git a/src/gui/optionsdialog.ui b/src/gui/optionsdialog.ui index 188a9c564..4ac59453c 100644 --- a/src/gui/optionsdialog.ui +++ b/src/gui/optionsdialog.ui @@ -297,6 +297,13 @@ + + + + Make progress bars follow text colors + + + diff --git a/src/gui/progressbarpainter.cpp b/src/gui/progressbarpainter.cpp index 1f0d40c7c..79a06d409 100644 --- a/src/gui/progressbarpainter.cpp +++ b/src/gui/progressbarpainter.cpp @@ -54,7 +54,7 @@ ProgressBarPainter::ProgressBarPainter(QObject *parent) connect(UIThemeManager::instance(), &UIThemeManager::themeChanged, this, &ProgressBarPainter::applyUITheme); } -void ProgressBarPainter::paint(QPainter *painter, const QStyleOptionViewItem &option, const QString &text, const int progress) const +void ProgressBarPainter::paint(QPainter *painter, const QStyleOptionViewItem &option, const QString &text, const int progress, const QColor &color) const { QStyleOptionProgressBar styleOption; styleOption.initFrom(&m_dummyProgressBar); @@ -72,8 +72,14 @@ void ProgressBarPainter::paint(QPainter *painter, const QStyleOptionViewItem &op const bool isEnabled = option.state.testFlag(QStyle::State_Enabled); styleOption.palette.setCurrentColorGroup(isEnabled ? QPalette::Active : QPalette::Disabled); - if (m_chunkColor.isValid()) + if (color.isValid()) + { + styleOption.palette.setColor(QPalette::Highlight, color); + } + else if (m_chunkColor.isValid()) + { styleOption.palette.setColor(QPalette::Highlight, m_chunkColor); + } painter->save(); const QStyle *style = m_dummyProgressBar.style(); diff --git a/src/gui/progressbarpainter.h b/src/gui/progressbarpainter.h index cf0ea1932..29156134b 100644 --- a/src/gui/progressbarpainter.h +++ b/src/gui/progressbarpainter.h @@ -43,7 +43,7 @@ class ProgressBarPainter : public QObject public: explicit ProgressBarPainter(QObject *parent = nullptr); - void paint(QPainter *painter, const QStyleOptionViewItem &option, const QString &text, int progress) const; + void paint(QPainter *painter, const QStyleOptionViewItem &option, const QString &text, int progress, const QColor &color = {}) const; private: void applyUITheme(); diff --git a/src/gui/transferlistdelegate.cpp b/src/gui/transferlistdelegate.cpp index e08cb7ef8..8bc41e45d 100644 --- a/src/gui/transferlistdelegate.cpp +++ b/src/gui/transferlistdelegate.cpp @@ -30,6 +30,7 @@ #include +#include "base/preferences.h" #include "transferlistmodel.h" TransferListDelegate::TransferListDelegate(QObject *parent) @@ -90,7 +91,9 @@ void TransferListDelegate::paint(QPainter *painter, const QStyleOptionViewItem & QStyleOptionViewItem customOption {option}; customOption.state.setFlag(QStyle::State_Enabled, isEnableState(torrentState)); - m_progressBarPainter.paint(painter, customOption, index.data().toString(), progress); + const QColor color = Preferences::instance()->getProgressBarFollowsTextColor() ? index.data(Qt::ForegroundRole).value() : QColor(); + + m_progressBarPainter.paint(painter, customOption, index.data().toString(), progress, color); } break; default: