From 3e33053da05ae28a8474311813be22632a314499 Mon Sep 17 00:00:00 2001 From: Ivailo Monev Date: Mon, 27 May 2019 17:32:15 +0000 Subject: [PATCH] QFileIconProviderPrivate and QFileDialog cleanup Signed-off-by: Ivailo Monev --- src/gui/dialogs/qfiledialog.cpp | 8 -- src/gui/dialogs/qfiledialog.h | 3 +- src/gui/itemviews/qfileiconprovider.cpp | 136 +++++++++++--------------------- src/gui/itemviews/qfileiconprovider.h | 5 +- src/gui/itemviews/qfileiconprovider_p.h | 24 ------ 5 files changed, 50 insertions(+), 126 deletions(-) diff --git a/src/gui/dialogs/qfiledialog.cpp b/src/gui/dialogs/qfiledialog.cpp index c50687f8e..892a5c7f6 100644 --- a/src/gui/dialogs/qfiledialog.cpp +++ b/src/gui/dialogs/qfiledialog.cpp @@ -223,11 +223,6 @@ Q_GUI_EXPORT _qt_filedialog_save_filename_hook qt_filedialog_save_filename_hook was given a parent. This is no longer supported and does nothing in Qt 4.5, The static functions will always be an application modal dialog. If you want to use sheets, use QFileDialog::open() instead. - - \value DontUseCustomDirectoryIcons Always use the default directory icon. - Some platforms allow the user to set a different icon. Custom icon lookup - cause a big performance impact over network or removable drives. Setting this - will affect the behavior of the icon provider. This enum value was added in Qt 4.8.6. */ /*! @@ -647,9 +642,6 @@ void QFileDialog::setOptions(Options options) if (changed & ShowDirsOnly) setFilter((options & ShowDirsOnly) ? filter() & ~QDir::Files : filter() | QDir::Files); - - if (changed & DontUseCustomDirectoryIcons) - iconProvider()->d_ptr->setUseCustomDirectoryIcons(!(options & DontUseCustomDirectoryIcons)); } QFileDialog::Options QFileDialog::options() const diff --git a/src/gui/dialogs/qfiledialog.h b/src/gui/dialogs/qfiledialog.h index f1af361af..5bb818d3a 100644 --- a/src/gui/dialogs/qfiledialog.h +++ b/src/gui/dialogs/qfiledialog.h @@ -90,8 +90,7 @@ public: DontConfirmOverwrite = 0x00000002, DontUseSheet = 0x00000004, ReadOnly = 0x00000008, - HideNameFilterDetails = 0x00000010, - DontUseCustomDirectoryIcons = 0x00000020 + HideNameFilterDetails = 0x00000010 }; Q_DECLARE_FLAGS(Options, Option) diff --git a/src/gui/itemviews/qfileiconprovider.cpp b/src/gui/itemviews/qfileiconprovider.cpp index 86fc7c7ea..13270a8a2 100644 --- a/src/gui/itemviews/qfileiconprovider.cpp +++ b/src/gui/itemviews/qfileiconprovider.cpp @@ -43,6 +43,7 @@ #include "qfileiconprovider_p.h" #ifndef QT_NO_FILEICONPROVIDER + #include #include #include @@ -69,68 +70,28 @@ QT_BEGIN_NAMESPACE */ QFileIconProviderPrivate::QFileIconProviderPrivate() : - homePath(QDir::home().absolutePath()), useCustomDirectoryIcons(true) + homePath(QDir::home().absolutePath()) { } -void QFileIconProviderPrivate::setUseCustomDirectoryIcons(bool enable) -{ - useCustomDirectoryIcons = enable; -} - QIcon QFileIconProviderPrivate::getIcon(QStyle::StandardPixmap name) const { switch (name) { - case QStyle::SP_FileIcon: - if (file.isNull()) - file = QApplication::style()->standardIcon(name); - return file; - case QStyle::SP_FileLinkIcon: - if (fileLink.isNull()) - fileLink = QApplication::style()->standardIcon(name); - return fileLink; - case QStyle::SP_DirIcon: - if (directory.isNull()) - directory = QApplication::style()->standardIcon(name); - return directory; - case QStyle::SP_DirLinkIcon: - if (directoryLink.isNull()) - directoryLink = QApplication::style()->standardIcon(name); - return directoryLink; - case QStyle::SP_DriveHDIcon: - if (harddisk.isNull()) - harddisk = QApplication::style()->standardIcon(name); - return harddisk; - case QStyle::SP_DriveFDIcon: - if (floppy.isNull()) - floppy = QApplication::style()->standardIcon(name); - return floppy; - case QStyle::SP_DriveCDIcon: - if (cdrom.isNull()) - cdrom = QApplication::style()->standardIcon(name); - return cdrom; - case QStyle::SP_DriveNetIcon: - if (network.isNull()) - network = QApplication::style()->standardIcon(name); - return network; - case QStyle::SP_ComputerIcon: - if (computer.isNull()) - computer = QApplication::style()->standardIcon(name); - return computer; - case QStyle::SP_DesktopIcon: - if (desktop.isNull()) - desktop = QApplication::style()->standardIcon(name); - return desktop; - case QStyle::SP_TrashIcon: - if (trashcan.isNull()) - trashcan = QApplication::style()->standardIcon(name); - return trashcan; - case QStyle::SP_DirHomeIcon: - if (home.isNull()) - home = QApplication::style()->standardIcon(name); - return home; - default: - return QIcon(); + case QStyle::SP_FileIcon: + case QStyle::SP_FileLinkIcon: + case QStyle::SP_DirIcon: + case QStyle::SP_DirLinkIcon: + case QStyle::SP_DriveHDIcon: + case QStyle::SP_DriveFDIcon: + case QStyle::SP_DriveCDIcon: + case QStyle::SP_DriveNetIcon: + case QStyle::SP_ComputerIcon: + case QStyle::SP_DesktopIcon: + case QStyle::SP_TrashIcon: + case QStyle::SP_DirHomeIcon: + return QApplication::style()->standardIcon(name); + default: + return QIcon(); } return QIcon(); } @@ -151,6 +112,7 @@ QFileIconProvider::QFileIconProvider() QFileIconProvider::~QFileIconProvider() { + delete d_ptr; } /*! @@ -161,22 +123,22 @@ QIcon QFileIconProvider::icon(IconType type) const { Q_D(const QFileIconProvider); switch (type) { - case Computer: - return d->getIcon(QStyle::SP_ComputerIcon); - case Desktop: - return d->getIcon(QStyle::SP_DesktopIcon); - case Trashcan: - return d->getIcon(QStyle::SP_TrashIcon); - case Network: - return d->getIcon(QStyle::SP_DriveNetIcon); - case Drive: - return d->getIcon(QStyle::SP_DriveHDIcon); - case Folder: - return d->getIcon(QStyle::SP_DirIcon); - case File: - return d->getIcon(QStyle::SP_FileIcon); - default: - break; + case Computer: + return d->getIcon(QStyle::SP_ComputerIcon); + case Desktop: + return d->getIcon(QStyle::SP_DesktopIcon); + case Trashcan: + return d->getIcon(QStyle::SP_TrashIcon); + case Network: + return d->getIcon(QStyle::SP_DriveNetIcon); + case Drive: + return d->getIcon(QStyle::SP_DriveHDIcon); + case Folder: + return d->getIcon(QStyle::SP_DirIcon); + case File: + return d->getIcon(QStyle::SP_FileIcon); + default: + break; }; return QIcon(); } @@ -193,26 +155,24 @@ QIcon QFileIconProvider::icon(const QFileInfo &info) const if (!platformIcon.isNull()) return platformIcon; - if (info.isRoot()) + if (info.isRoot()) { return d->getIcon(QStyle::SP_DriveHDIcon); - if (info.isFile()) { - if (info.isSymLink()) + } else if (info.isFile()) { + if (info.isSymLink()) { return d->getIcon(QStyle::SP_FileLinkIcon); - else + } else { return d->getIcon(QStyle::SP_FileIcon); + } + } else if (info.isDir()) { + if (info.isSymLink()) { + return d->getIcon(QStyle::SP_DirLinkIcon); + } else if (info.absoluteFilePath() == d->homePath) { + return d->getIcon(QStyle::SP_DirHomeIcon); + } else { + return d->getIcon(QStyle::SP_DirIcon); + } } - if (info.isDir()) { - if (info.isSymLink()) { - return d->getIcon(QStyle::SP_DirLinkIcon); - } else { - if (info.absoluteFilePath() == d->homePath) { - return d->getIcon(QStyle::SP_DirHomeIcon); - } else { - return d->getIcon(QStyle::SP_DirIcon); - } - } - } - return QIcon(); + return QIcon(); } /*! diff --git a/src/gui/itemviews/qfileiconprovider.h b/src/gui/itemviews/qfileiconprovider.h index 8ec01e9bb..5aee69650 100644 --- a/src/gui/itemviews/qfileiconprovider.h +++ b/src/gui/itemviews/qfileiconprovider.h @@ -43,14 +43,12 @@ #define QFILEICONPROVIDER_H #include -#include #include QT_BEGIN_HEADER QT_BEGIN_NAMESPACE - #ifndef QT_NO_FILEICONPROVIDER class QFileIconProviderPrivate; @@ -67,9 +65,8 @@ public: private: Q_DECLARE_PRIVATE(QFileIconProvider) - QScopedPointer d_ptr; Q_DISABLE_COPY(QFileIconProvider) - friend class QFileDialog; + QFileIconProviderPrivate* d_ptr; }; #endif // QT_NO_FILEICONPROVIDER diff --git a/src/gui/itemviews/qfileiconprovider_p.h b/src/gui/itemviews/qfileiconprovider_p.h index 4faa9b35e..d30e05207 100644 --- a/src/gui/itemviews/qfileiconprovider_p.h +++ b/src/gui/itemviews/qfileiconprovider_p.h @@ -48,36 +48,12 @@ QT_BEGIN_NAMESPACE -class QFileInfo; -class QFileIconProvider; - class QFileIconProviderPrivate { - Q_DECLARE_PUBLIC(QFileIconProvider) - public: QFileIconProviderPrivate(); - void setUseCustomDirectoryIcons(bool enable); QIcon getIcon(QStyle::StandardPixmap name) const; - QFileIconProvider * q_ptr; const QString homePath; - -private: - bool useCustomDirectoryIcons; - mutable QIcon file; - mutable QIcon fileLink; - mutable QIcon directory; - mutable QIcon directoryLink; - mutable QIcon harddisk; - mutable QIcon floppy; - mutable QIcon cdrom; - mutable QIcon ram; - mutable QIcon network; - mutable QIcon computer; - mutable QIcon desktop; - mutable QIcon trashcan; - mutable QIcon generic; - mutable QIcon home; }; -- 2.11.0