mirror of
https://github.com/d47081/qBittorrent.git
synced 2025-01-22 20:44:15 +00:00
Use system file type specific icons in contents tab
The icon is determined via QFileIconProvider using filename extension only.
This commit is contained in:
parent
8318f72a9e
commit
30bf6e958f
@ -14,6 +14,9 @@ find_package(LibtorrentRasterbar REQUIRED)
|
|||||||
list(APPEND QBT_QT_COMPONENTS Core Network Xml)
|
list(APPEND QBT_QT_COMPONENTS Core Network Xml)
|
||||||
if (GUI)
|
if (GUI)
|
||||||
list (APPEND QBT_QT_COMPONENTS Concurrent Gui Widgets)
|
list (APPEND QBT_QT_COMPONENTS Concurrent Gui Widgets)
|
||||||
|
if (WIN32)
|
||||||
|
list (APPEND QBT_QT_COMPONENTS WinExtras)
|
||||||
|
endif(WIN32)
|
||||||
endif (GUI)
|
endif (GUI)
|
||||||
if (DBUS)
|
if (DBUS)
|
||||||
list (APPEND QBT_QT_COMPONENTS DBus)
|
list (APPEND QBT_QT_COMPONENTS DBus)
|
||||||
|
@ -150,3 +150,6 @@ target_link_libraries(qbt_gui qbt_lineedit qbt_powermanagement qbt_rss qbt_prope
|
|||||||
${QBT_GUI_OPTIONAL_LINK_LIBRARIES} qbt_base
|
${QBT_GUI_OPTIONAL_LINK_LIBRARIES} qbt_base
|
||||||
QtSingleApplication::QtSingleApplication
|
QtSingleApplication::QtSingleApplication
|
||||||
)
|
)
|
||||||
|
if(WIN32)
|
||||||
|
target_link_libraries(qbt_gui Qt5::WinExtras)
|
||||||
|
endif(WIN32)
|
||||||
|
@ -29,8 +29,16 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include <QDir>
|
#include <QDir>
|
||||||
|
#include <QFileIconProvider>
|
||||||
|
#include <QFileInfo>
|
||||||
#include <QIcon>
|
#include <QIcon>
|
||||||
|
|
||||||
|
#ifdef Q_OS_WIN
|
||||||
|
#include <Windows.h>
|
||||||
|
#include <Shellapi.h>
|
||||||
|
#include <QtWin>
|
||||||
|
#endif
|
||||||
|
|
||||||
#include "guiiconprovider.h"
|
#include "guiiconprovider.h"
|
||||||
#include "base/utils/misc.h"
|
#include "base/utils/misc.h"
|
||||||
#include "base/utils/fs.h"
|
#include "base/utils/fs.h"
|
||||||
@ -47,21 +55,53 @@ namespace
|
|||||||
return cached;
|
return cached;
|
||||||
}
|
}
|
||||||
|
|
||||||
QIcon getFileIcon()
|
class UnifiedFileIconProvider: public QFileIconProvider
|
||||||
{
|
{
|
||||||
static QIcon cached = GuiIconProvider::instance()->getIcon("text-plain");
|
public:
|
||||||
return cached;
|
using QFileIconProvider::icon;
|
||||||
}
|
QIcon icon(const QFileInfo &info) const override
|
||||||
|
{
|
||||||
|
Q_UNUSED(info);
|
||||||
|
static QIcon cached = GuiIconProvider::instance()->getIcon("text-plain");
|
||||||
|
return cached;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
#ifdef Q_OS_WIN
|
||||||
|
// See QTBUG-25319 for explanation why this is required
|
||||||
|
class WinShellFileIconProvider: public UnifiedFileIconProvider
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
using QFileIconProvider::icon;
|
||||||
|
QIcon icon(const QFileInfo &info) const override
|
||||||
|
{
|
||||||
|
SHFILEINFO sfi = { 0 };
|
||||||
|
HRESULT hr = ::SHGetFileInfoW(info.absoluteFilePath().toStdWString().c_str(),
|
||||||
|
FILE_ATTRIBUTE_NORMAL, &sfi, sizeof(sfi), SHGFI_ICON | SHGFI_USEFILEATTRIBUTES);
|
||||||
|
if (FAILED(hr))
|
||||||
|
return UnifiedFileIconProvider::icon(info);
|
||||||
|
|
||||||
|
QPixmap iconPixmap = QtWin::fromHICON(sfi.hIcon);
|
||||||
|
::DestroyIcon(sfi.hIcon);
|
||||||
|
return QIcon(iconPixmap);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
TorrentContentModel::TorrentContentModel(QObject *parent)
|
TorrentContentModel::TorrentContentModel(QObject *parent)
|
||||||
: QAbstractItemModel(parent)
|
: QAbstractItemModel(parent)
|
||||||
, m_rootItem(new TorrentContentModelFolder(QList<QVariant>({ tr("Name"), tr("Size"), tr("Progress"), tr("Download Priority"), tr("Remaining"), tr("Availability") })))
|
, m_rootItem(new TorrentContentModelFolder(QList<QVariant>({ tr("Name"), tr("Size"), tr("Progress"), tr("Download Priority"), tr("Remaining"), tr("Availability") })))
|
||||||
{
|
{
|
||||||
|
#ifdef Q_OS_WIN
|
||||||
|
m_fileIconProvider = new WinShellFileIconProvider();
|
||||||
|
#else
|
||||||
|
m_fileIconProvider = new QFileIconProvider();
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
TorrentContentModel::~TorrentContentModel()
|
TorrentContentModel::~TorrentContentModel()
|
||||||
{
|
{
|
||||||
|
delete m_fileIconProvider;
|
||||||
delete m_rootItem;
|
delete m_rootItem;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -202,7 +242,7 @@ QVariant TorrentContentModel::data(const QModelIndex& index, int role) const
|
|||||||
if (item->itemType() == TorrentContentModelItem::FolderType)
|
if (item->itemType() == TorrentContentModelItem::FolderType)
|
||||||
return getDirectoryIcon();
|
return getDirectoryIcon();
|
||||||
else
|
else
|
||||||
return getFileIcon();
|
return m_fileIconProvider->icon(QFileInfo(item->name()));
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((index.column() == TorrentContentModelItem::COL_NAME) && (role == Qt::CheckStateRole)) {
|
if ((index.column() == TorrentContentModelItem::COL_NAME) && (role == Qt::CheckStateRole)) {
|
||||||
|
@ -39,6 +39,7 @@
|
|||||||
#include "base/bittorrent/torrentinfo.h"
|
#include "base/bittorrent/torrentinfo.h"
|
||||||
#include "torrentcontentmodelitem.h"
|
#include "torrentcontentmodelitem.h"
|
||||||
|
|
||||||
|
class QFileIconProvider;
|
||||||
class TorrentContentModelFile;
|
class TorrentContentModelFile;
|
||||||
|
|
||||||
class TorrentContentModel: public QAbstractItemModel
|
class TorrentContentModel: public QAbstractItemModel
|
||||||
@ -77,6 +78,7 @@ public slots:
|
|||||||
private:
|
private:
|
||||||
TorrentContentModelFolder *m_rootItem;
|
TorrentContentModelFolder *m_rootItem;
|
||||||
QVector<TorrentContentModelFile *> m_filesIndex;
|
QVector<TorrentContentModelFile *> m_filesIndex;
|
||||||
|
QFileIconProvider *m_fileIconProvider;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // TORRENTCONTENTMODEL_H
|
#endif // TORRENTCONTENTMODEL_H
|
||||||
|
@ -28,6 +28,9 @@ nogui {
|
|||||||
DEFINES += QBT_STATIC_QT
|
DEFINES += QBT_STATIC_QT
|
||||||
QTPLUGIN += qico
|
QTPLUGIN += qico
|
||||||
}
|
}
|
||||||
|
win32 {
|
||||||
|
QT += winextras
|
||||||
|
}
|
||||||
TARGET = qbittorrent
|
TARGET = qbittorrent
|
||||||
}
|
}
|
||||||
nowebui: DEFINES += DISABLE_WEBUI
|
nowebui: DEFINES += DISABLE_WEBUI
|
||||||
|
Loading…
x
Reference in New Issue
Block a user