Implemented as custom QFileIconProvider class, which (hopefully) is a bit faster than the original one.

This commit is contained in:
LoRd_MuldeR 2011-06-04 19:15:32 +02:00
parent ef4c8f3051
commit 3e0056d0fc
4 changed files with 91 additions and 11 deletions

View File

@ -37,11 +37,16 @@
<file>icons/disk.png</file> <file>icons/disk.png</file>
<file>icons/door_out.png</file> <file>icons/door_out.png</file>
<file>icons/door_in.png</file> <file>icons/door_in.png</file>
<file>icons/drive.png</file>
<file>icons/drive_cd.png</file> <file>icons/drive_cd.png</file>
<file>icons/drive_disk.png</file>
<file>icons/drive_link.png</file>
<file>icons/drive_network.png</file>
<file>icons/exclamation.png</file> <file>icons/exclamation.png</file>
<file>icons/error.png</file> <file>icons/error.png</file>
<file>icons/error_big.png</file> <file>icons/error_big.png</file>
<file>icons/feed.png</file> <file>icons/feed.png</file>
<file>icons/folder.png</file>
<file>icons/folder_add.png</file> <file>icons/folder_add.png</file>
<file>icons/folder_go.png</file> <file>icons/folder_go.png</file>
<file>icons/folder_image.png</file> <file>icons/folder_image.png</file>

View File

@ -29,8 +29,8 @@
#define VER_LAMEXP_MINOR_HI 0 #define VER_LAMEXP_MINOR_HI 0
#define VER_LAMEXP_MINOR_LO 2 #define VER_LAMEXP_MINOR_LO 2
#define VER_LAMEXP_TYPE Beta #define VER_LAMEXP_TYPE Beta
#define VER_LAMEXP_PATCH 6 #define VER_LAMEXP_PATCH 7
#define VER_LAMEXP_BUILD 562 #define VER_LAMEXP_BUILD 564
/////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////
// Tools versions // Tools versions

View File

@ -20,28 +20,96 @@
/////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////
#include "Model_FileSystem.h" #include "Model_FileSystem.h"
#include "Global.h"
#include <QApplication> #include <QApplication>
#include <QFileIconProvider>
///////////////////////////////////////////////////////////////////////////////
// Dummy QFileIconProvider class
///////////////////////////////////////////////////////////////////////////////
class QFileIconProviderEx : public QFileIconProvider
{
public:
QFileIconProviderEx();
virtual QIcon icon(IconType type) const { return (type == Drive) ? m_driveIcon : m_folderIcon; }
virtual QIcon icon(const QFileInfo &info) const;
virtual QString type (const QFileInfo &info) const { return info.isDir() ? m_folderType : m_emptyType; }
private:
const QIcon m_driveIcon;
const QIcon m_cdromIcon;
const QIcon m_networkIcon;
const QIcon m_floppyIcon;
const QIcon m_folderIcon;
const QIcon m_emptyIcon;
const QString m_folderType;
const QString m_emptyType;
};
QFileIconProviderEx::QFileIconProviderEx()
:
m_folderIcon(":/icons/folder.png"),
m_driveIcon(":/icons/drive.png"),
m_cdromIcon(":/icons/drive_cd.png"),
m_networkIcon(":/icons/drive_link.png"),
m_floppyIcon(":/icons/drive_disk.png"),
m_folderType("Folder")
{
/* Nothing to do! */
}
QIcon QFileIconProviderEx::icon(const QFileInfo &info) const
{
if(info.isRoot())
{
switch(GetDriveType(QWCHAR(QDir::toNativeSeparators(info.absoluteFilePath()))))
{
case DRIVE_CDROM:
return m_cdromIcon;
break;
case DRIVE_REMOVABLE:
return m_floppyIcon;
break;
case DRIVE_REMOTE:
return m_networkIcon;
break;
default:
return m_driveIcon;
break;
}
}
return info.isFile() ? m_emptyIcon : m_folderIcon;
}
///////////////////////////////////////////////////////////////////////////////
// Modified QFileSystemModel class
///////////////////////////////////////////////////////////////////////////////
QFileSystemModelEx::QFileSystemModelEx() QFileSystemModelEx::QFileSystemModelEx()
: :
QFileSystemModel() QFileSystemModel()
{ {
this->m_myIconProvider = new QFileIconProviderEx();
this->setIconProvider(m_myIconProvider);
this->setFilter(QDir::Dirs | QDir::NoDotAndDotDot); this->setFilter(QDir::Dirs | QDir::NoDotAndDotDot);
this->setNameFilterDisables(false);
}
QFileSystemModelEx::~QFileSystemModelEx()
{
LAMEXP_DELETE(m_myIconProvider);
} }
bool QFileSystemModelEx::hasChildren(const QModelIndex &parent) const bool QFileSystemModelEx::hasChildren(const QModelIndex &parent) const
{ {
bool result = QFileSystemModel::hasChildren(parent); if(parent.isValid())
if(parent.isValid() && result)
{ {
QFileInfo fileInfo = QFileSystemModel::fileInfo(parent); QDir dir = QDir(QFileSystemModel::filePath(parent));
if(fileInfo.isDir()) return dir.exists() && (dir.entryList(QDir::Dirs | QDir::NoDotAndDotDot).count() > 0);
{
result = (QDir(fileInfo.absoluteFilePath()).entryInfoList(QDir::Dirs | QDir::NoDotAndDotDot).count() > 0);
}
} }
return result; return true;
} }

View File

@ -23,9 +23,16 @@
#include <QFileSystemModel> #include <QFileSystemModel>
class QFileIconProviderEx;
class QFileSystemModelEx : public QFileSystemModel class QFileSystemModelEx : public QFileSystemModel
{ {
public: public:
QFileSystemModelEx(); QFileSystemModelEx();
~QFileSystemModelEx();
virtual bool hasChildren(const QModelIndex &parent = QModelIndex()) const; virtual bool hasChildren(const QModelIndex &parent = QModelIndex()) const;
private:
QFileIconProviderEx *m_myIconProvider;
}; };