Warning, file /office/calligra/gemini/RecentFilesModel.cpp was not indexed or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).
0001 /* This file is part of the KDE project 0002 * SPDX-FileCopyrightText: 2012 Boudewijn Rempt <boud@kogmbh.com> 0003 * 0004 * SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 #include "RecentFilesModel.h" 0007 0008 #include "RecentFileManager.h" 0009 0010 #include <QFile> 0011 #include <QFileInfo> 0012 #include <QDateTime> 0013 0014 class RecentFilesModel::Private { 0015 public: 0016 0017 RecentFileManager *recentFileManager; 0018 }; 0019 0020 0021 RecentFilesModel::RecentFilesModel(QObject *parent) 0022 : QAbstractListModel(parent) 0023 , d(new Private()) 0024 { 0025 d->recentFileManager = 0; 0026 } 0027 0028 RecentFilesModel::~RecentFilesModel() 0029 { 0030 delete d; 0031 } 0032 0033 QHash<int, QByteArray> RecentFilesModel::roleNames() const 0034 { 0035 QHash<int, QByteArray> roles; 0036 roles[ImageRole] = "image"; 0037 roles[TextRole] = "text"; 0038 roles[UrlRole] = "url"; 0039 roles[NameRole] = "name"; 0040 roles[DateRole] = "filedate"; 0041 return roles; 0042 } 0043 0044 int RecentFilesModel::rowCount(const QModelIndex &/*parent*/) const 0045 { 0046 if (d->recentFileManager) 0047 return d->recentFileManager->size(); 0048 else 0049 return 0; 0050 } 0051 0052 QVariant RecentFilesModel::data(const QModelIndex &index, int role) const 0053 { 0054 QVariant result; 0055 if (!d->recentFileManager) return result; 0056 if (index.isValid()) 0057 { 0058 Q_ASSERT(index.row() < d->recentFileManager->size()); 0059 0060 QString key = d->recentFileManager->recentFileName(index.row()); 0061 QString value = d->recentFileManager->recentFile(index.row()); 0062 0063 switch(role) 0064 { 0065 case ImageRole: 0066 result = QString("image://recentimage/%1").arg(value); 0067 break; 0068 case TextRole: 0069 result = QFileInfo(value).completeBaseName(); 0070 break; 0071 case UrlRole: 0072 result = value; 0073 break; 0074 case NameRole: 0075 result = key; 0076 case DateRole: 0077 { 0078 QFile f(value); 0079 if (f.exists()) { 0080 QFileInfo fi(value); 0081 result = fi.lastModified().toString("dd-mm-yyyy (hh:mm)"); 0082 } 0083 } 0084 default: 0085 result = ""; 0086 break; 0087 } 0088 } 0089 return result; 0090 } 0091 0092 QVariant RecentFilesModel::headerData(int section, Qt::Orientation orientation, int role) const 0093 { 0094 Q_UNUSED(orientation); 0095 QVariant result; 0096 if (section == 0) 0097 { 0098 switch(role) 0099 { 0100 case ImageRole: 0101 result = QString("Thumbnail"); 0102 break; 0103 case TextRole: 0104 result = QString("Name"); 0105 break; 0106 case UrlRole: 0107 case NameRole: 0108 case DateRole: 0109 default: 0110 result = ""; 0111 break; 0112 } 0113 } 0114 return result; 0115 } 0116 0117 QObject *RecentFilesModel::recentFileManager() const 0118 { 0119 return d->recentFileManager; 0120 } 0121 0122 void RecentFilesModel::setRecentFileManager(QObject *recentFileManager) 0123 { 0124 disconnect(d->recentFileManager); 0125 d->recentFileManager = qobject_cast<RecentFileManager*>(recentFileManager); 0126 connect(d->recentFileManager, &RecentFileManager::recentFilesListChanged, this, &RecentFilesModel::recentFilesListChanged); 0127 emit recentFileManagerChanged(); 0128 } 0129 0130 void RecentFilesModel::recentFilesListChanged() 0131 { 0132 beginResetModel(); 0133 endResetModel(); 0134 } 0135 0136 void RecentFilesModel::addRecent(const QString &_url) 0137 { 0138 if (d->recentFileManager) 0139 d->recentFileManager->addRecent(_url); 0140 }