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: