diff --git a/src/gui/aboutdialog.cpp b/src/gui/aboutdialog.cpp index cb878abe3..95146e37f 100644 --- a/src/gui/aboutdialog.cpp +++ b/src/gui/aboutdialog.cpp @@ -33,6 +33,7 @@ #include "base/unicodestrings.h" #include "base/utils/misc.h" #include "ui_aboutdialog.h" +#include "uithememanager.h" #include "utils.h" AboutDialog::AboutDialog(QWidget *parent) @@ -45,7 +46,7 @@ AboutDialog::AboutDialog(QWidget *parent) // Title m_ui->labelName->setText(QString::fromLatin1("

qBittorrent " QBT_VERSION " (%1-bit)

").arg(QT_POINTER_SIZE * 8)); - m_ui->logo->setPixmap(Utils::Gui::scaledPixmapSvg(":/icons/qbittorrent-tray.svg", this, 32)); + m_ui->logo->setPixmap(Utils::Gui::scaledPixmapSvg(UIThemeManager::instance()->getIconPath(QLatin1String("qbittorrent-tray")), this, 32)); // About const QString aboutText = QString( diff --git a/src/gui/mainwindow.cpp b/src/gui/mainwindow.cpp index 3eaf2bb1f..3035e2d1a 100644 --- a/src/gui/mainwindow.cpp +++ b/src/gui/mainwindow.cpp @@ -150,13 +150,7 @@ MainWindow::MainWindow(QWidget *parent) m_displaySpeedInTitle = pref->speedInTitleBar(); // Setting icons #ifndef Q_OS_MACOS -#ifdef Q_OS_UNIX - const QIcon appLogo = Preferences::instance()->useSystemIconTheme() - ? QIcon::fromTheme("qbittorrent", QIcon(":/icons/qbittorrent-tray.svg")) - : QIcon(":/icons/qbittorrent-tray.svg"); -#else - const QIcon appLogo(":/icons/qbittorrent-tray.svg"); -#endif // Q_OS_UNIX + const QIcon appLogo(UIThemeManager::instance()->getIcon(QLatin1String("qbittorrent"), QLatin1String("qbittorrent-tray"))); setWindowIcon(appLogo); #endif // Q_OS_MACOS @@ -1539,12 +1533,14 @@ void MainWindow::reloadSessionStats() "qBittorrent" "" "
" - " %1" + " %2" "
" "
" - " %2" + " %4" "
") - .arg(tr("DL speed: %1", "e.g: Download speed: 10 KiB/s").arg(Utils::Misc::friendlyUnit(status.payloadDownloadRate, true)) + .arg(UIThemeManager::instance()->getIconPath("downloading_small") + , tr("DL speed: %1", "e.g: Download speed: 10 KiB/s").arg(Utils::Misc::friendlyUnit(status.payloadDownloadRate, true)) + , UIThemeManager::instance()->getIconPath("seeding") , tr("UP speed: %1", "e.g: Upload speed: 10 KiB/s").arg(Utils::Misc::friendlyUnit(status.payloadUploadRate, true))); #else // OSes such as Windows do not support html here @@ -1984,18 +1980,18 @@ QIcon MainWindow::getSystrayIcon() const #else switch (style) { case TrayIcon::NORMAL: - return QIcon(QLatin1String(":/icons/qbittorrent-tray.svg")); + return UIThemeManager::instance()->getIcon(QLatin1String("qbittorrent-tray")); case TrayIcon::MONO_DARK: - return QIcon(QLatin1String(":/icons/qbittorrent-tray-dark.svg")); + return UIThemeManager::instance()->getIcon(QLatin1String("qbittorrent-tray-dark")); case TrayIcon::MONO_LIGHT: - return QIcon(QLatin1String(":/icons/qbittorrent-tray-light.svg")); + return UIThemeManager::instance()->getIcon(QLatin1String("qbittorrent-tray-light")); default: break; } #endif // As a failsafe in case the enum is invalid - return QIcon(QLatin1String(":/icons/qbittorrent-tray.svg")); + return UIThemeManager::instance()->getIcon(QLatin1String("qbittorrent-tray")); } #endif // Q_OS_MACOS diff --git a/src/gui/optionsdialog.cpp b/src/gui/optionsdialog.cpp index 3554a383b..9d2243299 100644 --- a/src/gui/optionsdialog.cpp +++ b/src/gui/optionsdialog.cpp @@ -202,8 +202,8 @@ OptionsDialog::OptionsDialog(QWidget *parent) m_ui->IpFilterRefreshBtn->setIcon(UIThemeManager::instance()->getIcon("view-refresh")); - m_ui->labelGlobalRate->setPixmap(Utils::Gui::scaledPixmap(":/icons/slow_off.svg", this, 16)); - m_ui->labelAltRate->setPixmap(Utils::Gui::scaledPixmap(":/icons/slow.svg", this, 16)); + m_ui->labelGlobalRate->setPixmap(Utils::Gui::scaledPixmap(UIThemeManager::instance()->getIcon(QLatin1String("slow_off")), this, 16)); + m_ui->labelAltRate->setPixmap(Utils::Gui::scaledPixmap(UIThemeManager::instance()->getIcon(QLatin1String("slow")), this, 16)); m_ui->deleteTorrentWarningIcon->setPixmap(QApplication::style()->standardIcon(QStyle::SP_MessageBoxCritical).pixmap(16, 16)); m_ui->deleteTorrentWarningIcon->hide(); @@ -1691,7 +1691,7 @@ QString OptionsDialog::webUiPassword() const void OptionsDialog::webUIHttpsCertChanged(const QString &path, const ShowError showError) { m_ui->textWebUIHttpsCert->setSelectedPath(path); - m_ui->lblSslCertStatus->setPixmap(Utils::Gui::scaledPixmapSvg(":/icons/security-low.svg", this, 24)); + m_ui->lblSslCertStatus->setPixmap(Utils::Gui::scaledPixmapSvg(UIThemeManager::instance()->getIconPath(QLatin1String("security-low")), this, 24)); if (path.isEmpty()) return; @@ -1709,13 +1709,13 @@ void OptionsDialog::webUIHttpsCertChanged(const QString &path, const ShowError s return; } - m_ui->lblSslCertStatus->setPixmap(Utils::Gui::scaledPixmapSvg(":/icons/security-high.svg", this, 24)); + m_ui->lblSslCertStatus->setPixmap(Utils::Gui::scaledPixmapSvg(UIThemeManager::instance()->getIconPath(QLatin1String("security-high")), this, 24)); } void OptionsDialog::webUIHttpsKeyChanged(const QString &path, const ShowError showError) { m_ui->textWebUIHttpsKey->setSelectedPath(path); - m_ui->lblSslKeyStatus->setPixmap(Utils::Gui::scaledPixmapSvg(":/icons/security-low.svg", this, 24)); + m_ui->lblSslKeyStatus->setPixmap(Utils::Gui::scaledPixmapSvg(UIThemeManager::instance()->getIconPath(QLatin1String("security-low")), this, 24)); if (path.isEmpty()) return; @@ -1733,7 +1733,7 @@ void OptionsDialog::webUIHttpsKeyChanged(const QString &path, const ShowError sh return; } - m_ui->lblSslKeyStatus->setPixmap(Utils::Gui::scaledPixmapSvg(":/icons/security-high.svg", this, 24)); + m_ui->lblSslKeyStatus->setPixmap(Utils::Gui::scaledPixmapSvg(UIThemeManager::instance()->getIconPath(QLatin1String("security-high")), this, 24)); } void OptionsDialog::showConnectionTab() diff --git a/src/gui/rss/articlelistwidget.cpp b/src/gui/rss/articlelistwidget.cpp index 0472da495..7ce1115e9 100644 --- a/src/gui/rss/articlelistwidget.cpp +++ b/src/gui/rss/articlelistwidget.cpp @@ -33,6 +33,7 @@ #include "base/global.h" #include "base/rss/rss_article.h" #include "base/rss/rss_item.h" +#include "uithememanager.h" ArticleListWidget::ArticleListWidget(QWidget *parent) : QListWidget(parent) @@ -98,7 +99,7 @@ void ArticleListWidget::handleArticleRead(RSS::Article *rssArticle) if (!item) return; item->setData(Qt::ForegroundRole, QPalette().color(QPalette::Inactive, QPalette::WindowText)); - item->setData(Qt::DecorationRole, QIcon(":/icons/sphere.png")); + item->setData(Qt::DecorationRole, UIThemeManager::instance()->getIcon(QLatin1String("sphere"))); checkInvariant(); } @@ -123,11 +124,11 @@ QListWidgetItem *ArticleListWidget::createItem(RSS::Article *article) const item->setData(Qt::UserRole, reinterpret_cast(article)); if (article->isRead()) { item->setData(Qt::ForegroundRole, QPalette().color(QPalette::Inactive, QPalette::WindowText)); - item->setData(Qt::DecorationRole, QIcon(":/icons/sphere.png")); + item->setData(Qt::DecorationRole, UIThemeManager::instance()->getIcon(QLatin1String("sphere"))); } else { item->setData(Qt::ForegroundRole, QPalette().color(QPalette::Active, QPalette::Link)); - item->setData(Qt::DecorationRole, QIcon(":/icons/sphere2.png")); + item->setData(Qt::DecorationRole, UIThemeManager::instance()->getIcon(QLatin1String("sphere"))); } return item; diff --git a/src/gui/rss/feedlistwidget.cpp b/src/gui/rss/feedlistwidget.cpp index 537bafca8..3e4693e16 100644 --- a/src/gui/rss/feedlistwidget.cpp +++ b/src/gui/rss/feedlistwidget.cpp @@ -85,7 +85,7 @@ void FeedListWidget::handleFeedStateChanged(RSS::Feed *feed) QIcon icon; if (feed->isLoading()) - icon = QIcon(QStringLiteral(":/icons/loading.png")); + icon = UIThemeManager::instance()->getIcon(QStringLiteral("loading")); else if (feed->hasError()) icon = UIThemeManager::instance()->getIcon(QStringLiteral("unavailable")); else if (!feed->iconPath().isEmpty()) @@ -235,7 +235,7 @@ QTreeWidgetItem *FeedListWidget::createItem(RSS::Item *rssItem, QTreeWidgetItem QIcon icon; if (auto feed = qobject_cast(rssItem)) { if (feed->isLoading()) - icon = QIcon(QStringLiteral(":/icons/loading.png")); + icon = UIThemeManager::instance()->getIcon(QLatin1String("loading")); else if (feed->hasError()) icon = UIThemeManager::instance()->getIcon(QStringLiteral("unavailable")); else if (!feed->iconPath().isEmpty()) diff --git a/src/gui/statusbar.cpp b/src/gui/statusbar.cpp index 0ebd64d6a..3e566b951 100644 --- a/src/gui/statusbar.cpp +++ b/src/gui/statusbar.cpp @@ -40,6 +40,7 @@ #include "base/bittorrent/sessionstatus.h" #include "base/utils/misc.h" #include "speedlimitdialog.h" +#include "uithememanager.h" #include "utils.h" StatusBar::StatusBar(QWidget *parent) @@ -62,14 +63,14 @@ StatusBar::StatusBar(QWidget *parent) m_connecStatusLblIcon->setFlat(true); m_connecStatusLblIcon->setFocusPolicy(Qt::NoFocus); m_connecStatusLblIcon->setCursor(Qt::PointingHandCursor); - m_connecStatusLblIcon->setIcon(QIcon(":/icons/firewalled.svg")); + m_connecStatusLblIcon->setIcon(UIThemeManager::instance()->getIcon(QLatin1String("firewalled"))); m_connecStatusLblIcon->setToolTip( QString::fromLatin1("%1
%2").arg(tr("Connection status:") , tr("No direct connections. This may indicate network configuration problems."))); connect(m_connecStatusLblIcon, &QAbstractButton::clicked, this, &StatusBar::connectionButtonClicked); m_dlSpeedLbl = new QPushButton(this); - m_dlSpeedLbl->setIcon(QIcon(":/icons/downloading_small.svg")); + m_dlSpeedLbl->setIcon(UIThemeManager::instance()->getIcon(QLatin1String("downloading_small"))); connect(m_dlSpeedLbl, &QAbstractButton::clicked, this, &StatusBar::capDownloadSpeed); m_dlSpeedLbl->setFlat(true); m_dlSpeedLbl->setFocusPolicy(Qt::NoFocus); @@ -78,7 +79,7 @@ StatusBar::StatusBar(QWidget *parent) m_dlSpeedLbl->setMinimumWidth(200); m_upSpeedLbl = new QPushButton(this); - m_upSpeedLbl->setIcon(QIcon(":/icons/seeding.svg")); + m_upSpeedLbl->setIcon(UIThemeManager::instance()->getIcon(QLatin1String("seeding"))); connect(m_upSpeedLbl, &QAbstractButton::clicked, this, &StatusBar::capUploadSpeed); m_upSpeedLbl->setFlat(true); m_upSpeedLbl->setFocusPolicy(Qt::NoFocus); @@ -173,17 +174,17 @@ void StatusBar::updateConnectionStatus() const BitTorrent::SessionStatus &sessionStatus = BitTorrent::Session::instance()->status(); if (!BitTorrent::Session::instance()->isListening()) { - m_connecStatusLblIcon->setIcon(QIcon(QLatin1String(":/icons/disconnected.svg"))); + m_connecStatusLblIcon->setIcon(UIThemeManager::instance()->getIcon(QLatin1String("disconnected"))); m_connecStatusLblIcon->setToolTip(QLatin1String("") + tr("Connection Status:") + QLatin1String("
") + tr("Offline. This usually means that qBittorrent failed to listen on the selected port for incoming connections.")); } else { if (sessionStatus.hasIncomingConnections) { // Connection OK - m_connecStatusLblIcon->setIcon(QIcon(QLatin1String(":/icons/connected.svg"))); + m_connecStatusLblIcon->setIcon(UIThemeManager::instance()->getIcon(QLatin1String("connected"))); m_connecStatusLblIcon->setToolTip(QLatin1String("") + tr("Connection Status:") + QLatin1String("
") + tr("Online")); } else { - m_connecStatusLblIcon->setIcon(QIcon(QLatin1String(":/icons/firewalled.svg"))); + m_connecStatusLblIcon->setIcon(UIThemeManager::instance()->getIcon(QLatin1String("firewalled"))); m_connecStatusLblIcon->setToolTip(QLatin1String("") + tr("Connection status:") + QLatin1String("
") + QLatin1String("") + tr("No direct connections. This may indicate network configuration problems.") + QLatin1String("")); } } @@ -230,12 +231,12 @@ void StatusBar::refresh() void StatusBar::updateAltSpeedsBtn(bool alternative) { if (alternative) { - m_altSpeedsBtn->setIcon(QIcon(":/icons/slow.svg")); + m_altSpeedsBtn->setIcon(UIThemeManager::instance()->getIcon(QLatin1String("slow"))); m_altSpeedsBtn->setToolTip(tr("Click to switch to regular speed limits")); m_altSpeedsBtn->setDown(true); } else { - m_altSpeedsBtn->setIcon(QIcon(":/icons/slow_off.svg")); + m_altSpeedsBtn->setIcon(UIThemeManager::instance()->getIcon(QLatin1String("slow_off"))); m_altSpeedsBtn->setToolTip(tr("Click to switch to alternative speed limits")); m_altSpeedsBtn->setDown(false); } diff --git a/src/gui/transferlistfilterswidget.cpp b/src/gui/transferlistfilterswidget.cpp index 115fb50d5..0954d1a8a 100644 --- a/src/gui/transferlistfilterswidget.cpp +++ b/src/gui/transferlistfilterswidget.cpp @@ -165,40 +165,40 @@ StatusFilterWidget::StatusFilterWidget(QWidget *parent, TransferListWidget *tran // Add status filters auto *all = new QListWidgetItem(this); all->setData(Qt::DisplayRole, tr("All (0)", "this is for the status filter")); - all->setData(Qt::DecorationRole, QIcon(":/icons/filterall.svg")); + all->setData(Qt::DecorationRole, UIThemeManager::instance()->getIcon(QLatin1String("filterall"))); auto *downloading = new QListWidgetItem(this); downloading->setData(Qt::DisplayRole, tr("Downloading (0)")); - downloading->setData(Qt::DecorationRole, QIcon(":/icons/downloading.svg")); + downloading->setData(Qt::DecorationRole, UIThemeManager::instance()->getIcon(QLatin1String("downloading"))); auto *seeding = new QListWidgetItem(this); seeding->setData(Qt::DisplayRole, tr("Seeding (0)")); - seeding->setData(Qt::DecorationRole, QIcon(":/icons/uploading.svg")); + seeding->setData(Qt::DecorationRole, UIThemeManager::instance()->getIcon(QLatin1String("uploading"))); auto *completed = new QListWidgetItem(this); completed->setData(Qt::DisplayRole, tr("Completed (0)")); - completed->setData(Qt::DecorationRole, QIcon(":/icons/completed.svg")); + completed->setData(Qt::DecorationRole, UIThemeManager::instance()->getIcon(QLatin1String("completed"))); auto *resumed = new QListWidgetItem(this); resumed->setData(Qt::DisplayRole, tr("Resumed (0)")); - resumed->setData(Qt::DecorationRole, QIcon(":/icons/resumed.svg")); + resumed->setData(Qt::DecorationRole, UIThemeManager::instance()->getIcon(QLatin1String("resumed"))); auto *paused = new QListWidgetItem(this); paused->setData(Qt::DisplayRole, tr("Paused (0)")); - paused->setData(Qt::DecorationRole, QIcon(":/icons/paused.svg")); + paused->setData(Qt::DecorationRole, UIThemeManager::instance()->getIcon(QLatin1String("paused"))); auto *active = new QListWidgetItem(this); active->setData(Qt::DisplayRole, tr("Active (0)")); - active->setData(Qt::DecorationRole, QIcon(":/icons/filteractive.svg")); + active->setData(Qt::DecorationRole, UIThemeManager::instance()->getIcon(QLatin1String("filteractive"))); auto *inactive = new QListWidgetItem(this); inactive->setData(Qt::DisplayRole, tr("Inactive (0)")); - inactive->setData(Qt::DecorationRole, QIcon(":/icons/filterinactive.svg")); + inactive->setData(Qt::DecorationRole, UIThemeManager::instance()->getIcon(QLatin1String("filterinactive"))); auto *stalled = new QListWidgetItem(this); stalled->setData(Qt::DisplayRole, tr("Stalled (0)")); - stalled->setData(Qt::DecorationRole, QIcon(":/icons/filterstalled.svg")); + stalled->setData(Qt::DecorationRole, UIThemeManager::instance()->getIcon(QLatin1String("filterstalled"))); auto *stalledUploading = new QListWidgetItem(this); stalledUploading->setData(Qt::DisplayRole, tr("Stalled Uploading (0)")); - stalledUploading->setData(Qt::DecorationRole, QIcon(":/icons/stalledUP.svg")); + stalledUploading->setData(Qt::DecorationRole, UIThemeManager::instance()->getIcon(QLatin1String("stalledUP"))); auto *stalledDownloading = new QListWidgetItem(this); stalledDownloading->setData(Qt::DisplayRole, tr("Stalled Downloading (0)")); - stalledDownloading->setData(Qt::DecorationRole, QIcon(":/icons/stalledDL.svg")); + stalledDownloading->setData(Qt::DecorationRole, UIThemeManager::instance()->getIcon(QLatin1String("stalledDL"))); auto *errored = new QListWidgetItem(this); errored->setData(Qt::DisplayRole, tr("Errored (0)")); - errored->setData(Qt::DecorationRole, QIcon(":/icons/error.svg")); + errored->setData(Qt::DecorationRole, UIThemeManager::instance()->getIcon(QLatin1String("error"))); const Preferences *const pref = Preferences::instance(); setCurrentRow(pref->getTransSelFilter(), QItemSelectionModel::SelectCurrent); diff --git a/src/gui/transferlistmodel.cpp b/src/gui/transferlistmodel.cpp index e1dad59d1..0b73b402a 100644 --- a/src/gui/transferlistmodel.cpp +++ b/src/gui/transferlistmodel.cpp @@ -727,55 +727,55 @@ QColor getDefaultColorByState(const BitTorrent::TorrentState state) QIcon getPausedIcon() { - static QIcon cached = QIcon(":/icons/paused.svg"); + static QIcon cached = UIThemeManager::instance()->getIcon(QLatin1String("paused")); return cached; } QIcon getQueuedIcon() { - static QIcon cached = QIcon(":/icons/queued.svg"); + static QIcon cached = UIThemeManager::instance()->getIcon(QLatin1String("queued")); return cached; } QIcon getDownloadingIcon() { - static QIcon cached = QIcon(":/icons/downloading.svg"); + static QIcon cached = UIThemeManager::instance()->getIcon(QLatin1String("downloading")); return cached; } QIcon getStalledDownloadingIcon() { - static QIcon cached = QIcon(":/icons/stalledDL.svg"); + static QIcon cached = UIThemeManager::instance()->getIcon(QLatin1String("stalledDL")); return cached; } QIcon getUploadingIcon() { - static QIcon cached = QIcon(":/icons/uploading.svg"); + static QIcon cached = UIThemeManager::instance()->getIcon(QLatin1String("uploading")); return cached; } QIcon getStalledUploadingIcon() { - static QIcon cached = QIcon(":/icons/stalledUP.svg"); + static QIcon cached = UIThemeManager::instance()->getIcon(QLatin1String("stalledUP")); return cached; } QIcon getCompletedIcon() { - static QIcon cached = QIcon(":/icons/completed.svg"); + static QIcon cached = UIThemeManager::instance()->getIcon(QLatin1String("completed")); return cached; } QIcon getCheckingIcon() { - static QIcon cached = QIcon(":/icons/checking.svg"); + static QIcon cached = UIThemeManager::instance()->getIcon(QLatin1String("checking")); return cached; } QIcon getErrorIcon() { - static QIcon cached = QIcon(":/icons/error.svg"); + static QIcon cached = UIThemeManager::instance()->getIcon(QLatin1String("error")); return cached; } diff --git a/src/gui/transferlistwidget.cpp b/src/gui/transferlistwidget.cpp index 889b95690..c396d38c7 100644 --- a/src/gui/transferlistwidget.cpp +++ b/src/gui/transferlistwidget.cpp @@ -865,7 +865,7 @@ void TransferListWidget::displayListMenu(const QPoint &) connect(actionDelete, &QAction::triggered, this, &TransferListWidget::softDeleteSelectedTorrents); auto *actionPreviewFile = new QAction(UIThemeManager::instance()->getIcon("view-preview"), tr("Preview file..."), listMenu); connect(actionPreviewFile, &QAction::triggered, this, &TransferListWidget::previewSelectedTorrents); - auto *actionSetMaxRatio = new QAction(QIcon(QLatin1String(":/icons/ratio.svg")), tr("Limit share ratio..."), listMenu); + auto *actionSetMaxRatio = new QAction(UIThemeManager::instance()->getIcon(QLatin1String("ratio")), tr("Limit share ratio..."), listMenu); connect(actionSetMaxRatio, &QAction::triggered, this, &TransferListWidget::setMaxRatioSelectedTorrents); auto *actionSetUploadLimit = new QAction(UIThemeManager::instance()->getIcon("kt-set-max-upload-speed"), tr("Limit upload rate..."), listMenu); connect(actionSetUploadLimit, &QAction::triggered, this, &TransferListWidget::setUpLimitSelectedTorrents); diff --git a/src/gui/uithememanager.h b/src/gui/uithememanager.h index 55b625d77..1b03575f2 100644 --- a/src/gui/uithememanager.h +++ b/src/gui/uithememanager.h @@ -46,6 +46,7 @@ public: void applyStyleSheet() const; + QString getIconPath(const QString &iconId) const; QIcon getIcon(const QString &iconId) const; QIcon getIcon(const QString &iconId, const QString &fallback) const; QIcon getFlagIcon(const QString &countryIsoCode) const; @@ -54,7 +55,6 @@ public: private: UIThemeManager(); // singleton class - QString getIconPath(const QString &iconId) const; void loadColorsFromJSONConfig(); void applyPalette() const;