File indexing completed on 2024-05-12 05:50:08
0001 /* 0002 SPDX-FileCopyrightText: 2022 Jiří Wolker <woljiri@gmail.com> 0003 SPDX-FileCopyrightText: 2022 Eugene Popov <popov895@ukr.net> 0004 0005 SPDX-License-Identifier: GPL-2.0-or-later 0006 */ 0007 0008 #include "recentfilesmodel.h" 0009 0010 #include <QFileInfo> 0011 #include <QMimeDatabase> 0012 0013 RecentFilesModel::RecentFilesModel(QObject *parent) 0014 : QAbstractListModel(parent) 0015 { 0016 } 0017 0018 QVariant RecentFilesModel::data(const QModelIndex &index, int role) const 0019 { 0020 if (index.isValid()) { 0021 const int row = index.row(); 0022 if (row >= 0 && row < m_recentFiles.count()) { 0023 const RecentFileInfo &recentFile = m_recentFiles.at(row); 0024 switch (role) { 0025 case Qt::DisplayRole: 0026 return recentFile.name; 0027 case Qt::DecorationRole: 0028 return recentFile.icon; 0029 case Qt::ToolTipRole: 0030 return recentFile.url.toString(QUrl::PreferLocalFile); 0031 default: 0032 break; 0033 } 0034 } 0035 } 0036 0037 return QVariant(); 0038 } 0039 0040 int RecentFilesModel::rowCount(const QModelIndex &parent) const 0041 { 0042 Q_UNUSED(parent); 0043 0044 return m_recentFiles.count(); 0045 } 0046 0047 void RecentFilesModel::refresh(const QList<QUrl> &urls) 0048 { 0049 QVector<RecentFileInfo> recentFiles; 0050 recentFiles.reserve(urls.count()); 0051 0052 QIcon icon; 0053 QString name; 0054 for (const QUrl &url : urls) { 0055 if (url.isLocalFile()) { 0056 const QFileInfo fileInfo(url.toLocalFile()); 0057 icon = QIcon::fromTheme(QMimeDatabase().mimeTypeForFile(fileInfo).iconName()); 0058 name = fileInfo.fileName(); 0059 } else { 0060 icon = QIcon::fromTheme(QStringLiteral("network-server")); 0061 name = url.toString(); 0062 } 0063 0064 recentFiles.append({icon, name, url}); 0065 } 0066 0067 beginResetModel(); 0068 m_recentFiles = std::move(recentFiles); 0069 endResetModel(); 0070 } 0071 0072 QUrl RecentFilesModel::url(const QModelIndex &index) const 0073 { 0074 if (index.isValid()) { 0075 const int row = index.row(); 0076 if (row >= 0 && row < m_recentFiles.count()) { 0077 return m_recentFiles.at(row).url; 0078 } 0079 } 0080 0081 return QUrl(); 0082 } 0083 0084 #include "moc_recentfilesmodel.cpp"