diff options
author | David Schulz <david.schulz@qt.io> | 2021-06-08 12:54:22 +0200 |
---|---|---|
committer | David Schulz <david.schulz@qt.io> | 2021-06-09 12:25:19 +0000 |
commit | 43b6ada0db401fd29cb77b5ab621f786bd31483b (patch) | |
tree | 66ecf46da753937ae9bdf623089e30bb237d81ce /src/plugins/coreplugin | |
parent | 093f3479ce19ad559d3a07263a23de6fa3e60c09 (diff) |
Core: filepathify FileIconProvider
Change-Id: Id6fcc05317f3f5144c662fb4826438407f8d9d21
Reviewed-by: hjk <hjk@qt.io>
Diffstat (limited to 'src/plugins/coreplugin')
-rw-r--r-- | src/plugins/coreplugin/dialogs/readonlyfilesdialog.cpp | 11 | ||||
-rw-r--r-- | src/plugins/coreplugin/dialogs/saveitemsdialog.cpp | 13 | ||||
-rw-r--r-- | src/plugins/coreplugin/editortoolbar.cpp | 2 | ||||
-rw-r--r-- | src/plugins/coreplugin/fileiconprovider.cpp | 21 | ||||
-rw-r--r-- | src/plugins/coreplugin/fileiconprovider.h | 4 | ||||
-rw-r--r-- | src/plugins/coreplugin/locator/locatorwidget.cpp | 2 | ||||
-rw-r--r-- | src/plugins/coreplugin/vcsmanager.cpp | 6 |
7 files changed, 29 insertions, 30 deletions
diff --git a/src/plugins/coreplugin/dialogs/readonlyfilesdialog.cpp b/src/plugins/coreplugin/dialogs/readonlyfilesdialog.cpp index dd49e0bdb7..262e14f477 100644 --- a/src/plugins/coreplugin/dialogs/readonlyfilesdialog.cpp +++ b/src/plugins/coreplugin/dialogs/readonlyfilesdialog.cpp @@ -414,21 +414,20 @@ void ReadOnlyFilesDialogPrivate::initDialog(const FilePaths &filePaths) QString vcsMakeWritableTextForAll; bool useMakeWritable = false; for (const FilePath &filePath : filePaths) { - const QFileInfo info = filePath.toFileInfo(); - const QString visibleName = info.fileName(); - const QString directory = info.absolutePath(); + const QString visibleName = filePath.fileName(); + const FilePath directory = filePath.absolutePath(); // Setup a default entry with filename folder and make writable radio button. auto item = new QTreeWidgetItem(ui.treeWidget); item->setText(FileName, visibleName); - item->setIcon(FileName, FileIconProvider::icon(info)); - item->setText(Folder, Utils::FilePath::fromString(directory).shortNativePath()); + item->setIcon(FileName, FileIconProvider::icon(filePath)); + item->setText(Folder, directory.shortNativePath()); auto radioButtonGroup = new QButtonGroup; // Add a button for opening the file with a version control system // if the file is managed by an version control system which allows opening files. IVersionControl *versionControlForFile = - VcsManager::findVersionControlForDirectory(directory); + VcsManager::findVersionControlForDirectory(directory.toString()); const bool fileManagedByVCS = versionControlForFile && versionControlForFile->openSupportMode(filePath.toString()) != IVersionControl::NoOpen; if (fileManagedByVCS) { diff --git a/src/plugins/coreplugin/dialogs/saveitemsdialog.cpp b/src/plugins/coreplugin/dialogs/saveitemsdialog.cpp index b533182a99..302a02f871 100644 --- a/src/plugins/coreplugin/dialogs/saveitemsdialog.cpp +++ b/src/plugins/coreplugin/dialogs/saveitemsdialog.cpp @@ -68,18 +68,17 @@ SaveItemsDialog::SaveItemsDialog(QWidget *parent, foreach (IDocument *document, items) { QString visibleName; QString directory; - QString fileName = document->filePath().toString(); - if (fileName.isEmpty()) { + Utils::FilePath filePath = document->filePath(); + if (filePath.isEmpty()) { visibleName = document->fallbackSaveAsFileName(); } else { - QFileInfo info = QFileInfo(fileName); - directory = info.absolutePath(); - visibleName = info.fileName(); + directory = filePath.absolutePath().toUserOutput(); + visibleName = filePath.fileName(); } QTreeWidgetItem *item = new QTreeWidgetItem(m_ui.treeWidget, QStringList() << visibleName << QDir::toNativeSeparators(directory)); - if (!fileName.isEmpty()) - item->setIcon(0, FileIconProvider::icon(QFileInfo(fileName))); + if (!filePath.isEmpty()) + item->setIcon(0, FileIconProvider::icon(filePath)); item->setData(0, Qt::UserRole, QVariant::fromValue(document)); } diff --git a/src/plugins/coreplugin/editortoolbar.cpp b/src/plugins/coreplugin/editortoolbar.cpp index 99dfab9182..49da6c1dce 100644 --- a/src/plugins/coreplugin/editortoolbar.cpp +++ b/src/plugins/coreplugin/editortoolbar.cpp @@ -417,7 +417,7 @@ void EditorToolBar::updateDocumentStatus(IDocument *document) if (document->filePath().isEmpty()) d->m_dragHandle->setIcon(QIcon()); else - d->m_dragHandle->setIcon(FileIconProvider::icon(document->filePath().toFileInfo())); + d->m_dragHandle->setIcon(FileIconProvider::icon(document->filePath())); d->m_editorList->setToolTip(document->filePath().isEmpty() ? document->displayName() diff --git a/src/plugins/coreplugin/fileiconprovider.cpp b/src/plugins/coreplugin/fileiconprovider.cpp index 8ce3bce56f..f45d9aeada 100644 --- a/src/plugins/coreplugin/fileiconprovider.cpp +++ b/src/plugins/coreplugin/fileiconprovider.cpp @@ -25,6 +25,7 @@ #include "fileiconprovider.h" +#include <utils/fileutils.h> #include <utils/hostosinfo.h> #include <utils/mimetypes/mimedatabase.h> #include <utils/optional.h> @@ -90,7 +91,7 @@ public: FileIconProviderImplementation() {} - QIcon icon(const QFileInfo &info) const override; + QIcon icon(const FilePath &filePath) const; using QFileIconProvider::icon; void registerIconOverlayForFilename(const QString &iconFilePath, const QString &filename) @@ -139,19 +140,19 @@ QFileIconProvider *iconProvider() return instance(); } -QIcon FileIconProviderImplementation::icon(const QFileInfo &fileInfo) const +QIcon FileIconProviderImplementation::icon(const FilePath &filePath) const { if (debug) - qDebug() << "FileIconProvider::icon" << fileInfo.absoluteFilePath(); + qDebug() << "FileIconProvider::icon" << filePath.absoluteFilePath(); // Check for cached overlay icons by file suffix. - bool isDir = fileInfo.isDir(); - const QString filename = !isDir ? fileInfo.fileName() : QString(); + bool isDir = filePath.isDir(); + const QString filename = !isDir ? filePath.fileName() : QString(); if (!filename.isEmpty()) { const Utils::optional<QIcon> icon = getIcon(m_filenameCache, filename); if (icon) return *icon; } - const QString suffix = !isDir ? fileInfo.suffix() : QString(); + const QString suffix = !isDir ? filePath.suffix() : QString(); if (!suffix.isEmpty()) { const Utils::optional<QIcon> icon = getIcon(m_suffixCache, suffix); if (icon) @@ -161,10 +162,10 @@ QIcon FileIconProviderImplementation::icon(const QFileInfo &fileInfo) const // Get icon from OS (and cache it based on suffix!) QIcon icon; if (HostOsInfo::isWindowsHost() || HostOsInfo::isMacHost()) { - icon = QFileIconProvider::icon(fileInfo); + icon = QFileIconProvider::icon(filePath.toFileInfo()); } else { // File icons are unknown on linux systems. static const QIcon unknownFileIcon(QApplication::style()->standardIcon(QStyle::SP_FileIcon)); - icon = isDir ? QFileIconProvider::icon(fileInfo) : unknownFileIcon; + icon = isDir ? QFileIconProvider::icon(filePath.toFileInfo()) : unknownFileIcon; } if (!isDir && !suffix.isEmpty()) m_suffixCache.insert(suffix, icon); @@ -176,9 +177,9 @@ QIcon FileIconProviderImplementation::icon(const QFileInfo &fileInfo) const the default icon of the operating system is returned. */ -QIcon icon(const QFileInfo &info) +QIcon icon(const FilePath &filePath) { - return instance()->icon(info); + return instance()->icon(filePath); } /*! diff --git a/src/plugins/coreplugin/fileiconprovider.h b/src/plugins/coreplugin/fileiconprovider.h index 9bfbc588e9..8089f36a1e 100644 --- a/src/plugins/coreplugin/fileiconprovider.h +++ b/src/plugins/coreplugin/fileiconprovider.h @@ -30,6 +30,8 @@ #include <QStyle> #include <QFileIconProvider> +namespace Utils { class FilePath; } + namespace Core { namespace FileIconProvider { @@ -38,7 +40,7 @@ namespace FileIconProvider { CORE_EXPORT QFileIconProvider *iconProvider(); // Access to individual items -CORE_EXPORT QIcon icon(const QFileInfo &info); +CORE_EXPORT QIcon icon(const Utils::FilePath &filePath); CORE_EXPORT QIcon icon(QFileIconProvider::IconType type); // Register additional overlay icons diff --git a/src/plugins/coreplugin/locator/locatorwidget.cpp b/src/plugins/coreplugin/locator/locatorwidget.cpp index 7116b3650f..1e3e14c49a 100644 --- a/src/plugins/coreplugin/locator/locatorwidget.cpp +++ b/src/plugins/coreplugin/locator/locatorwidget.cpp @@ -210,7 +210,7 @@ QVariant LocatorModel::data(const QModelIndex &index, int role) const if (index.column() == DisplayNameColumn) { LocatorFilterEntry &entry = mEntries[index.row()]; if (!entry.displayIcon && !entry.filePath.isEmpty()) - entry.displayIcon = FileIconProvider::icon(entry.filePath.toFileInfo()); + entry.displayIcon = FileIconProvider::icon(entry.filePath); return entry.displayIcon ? entry.displayIcon.value() : QIcon(); } break; diff --git a/src/plugins/coreplugin/vcsmanager.cpp b/src/plugins/coreplugin/vcsmanager.cpp index 4501c67b9a..f980fafbd9 100644 --- a/src/plugins/coreplugin/vcsmanager.cpp +++ b/src/plugins/coreplugin/vcsmanager.cpp @@ -345,10 +345,8 @@ FilePaths VcsManager::promptToDelete(const FilePaths &filePaths) // Categorize files by their parent directory, so we won't call // findVersionControlForDirectory() more often than necessary. QMap<FilePath, FilePaths> filesByParentDir; - for (const FilePath &fp : filePaths) { - filesByParentDir[FilePath::fromString(QDir::cleanPath(fp.toFileInfo().absolutePath()))] - .append(fp); - } + for (const FilePath &fp : filePaths) + filesByParentDir[fp.absolutePath()].append(fp); // Categorize by version control system. QHash<IVersionControl *, FilePaths> filesByVersionControl; |