diff --git a/src/gui/transferlistmodel.cpp b/src/gui/transferlistmodel.cpp index 95c996eac..5695a667b 100644 --- a/src/gui/transferlistmodel.cpp +++ b/src/gui/transferlistmodel.cpp @@ -43,9 +43,10 @@ #include "base/utils/fs.h" #include "base/utils/misc.h" #include "base/utils/string.h" +#include "uithememanager.h" static QIcon getIconByState(BitTorrent::TorrentState state); -static QColor getColorByState(BitTorrent::TorrentState state); +static QColor getDefaultColorByState(BitTorrent::TorrentState state); static QIcon getPausedIcon(); static QIcon getQueuedIcon(); @@ -59,6 +60,48 @@ static QIcon getErrorIcon(); static bool isDarkTheme(); +namespace +{ + QHash torrentStateColorsFromUITheme() + { + struct TorrentStateColorDescriptor + { + const BitTorrent::TorrentState state; + const QString id; + }; + + const TorrentStateColorDescriptor colorDescriptors[] = + { + {BitTorrent::TorrentState::Downloading, QLatin1String("TransferList.Downloading")}, + {BitTorrent::TorrentState::StalledDownloading, QLatin1String("TransferList.StalledDownloading")}, + {BitTorrent::TorrentState::DownloadingMetadata, QLatin1String("TransferList.DownloadingMetadata")}, + {BitTorrent::TorrentState::ForcedDownloading, QLatin1String("TransferList.ForcedDownloading")}, + {BitTorrent::TorrentState::Allocating, QLatin1String("TransferList.Allocating")}, + {BitTorrent::TorrentState::Uploading, QLatin1String("TransferList.Uploading")}, + {BitTorrent::TorrentState::StalledUploading, QLatin1String("TransferList.StalledUploading")}, + {BitTorrent::TorrentState::ForcedUploading, QLatin1String("TransferList.ForcedUploading")}, + {BitTorrent::TorrentState::QueuedDownloading, QLatin1String("TransferList.QueuedDownloading")}, + {BitTorrent::TorrentState::QueuedUploading, QLatin1String("TransferList.QueuedUploading")}, + {BitTorrent::TorrentState::CheckingDownloading, QLatin1String("TransferList.CheckingDownloading")}, + {BitTorrent::TorrentState::CheckingUploading, QLatin1String("TransferList.CheckingUploading")}, + {BitTorrent::TorrentState::CheckingResumeData, QLatin1String("TransferList.CheckingResumeData")}, + {BitTorrent::TorrentState::PausedDownloading, QLatin1String("TransferList.PausedDownloading")}, + {BitTorrent::TorrentState::PausedUploading, QLatin1String("TransferList.PausedUploading")}, + {BitTorrent::TorrentState::Moving, QLatin1String("TransferList.Moving")}, + {BitTorrent::TorrentState::MissingFiles, QLatin1String("TransferList.MissingFiles")}, + {BitTorrent::TorrentState::Error, QLatin1String("TransferList.Error")} + }; + + QHash colors; + for (const TorrentStateColorDescriptor &colorDescriptor : colorDescriptors) { + const QColor themeColor = UIThemeManager::instance()->getColor(colorDescriptor.id, QColor()); + if (themeColor.isValid()) + colors.insert(colorDescriptor.state, themeColor); + } + return colors; + } +} + // TransferListModel TransferListModel::TransferListModel(QObject *parent) @@ -83,27 +126,7 @@ TransferListModel::TransferListModel(QObject *parent) {BitTorrent::TorrentState::MissingFiles, tr("Missing Files")}, {BitTorrent::TorrentState::Error, tr("Errored", "Torrent status, the torrent has an error")} } - , m_stateForegroundColors { - {BitTorrent::TorrentState::Unknown, getColorByState(BitTorrent::TorrentState::Unknown)}, - {BitTorrent::TorrentState::ForcedDownloading, getColorByState(BitTorrent::TorrentState::ForcedDownloading)}, - {BitTorrent::TorrentState::Downloading, getColorByState(BitTorrent::TorrentState::Downloading)}, - {BitTorrent::TorrentState::DownloadingMetadata, getColorByState(BitTorrent::TorrentState::DownloadingMetadata)}, - {BitTorrent::TorrentState::Allocating, getColorByState(BitTorrent::TorrentState::Allocating)}, - {BitTorrent::TorrentState::StalledDownloading, getColorByState(BitTorrent::TorrentState::StalledDownloading)}, - {BitTorrent::TorrentState::ForcedUploading, getColorByState(BitTorrent::TorrentState::ForcedUploading)}, - {BitTorrent::TorrentState::Uploading, getColorByState(BitTorrent::TorrentState::Uploading)}, - {BitTorrent::TorrentState::StalledUploading, getColorByState(BitTorrent::TorrentState::StalledUploading)}, - {BitTorrent::TorrentState::CheckingResumeData, getColorByState(BitTorrent::TorrentState::CheckingResumeData)}, - {BitTorrent::TorrentState::QueuedDownloading, getColorByState(BitTorrent::TorrentState::QueuedDownloading)}, - {BitTorrent::TorrentState::QueuedUploading, getColorByState(BitTorrent::TorrentState::QueuedUploading)}, - {BitTorrent::TorrentState::CheckingUploading, getColorByState(BitTorrent::TorrentState::CheckingUploading)}, - {BitTorrent::TorrentState::CheckingDownloading, getColorByState(BitTorrent::TorrentState::CheckingDownloading)}, - {BitTorrent::TorrentState::PausedDownloading, getColorByState(BitTorrent::TorrentState::PausedDownloading)}, - {BitTorrent::TorrentState::PausedUploading, getColorByState(BitTorrent::TorrentState::PausedUploading)}, - {BitTorrent::TorrentState::Moving, getColorByState(BitTorrent::TorrentState::Moving)}, - {BitTorrent::TorrentState::MissingFiles, getColorByState(BitTorrent::TorrentState::MissingFiles)}, - {BitTorrent::TorrentState::Error, getColorByState(BitTorrent::TorrentState::Error)} - } + , m_stateThemeColors {torrentStateColorsFromUITheme()} { configure(); connect(Preferences::instance(), &Preferences::changed, this, &TransferListModel::configure); @@ -450,7 +473,7 @@ QVariant TransferListModel::data(const QModelIndex &index, const int role) const switch (role) { case Qt::ForegroundRole: - return stateForeground(torrent->state()); + return m_stateThemeColors.value(torrent->state(), getDefaultColorByState(torrent->state())); case Qt::DisplayRole: return displayValue(torrent, index.column()); case UnderlyingDataRole: @@ -609,16 +632,6 @@ void TransferListModel::configure() } } -void TransferListModel::setStateForeground(const BitTorrent::TorrentState state, const QColor &color) -{ - m_stateForegroundColors[state] = color; -} - -QColor TransferListModel::stateForeground(const BitTorrent::TorrentState state) const -{ - return m_stateForegroundColors[state]; -} - // Static functions QIcon getIconByState(const BitTorrent::TorrentState state) @@ -658,7 +671,7 @@ QIcon getIconByState(const BitTorrent::TorrentState state) } } -QColor getColorByState(const BitTorrent::TorrentState state) +QColor getDefaultColorByState(const BitTorrent::TorrentState state) { // Color names taken from http://cloford.com/resources/colours/500col.htm bool dark = isDarkTheme(); diff --git a/src/gui/transferlistmodel.h b/src/gui/transferlistmodel.h index 8740aa727..5c80a6d70 100644 --- a/src/gui/transferlistmodel.h +++ b/src/gui/transferlistmodel.h @@ -32,6 +32,7 @@ #include #include +#include #include #include "base/bittorrent/torrenthandle.h" @@ -101,9 +102,6 @@ public: BitTorrent::TorrentHandle *torrentHandle(const QModelIndex &index) const; - void setStateForeground(BitTorrent::TorrentState state, const QColor& color); - QColor stateForeground(BitTorrent::TorrentState state) const; - private slots: void addTorrent(BitTorrent::TorrentHandle *const torrent); void handleTorrentAboutToBeRemoved(BitTorrent::TorrentHandle *const torrent); @@ -119,7 +117,7 @@ private: QHash m_torrentMap; // maps torrent handle to row number const QHash m_statusStrings; // row text colors - QHash m_stateForegroundColors; + const QHash m_stateThemeColors; enum class HideZeroValuesMode { diff --git a/src/gui/transferlistwidget.cpp b/src/gui/transferlistwidget.cpp index 441b3151d..952b68bed 100644 --- a/src/gui/transferlistwidget.cpp +++ b/src/gui/transferlistwidget.cpp @@ -240,197 +240,6 @@ TransferListModel *TransferListWidget::getSourceModel() const return m_listModel; } -QColor TransferListWidget::unknownStateForeground() const -{ - return m_listModel->stateForeground(BitTorrent::TorrentState::Unknown); -} - -QColor TransferListWidget::forcedDownloadingStateForeground() const -{ - return m_listModel->stateForeground(BitTorrent::TorrentState::ForcedDownloading); -} - -QColor TransferListWidget::downloadingStateForeground() const -{ - return m_listModel->stateForeground(BitTorrent::TorrentState::Downloading); -} - -QColor TransferListWidget::downloadingMetadataStateForeground() const -{ - return m_listModel->stateForeground(BitTorrent::TorrentState::DownloadingMetadata); -} - -QColor TransferListWidget::allocatingStateForeground() const -{ - return m_listModel->stateForeground(BitTorrent::TorrentState::Allocating); -} - -QColor TransferListWidget::stalledDownloadingStateForeground() const -{ - return m_listModel->stateForeground(BitTorrent::TorrentState::StalledDownloading); -} - -QColor TransferListWidget::forcedUploadingStateForeground() const -{ - return m_listModel->stateForeground(BitTorrent::TorrentState::ForcedUploading); -} - -QColor TransferListWidget::uploadingStateForeground() const -{ - return m_listModel->stateForeground(BitTorrent::TorrentState::Uploading); -} - -QColor TransferListWidget::stalledUploadingStateForeground() const -{ - return m_listModel->stateForeground(BitTorrent::TorrentState::StalledUploading); -} - -QColor TransferListWidget::checkingResumeDataStateForeground() const -{ - return m_listModel->stateForeground(BitTorrent::TorrentState::CheckingResumeData); -} - -QColor TransferListWidget::queuedDownloadingStateForeground() const -{ - return m_listModel->stateForeground(BitTorrent::TorrentState::QueuedDownloading); -} - -QColor TransferListWidget::queuedUploadingStateForeground() const -{ - return m_listModel->stateForeground(BitTorrent::TorrentState::QueuedUploading); -} - -QColor TransferListWidget::checkingUploadingStateForeground() const -{ - return m_listModel->stateForeground(BitTorrent::TorrentState::CheckingUploading); -} - -QColor TransferListWidget::checkingDownloadingStateForeground() const -{ - return m_listModel->stateForeground(BitTorrent::TorrentState::CheckingDownloading); -} - -QColor TransferListWidget::pausedDownloadingStateForeground() const -{ - return m_listModel->stateForeground(BitTorrent::TorrentState::PausedDownloading); -} - -QColor TransferListWidget::pausedUploadingStateForeground() const -{ - return m_listModel->stateForeground(BitTorrent::TorrentState::PausedUploading); -} - -QColor TransferListWidget::movingStateForeground() const -{ - return m_listModel->stateForeground(BitTorrent::TorrentState::Moving); -} - -QColor TransferListWidget::missingFilesStateForeground() const -{ - return m_listModel->stateForeground(BitTorrent::TorrentState::MissingFiles); -} - -QColor TransferListWidget::errorStateForeground() const -{ - return m_listModel->stateForeground(BitTorrent::TorrentState::Error); -} - -void TransferListWidget::setUnknownStateForeground(const QColor &color) -{ - m_listModel->setStateForeground(BitTorrent::TorrentState::Unknown, color); -} - -void TransferListWidget::setForcedDownloadingStateForeground(const QColor &color) -{ - m_listModel->setStateForeground(BitTorrent::TorrentState::ForcedDownloading, color); -} - -void TransferListWidget::setDownloadingStateForeground(const QColor &color) -{ - m_listModel->setStateForeground(BitTorrent::TorrentState::Downloading, color); -} - -void TransferListWidget::setDownloadingMetadataStateForeground(const QColor &color) -{ - m_listModel->setStateForeground(BitTorrent::TorrentState::DownloadingMetadata, color); -} - -void TransferListWidget::setAllocatingStateForeground(const QColor &color) -{ - m_listModel->setStateForeground(BitTorrent::TorrentState::Allocating, color); -} - -void TransferListWidget::setStalledDownloadingStateForeground(const QColor &color) -{ - m_listModel->setStateForeground(BitTorrent::TorrentState::StalledDownloading, color); -} - -void TransferListWidget::setForcedUploadingStateForeground(const QColor &color) -{ - m_listModel->setStateForeground(BitTorrent::TorrentState::ForcedUploading, color); -} - -void TransferListWidget::setUploadingStateForeground(const QColor &color) -{ - m_listModel->setStateForeground(BitTorrent::TorrentState::Uploading, color); -} - -void TransferListWidget::setStalledUploadingStateForeground(const QColor &color) -{ - m_listModel->setStateForeground(BitTorrent::TorrentState::StalledUploading, color); -} - -void TransferListWidget::setCheckingResumeDataStateForeground(const QColor &color) -{ - m_listModel->setStateForeground(BitTorrent::TorrentState::CheckingResumeData, color); -} - -void TransferListWidget::setQueuedDownloadingStateForeground(const QColor &color) -{ - m_listModel->setStateForeground(BitTorrent::TorrentState::QueuedDownloading, color); -} - -void TransferListWidget::setQueuedUploadingStateForeground(const QColor &color) -{ - m_listModel->setStateForeground(BitTorrent::TorrentState::QueuedUploading, color); -} - -void TransferListWidget::setCheckingUploadingStateForeground(const QColor &color) -{ - m_listModel->setStateForeground(BitTorrent::TorrentState::CheckingUploading, color); -} - -void TransferListWidget::setCheckingDownloadingStateForeground(const QColor &color) -{ - m_listModel->setStateForeground(BitTorrent::TorrentState::CheckingDownloading, color); -} - -void TransferListWidget::setPausedDownloadingStateForeground(const QColor &color) -{ - m_listModel->setStateForeground(BitTorrent::TorrentState::PausedDownloading, color); -} - -void TransferListWidget::setPausedUploadingStateForeground(const QColor &color) -{ - m_listModel->setStateForeground(BitTorrent::TorrentState::PausedUploading, color); -} - -void TransferListWidget::setMovingStateForeground(const QColor &color) -{ - m_listModel->setStateForeground(BitTorrent::TorrentState::Moving, color); -} - -void TransferListWidget::setMissingFilesStateForeground(const QColor &color) -{ - m_listModel->setStateForeground(BitTorrent::TorrentState::MissingFiles, color); -} - -void TransferListWidget::setErrorStateForeground(const QColor &color) -{ - m_listModel->setStateForeground(BitTorrent::TorrentState::Error, color); -} - - void TransferListWidget::previewFile(const QString &filePath) { Utils::Gui::openPath(filePath); diff --git a/src/gui/transferlistwidget.h b/src/gui/transferlistwidget.h index 166c8fcd9..4282fa468 100644 --- a/src/gui/transferlistwidget.h +++ b/src/gui/transferlistwidget.h @@ -47,26 +47,6 @@ class TransferListWidget final : public QTreeView { Q_OBJECT - Q_PROPERTY(QColor unknownStateForeground READ unknownStateForeground WRITE setUnknownStateForeground) - Q_PROPERTY(QColor forcedDownloadingStateForeground READ forcedDownloadingStateForeground WRITE setForcedDownloadingStateForeground) - Q_PROPERTY(QColor downloadingStateForeground READ downloadingStateForeground WRITE setDownloadingStateForeground) - Q_PROPERTY(QColor downloadingMetadataStateForeground READ downloadingMetadataStateForeground WRITE setDownloadingMetadataStateForeground) - Q_PROPERTY(QColor allocatingStateForeground READ allocatingStateForeground WRITE setAllocatingStateForeground) - Q_PROPERTY(QColor stalledDownloadingStateForeground READ stalledDownloadingStateForeground WRITE setStalledDownloadingStateForeground) - Q_PROPERTY(QColor forcedUploadingStateForeground READ forcedUploadingStateForeground WRITE setForcedUploadingStateForeground) - Q_PROPERTY(QColor uploadingStateForeground READ uploadingStateForeground WRITE setUploadingStateForeground) - Q_PROPERTY(QColor stalledUploadingStateForeground READ stalledUploadingStateForeground WRITE setStalledUploadingStateForeground) - Q_PROPERTY(QColor checkingResumeDataStateForeground READ checkingResumeDataStateForeground WRITE setCheckingResumeDataStateForeground) - Q_PROPERTY(QColor queuedDownloadingStateForeground READ queuedDownloadingStateForeground WRITE setQueuedDownloadingStateForeground) - Q_PROPERTY(QColor queuedUploadingStateForeground READ queuedUploadingStateForeground WRITE setQueuedUploadingStateForeground) - Q_PROPERTY(QColor checkingUploadingStateForeground READ checkingUploadingStateForeground WRITE setCheckingUploadingStateForeground) - Q_PROPERTY(QColor checkingDownloadingStateForeground READ checkingDownloadingStateForeground WRITE setCheckingDownloadingStateForeground) - Q_PROPERTY(QColor pausedDownloadingStateForeground READ pausedDownloadingStateForeground WRITE setPausedDownloadingStateForeground) - Q_PROPERTY(QColor pausedUploadingStateForeground READ pausedUploadingStateForeground WRITE setPausedUploadingStateForeground) - Q_PROPERTY(QColor movingStateForeground READ movingStateForeground WRITE setMovingStateForeground) - Q_PROPERTY(QColor missingFilesStateForeground READ missingFilesStateForeground WRITE setMissingFilesStateForeground) - Q_PROPERTY(QColor errorStateForeground READ errorStateForeground WRITE setErrorStateForeground) - public: TransferListWidget(QWidget *parent, MainWindow *mainWindow); ~TransferListWidget() override; @@ -143,47 +123,6 @@ private: void applyToSelectedTorrents(const std::function &fn); QVector getVisibleTorrents() const; - // supposed to be used with qss only - QColor unknownStateForeground() const; - QColor forcedDownloadingStateForeground() const; - QColor downloadingStateForeground() const; - QColor downloadingMetadataStateForeground() const; - QColor allocatingStateForeground() const; - QColor stalledDownloadingStateForeground() const; - QColor forcedUploadingStateForeground() const; - QColor uploadingStateForeground() const; - QColor stalledUploadingStateForeground() const; - QColor checkingResumeDataStateForeground() const; - QColor queuedDownloadingStateForeground() const; - QColor queuedUploadingStateForeground() const; - QColor checkingUploadingStateForeground() const; - QColor checkingDownloadingStateForeground() const; - QColor pausedDownloadingStateForeground() const; - QColor pausedUploadingStateForeground() const; - QColor movingStateForeground() const; - QColor missingFilesStateForeground() const; - QColor errorStateForeground() const; - - void setUnknownStateForeground(const QColor &color); - void setForcedDownloadingStateForeground(const QColor &color); - void setDownloadingStateForeground(const QColor &color); - void setDownloadingMetadataStateForeground(const QColor &color); - void setAllocatingStateForeground(const QColor &color); - void setStalledDownloadingStateForeground(const QColor &color); - void setForcedUploadingStateForeground(const QColor &color); - void setUploadingStateForeground(const QColor &color); - void setStalledUploadingStateForeground(const QColor &color); - void setCheckingResumeDataStateForeground(const QColor &color); - void setQueuedDownloadingStateForeground(const QColor &color); - void setQueuedUploadingStateForeground(const QColor &color); - void setCheckingUploadingStateForeground(const QColor &color); - void setCheckingDownloadingStateForeground(const QColor &color); - void setPausedDownloadingStateForeground(const QColor &color); - void setPausedUploadingStateForeground(const QColor &color); - void setMovingStateForeground(const QColor &color); - void setMissingFilesStateForeground(const QColor &color); - void setErrorStateForeground(const QColor &color); - TransferListDelegate *m_listDelegate; TransferListModel *m_listModel; TransferListSortModel *m_sortFilterModel;