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