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 }