diff --git a/src/app/application.cpp b/src/app/application.cpp index 1e0db75e8..a124f2a3d 100644 --- a/src/app/application.cpp +++ b/src/app/application.cpp @@ -55,7 +55,6 @@ #include #endif // Q_OS_MAC #include "addnewtorrentdialog.h" -#include "gui/guiiconprovider.h" #include "gui/uithememanager.h" #include "gui/utils.h" #include "mainwindow.h" @@ -499,11 +498,7 @@ int Application::exec(const QStringList ¶ms) { Net::ProxyConfigurationManager::initInstance(); Net::DownloadManager::initInstance(); -#ifdef DISABLE_GUI IconProvider::initInstance(); -#else - GuiIconProvider::initInstance(); -#endif try { BitTorrent::Session::initInstance(); diff --git a/src/gui/CMakeLists.txt b/src/gui/CMakeLists.txt index 304bfd96a..e2b6d89d5 100644 --- a/src/gui/CMakeLists.txt +++ b/src/gui/CMakeLists.txt @@ -26,7 +26,6 @@ downloadfromurldialog.h executionlogwidget.h fspathedit.h fspathedit_p.h -guiiconprovider.h hidabletabwidget.h ipsubnetwhitelistoptionsdialog.h lineedit.h @@ -78,7 +77,6 @@ downloadfromurldialog.cpp executionlogwidget.cpp fspathedit.cpp fspathedit_p.cpp -guiiconprovider.cpp ipsubnetwhitelistoptionsdialog.cpp lineedit.cpp loglistwidget.cpp diff --git a/src/gui/addnewtorrentdialog.cpp b/src/gui/addnewtorrentdialog.cpp index 4ae6f1a17..eb5a02a3b 100644 --- a/src/gui/addnewtorrentdialog.cpp +++ b/src/gui/addnewtorrentdialog.cpp @@ -49,12 +49,12 @@ #include "base/utils/misc.h" #include "base/utils/string.h" #include "autoexpandabledialog.h" -#include "guiiconprovider.h" #include "proplistdelegate.h" #include "raisedmessagebox.h" #include "torrentcontentfiltermodel.h" #include "torrentcontentmodel.h" #include "ui_addnewtorrentdialog.h" +#include "uithememanager.h" #include "utils.h" namespace @@ -472,7 +472,7 @@ void AddNewTorrentDialog::displayContentTreeMenu(const QPoint &) menu->setAttribute(Qt::WA_DeleteOnClose); if (selectedRows.size() == 1) { - QAction *actRename = menu->addAction(GuiIconProvider::instance()->getIcon("edit-rename"), tr("Rename...")); + QAction *actRename = menu->addAction(UIThemeManager::instance()->getIcon("edit-rename"), tr("Rename...")); connect(actRename, &QAction::triggered, this, [this]() { m_ui->contentTreeView->renameSelectedFile(m_torrentInfo); }); menu->addSeparator(); diff --git a/src/gui/categoryfiltermodel.cpp b/src/gui/categoryfiltermodel.cpp index 71ce34df5..b2d3fc3b9 100644 --- a/src/gui/categoryfiltermodel.cpp +++ b/src/gui/categoryfiltermodel.cpp @@ -34,7 +34,7 @@ #include "base/bittorrent/session.h" #include "base/bittorrent/torrenthandle.h" #include "base/global.h" -#include "guiiconprovider.h" +#include "uithememanager.h" class CategoryModelItem { @@ -212,7 +212,7 @@ QVariant CategoryFilterModel::data(const QModelIndex &index, int role) const auto item = static_cast(index.internalPointer()); if ((index.column() == 0) && (role == Qt::DecorationRole)) { - return GuiIconProvider::instance()->getIcon("inode-directory"); + return UIThemeManager::instance()->getIcon("inode-directory"); } if ((index.column() == 0) && (role == Qt::DisplayRole)) { diff --git a/src/gui/categoryfilterwidget.cpp b/src/gui/categoryfilterwidget.cpp index ba0867e57..d57308c8d 100644 --- a/src/gui/categoryfilterwidget.cpp +++ b/src/gui/categoryfilterwidget.cpp @@ -35,8 +35,8 @@ #include "base/global.h" #include "categoryfiltermodel.h" #include "categoryfilterproxymodel.h" -#include "guiiconprovider.h" #include "torrentcategorydialog.h" +#include "uithememanager.h" #include "utils.h" namespace @@ -110,7 +110,7 @@ void CategoryFilterWidget::showMenu(const QPoint &) menu->setAttribute(Qt::WA_DeleteOnClose); const QAction *addAct = menu->addAction( - GuiIconProvider::instance()->getIcon("list-add") + UIThemeManager::instance()->getIcon("list-add") , tr("Add category...")); connect(addAct, &QAction::triggered, this, &CategoryFilterWidget::addCategory); @@ -118,41 +118,41 @@ void CategoryFilterWidget::showMenu(const QPoint &) if (!selectedRows.empty() && !CategoryFilterModel::isSpecialItem(selectedRows.first())) { if (BitTorrent::Session::instance()->isSubcategoriesEnabled()) { const QAction *addSubAct = menu->addAction( - GuiIconProvider::instance()->getIcon("list-add") + UIThemeManager::instance()->getIcon("list-add") , tr("Add subcategory...")); connect(addSubAct, &QAction::triggered, this, &CategoryFilterWidget::addSubcategory); } const QAction *editAct = menu->addAction( - GuiIconProvider::instance()->getIcon("document-edit") + UIThemeManager::instance()->getIcon("document-edit") , tr("Edit category...")); connect(editAct, &QAction::triggered, this, &CategoryFilterWidget::editCategory); const QAction *removeAct = menu->addAction( - GuiIconProvider::instance()->getIcon("list-remove") + UIThemeManager::instance()->getIcon("list-remove") , tr("Remove category")); connect(removeAct, &QAction::triggered, this, &CategoryFilterWidget::removeCategory); } const QAction *removeUnusedAct = menu->addAction( - GuiIconProvider::instance()->getIcon("list-remove") + UIThemeManager::instance()->getIcon("list-remove") , tr("Remove unused categories")); connect(removeUnusedAct, &QAction::triggered, this, &CategoryFilterWidget::removeUnusedCategories); menu->addSeparator(); const QAction *startAct = menu->addAction( - GuiIconProvider::instance()->getIcon("media-playback-start") + UIThemeManager::instance()->getIcon("media-playback-start") , tr("Resume torrents")); connect(startAct, &QAction::triggered, this, &CategoryFilterWidget::actionResumeTorrentsTriggered); const QAction *pauseAct = menu->addAction( - GuiIconProvider::instance()->getIcon("media-playback-pause") + UIThemeManager::instance()->getIcon("media-playback-pause") , tr("Pause torrents")); connect(pauseAct, &QAction::triggered, this, &CategoryFilterWidget::actionPauseTorrentsTriggered); const QAction *deleteTorrentsAct = menu->addAction( - GuiIconProvider::instance()->getIcon("edit-delete") + UIThemeManager::instance()->getIcon("edit-delete") , tr("Delete torrents")); connect(deleteTorrentsAct, &QAction::triggered, this, &CategoryFilterWidget::actionDeleteTorrentsTriggered); diff --git a/src/gui/cookiesdialog.cpp b/src/gui/cookiesdialog.cpp index d848e00a5..828b272ae 100644 --- a/src/gui/cookiesdialog.cpp +++ b/src/gui/cookiesdialog.cpp @@ -34,8 +34,8 @@ #include "base/net/downloadmanager.h" #include "base/settingsstorage.h" #include "cookiesmodel.h" -#include "guiiconprovider.h" #include "ui_cookiesdialog.h" +#include "uithememanager.h" #include "utils.h" #define SETTINGS_KEY(name) QStringLiteral("CookiesDialog/" name) @@ -49,9 +49,9 @@ CookiesDialog::CookiesDialog(QWidget *parent) { m_ui->setupUi(this); - setWindowIcon(GuiIconProvider::instance()->getIcon("preferences-web-browser-cookies")); - m_ui->buttonAdd->setIcon(GuiIconProvider::instance()->getIcon("list-add")); - m_ui->buttonDelete->setIcon(GuiIconProvider::instance()->getIcon("list-remove")); + setWindowIcon(UIThemeManager::instance()->getIcon("preferences-web-browser-cookies")); + m_ui->buttonAdd->setIcon(UIThemeManager::instance()->getIcon("list-add")); + m_ui->buttonDelete->setIcon(UIThemeManager::instance()->getIcon("list-remove")); m_ui->buttonAdd->setIconSize(Utils::Gui::mediumIconSize()); m_ui->buttonDelete->setIconSize(Utils::Gui::mediumIconSize()); diff --git a/src/gui/deletionconfirmationdialog.h b/src/gui/deletionconfirmationdialog.h index 949f06fb7..c2616e58f 100644 --- a/src/gui/deletionconfirmationdialog.h +++ b/src/gui/deletionconfirmationdialog.h @@ -33,8 +33,8 @@ #include #include "base/preferences.h" -#include "guiiconprovider.h" #include "ui_deletionconfirmationdialog.h" +#include "uithememanager.h" #include "utils.h" class DeletionConfirmationDialog : public QDialog @@ -53,9 +53,9 @@ public: m_ui->label->setText(tr("Are you sure you want to delete these %1 torrents from the transfer list?", "Are you sure you want to delete these 5 torrents from the transfer list?").arg(QString::number(size))); // Icons const QSize iconSize = Utils::Gui::largeIconSize(); - m_ui->labelWarning->setPixmap(GuiIconProvider::instance()->getIcon("dialog-warning").pixmap(iconSize)); + m_ui->labelWarning->setPixmap(UIThemeManager::instance()->getIcon("dialog-warning").pixmap(iconSize)); m_ui->labelWarning->setFixedWidth(iconSize.width()); - m_ui->rememberBtn->setIcon(GuiIconProvider::instance()->getIcon("object-locked")); + m_ui->rememberBtn->setIcon(UIThemeManager::instance()->getIcon("object-locked")); m_ui->rememberBtn->setIconSize(Utils::Gui::mediumIconSize()); m_ui->checkPermDelete->setChecked(defaultDeleteFiles || Preferences::instance()->deleteTorrentFilesAsDefault()); diff --git a/src/gui/executionlogwidget.cpp b/src/gui/executionlogwidget.cpp index 301201994..26339f7f5 100644 --- a/src/gui/executionlogwidget.cpp +++ b/src/gui/executionlogwidget.cpp @@ -32,9 +32,9 @@ #include #include "base/global.h" -#include "guiiconprovider.h" #include "loglistwidget.h" #include "ui_executionlogwidget.h" +#include "uithememanager.h" ExecutionLogWidget::ExecutionLogWidget(QWidget *parent, const Log::MsgTypes &types) : QWidget(parent) @@ -45,8 +45,8 @@ ExecutionLogWidget::ExecutionLogWidget(QWidget *parent, const Log::MsgTypes &typ m_ui->setupUi(this); #ifndef Q_OS_MAC - m_ui->tabConsole->setTabIcon(0, GuiIconProvider::instance()->getIcon("view-calendar-journal")); - m_ui->tabConsole->setTabIcon(1, GuiIconProvider::instance()->getIcon("view-filter")); + m_ui->tabConsole->setTabIcon(0, UIThemeManager::instance()->getIcon("view-calendar-journal")); + m_ui->tabConsole->setTabIcon(1, UIThemeManager::instance()->getIcon("view-filter")); #endif m_ui->tabGeneral->layout()->addWidget(m_msgList); m_ui->tabBan->layout()->addWidget(m_peerList); diff --git a/src/gui/gui.pri b/src/gui/gui.pri index 494eb19e3..7ef160d42 100644 --- a/src/gui/gui.pri +++ b/src/gui/gui.pri @@ -20,7 +20,6 @@ HEADERS += \ $$PWD/executionlogwidget.h \ $$PWD/fspathedit.h \ $$PWD/fspathedit_p.h \ - $$PWD/guiiconprovider.h \ $$PWD/hidabletabwidget.h \ $$PWD/ipsubnetwhitelistoptionsdialog.h \ $$PWD/lineedit.h \ @@ -83,7 +82,6 @@ SOURCES += \ $$PWD/executionlogwidget.cpp \ $$PWD/fspathedit.cpp \ $$PWD/fspathedit_p.cpp \ - $$PWD/guiiconprovider.cpp \ $$PWD/ipsubnetwhitelistoptionsdialog.cpp \ $$PWD/lineedit.cpp \ $$PWD/loglistwidget.cpp \ diff --git a/src/gui/guiiconprovider.cpp b/src/gui/guiiconprovider.cpp deleted file mode 100644 index a958ca24f..000000000 --- a/src/gui/guiiconprovider.cpp +++ /dev/null @@ -1,119 +0,0 @@ -/* - * Bittorrent Client using Qt and libtorrent. - * Copyright (C) 2015 Vladimir Golovnev - * Copyright (C) 2011 Christophe Dumez - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * In addition, as a special exception, the copyright holders give permission to - * link this program with the OpenSSL project's "OpenSSL" library (or with - * modified versions of it that use the same license as the "OpenSSL" library), - * and distribute the linked executables. You must obey the GNU General Public - * License in all respects for all of the code used other than "OpenSSL". If you - * modify file(s), you may extend this exception to your version of the file(s), - * but you are not obligated to do so. If you do not wish to do so, delete this - * exception statement from your version. - */ - -#include "guiiconprovider.h" - -#include -#include -#if (defined(Q_OS_UNIX) && !defined(Q_OS_MAC)) -#include -#endif - -#include "base/preferences.h" -#include "base/utils/fs.h" - -GuiIconProvider::GuiIconProvider(QObject *parent) - : IconProvider(parent) -{ - configure(); - connect(Preferences::instance(), &Preferences::changed, this, &GuiIconProvider::configure); -} - -GuiIconProvider::~GuiIconProvider() = default; - -void GuiIconProvider::initInstance() -{ - if (!m_instance) - m_instance = new GuiIconProvider; -} - -GuiIconProvider *GuiIconProvider::instance() -{ - return static_cast(m_instance); -} - -QIcon GuiIconProvider::getIcon(const QString &iconId) const -{ - return getIcon(iconId, iconId); -} - -QIcon GuiIconProvider::getIcon(const QString &iconId, const QString &fallback) const -{ -#if (defined(Q_OS_UNIX) && !defined(Q_OS_MAC)) - if (m_useSystemTheme) { - QIcon icon = QIcon::fromTheme(iconId); - if (icon.name() != iconId) - icon = QIcon::fromTheme(fallback, QIcon(IconProvider::getIconPath(iconId))); - return icon; - } -#else - Q_UNUSED(fallback) -#endif - // cache to avoid rescaling svg icons - static QHash iconCache; - const auto iter = iconCache.find(iconId); - if (iter != iconCache.end()) - return *iter; - - const QIcon icon {IconProvider::getIconPath(iconId)}; - iconCache[iconId] = icon; - return icon; -} - -QIcon GuiIconProvider::getFlagIcon(const QString &countryIsoCode) const -{ - if (countryIsoCode.isEmpty()) return {}; - return QIcon(":/icons/flags/" + countryIsoCode.toLower() + ".svg"); -} - -QString GuiIconProvider::getIconPath(const QString &iconId) const -{ -#if (defined(Q_OS_UNIX) && !defined(Q_OS_MAC)) - if (m_useSystemTheme) { - QString path = Utils::Fs::tempPath() + iconId + ".png"; - if (!QFile::exists(path)) { - const QIcon icon = QIcon::fromTheme(iconId); - if (!icon.isNull()) - icon.pixmap(32).save(path); - else - path = IconProvider::getIconPath(iconId); - } - - return path; - } -#endif - return IconProvider::getIconPath(iconId); -} - -void GuiIconProvider::configure() -{ -#if (defined(Q_OS_UNIX) && !defined(Q_OS_MAC)) - m_useSystemTheme = Preferences::instance()->useSystemIconTheme(); -#endif -} diff --git a/src/gui/guiiconprovider.h b/src/gui/guiiconprovider.h deleted file mode 100644 index f7942685b..000000000 --- a/src/gui/guiiconprovider.h +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Bittorrent Client using Qt and libtorrent. - * Copyright (C) 2015 Vladimir Golovnev - * Copyright (C) 2011 Christophe Dumez - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * In addition, as a special exception, the copyright holders give permission to - * link this program with the OpenSSL project's "OpenSSL" library (or with - * modified versions of it that use the same license as the "OpenSSL" library), - * and distribute the linked executables. You must obey the GNU General Public - * License in all respects for all of the code used other than "OpenSSL". If you - * modify file(s), you may extend this exception to your version of the file(s), - * but you are not obligated to do so. If you do not wish to do so, delete this - * exception statement from your version. - */ - -#ifndef GUIICONPROVIDER_H -#define GUIICONPROVIDER_H - -#include "base/iconprovider.h" - -class QIcon; - -class GuiIconProvider : public IconProvider -{ - Q_DISABLE_COPY(GuiIconProvider) - Q_OBJECT - -public: - static void initInstance(); - static GuiIconProvider *instance(); - - QIcon getIcon(const QString &iconId) const; - QIcon getIcon(const QString &iconId, const QString &fallback) const; - QIcon getFlagIcon(const QString &countryIsoCode) const; - QString getIconPath(const QString &iconId) const override; - -private slots: - void configure(); - -private: - explicit GuiIconProvider(QObject *parent = nullptr); - ~GuiIconProvider() override; - -#if (defined(Q_OS_UNIX) && !defined(Q_OS_MAC)) - bool m_useSystemTheme; -#endif -}; - -#endif // GUIICONPROVIDER_H diff --git a/src/gui/lineedit.cpp b/src/gui/lineedit.cpp index a02048698..256065ab0 100644 --- a/src/gui/lineedit.cpp +++ b/src/gui/lineedit.cpp @@ -16,13 +16,13 @@ #include #include -#include "guiiconprovider.h" +#include "uithememanager.h" LineEdit::LineEdit(QWidget *parent) : QLineEdit(parent) { m_searchButton = new QToolButton(this); - m_searchButton->setIcon(GuiIconProvider::instance()->getIcon("edit-find")); + m_searchButton->setIcon(UIThemeManager::instance()->getIcon("edit-find")); m_searchButton->setCursor(Qt::ArrowCursor); m_searchButton->setStyleSheet("QToolButton {border: none; padding: 2px;}"); diff --git a/src/gui/loglistwidget.cpp b/src/gui/loglistwidget.cpp index cdb8172a2..d66841233 100644 --- a/src/gui/loglistwidget.cpp +++ b/src/gui/loglistwidget.cpp @@ -37,7 +37,7 @@ #include #include "base/global.h" -#include "guiiconprovider.h" +#include "uithememanager.h" LogListWidget::LogListWidget(const int maxLines, const Log::MsgTypes &types, QWidget *parent) : QListWidget(parent) @@ -47,8 +47,8 @@ LogListWidget::LogListWidget(const int maxLines, const Log::MsgTypes &types, QWi // Allow multiple selections setSelectionMode(QAbstractItemView::ExtendedSelection); // Context menu - auto *copyAct = new QAction(GuiIconProvider::instance()->getIcon("edit-copy"), tr("Copy"), this); - auto *clearAct = new QAction(GuiIconProvider::instance()->getIcon("edit-clear"), tr("Clear"), this); + auto *copyAct = new QAction(UIThemeManager::instance()->getIcon("edit-copy"), tr("Copy"), this); + auto *clearAct = new QAction(UIThemeManager::instance()->getIcon("edit-clear"), tr("Clear"), this); connect(copyAct, &QAction::triggered, this, &LogListWidget::copySelection); connect(clearAct, &QAction::triggered, this, &LogListWidget::clear); addAction(copyAct); diff --git a/src/gui/mainwindow.cpp b/src/gui/mainwindow.cpp index 32cc77359..1fe353c81 100644 --- a/src/gui/mainwindow.cpp +++ b/src/gui/mainwindow.cpp @@ -73,7 +73,6 @@ #include "cookiesdialog.h" #include "downloadfromurldialog.h" #include "executionlogwidget.h" -#include "guiiconprovider.h" #include "hidabletabwidget.h" #include "lineedit.h" #include "optionsdialog.h" @@ -86,11 +85,12 @@ #include "statsdialog.h" #include "statusbar.h" #include "torrentcreatordialog.h" -#include "transferlistmodel.h" #include "trackerlistwidget.h" #include "transferlistfilterswidget.h" +#include "transferlistmodel.h" #include "transferlistwidget.h" #include "ui_mainwindow.h" +#include "uithememanager.h" #include "utils.h" #ifdef Q_OS_MAC @@ -162,31 +162,31 @@ MainWindow::MainWindow(QWidget *parent) addToolbarContextMenu(); - m_ui->actionOpen->setIcon(GuiIconProvider::instance()->getIcon("list-add")); - m_ui->actionDownloadFromURL->setIcon(GuiIconProvider::instance()->getIcon("insert-link")); - m_ui->actionSetUploadLimit->setIcon(GuiIconProvider::instance()->getIcon("kt-set-max-upload-speed")); - m_ui->actionSetDownloadLimit->setIcon(GuiIconProvider::instance()->getIcon("kt-set-max-download-speed")); - m_ui->actionSetGlobalUploadLimit->setIcon(GuiIconProvider::instance()->getIcon("kt-set-max-upload-speed")); - m_ui->actionSetGlobalDownloadLimit->setIcon(GuiIconProvider::instance()->getIcon("kt-set-max-download-speed")); - m_ui->actionCreateTorrent->setIcon(GuiIconProvider::instance()->getIcon("document-edit")); - m_ui->actionAbout->setIcon(GuiIconProvider::instance()->getIcon("help-about")); - m_ui->actionStatistics->setIcon(GuiIconProvider::instance()->getIcon("view-statistics")); - m_ui->actionTopQueuePos->setIcon(GuiIconProvider::instance()->getIcon("go-top")); - m_ui->actionIncreaseQueuePos->setIcon(GuiIconProvider::instance()->getIcon("go-up")); - m_ui->actionDecreaseQueuePos->setIcon(GuiIconProvider::instance()->getIcon("go-down")); - m_ui->actionBottomQueuePos->setIcon(GuiIconProvider::instance()->getIcon("go-bottom")); - m_ui->actionDelete->setIcon(GuiIconProvider::instance()->getIcon("list-remove")); - m_ui->actionDocumentation->setIcon(GuiIconProvider::instance()->getIcon("help-contents")); - m_ui->actionDonateMoney->setIcon(GuiIconProvider::instance()->getIcon("wallet-open")); - m_ui->actionExit->setIcon(GuiIconProvider::instance()->getIcon("application-exit")); - m_ui->actionLock->setIcon(GuiIconProvider::instance()->getIcon("object-locked")); - m_ui->actionOptions->setIcon(GuiIconProvider::instance()->getIcon("configure", "preferences-system")); - m_ui->actionPause->setIcon(GuiIconProvider::instance()->getIcon("media-playback-pause")); - m_ui->actionPauseAll->setIcon(GuiIconProvider::instance()->getIcon("media-playback-pause")); - m_ui->actionStart->setIcon(GuiIconProvider::instance()->getIcon("media-playback-start")); - m_ui->actionStartAll->setIcon(GuiIconProvider::instance()->getIcon("media-playback-start")); - m_ui->menuAutoShutdownOnDownloadsCompletion->setIcon(GuiIconProvider::instance()->getIcon("application-exit")); - m_ui->actionManageCookies->setIcon(GuiIconProvider::instance()->getIcon("preferences-web-browser-cookies")); + m_ui->actionOpen->setIcon(UIThemeManager::instance()->getIcon("list-add")); + m_ui->actionDownloadFromURL->setIcon(UIThemeManager::instance()->getIcon("insert-link")); + m_ui->actionSetUploadLimit->setIcon(UIThemeManager::instance()->getIcon("kt-set-max-upload-speed")); + m_ui->actionSetDownloadLimit->setIcon(UIThemeManager::instance()->getIcon("kt-set-max-download-speed")); + m_ui->actionSetGlobalUploadLimit->setIcon(UIThemeManager::instance()->getIcon("kt-set-max-upload-speed")); + m_ui->actionSetGlobalDownloadLimit->setIcon(UIThemeManager::instance()->getIcon("kt-set-max-download-speed")); + m_ui->actionCreateTorrent->setIcon(UIThemeManager::instance()->getIcon("document-edit")); + m_ui->actionAbout->setIcon(UIThemeManager::instance()->getIcon("help-about")); + m_ui->actionStatistics->setIcon(UIThemeManager::instance()->getIcon("view-statistics")); + m_ui->actionTopQueuePos->setIcon(UIThemeManager::instance()->getIcon("go-top")); + m_ui->actionIncreaseQueuePos->setIcon(UIThemeManager::instance()->getIcon("go-up")); + m_ui->actionDecreaseQueuePos->setIcon(UIThemeManager::instance()->getIcon("go-down")); + m_ui->actionBottomQueuePos->setIcon(UIThemeManager::instance()->getIcon("go-bottom")); + m_ui->actionDelete->setIcon(UIThemeManager::instance()->getIcon("list-remove")); + m_ui->actionDocumentation->setIcon(UIThemeManager::instance()->getIcon("help-contents")); + m_ui->actionDonateMoney->setIcon(UIThemeManager::instance()->getIcon("wallet-open")); + m_ui->actionExit->setIcon(UIThemeManager::instance()->getIcon("application-exit")); + m_ui->actionLock->setIcon(UIThemeManager::instance()->getIcon("object-locked")); + m_ui->actionOptions->setIcon(UIThemeManager::instance()->getIcon("configure", "preferences-system")); + m_ui->actionPause->setIcon(UIThemeManager::instance()->getIcon("media-playback-pause")); + m_ui->actionPauseAll->setIcon(UIThemeManager::instance()->getIcon("media-playback-pause")); + m_ui->actionStart->setIcon(UIThemeManager::instance()->getIcon("media-playback-start")); + m_ui->actionStartAll->setIcon(UIThemeManager::instance()->getIcon("media-playback-start")); + m_ui->menuAutoShutdownOnDownloadsCompletion->setIcon(UIThemeManager::instance()->getIcon("application-exit")); + m_ui->actionManageCookies->setIcon(UIThemeManager::instance()->getIcon("preferences-web-browser-cookies")); auto *lockMenu = new QMenu(this); QAction *defineUiLockPasswdAct = lockMenu->addAction(tr("&Set Password")); @@ -241,7 +241,7 @@ MainWindow::MainWindow(QWidget *parent) m_splitter->setCollapsible(1, false); m_tabs->addTab(m_splitter, #ifndef Q_OS_MAC - GuiIconProvider::instance()->getIcon("folder-remote"), + UIThemeManager::instance()->getIcon("folder-remote"), #endif tr("Transfers")); @@ -672,7 +672,7 @@ void MainWindow::displayRSSTab(bool enable) m_tabs->addTab(m_rssWidget, tr("RSS (%1)").arg(RSS::Session::instance()->rootFolder()->unreadCount())); #else const int indexTab = m_tabs->addTab(m_rssWidget, tr("RSS (%1)").arg(RSS::Session::instance()->rootFolder()->unreadCount())); - m_tabs->setTabIcon(indexTab, GuiIconProvider::instance()->getIcon("application-rss+xml")); + m_tabs->setTabIcon(indexTab, UIThemeManager::instance()->getIcon("application-rss+xml")); #endif } } @@ -707,7 +707,7 @@ void MainWindow::displaySearchTab(bool enable) m_searchWidget = new SearchWidget(this); m_tabs->insertTab(1, m_searchWidget, #ifndef Q_OS_MAC - GuiIconProvider::instance()->getIcon("edit-find"), + UIThemeManager::instance()->getIcon("edit-find"), #endif tr("Search")); } @@ -1864,7 +1864,7 @@ void MainWindow::on_actionExecutionLogs_triggered(bool checked) m_tabs->addTab(m_executionLog, tr("Execution Log")); #else const int indexTab = m_tabs->addTab(m_executionLog, tr("Execution Log")); - m_tabs->setTabIcon(indexTab, GuiIconProvider::instance()->getIcon("view-calendar-journal")); + m_tabs->setTabIcon(indexTab, UIThemeManager::instance()->getIcon("view-calendar-journal")); #endif } else if (m_executionLog) { diff --git a/src/gui/optionsdialog.cpp b/src/gui/optionsdialog.cpp index 8c5c18bc5..e3dc5de0c 100644 --- a/src/gui/optionsdialog.cpp +++ b/src/gui/optionsdialog.cpp @@ -61,11 +61,11 @@ #include "advancedsettings.h" #include "app/application.h" #include "banlistoptionsdialog.h" -#include "guiiconprovider.h" #include "ipsubnetwhitelistoptionsdialog.h" #include "rss/automatedrssdownloader.h" #include "scanfoldersdelegate.h" #include "ui_optionsdialog.h" +#include "uithememanager.h" #include "utils.h" namespace @@ -111,18 +111,18 @@ OptionsDialog::OptionsDialog(QWidget *parent) #endif // Icons - m_ui->tabSelection->item(TAB_UI)->setIcon(GuiIconProvider::instance()->getIcon("preferences-desktop")); - m_ui->tabSelection->item(TAB_BITTORRENT)->setIcon(GuiIconProvider::instance()->getIcon("preferences-system-network")); - m_ui->tabSelection->item(TAB_CONNECTION)->setIcon(GuiIconProvider::instance()->getIcon("network-wired")); - m_ui->tabSelection->item(TAB_DOWNLOADS)->setIcon(GuiIconProvider::instance()->getIcon("folder-download")); - m_ui->tabSelection->item(TAB_SPEED)->setIcon(GuiIconProvider::instance()->getIcon("speedometer", "chronometer")); - m_ui->tabSelection->item(TAB_RSS)->setIcon(GuiIconProvider::instance()->getIcon("rss-config", "application-rss+xml")); + m_ui->tabSelection->item(TAB_UI)->setIcon(UIThemeManager::instance()->getIcon("preferences-desktop")); + m_ui->tabSelection->item(TAB_BITTORRENT)->setIcon(UIThemeManager::instance()->getIcon("preferences-system-network")); + m_ui->tabSelection->item(TAB_CONNECTION)->setIcon(UIThemeManager::instance()->getIcon("network-wired")); + m_ui->tabSelection->item(TAB_DOWNLOADS)->setIcon(UIThemeManager::instance()->getIcon("folder-download")); + m_ui->tabSelection->item(TAB_SPEED)->setIcon(UIThemeManager::instance()->getIcon("speedometer", "chronometer")); + m_ui->tabSelection->item(TAB_RSS)->setIcon(UIThemeManager::instance()->getIcon("rss-config", "application-rss+xml")); #ifndef DISABLE_WEBUI - m_ui->tabSelection->item(TAB_WEBUI)->setIcon(GuiIconProvider::instance()->getIcon("network-server")); + m_ui->tabSelection->item(TAB_WEBUI)->setIcon(UIThemeManager::instance()->getIcon("network-server")); #else m_ui->tabSelection->item(TAB_WEBUI)->setHidden(true); #endif - m_ui->tabSelection->item(TAB_ADVANCED)->setIcon(GuiIconProvider::instance()->getIcon("preferences-other")); + m_ui->tabSelection->item(TAB_ADVANCED)->setIcon(UIThemeManager::instance()->getIcon("preferences-other")); // set uniform size for all icons int maxHeight = -1; @@ -133,7 +133,7 @@ OptionsDialog::OptionsDialog(QWidget *parent) m_ui->tabSelection->item(i)->setSizeHint(size); } - m_ui->IpFilterRefreshBtn->setIcon(GuiIconProvider::instance()->getIcon("view-refresh")); + 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)); diff --git a/src/gui/properties/peerlistwidget.cpp b/src/gui/properties/peerlistwidget.cpp index 7fa20e0d3..81d78a2ba 100644 --- a/src/gui/properties/peerlistwidget.cpp +++ b/src/gui/properties/peerlistwidget.cpp @@ -47,11 +47,11 @@ #include "base/net/geoipmanager.h" #include "base/net/reverseresolution.h" #include "base/preferences.h" -#include "guiiconprovider.h" #include "peerlistdelegate.h" #include "peerlistsortmodel.h" #include "peersadditiondialog.h" #include "propertieswidget.h" +#include "uithememanager.h" PeerListWidget::PeerListWidget(PropertiesWidget *parent) : QTreeView(parent) @@ -235,7 +235,7 @@ void PeerListWidget::showPeerListMenu(const QPoint &) // Add Peer Action if (!torrent->isQueued() && !torrent->isChecking()) { - const QAction *addPeerAct = menu->addAction(GuiIconProvider::instance()->getIcon("user-group-new"), tr("Add a new peer...")); + const QAction *addPeerAct = menu->addAction(UIThemeManager::instance()->getIcon("user-group-new"), tr("Add a new peer...")); connect(addPeerAct, &QAction::triggered, this, [this, torrent]() { const QList peersList = PeersAdditionDialog::askForPeers(this); @@ -257,12 +257,12 @@ void PeerListWidget::showPeerListMenu(const QPoint &) } if (!selectionModel()->selectedRows().isEmpty()) { - const QAction *copyPeerAct = menu->addAction(GuiIconProvider::instance()->getIcon("edit-copy"), tr("Copy IP:port")); + const QAction *copyPeerAct = menu->addAction(UIThemeManager::instance()->getIcon("edit-copy"), tr("Copy IP:port")); connect(copyPeerAct, &QAction::triggered, this, &PeerListWidget::copySelectedPeers); menu->addSeparator(); - const QAction *banAct = menu->addAction(GuiIconProvider::instance()->getIcon("user-group-delete"), tr("Ban peer permanently")); + const QAction *banAct = menu->addAction(UIThemeManager::instance()->getIcon("user-group-delete"), tr("Ban peer permanently")); connect(banAct, &QAction::triggered, this, &PeerListWidget::banSelectedPeers); } @@ -378,7 +378,7 @@ QStandardItem *PeerListWidget::addPeer(const QString &ip, BitTorrent::TorrentHan m_listModel->setData(m_listModel->index(row, PeerListDelegate::PORT), peer.address().port); m_listModel->setData(m_listModel->index(row, PeerListDelegate::IP_HIDDEN), ip); if (m_resolveCountries) { - const QIcon ico = GuiIconProvider::instance()->getFlagIcon(peer.country()); + const QIcon ico = UIThemeManager::instance()->getFlagIcon(peer.country()); if (!ico.isNull()) { m_listModel->setData(m_listModel->index(row, PeerListDelegate::COUNTRY), ico, Qt::DecorationRole); const QString countryName = Net::GeoIPManager::CountryName(peer.country()); @@ -410,7 +410,7 @@ void PeerListWidget::updatePeer(const QString &ip, BitTorrent::TorrentHandle *co QStandardItem *item = m_peerItems.value(ip); int row = item->row(); if (m_resolveCountries) { - const QIcon ico = GuiIconProvider::instance()->getFlagIcon(peer.country()); + const QIcon ico = UIThemeManager::instance()->getFlagIcon(peer.country()); if (!ico.isNull()) { m_listModel->setData(m_listModel->index(row, PeerListDelegate::COUNTRY), ico, Qt::DecorationRole); const QString countryName = Net::GeoIPManager::CountryName(peer.country()); diff --git a/src/gui/properties/propertieswidget.cpp b/src/gui/properties/propertieswidget.cpp index e011f3bce..80e6fc0c0 100644 --- a/src/gui/properties/propertieswidget.cpp +++ b/src/gui/properties/propertieswidget.cpp @@ -52,7 +52,6 @@ #include "base/utils/string.h" #include "autoexpandabledialog.h" #include "downloadedpiecesbar.h" -#include "guiiconprovider.h" #include "lineedit.h" #include "peerlistwidget.h" #include "pieceavailabilitybar.h" @@ -63,6 +62,7 @@ #include "torrentcontentfiltermodel.h" #include "torrentcontentmodel.h" #include "trackerlistwidget.h" +#include "uithememanager.h" #include "utils.h" #include "ui_propertieswidget.h" @@ -131,9 +131,9 @@ PropertiesWidget::PropertiesWidget(QWidget *parent) // Tracker list m_trackerList = new TrackerListWidget(this); - m_ui->trackerUpButton->setIcon(GuiIconProvider::instance()->getIcon("go-up")); + m_ui->trackerUpButton->setIcon(UIThemeManager::instance()->getIcon("go-up")); m_ui->trackerUpButton->setIconSize(Utils::Gui::smallIconSize()); - m_ui->trackerDownButton->setIcon(GuiIconProvider::instance()->getIcon("go-down")); + m_ui->trackerDownButton->setIcon(UIThemeManager::instance()->getIcon("go-down")); m_ui->trackerDownButton->setIconSize(Utils::Gui::smallIconSize()); connect(m_ui->trackerUpButton, &QPushButton::clicked, m_trackerList, &TrackerListWidget::moveSelectionUp); connect(m_ui->trackerDownButton, &QPushButton::clicked, m_trackerList, &TrackerListWidget::moveSelectionDown); @@ -586,13 +586,13 @@ void PropertiesWidget::displayFilesListMenu(const QPoint &) if (selectedRows.size() == 1) { const QModelIndex index = selectedRows[0]; - const QAction *actOpen = menu->addAction(GuiIconProvider::instance()->getIcon("folder-documents"), tr("Open")); + const QAction *actOpen = menu->addAction(UIThemeManager::instance()->getIcon("folder-documents"), tr("Open")); connect(actOpen, &QAction::triggered, this, [this, index]() { openDoubleClickedFile(index); }); - const QAction *actOpenContainingFolder = menu->addAction(GuiIconProvider::instance()->getIcon("inode-directory"), tr("Open Containing Folder")); + const QAction *actOpenContainingFolder = menu->addAction(UIThemeManager::instance()->getIcon("inode-directory"), tr("Open Containing Folder")); connect(actOpenContainingFolder, &QAction::triggered, this, [this, index]() { openFolder(index, true); }); - const QAction *actRename = menu->addAction(GuiIconProvider::instance()->getIcon("edit-rename"), tr("Rename...")); + const QAction *actRename = menu->addAction(UIThemeManager::instance()->getIcon("edit-rename"), tr("Rename...")); connect(actRename, &QAction::triggered, this, [this]() { m_ui->filesList->renameSelectedFile(m_torrent); }); menu->addSeparator(); @@ -658,19 +658,19 @@ void PropertiesWidget::displayWebSeedListMenu(const QPoint &) QMenu *menu = new QMenu(this); menu->setAttribute(Qt::WA_DeleteOnClose); - const QAction *actAdd = menu->addAction(GuiIconProvider::instance()->getIcon("list-add"), tr("New Web seed")); + const QAction *actAdd = menu->addAction(UIThemeManager::instance()->getIcon("list-add"), tr("New Web seed")); connect(actAdd, &QAction::triggered, this, &PropertiesWidget::askWebSeed); if (!rows.isEmpty()) { - const QAction *actDel = menu->addAction(GuiIconProvider::instance()->getIcon("list-remove"), tr("Remove Web seed")); + const QAction *actDel = menu->addAction(UIThemeManager::instance()->getIcon("list-remove"), tr("Remove Web seed")); connect(actDel, &QAction::triggered, this, &PropertiesWidget::deleteSelectedUrlSeeds); menu->addSeparator(); - const QAction *actCpy = menu->addAction(GuiIconProvider::instance()->getIcon("edit-copy"), tr("Copy Web seed URL")); + const QAction *actCpy = menu->addAction(UIThemeManager::instance()->getIcon("edit-copy"), tr("Copy Web seed URL")); connect(actCpy, &QAction::triggered, this, &PropertiesWidget::copySelectedWebSeedsToClipboard); - const QAction *actEdit = menu->addAction(GuiIconProvider::instance()->getIcon("edit-rename"), tr("Edit Web seed URL")); + const QAction *actEdit = menu->addAction(UIThemeManager::instance()->getIcon("edit-rename"), tr("Edit Web seed URL")); connect(actEdit, &QAction::triggered, this, &PropertiesWidget::editWebSeed); } diff --git a/src/gui/properties/proptabbar.cpp b/src/gui/properties/proptabbar.cpp index edb2eaaa3..e922a8244 100644 --- a/src/gui/properties/proptabbar.cpp +++ b/src/gui/properties/proptabbar.cpp @@ -34,7 +34,7 @@ #include #include "base/global.h" -#include "guiiconprovider.h" +#include "uithememanager.h" PropTabBar::PropTabBar(QWidget *parent) : QHBoxLayout(parent) @@ -46,7 +46,7 @@ PropTabBar::PropTabBar(QWidget *parent) // General tab QPushButton *mainInfosButton = new QPushButton( #ifndef Q_OS_MAC - GuiIconProvider::instance()->getIcon("document-properties"), + UIThemeManager::instance()->getIcon("document-properties"), #endif tr("General"), parent); mainInfosButton->setShortcut(Qt::ALT + Qt::Key_G); @@ -55,7 +55,7 @@ PropTabBar::PropTabBar(QWidget *parent) // Trackers tab QPushButton *trackersButton = new QPushButton( #ifndef Q_OS_MAC - GuiIconProvider::instance()->getIcon("network-server"), + UIThemeManager::instance()->getIcon("network-server"), #endif tr("Trackers"), parent); trackersButton->setShortcut(Qt::ALT + Qt::Key_C); @@ -64,7 +64,7 @@ PropTabBar::PropTabBar(QWidget *parent) // Peers tab QPushButton *peersButton = new QPushButton( #ifndef Q_OS_MAC - GuiIconProvider::instance()->getIcon("edit-find-user"), + UIThemeManager::instance()->getIcon("edit-find-user"), #endif tr("Peers"), parent); peersButton->setShortcut(Qt::ALT + Qt::Key_R); @@ -73,7 +73,7 @@ PropTabBar::PropTabBar(QWidget *parent) // URL seeds tab QPushButton *URLSeedsButton = new QPushButton( #ifndef Q_OS_MAC - GuiIconProvider::instance()->getIcon("network-server"), + UIThemeManager::instance()->getIcon("network-server"), #endif tr("HTTP Sources"), parent); URLSeedsButton->setShortcut(Qt::ALT + Qt::Key_B); @@ -82,7 +82,7 @@ PropTabBar::PropTabBar(QWidget *parent) // Files tab QPushButton *filesButton = new QPushButton( #ifndef Q_OS_MAC - GuiIconProvider::instance()->getIcon("inode-directory"), + UIThemeManager::instance()->getIcon("inode-directory"), #endif tr("Content"), parent); filesButton->setShortcut(Qt::ALT + Qt::Key_Z); @@ -93,7 +93,7 @@ PropTabBar::PropTabBar(QWidget *parent) // Speed tab QPushButton *speedButton = new QPushButton( #ifndef Q_OS_MAC - GuiIconProvider::instance()->getIcon("office-chart-line"), + UIThemeManager::instance()->getIcon("office-chart-line"), #endif tr("Speed"), parent); speedButton->setShortcut(Qt::ALT + Qt::Key_D); diff --git a/src/gui/properties/trackerlistwidget.cpp b/src/gui/properties/trackerlistwidget.cpp index bcf23b7b3..1690cd46d 100644 --- a/src/gui/properties/trackerlistwidget.cpp +++ b/src/gui/properties/trackerlistwidget.cpp @@ -50,9 +50,9 @@ #include "base/global.h" #include "base/preferences.h" #include "autoexpandabledialog.h" -#include "guiiconprovider.h" #include "propertieswidget.h" #include "trackersadditiondialog.h" +#include "uithememanager.h" #define NB_STICKY_ITEM 3 @@ -553,27 +553,27 @@ void TrackerListWidget::showTrackerListMenu(const QPoint &) menu->setAttribute(Qt::WA_DeleteOnClose); // Add actions - const QAction *addAct = menu->addAction(GuiIconProvider::instance()->getIcon("list-add"), tr("Add a new tracker...")); + const QAction *addAct = menu->addAction(UIThemeManager::instance()->getIcon("list-add"), tr("Add a new tracker...")); connect(addAct, &QAction::triggered, this, &TrackerListWidget::askForTrackers); if (!getSelectedTrackerItems().isEmpty()) { - const QAction *editAct = menu->addAction(GuiIconProvider::instance()->getIcon("edit-rename"),tr("Edit tracker URL...")); + const QAction *editAct = menu->addAction(UIThemeManager::instance()->getIcon("edit-rename"),tr("Edit tracker URL...")); connect(editAct, &QAction::triggered, this, &TrackerListWidget::editSelectedTracker); - const QAction *delAct = menu->addAction(GuiIconProvider::instance()->getIcon("list-remove"), tr("Remove tracker")); + const QAction *delAct = menu->addAction(UIThemeManager::instance()->getIcon("list-remove"), tr("Remove tracker")); connect(delAct, &QAction::triggered, this, &TrackerListWidget::deleteSelectedTrackers); - const QAction *copyAct = menu->addAction(GuiIconProvider::instance()->getIcon("edit-copy"), tr("Copy tracker URL")); + const QAction *copyAct = menu->addAction(UIThemeManager::instance()->getIcon("edit-copy"), tr("Copy tracker URL")); connect(copyAct, &QAction::triggered, this, &TrackerListWidget::copyTrackerUrl); } if (!torrent->isPaused()) { - const QAction *reannounceSelAct = menu->addAction(GuiIconProvider::instance()->getIcon("view-refresh"), tr("Force reannounce to selected trackers")); + const QAction *reannounceSelAct = menu->addAction(UIThemeManager::instance()->getIcon("view-refresh"), tr("Force reannounce to selected trackers")); connect(reannounceSelAct, &QAction::triggered, this, &TrackerListWidget::reannounceSelected); menu->addSeparator(); - const QAction *reannounceAllAct = menu->addAction(GuiIconProvider::instance()->getIcon("view-refresh"), tr("Force reannounce to all trackers")); + const QAction *reannounceAllAct = menu->addAction(UIThemeManager::instance()->getIcon("view-refresh"), tr("Force reannounce to all trackers")); connect(reannounceAllAct, &QAction::triggered, this, [this]() { BitTorrent::TorrentHandle *h = m_properties->getCurrentTorrent(); diff --git a/src/gui/properties/trackersadditiondialog.cpp b/src/gui/properties/trackersadditiondialog.cpp index b2de95e16..6d5feeee1 100644 --- a/src/gui/properties/trackersadditiondialog.cpp +++ b/src/gui/properties/trackersadditiondialog.cpp @@ -36,8 +36,8 @@ #include "base/bittorrent/trackerentry.h" #include "base/global.h" #include "base/net/downloadmanager.h" -#include "guiiconprovider.h" #include "ui_trackersadditiondialog.h" +#include "uithememanager.h" TrackersAdditionDialog::TrackersAdditionDialog(QWidget *parent, BitTorrent::TorrentHandle *const torrent) : QDialog(parent) @@ -46,7 +46,7 @@ TrackersAdditionDialog::TrackersAdditionDialog(QWidget *parent, BitTorrent::Torr { m_ui->setupUi(this); // Icons - m_ui->uTorrentListButton->setIcon(GuiIconProvider::instance()->getIcon("download")); + m_ui->uTorrentListButton->setIcon(UIThemeManager::instance()->getIcon("download")); } TrackersAdditionDialog::~TrackersAdditionDialog() diff --git a/src/gui/rss/automatedrssdownloader.cpp b/src/gui/rss/automatedrssdownloader.cpp index fe962336e..5e173f757 100644 --- a/src/gui/rss/automatedrssdownloader.cpp +++ b/src/gui/rss/automatedrssdownloader.cpp @@ -50,8 +50,8 @@ #include "base/utils/fs.h" #include "base/utils/string.h" #include "autoexpandabledialog.h" -#include "guiiconprovider.h" #include "ui_automatedrssdownloader.h" +#include "uithememanager.h" #include "utils.h" const QString EXT_JSON {QStringLiteral(".json")}; @@ -66,8 +66,8 @@ AutomatedRssDownloader::AutomatedRssDownloader(QWidget *parent) { m_ui->setupUi(this); // Icons - m_ui->removeRuleBtn->setIcon(GuiIconProvider::instance()->getIcon("list-remove")); - m_ui->addRuleBtn->setIcon(GuiIconProvider::instance()->getIcon("list-add")); + m_ui->removeRuleBtn->setIcon(UIThemeManager::instance()->getIcon("list-remove")); + m_ui->addRuleBtn->setIcon(UIThemeManager::instance()->getIcon("list-add")); // Ui Settings m_ui->listRules->setSortingEnabled(true); @@ -469,29 +469,29 @@ void AutomatedRssDownloader::displayRulesListMenu() QMenu *menu = new QMenu(this); menu->setAttribute(Qt::WA_DeleteOnClose); - const QAction *addAct = menu->addAction(GuiIconProvider::instance()->getIcon("list-add"), tr("Add new rule...")); + const QAction *addAct = menu->addAction(UIThemeManager::instance()->getIcon("list-add"), tr("Add new rule...")); connect(addAct, &QAction::triggered, this, &AutomatedRssDownloader::on_addRuleBtn_clicked); const QList selection = m_ui->listRules->selectedItems(); if (!selection.isEmpty()) { if (selection.count() == 1) { - const QAction *delAct = menu->addAction(GuiIconProvider::instance()->getIcon("list-remove"), tr("Delete rule")); + const QAction *delAct = menu->addAction(UIThemeManager::instance()->getIcon("list-remove"), tr("Delete rule")); connect(delAct, &QAction::triggered, this, &AutomatedRssDownloader::on_removeRuleBtn_clicked); menu->addSeparator(); - const QAction *renameAct = menu->addAction(GuiIconProvider::instance()->getIcon("edit-rename"), tr("Rename rule...")); + const QAction *renameAct = menu->addAction(UIThemeManager::instance()->getIcon("edit-rename"), tr("Rename rule...")); connect(renameAct, &QAction::triggered, this, &AutomatedRssDownloader::renameSelectedRule); } else { - const QAction *delAct = menu->addAction(GuiIconProvider::instance()->getIcon("list-remove"), tr("Delete selected rules")); + const QAction *delAct = menu->addAction(UIThemeManager::instance()->getIcon("list-remove"), tr("Delete selected rules")); connect(delAct, &QAction::triggered, this, &AutomatedRssDownloader::on_removeRuleBtn_clicked); } menu->addSeparator(); - const QAction *clearAct = menu->addAction(GuiIconProvider::instance()->getIcon("edit-clear"), tr("Clear downloaded episodes...")); + const QAction *clearAct = menu->addAction(UIThemeManager::instance()->getIcon("edit-clear"), tr("Clear downloaded episodes...")); connect(clearAct, &QAction::triggered, this, &AutomatedRssDownloader::clearSelectedRuleDownloadedEpisodeList); } @@ -611,7 +611,7 @@ void AutomatedRssDownloader::addFeedArticlesToTree(RSS::Feed *feed, const QStrin QFont f = treeFeedItem->font(0); f.setBold(true); treeFeedItem->setFont(0, f); - treeFeedItem->setData(0, Qt::DecorationRole, GuiIconProvider::instance()->getIcon("inode-directory")); + treeFeedItem->setData(0, Qt::DecorationRole, UIThemeManager::instance()->getIcon("inode-directory")); treeFeedItem->setData(0, Qt::UserRole, feed->url()); m_ui->treeMatchingArticles->addTopLevelItem(treeFeedItem); } @@ -693,7 +693,7 @@ void AutomatedRssDownloader::updateMustLineValidity() } else { m_ui->lineContains->setStyleSheet("QLineEdit { color: #ff0000; }"); - m_ui->labelMustStat->setPixmap(GuiIconProvider::instance()->getIcon("task-attention").pixmap(16, 16)); + m_ui->labelMustStat->setPixmap(UIThemeManager::instance()->getIcon("task-attention").pixmap(16, 16)); m_ui->labelMustStat->setToolTip(error); } } @@ -731,7 +731,7 @@ void AutomatedRssDownloader::updateMustNotLineValidity() } else { m_ui->lineNotContains->setStyleSheet("QLineEdit { color: #ff0000; }"); - m_ui->labelMustNotStat->setPixmap(GuiIconProvider::instance()->getIcon("task-attention").pixmap(16, 16)); + m_ui->labelMustNotStat->setPixmap(UIThemeManager::instance()->getIcon("task-attention").pixmap(16, 16)); m_ui->labelMustNotStat->setToolTip(error); } } @@ -747,7 +747,7 @@ void AutomatedRssDownloader::updateEpisodeFilterValidity() } else { m_ui->lineEFilter->setStyleSheet("QLineEdit { color: #ff0000; }"); - m_ui->labelEpFilterStat->setPixmap(GuiIconProvider::instance()->getIcon("task-attention").pixmap(16, 16)); + m_ui->labelEpFilterStat->setPixmap(UIThemeManager::instance()->getIcon("task-attention").pixmap(16, 16)); } } diff --git a/src/gui/rss/feedlistwidget.cpp b/src/gui/rss/feedlistwidget.cpp index 954f6733b..d800b30d0 100644 --- a/src/gui/rss/feedlistwidget.cpp +++ b/src/gui/rss/feedlistwidget.cpp @@ -38,7 +38,7 @@ #include "base/rss/rss_feed.h" #include "base/rss/rss_folder.h" #include "base/rss/rss_session.h" -#include "guiiconprovider.h" +#include "uithememanager.h" FeedListWidget::FeedListWidget(QWidget *parent) : QTreeWidget(parent) @@ -60,7 +60,7 @@ FeedListWidget::FeedListWidget(QWidget *parent) m_unreadStickyItem = new QTreeWidgetItem(this); m_unreadStickyItem->setData(0, Qt::UserRole, reinterpret_cast(RSS::Session::instance()->rootFolder())); m_unreadStickyItem->setText(0, tr("Unread (%1)").arg(RSS::Session::instance()->rootFolder()->unreadCount())); - m_unreadStickyItem->setData(0, Qt::DecorationRole, GuiIconProvider::instance()->getIcon("mail-folder-inbox")); + m_unreadStickyItem->setData(0, Qt::DecorationRole, UIThemeManager::instance()->getIcon("mail-folder-inbox")); connect(RSS::Session::instance()->rootFolder(), &RSS::Item::unreadCountChanged, this, &FeedListWidget::handleItemUnreadCountChanged); @@ -92,11 +92,11 @@ void FeedListWidget::handleFeedStateChanged(RSS::Feed *feed) if (feed->isLoading()) icon = QIcon(QStringLiteral(":/icons/loading.png")); else if (feed->hasError()) - icon = GuiIconProvider::instance()->getIcon(QStringLiteral("unavailable")); + icon = UIThemeManager::instance()->getIcon(QStringLiteral("unavailable")); else if (!feed->iconPath().isEmpty()) icon = QIcon(feed->iconPath()); else - icon = GuiIconProvider::instance()->getIcon(QStringLiteral("application-rss+xml")); + icon = UIThemeManager::instance()->getIcon(QStringLiteral("application-rss+xml")); item->setData(0, Qt::DecorationRole, icon); } @@ -242,14 +242,14 @@ QTreeWidgetItem *FeedListWidget::createItem(RSS::Item *rssItem, QTreeWidgetItem if (feed->isLoading()) icon = QIcon(QStringLiteral(":/icons/loading.png")); else if (feed->hasError()) - icon = GuiIconProvider::instance()->getIcon(QStringLiteral("unavailable")); + icon = UIThemeManager::instance()->getIcon(QStringLiteral("unavailable")); else if (!feed->iconPath().isEmpty()) icon = QIcon(feed->iconPath()); else - icon = GuiIconProvider::instance()->getIcon(QStringLiteral("application-rss+xml")); + icon = UIThemeManager::instance()->getIcon(QStringLiteral("application-rss+xml")); } else { - icon = GuiIconProvider::instance()->getIcon("inode-directory"); + icon = UIThemeManager::instance()->getIcon("inode-directory"); } item->setData(0, Qt::DecorationRole, icon); diff --git a/src/gui/rss/rsswidget.cpp b/src/gui/rss/rsswidget.cpp index d1482076e..6a2f5e52f 100644 --- a/src/gui/rss/rsswidget.cpp +++ b/src/gui/rss/rsswidget.cpp @@ -52,8 +52,8 @@ #include "autoexpandabledialog.h" #include "automatedrssdownloader.h" #include "feedlistwidget.h" -#include "guiiconprovider.h" #include "ui_rsswidget.h" +#include "uithememanager.h" RSSWidget::RSSWidget(QWidget *parent) : QWidget(parent) @@ -62,21 +62,21 @@ RSSWidget::RSSWidget(QWidget *parent) m_ui->setupUi(this); // Icons - m_ui->actionCopyFeedURL->setIcon(GuiIconProvider::instance()->getIcon("edit-copy")); - m_ui->actionDelete->setIcon(GuiIconProvider::instance()->getIcon("edit-delete")); - m_ui->actionDownloadTorrent->setIcon(GuiIconProvider::instance()->getIcon("download")); - m_ui->actionMarkItemsRead->setIcon(GuiIconProvider::instance()->getIcon("mail-mark-read")); - m_ui->actionNewFolder->setIcon(GuiIconProvider::instance()->getIcon("folder-new")); - m_ui->actionNewSubscription->setIcon(GuiIconProvider::instance()->getIcon("list-add")); - m_ui->actionOpenNewsURL->setIcon(GuiIconProvider::instance()->getIcon("application-x-mswinurl")); - m_ui->actionRename->setIcon(GuiIconProvider::instance()->getIcon("edit-rename")); - m_ui->actionUpdate->setIcon(GuiIconProvider::instance()->getIcon("view-refresh")); - m_ui->actionUpdateAllFeeds->setIcon(GuiIconProvider::instance()->getIcon("view-refresh")); + m_ui->actionCopyFeedURL->setIcon(UIThemeManager::instance()->getIcon("edit-copy")); + m_ui->actionDelete->setIcon(UIThemeManager::instance()->getIcon("edit-delete")); + m_ui->actionDownloadTorrent->setIcon(UIThemeManager::instance()->getIcon("download")); + m_ui->actionMarkItemsRead->setIcon(UIThemeManager::instance()->getIcon("mail-mark-read")); + m_ui->actionNewFolder->setIcon(UIThemeManager::instance()->getIcon("folder-new")); + m_ui->actionNewSubscription->setIcon(UIThemeManager::instance()->getIcon("list-add")); + m_ui->actionOpenNewsURL->setIcon(UIThemeManager::instance()->getIcon("application-x-mswinurl")); + m_ui->actionRename->setIcon(UIThemeManager::instance()->getIcon("edit-rename")); + m_ui->actionUpdate->setIcon(UIThemeManager::instance()->getIcon("view-refresh")); + m_ui->actionUpdateAllFeeds->setIcon(UIThemeManager::instance()->getIcon("view-refresh")); #ifndef Q_OS_MAC - m_ui->newFeedButton->setIcon(GuiIconProvider::instance()->getIcon("list-add")); - m_ui->markReadButton->setIcon(GuiIconProvider::instance()->getIcon("mail-mark-read")); - m_ui->updateAllButton->setIcon(GuiIconProvider::instance()->getIcon("view-refresh")); - m_ui->rssDownloaderBtn->setIcon(GuiIconProvider::instance()->getIcon("download")); + m_ui->newFeedButton->setIcon(UIThemeManager::instance()->getIcon("list-add")); + m_ui->markReadButton->setIcon(UIThemeManager::instance()->getIcon("mail-mark-read")); + m_ui->updateAllButton->setIcon(UIThemeManager::instance()->getIcon("view-refresh")); + m_ui->rssDownloaderBtn->setIcon(UIThemeManager::instance()->getIcon("download")); #endif m_articleListWidget = new ArticleListWidget(m_ui->splitterMain); diff --git a/src/gui/search/pluginselectdialog.cpp b/src/gui/search/pluginselectdialog.cpp index f803b0c4f..937775be3 100644 --- a/src/gui/search/pluginselectdialog.cpp +++ b/src/gui/search/pluginselectdialog.cpp @@ -43,10 +43,10 @@ #include "base/net/downloadmanager.h" #include "base/utils/fs.h" #include "autoexpandabledialog.h" -#include "guiiconprovider.h" #include "pluginsourcedialog.h" #include "searchwidget.h" #include "ui_pluginselectdialog.h" +#include "uithememanager.h" #include "utils.h" enum PluginColumns @@ -79,7 +79,7 @@ PluginSelectDialog::PluginSelectDialog(SearchPluginManager *pluginManager, QWidg m_ui->pluginsTree->hideColumn(PLUGIN_ID); m_ui->pluginsTree->header()->setSortIndicator(0, Qt::AscendingOrder); - m_ui->actionUninstall->setIcon(GuiIconProvider::instance()->getIcon("list-remove")); + m_ui->actionUninstall->setIcon(UIThemeManager::instance()->getIcon("list-remove")); connect(m_ui->actionEnable, &QAction::toggled, this, &PluginSelectDialog::enableSelection); connect(m_ui->pluginsTree, &QTreeWidget::customContextMenuRequested, this, &PluginSelectDialog::displayContextMenu); diff --git a/src/gui/search/searchjobwidget.cpp b/src/gui/search/searchjobwidget.cpp index 1af98b679..9378751f5 100644 --- a/src/gui/search/searchjobwidget.cpp +++ b/src/gui/search/searchjobwidget.cpp @@ -48,11 +48,11 @@ #include "base/settingvalue.h" #include "base/utils/misc.h" #include "addnewtorrentdialog.h" -#include "guiiconprovider.h" #include "lineedit.h" #include "searchlistdelegate.h" #include "searchsortmodel.h" #include "ui_searchjobwidget.h" +#include "uithememanager.h" #include "utils.h" SearchJobWidget::SearchJobWidget(SearchHandler *searchHandler, QWidget *parent) @@ -390,29 +390,29 @@ void SearchJobWidget::contextMenuEvent(QContextMenuEvent *event) menu->setAttribute(Qt::WA_DeleteOnClose); const QAction *downloadAction = menu->addAction( - GuiIconProvider::instance()->getIcon("download"), tr("Download")); + UIThemeManager::instance()->getIcon("download"), tr("Download")); connect(downloadAction, &QAction::triggered, this, &SearchJobWidget::downloadTorrents); menu->addSeparator(); const QAction *openDescriptionAction = menu->addAction( - GuiIconProvider::instance()->getIcon("application-x-mswinurl"), tr("Open description page")); + UIThemeManager::instance()->getIcon("application-x-mswinurl"), tr("Open description page")); connect(openDescriptionAction, &QAction::triggered, this, &SearchJobWidget::openTorrentPages); QMenu *copySubMenu = menu->addMenu( - GuiIconProvider::instance()->getIcon("edit-copy"), tr("Copy")); + UIThemeManager::instance()->getIcon("edit-copy"), tr("Copy")); const QAction *copyNamesAction = copySubMenu->addAction( - GuiIconProvider::instance()->getIcon("edit-copy"), tr("Name")); + UIThemeManager::instance()->getIcon("edit-copy"), tr("Name")); connect(copyNamesAction, &QAction::triggered, this, &SearchJobWidget::copyTorrentNames); const QAction *copyDownloadLinkAction = copySubMenu->addAction( - GuiIconProvider::instance()->getIcon("edit-copy"), tr("Download link")); + UIThemeManager::instance()->getIcon("edit-copy"), tr("Download link")); connect(copyDownloadLinkAction, &QAction::triggered , this, &SearchJobWidget::copyTorrentDownloadLinks); const QAction *copyDescriptionAction = copySubMenu->addAction( - GuiIconProvider::instance()->getIcon("edit-copy"), tr("Description page URL")); + UIThemeManager::instance()->getIcon("edit-copy"), tr("Description page URL")); connect(copyDescriptionAction, &QAction::triggered, this, &SearchJobWidget::copyTorrentURLs); menu->popup(event->globalPos()); diff --git a/src/gui/search/searchwidget.cpp b/src/gui/search/searchwidget.cpp index 49d4ac343..b0345a436 100644 --- a/src/gui/search/searchwidget.cpp +++ b/src/gui/search/searchwidget.cpp @@ -43,14 +43,14 @@ #include #include "base/global.h" -#include "base/search/searchpluginmanager.h" #include "base/search/searchhandler.h" +#include "base/search/searchpluginmanager.h" #include "base/utils/foreignapps.h" -#include "guiiconprovider.h" #include "mainwindow.h" #include "pluginselectdialog.h" #include "searchjobwidget.h" #include "ui_searchwidget.h" +#include "uithememanager.h" #define SEARCHHISTORY_MAXSIZE 50 #define URL_COLUMN 5 @@ -104,8 +104,8 @@ SearchWidget::SearchWidget(MainWindow *mainWindow) #ifndef Q_OS_MAC // Icons - m_ui->searchButton->setIcon(GuiIconProvider::instance()->getIcon("edit-find")); - m_ui->pluginsButton->setIcon(GuiIconProvider::instance()->getIcon("preferences-system-network")); + m_ui->searchButton->setIcon(UIThemeManager::instance()->getIcon("edit-find")); + m_ui->pluginsButton->setIcon(UIThemeManager::instance()->getIcon("preferences-system-network")); #else // On macOS the icons overlap the text otherwise QSize iconSize = m_ui->tabWidget->iconSize(); @@ -318,7 +318,7 @@ void SearchWidget::tabStatusChanged(QWidget *tab) { const int tabIndex = m_ui->tabWidget->indexOf(tab); m_ui->tabWidget->setTabToolTip(tabIndex, tab->statusTip()); - m_ui->tabWidget->setTabIcon(tabIndex, GuiIconProvider::instance()->getIcon( + m_ui->tabWidget->setTabIcon(tabIndex, UIThemeManager::instance()->getIcon( statusIconName(static_cast(tab)->status()))); if ((tab == m_activeSearchTab) && (m_activeSearchTab->status() != SearchJobWidget::Status::Ongoing)) { diff --git a/src/gui/tagfiltermodel.cpp b/src/gui/tagfiltermodel.cpp index d816a9699..08f20a9c7 100644 --- a/src/gui/tagfiltermodel.cpp +++ b/src/gui/tagfiltermodel.cpp @@ -34,7 +34,7 @@ #include "base/bittorrent/session.h" #include "base/bittorrent/torrenthandle.h" #include "base/global.h" -#include "guiiconprovider.h" +#include "uithememanager.h" namespace { @@ -122,7 +122,7 @@ QVariant TagFilterModel::data(const QModelIndex &index, int role) const switch (role) { case Qt::DecorationRole: - return GuiIconProvider::instance()->getIcon("inode-directory"); + return UIThemeManager::instance()->getIcon("inode-directory"); case Qt::DisplayRole: return QString(QLatin1String("%1 (%2)")) .arg(tagDisplayName(item.tag())).arg(item.torrentsCount()); diff --git a/src/gui/tagfilterwidget.cpp b/src/gui/tagfilterwidget.cpp index 8366fd61f..f39135b38 100644 --- a/src/gui/tagfilterwidget.cpp +++ b/src/gui/tagfilterwidget.cpp @@ -35,9 +35,9 @@ #include "base/bittorrent/session.h" #include "base/global.h" #include "autoexpandabledialog.h" -#include "guiiconprovider.h" #include "tagfiltermodel.h" #include "tagfilterproxymodel.h" +#include "uithememanager.h" #include "utils.h" namespace @@ -108,39 +108,39 @@ void TagFilterWidget::showMenu(QPoint) menu->setAttribute(Qt::WA_DeleteOnClose); const QAction *addAct = menu->addAction( - GuiIconProvider::instance()->getIcon("list-add") + UIThemeManager::instance()->getIcon("list-add") , tr("Add tag...")); connect(addAct, &QAction::triggered, this, &TagFilterWidget::addTag); const auto selectedRows = selectionModel()->selectedRows(); if (!selectedRows.empty() && !TagFilterModel::isSpecialItem(selectedRows.first())) { const QAction *removeAct = menu->addAction( - GuiIconProvider::instance()->getIcon("list-remove") + UIThemeManager::instance()->getIcon("list-remove") , tr("Remove tag")); connect(removeAct, &QAction::triggered, this, &TagFilterWidget::removeTag); } const QAction *removeUnusedAct = menu->addAction( - GuiIconProvider::instance()->getIcon("list-remove") + UIThemeManager::instance()->getIcon("list-remove") , tr("Remove unused tags")); connect(removeUnusedAct, &QAction::triggered, this, &TagFilterWidget::removeUnusedTags); menu->addSeparator(); const QAction *startAct = menu->addAction( - GuiIconProvider::instance()->getIcon("media-playback-start") + UIThemeManager::instance()->getIcon("media-playback-start") , tr("Resume torrents")); connect(startAct, &QAction::triggered , this, &TagFilterWidget::actionResumeTorrentsTriggered); const QAction *pauseAct = menu->addAction( - GuiIconProvider::instance()->getIcon("media-playback-pause") + UIThemeManager::instance()->getIcon("media-playback-pause") , tr("Pause torrents")); connect(pauseAct, &QAction::triggered, this , &TagFilterWidget::actionPauseTorrentsTriggered); const QAction *deleteTorrentsAct = menu->addAction( - GuiIconProvider::instance()->getIcon("edit-delete") + UIThemeManager::instance()->getIcon("edit-delete") , tr("Delete torrents")); connect(deleteTorrentsAct, &QAction::triggered, this , &TagFilterWidget::actionDeleteTorrentsTriggered); diff --git a/src/gui/torrentcontentmodel.cpp b/src/gui/torrentcontentmodel.cpp index 4be6c6ce7..d86a89a6f 100644 --- a/src/gui/torrentcontentmodel.cpp +++ b/src/gui/torrentcontentmodel.cpp @@ -52,10 +52,10 @@ #include "base/bittorrent/torrentinfo.h" #include "base/global.h" #include "base/utils/fs.h" -#include "guiiconprovider.h" #include "torrentcontentmodelfile.h" #include "torrentcontentmodelfolder.h" #include "torrentcontentmodelitem.h" +#include "uithememanager.h" #ifdef Q_OS_MAC #include "macutilities.h" @@ -71,7 +71,7 @@ namespace QIcon icon(const QFileInfo &info) const override { Q_UNUSED(info); - static QIcon cached = GuiIconProvider::instance()->getIcon("text-plain"); + static QIcon cached = UIThemeManager::instance()->getIcon("text-plain"); return cached; } }; diff --git a/src/gui/transferlistfilterswidget.cpp b/src/gui/transferlistfilterswidget.cpp index ff21019e6..051a664f1 100644 --- a/src/gui/transferlistfilterswidget.cpp +++ b/src/gui/transferlistfilterswidget.cpp @@ -49,9 +49,9 @@ #include "base/utils/fs.h" #include "base/utils/string.h" #include "categoryfilterwidget.h" -#include "guiiconprovider.h" #include "tagfilterwidget.h" #include "transferlistwidget.h" +#include "uithememanager.h" #include "utils.h" namespace @@ -221,10 +221,10 @@ TrackerFiltersList::TrackerFiltersList(QWidget *parent, TransferListWidget *tran { auto *allTrackers = new QListWidgetItem(this); allTrackers->setData(Qt::DisplayRole, QVariant(tr("All (0)", "this is for the tracker filter"))); - allTrackers->setData(Qt::DecorationRole, GuiIconProvider::instance()->getIcon("network-server")); + allTrackers->setData(Qt::DecorationRole, UIThemeManager::instance()->getIcon("network-server")); auto *noTracker = new QListWidgetItem(this); noTracker->setData(Qt::DisplayRole, QVariant(tr("Trackerless (0)"))); - noTracker->setData(Qt::DecorationRole, GuiIconProvider::instance()->getIcon("network-server")); + noTracker->setData(Qt::DecorationRole, UIThemeManager::instance()->getIcon("network-server")); auto *errorTracker = new QListWidgetItem(this); errorTracker->setData(Qt::DisplayRole, QVariant(tr("Error (0)"))); errorTracker->setData(Qt::DecorationRole, style()->standardIcon(QStyle::SP_MessageBoxCritical)); @@ -264,7 +264,7 @@ void TrackerFiltersList::addItem(const QString &tracker, const QString &hash) } else { trackerItem = new QListWidgetItem(); - trackerItem->setData(Qt::DecorationRole, GuiIconProvider::instance()->getIcon("network-server")); + trackerItem->setData(Qt::DecorationRole, UIThemeManager::instance()->getIcon("network-server")); const QString scheme = getScheme(tracker); downloadFavicon(QString("%1://%2/favicon.ico").arg((scheme.startsWith("http") ? scheme : "http"), host)); @@ -470,13 +470,13 @@ void TrackerFiltersList::showMenu(const QPoint &) QMenu *menu = new QMenu(this); menu->setAttribute(Qt::WA_DeleteOnClose); - const QAction *startAct = menu->addAction(GuiIconProvider::instance()->getIcon("media-playback-start"), tr("Resume torrents")); + const QAction *startAct = menu->addAction(UIThemeManager::instance()->getIcon("media-playback-start"), tr("Resume torrents")); connect(startAct, &QAction::triggered, transferList, &TransferListWidget::startVisibleTorrents); - const QAction *pauseAct = menu->addAction(GuiIconProvider::instance()->getIcon("media-playback-pause"), tr("Pause torrents")); + const QAction *pauseAct = menu->addAction(UIThemeManager::instance()->getIcon("media-playback-pause"), tr("Pause torrents")); connect(pauseAct, &QAction::triggered, transferList, &TransferListWidget::pauseVisibleTorrents); - const QAction *deleteTorrentsAct = menu->addAction(GuiIconProvider::instance()->getIcon("edit-delete"), tr("Delete torrents")); + const QAction *deleteTorrentsAct = menu->addAction(UIThemeManager::instance()->getIcon("edit-delete"), tr("Delete torrents")); connect(deleteTorrentsAct, &QAction::triggered, transferList, &TransferListWidget::deleteVisibleTorrents); menu->popup(QCursor::pos()); diff --git a/src/gui/transferlistwidget.cpp b/src/gui/transferlistwidget.cpp index f86a56391..8c6e9c36f 100644 --- a/src/gui/transferlistwidget.cpp +++ b/src/gui/transferlistwidget.cpp @@ -55,7 +55,6 @@ #include "base/utils/string.h" #include "autoexpandabledialog.h" #include "deletionconfirmationdialog.h" -#include "guiiconprovider.h" #include "mainwindow.h" #include "optionsdialog.h" #include "previewselectdialog.h" @@ -66,6 +65,7 @@ #include "transferlistmodel.h" #include "transferlistsortmodel.h" #include "tristateaction.h" +#include "uithememanager.h" #include "updownratiodialog.h" #include "utils.h" @@ -812,47 +812,48 @@ void TransferListWidget::displayListMenu(const QPoint &) listMenu->setAttribute(Qt::WA_DeleteOnClose); // Create actions - auto *actionStart = new QAction(GuiIconProvider::instance()->getIcon("media-playback-start"), tr("Resume", "Resume/start the torrent"), listMenu); + + auto *actionStart = new QAction(UIThemeManager::instance()->getIcon("media-playback-start"), tr("Resume", "Resume/start the torrent"), listMenu); connect(actionStart, &QAction::triggered, this, &TransferListWidget::startSelectedTorrents); - auto *actionPause = new QAction(GuiIconProvider::instance()->getIcon("media-playback-pause"), tr("Pause", "Pause the torrent"), listMenu); + auto *actionPause = new QAction(UIThemeManager::instance()->getIcon("media-playback-pause"), tr("Pause", "Pause the torrent"), listMenu); connect(actionPause, &QAction::triggered, this, &TransferListWidget::pauseSelectedTorrents); - auto *actionForceStart = new QAction(GuiIconProvider::instance()->getIcon("media-seek-forward"), tr("Force Resume", "Force Resume/start the torrent"), listMenu); + auto *actionForceStart = new QAction(UIThemeManager::instance()->getIcon("media-seek-forward"), tr("Force Resume", "Force Resume/start the torrent"), listMenu); connect(actionForceStart, &QAction::triggered, this, &TransferListWidget::forceStartSelectedTorrents); - auto *actionDelete = new QAction(GuiIconProvider::instance()->getIcon("edit-delete"), tr("Delete", "Delete the torrent"), listMenu); + auto *actionDelete = new QAction(UIThemeManager::instance()->getIcon("edit-delete"), tr("Delete", "Delete the torrent"), listMenu); connect(actionDelete, &QAction::triggered, this, &TransferListWidget::softDeleteSelectedTorrents); - auto *actionPreviewFile = new QAction(GuiIconProvider::instance()->getIcon("view-preview"), tr("Preview file..."), listMenu); + 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/skin/ratio.svg")), tr("Limit share ratio..."), listMenu); connect(actionSetMaxRatio, &QAction::triggered, this, &TransferListWidget::setMaxRatioSelectedTorrents); - auto *actionSetUploadLimit = new QAction(GuiIconProvider::instance()->getIcon("kt-set-max-upload-speed"), tr("Limit upload rate..."), listMenu); + auto *actionSetUploadLimit = new QAction(UIThemeManager::instance()->getIcon("kt-set-max-upload-speed"), tr("Limit upload rate..."), listMenu); connect(actionSetUploadLimit, &QAction::triggered, this, &TransferListWidget::setUpLimitSelectedTorrents); - auto *actionSetDownloadLimit = new QAction(GuiIconProvider::instance()->getIcon("kt-set-max-download-speed"), tr("Limit download rate..."), listMenu); + auto *actionSetDownloadLimit = new QAction(UIThemeManager::instance()->getIcon("kt-set-max-download-speed"), tr("Limit download rate..."), listMenu); connect(actionSetDownloadLimit, &QAction::triggered, this, &TransferListWidget::setDlLimitSelectedTorrents); - auto *actionOpenDestinationFolder = new QAction(GuiIconProvider::instance()->getIcon("inode-directory"), tr("Open destination folder"), listMenu); + auto *actionOpenDestinationFolder = new QAction(UIThemeManager::instance()->getIcon("inode-directory"), tr("Open destination folder"), listMenu); connect(actionOpenDestinationFolder, &QAction::triggered, this, &TransferListWidget::openSelectedTorrentsFolder); - auto *actionIncreaseQueuePos = new QAction(GuiIconProvider::instance()->getIcon("go-up"), tr("Move up", "i.e. move up in the queue"), listMenu); + auto *actionIncreaseQueuePos = new QAction(UIThemeManager::instance()->getIcon("go-up"), tr("Move up", "i.e. move up in the queue"), listMenu); connect(actionIncreaseQueuePos, &QAction::triggered, this, &TransferListWidget::increaseQueuePosSelectedTorrents); - auto *actionDecreaseQueuePos = new QAction(GuiIconProvider::instance()->getIcon("go-down"), tr("Move down", "i.e. Move down in the queue"), listMenu); + auto *actionDecreaseQueuePos = new QAction(UIThemeManager::instance()->getIcon("go-down"), tr("Move down", "i.e. Move down in the queue"), listMenu); connect(actionDecreaseQueuePos, &QAction::triggered, this, &TransferListWidget::decreaseQueuePosSelectedTorrents); - auto *actionTopQueuePos = new QAction(GuiIconProvider::instance()->getIcon("go-top"), tr("Move to top", "i.e. Move to top of the queue"), listMenu); + auto *actionTopQueuePos = new QAction(UIThemeManager::instance()->getIcon("go-top"), tr("Move to top", "i.e. Move to top of the queue"), listMenu); connect(actionTopQueuePos, &QAction::triggered, this, &TransferListWidget::topQueuePosSelectedTorrents); - auto *actionBottomQueuePos = new QAction(GuiIconProvider::instance()->getIcon("go-bottom"), tr("Move to bottom", "i.e. Move to bottom of the queue"), listMenu); + auto *actionBottomQueuePos = new QAction(UIThemeManager::instance()->getIcon("go-bottom"), tr("Move to bottom", "i.e. Move to bottom of the queue"), listMenu); connect(actionBottomQueuePos, &QAction::triggered, this, &TransferListWidget::bottomQueuePosSelectedTorrents); - auto *actionSetTorrentPath = new QAction(GuiIconProvider::instance()->getIcon("inode-directory"), tr("Set location..."), listMenu); + auto *actionSetTorrentPath = new QAction(UIThemeManager::instance()->getIcon("inode-directory"), tr("Set location..."), listMenu); connect(actionSetTorrentPath, &QAction::triggered, this, &TransferListWidget::setSelectedTorrentsLocation); - auto *actionForceRecheck = new QAction(GuiIconProvider::instance()->getIcon("document-edit-verify"), tr("Force recheck"), listMenu); + auto *actionForceRecheck = new QAction(UIThemeManager::instance()->getIcon("document-edit-verify"), tr("Force recheck"), listMenu); connect(actionForceRecheck, &QAction::triggered, this, &TransferListWidget::recheckSelectedTorrents); - auto *actionForceReannounce = new QAction(GuiIconProvider::instance()->getIcon("document-edit-verify"), tr("Force reannounce"), listMenu); + auto *actionForceReannounce = new QAction(UIThemeManager::instance()->getIcon("document-edit-verify"), tr("Force reannounce"), listMenu); connect(actionForceReannounce, &QAction::triggered, this, &TransferListWidget::reannounceSelectedTorrents); - auto *actionCopyMagnetLink = new QAction(GuiIconProvider::instance()->getIcon("kt-magnet"), tr("Magnet link"), listMenu); + auto *actionCopyMagnetLink = new QAction(UIThemeManager::instance()->getIcon("kt-magnet"), tr("Magnet link"), listMenu); connect(actionCopyMagnetLink, &QAction::triggered, this, &TransferListWidget::copySelectedMagnetURIs); - auto *actionCopyName = new QAction(GuiIconProvider::instance()->getIcon("edit-copy"), tr("Name"), listMenu); + auto *actionCopyName = new QAction(UIThemeManager::instance()->getIcon("edit-copy"), tr("Name"), listMenu); connect(actionCopyName, &QAction::triggered, this, &TransferListWidget::copySelectedNames); - auto *actionCopyHash = new QAction(GuiIconProvider::instance()->getIcon("edit-copy"), tr("Hash"), listMenu); + auto *actionCopyHash = new QAction(UIThemeManager::instance()->getIcon("edit-copy"), tr("Hash"), listMenu); connect(actionCopyHash, &QAction::triggered, this, &TransferListWidget::copySelectedHashes); auto *actionSuperSeedingMode = new TriStateAction(tr("Super seeding mode"), listMenu); connect(actionSuperSeedingMode, &QAction::triggered, this, &TransferListWidget::setSelectedTorrentsSuperSeeding); - auto *actionRename = new QAction(GuiIconProvider::instance()->getIcon("edit-rename"), tr("Rename..."), listMenu); + auto *actionRename = new QAction(UIThemeManager::instance()->getIcon("edit-rename"), tr("Rename..."), listMenu); connect(actionRename, &QAction::triggered, this, &TransferListWidget::renameSelectedTorrent); auto *actionSequentialDownload = new TriStateAction(tr("Download in sequential order"), listMenu); connect(actionSequentialDownload, &QAction::triggered, this, &TransferListWidget::setSelectedTorrentsSequentialDownload); @@ -861,7 +862,7 @@ void TransferListWidget::displayListMenu(const QPoint &) auto *actionAutoTMM = new TriStateAction(tr("Automatic Torrent Management"), listMenu); actionAutoTMM->setToolTip(tr("Automatic mode means that various torrent properties(eg save path) will be decided by the associated category")); connect(actionAutoTMM, &QAction::triggered, this, &TransferListWidget::setSelectedAutoTMMEnabled); - QAction *actionEditTracker = new QAction(GuiIconProvider::instance()->getIcon("edit-rename"), tr("Edit trackers..."), listMenu); + QAction *actionEditTracker = new QAction(UIThemeManager::instance()->getIcon("edit-rename"), tr("Edit trackers..."), listMenu); connect(actionEditTracker, &QAction::triggered, this, &TransferListWidget::editTorrentTrackers); // End of actions @@ -965,12 +966,12 @@ void TransferListWidget::displayListMenu(const QPoint &) QStringList categories = BitTorrent::Session::instance()->categories().keys(); std::sort(categories.begin(), categories.end(), Utils::String::naturalLessThan); - QMenu *categoryMenu = listMenu->addMenu(GuiIconProvider::instance()->getIcon("view-categories"), tr("Category")); + QMenu *categoryMenu = listMenu->addMenu(UIThemeManager::instance()->getIcon("view-categories"), tr("Category")); - const QAction *newCategoryAction = categoryMenu->addAction(GuiIconProvider::instance()->getIcon("list-add"), tr("New...", "New category...")); + const QAction *newCategoryAction = categoryMenu->addAction(UIThemeManager::instance()->getIcon("list-add"), tr("New...", "New category...")); connect(newCategoryAction, &QAction::triggered, this, &TransferListWidget::askNewCategoryForSelection); - const QAction *resetCategoryAction = categoryMenu->addAction(GuiIconProvider::instance()->getIcon("edit-clear"), tr("Reset", "Reset category")); + const QAction *resetCategoryAction = categoryMenu->addAction(UIThemeManager::instance()->getIcon("edit-clear"), tr("Reset", "Reset category")); connect(resetCategoryAction, &QAction::triggered, this, [this]() { setSelectionCategory(""); }); categoryMenu->addSeparator(); @@ -978,7 +979,7 @@ void TransferListWidget::displayListMenu(const QPoint &) for (const QString &category : asConst(categories)) { const QString escapedCategory = QString(category).replace('&', "&&"); // avoid '&' becomes accelerator key - QAction *cat = new QAction(GuiIconProvider::instance()->getIcon("inode-directory"), escapedCategory, categoryMenu); + QAction *cat = new QAction(UIThemeManager::instance()->getIcon("inode-directory"), escapedCategory, categoryMenu); if (allSameCategory && (category == firstCategory)) { cat->setCheckable(true); cat->setChecked(true); @@ -992,12 +993,12 @@ void TransferListWidget::displayListMenu(const QPoint &) QStringList tags(BitTorrent::Session::instance()->tags().toList()); std::sort(tags.begin(), tags.end(), Utils::String::naturalLessThan); - QMenu *tagsMenu = listMenu->addMenu(GuiIconProvider::instance()->getIcon("view-categories"), tr("Tags")); + QMenu *tagsMenu = listMenu->addMenu(UIThemeManager::instance()->getIcon("view-categories"), tr("Tags")); - const QAction *addTagAction = tagsMenu->addAction(GuiIconProvider::instance()->getIcon("list-add"), tr("Add...", "Add / assign multiple tags...")); + const QAction *addTagAction = tagsMenu->addAction(UIThemeManager::instance()->getIcon("list-add"), tr("Add...", "Add / assign multiple tags...")); connect(addTagAction, &QAction::triggered, this, &TransferListWidget::askAddTagsForSelection); - const QAction *removeTagsAction = tagsMenu->addAction(GuiIconProvider::instance()->getIcon("edit-clear"), tr("Remove All", "Remove all tags")); + const QAction *removeTagsAction = tagsMenu->addAction(UIThemeManager::instance()->getIcon("edit-clear"), tr("Remove All", "Remove all tags")); connect(removeTagsAction, &QAction::triggered, this, [this]() { if (Preferences::instance()->confirmRemoveAllTags()) @@ -1082,7 +1083,7 @@ void TransferListWidget::displayListMenu(const QPoint &) } QMenu *copySubMenu = listMenu->addMenu( - GuiIconProvider::instance()->getIcon("edit-copy"), tr("Copy")); + UIThemeManager::instance()->getIcon("edit-copy"), tr("Copy")); copySubMenu->addAction(actionCopyName); copySubMenu->addAction(actionCopyHash); copySubMenu->addAction(actionCopyMagnetLink); diff --git a/src/gui/uithememanager.cpp b/src/gui/uithememanager.cpp index 34f73b62a..63796b9e7 100644 --- a/src/gui/uithememanager.cpp +++ b/src/gui/uithememanager.cpp @@ -31,10 +31,13 @@ #include #include +#include #include +#include "base/iconprovider.h" #include "base/logger.h" #include "base/preferences.h" +#include "base/utils/fs.h" UIThemeManager *UIThemeManager::m_instance = nullptr; @@ -58,6 +61,10 @@ UIThemeManager::UIThemeManager() if (pref->useCustomUITheme() && !QResource::registerResource(pref->customUIThemePath(), "/uitheme")) LogMsg(tr("Failed to load UI theme from file: \"%1\"").arg(pref->customUIThemePath()), Log::WARNING); + +#if (defined(Q_OS_UNIX) && !defined(Q_OS_MAC)) + m_useSystemTheme = pref->useSystemIconTheme(); +#endif } UIThemeManager *UIThemeManager::instance() @@ -82,3 +89,56 @@ void UIThemeManager::applyStyleSheet() const qApp->setStyleSheet(qssFile.readAll()); } + +QIcon UIThemeManager::getIcon(const QString &iconId) const +{ + return getIcon(iconId, iconId); +} + +QIcon UIThemeManager::getIcon(const QString &iconId, const QString &fallback) const +{ +#if (defined(Q_OS_UNIX) && !defined(Q_OS_MAC)) + if (m_useSystemTheme) { + QIcon icon = QIcon::fromTheme(iconId); + if (icon.name() != iconId) + icon = QIcon::fromTheme(fallback, QIcon(IconProvider::instance()->getIconPath(iconId))); + return icon; + } +#else + Q_UNUSED(fallback) +#endif + // cache to avoid rescaling svg icons + static QHash iconCache; + const auto iter = iconCache.find(iconId); + if (iter != iconCache.end()) + return *iter; + + const QIcon icon {IconProvider::instance()->getIconPath(iconId)}; + iconCache[iconId] = icon; + return icon; +} + +QIcon UIThemeManager::getFlagIcon(const QString &countryIsoCode) const +{ + if (countryIsoCode.isEmpty()) return {}; + return QIcon(":/icons/flags/" + countryIsoCode.toLower() + ".svg"); +} + +QString UIThemeManager::getIconPath(const QString &iconId) const +{ +#if (defined(Q_OS_UNIX) && !defined(Q_OS_MAC)) + if (m_useSystemTheme) { + QString path = Utils::Fs::tempPath() + iconId + ".png"; + if (!QFile::exists(path)) { + const QIcon icon = QIcon::fromTheme(iconId); + if (!icon.isNull()) + icon.pixmap(32).save(path); + else + path = IconProvider::instance()->getIconPath(iconId); + } + + return path; + } +#endif + return IconProvider::instance()->getIconPath(iconId); +} diff --git a/src/gui/uithememanager.h b/src/gui/uithememanager.h index d1ba70f8e..3506631ef 100644 --- a/src/gui/uithememanager.h +++ b/src/gui/uithememanager.h @@ -45,8 +45,16 @@ public: void applyStyleSheet() const; + QIcon getIcon(const QString &iconId) const; + QIcon getIcon(const QString &iconId, const QString &fallback) const; + QIcon getFlagIcon(const QString &countryIsoCode) const; + private: UIThemeManager(); // singleton class + QString getIconPath(const QString &iconId) const; static UIThemeManager *m_instance; +#if (defined(Q_OS_UNIX) && !defined(Q_OS_MAC)) + bool m_useSystemTheme; +#endif };