Browse Source

Merge pull request #11433 from jagannatharjun/colors

Allow transfer list text color changes through QSS
adaptive-webui-19844
sledgehammer999 5 years ago committed by GitHub
parent
commit
18de63f743
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 5
      src/base/bittorrent/torrenthandle.cpp
  2. 2
      src/base/bittorrent/torrenthandle.h
  3. 33
      src/gui/transferlistmodel.cpp
  4. 8
      src/gui/transferlistmodel.h
  5. 191
      src/gui/transferlistwidget.cpp
  6. 61
      src/gui/transferlistwidget.h

5
src/base/bittorrent/torrenthandle.cpp

@ -177,6 +177,11 @@ CreateTorrentParams::CreateTorrentParams(const AddTorrentParams &params)
savePath = Session::instance()->defaultSavePath(); savePath = Session::instance()->defaultSavePath();
} }
uint BitTorrent::qHash(const BitTorrent::TorrentState key, const uint seed)
{
return ::qHash(static_cast<std::underlying_type_t<TorrentState>>(key), seed);
}
// TorrentHandle // TorrentHandle
const qreal TorrentHandle::USE_GLOBAL_RATIO = -2.; const qreal TorrentHandle::USE_GLOBAL_RATIO = -2.;

2
src/base/bittorrent/torrenthandle.h

@ -129,6 +129,8 @@ namespace BitTorrent
Error Error
}; };
uint qHash(TorrentState key, uint seed);
class TorrentHandle : public QObject class TorrentHandle : public QObject
{ {
Q_DISABLE_COPY(TorrentHandle) Q_DISABLE_COPY(TorrentHandle)

33
src/gui/transferlistmodel.cpp

@ -59,6 +59,27 @@ static bool isDarkTheme();
TransferListModel::TransferListModel(QObject *parent) TransferListModel::TransferListModel(QObject *parent)
: QAbstractListModel(parent) : QAbstractListModel(parent)
, 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)}
}
{ {
// Load the torrents // Load the torrents
using namespace BitTorrent; using namespace BitTorrent;
@ -169,7 +190,7 @@ QVariant TransferListModel::data(const QModelIndex &index, const int role) const
return getIconByState(torrent->state()); return getIconByState(torrent->state());
if (role == Qt::ForegroundRole) if (role == Qt::ForegroundRole)
return getColorByState(torrent->state()); return stateForeground(torrent->state());
if ((role != Qt::DisplayRole) && (role != Qt::UserRole)) if ((role != Qt::DisplayRole) && (role != Qt::UserRole))
return {}; return {};
@ -337,6 +358,16 @@ void TransferListModel::handleTorrentsUpdated(const QVector<BitTorrent::TorrentH
} }
} }
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 // Static functions
QIcon getIconByState(const BitTorrent::TorrentState state) QIcon getIconByState(const BitTorrent::TorrentState state)

8
src/gui/transferlistmodel.h

@ -31,12 +31,14 @@
#define TRANSFERLISTMODEL_H #define TRANSFERLISTMODEL_H
#include <QAbstractListModel> #include <QAbstractListModel>
#include <QColor>
#include <QList> #include <QList>
namespace BitTorrent namespace BitTorrent
{ {
class InfoHash; class InfoHash;
class TorrentHandle; class TorrentHandle;
enum class TorrentState;
} }
class TransferListModel : public QAbstractListModel class TransferListModel : public QAbstractListModel
@ -93,6 +95,9 @@ public:
BitTorrent::TorrentHandle *torrentHandle(const QModelIndex &index) const; BitTorrent::TorrentHandle *torrentHandle(const QModelIndex &index) const;
void setStateForeground(BitTorrent::TorrentState state, const QColor& color);
QColor stateForeground(BitTorrent::TorrentState state) const;
private slots: private slots:
void addTorrent(BitTorrent::TorrentHandle *const torrent); void addTorrent(BitTorrent::TorrentHandle *const torrent);
void handleTorrentAboutToBeRemoved(BitTorrent::TorrentHandle *const torrent); void handleTorrentAboutToBeRemoved(BitTorrent::TorrentHandle *const torrent);
@ -102,6 +107,9 @@ private slots:
private: private:
QList<BitTorrent::TorrentHandle *> m_torrentList; // maps row number to torrent handle QList<BitTorrent::TorrentHandle *> m_torrentList; // maps row number to torrent handle
QHash<BitTorrent::TorrentHandle *, int> m_torrentMap; // maps torrent handle to row number QHash<BitTorrent::TorrentHandle *, int> m_torrentMap; // maps torrent handle to row number
// row text colors
QHash<BitTorrent::TorrentState, QColor> m_stateForegroundColors;
}; };
#endif // TRANSFERLISTMODEL_H #endif // TRANSFERLISTMODEL_H

191
src/gui/transferlistwidget.cpp

@ -239,6 +239,197 @@ TransferListModel *TransferListWidget::getSourceModel() const
return m_listModel; 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) void TransferListWidget::previewFile(const QString &filePath)
{ {
Utils::Gui::openPath(filePath); Utils::Gui::openPath(filePath);

61
src/gui/transferlistwidget.h

@ -47,6 +47,26 @@ class TransferListWidget : public QTreeView
{ {
Q_OBJECT 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: public:
TransferListWidget(QWidget *parent, MainWindow *mainWindow); TransferListWidget(QWidget *parent, MainWindow *mainWindow);
~TransferListWidget() override; ~TransferListWidget() override;
@ -122,6 +142,47 @@ private:
QStringList askTagsForSelection(const QString &dialogTitle); QStringList askTagsForSelection(const QString &dialogTitle);
void applyToSelectedTorrents(const std::function<void (BitTorrent::TorrentHandle *const)> &fn); void applyToSelectedTorrents(const std::function<void (BitTorrent::TorrentHandle *const)> &fn);
// 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; TransferListDelegate *m_listDelegate;
TransferListModel *m_listModel; TransferListModel *m_listModel;
TransferListSortModel *m_sortFilterModel; TransferListSortModel *m_sortFilterModel;

Loading…
Cancel
Save