File indexing completed on 2025-04-27 04:08:16
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 "RecentImagesModel.h" 0007 0008 #include "RecentFileManager.h" 0009 0010 #include <QFile> 0011 #include <QFileInfo> 0012 #include <QDateTime> 0013 0014 class RecentImagesModel::Private { 0015 public: 0016 0017 RecentFileManager *recentFileManager; 0018 }; 0019 0020 0021 RecentImagesModel::RecentImagesModel(QObject *parent) 0022 : QAbstractListModel(parent) 0023 , d(new Private()) 0024 { 0025 d->recentFileManager = 0; 0026 } 0027 0028 RecentImagesModel::~RecentImagesModel() 0029 { 0030 delete d; 0031 } 0032 0033 QHash<int, QByteArray> RecentImagesModel::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 0042 return roles; 0043 } 0044 0045 int RecentImagesModel::rowCount(const QModelIndex &/*parent*/) const 0046 { 0047 if (d->recentFileManager) 0048 return d->recentFileManager->size(); 0049 else 0050 return 0; 0051 } 0052 0053 QVariant RecentImagesModel::data(const QModelIndex &index, int role) const 0054 { 0055 QVariant result; 0056 if (!d->recentFileManager) return result; 0057 if (index.isValid()) 0058 { 0059 Q_ASSERT(index.row() < d->recentFileManager->size()); 0060 0061 QString key = d->recentFileManager->recentFileName(index.row()); 0062 QString value = d->recentFileManager->recentFile(index.row()); 0063 0064 switch(role) 0065 { 0066 case ImageRole: 0067 result = QString("image://recentimage/%1").arg(value); 0068 break; 0069 case TextRole: 0070 result = QFileInfo(value).completeBaseName(); 0071 break; 0072 case UrlRole: 0073 result = value; 0074 break; 0075 case NameRole: 0076 result = key; 0077 break; 0078 case DateRole: 0079 { 0080 QFile f(value); 0081 if (f.exists()) { 0082 QFileInfo fi(value); 0083 result = fi.lastModified().toString("dd-mm-yyyy (hh:mm)"); 0084 } 0085 break; 0086 } 0087 default: 0088 result = ""; 0089 break; 0090 } 0091 } 0092 return result; 0093 } 0094 0095 QVariant RecentImagesModel::headerData(int section, Qt::Orientation orientation, int role) const 0096 { 0097 Q_UNUSED(orientation); 0098 QVariant result; 0099 if (section == 0) 0100 { 0101 switch(role) 0102 { 0103 case ImageRole: 0104 result = QString("Thumbnail"); 0105 break; 0106 case TextRole: 0107 result = QString("Name"); 0108 break; 0109 case UrlRole: 0110 case NameRole: 0111 case DateRole: 0112 default: 0113 result = ""; 0114 break; 0115 } 0116 } 0117 return result; 0118 } 0119 0120 QObject *RecentImagesModel::recentFileManager() const 0121 { 0122 return d->recentFileManager; 0123 } 0124 0125 void RecentImagesModel::setRecentFileManager(QObject *recentFileManager) 0126 { 0127 disconnect(d->recentFileManager); 0128 d->recentFileManager = qobject_cast<RecentFileManager*>(recentFileManager); 0129 connect(d->recentFileManager, SIGNAL(recentFilesListChanged()), SLOT(recentFilesListChanged())); 0130 emit recentFileManagerChanged(); 0131 } 0132 0133 void RecentImagesModel::recentFilesListChanged() 0134 { 0135 beginResetModel(); 0136 endResetModel(); 0137 } 0138 0139 void RecentImagesModel::addRecent(const QString &_url) 0140 { 0141 if (d->recentFileManager) 0142 d->recentFileManager->addRecent(_url); 0143 } 0144