mirror of
https://invent.kde.org/graphics/okular
synced 2024-11-05 18:34:53 +00:00
88fc4032ac
- missing consts - shadowing of variable names - superflous code - tighter scoping of some variables and other such bits
119 lines
3 KiB
C++
119 lines
3 KiB
C++
/*
|
|
SPDX-FileCopyrightText: 2021 Jiří Wolker <woljiri@gmail.com>
|
|
|
|
SPDX-License-Identifier: GPL-2.0-or-later
|
|
*/
|
|
|
|
#include "recentitemsmodel.h"
|
|
|
|
#include <QFile>
|
|
#include <QFileIconProvider>
|
|
#include <QFileInfo>
|
|
#include <QIcon>
|
|
|
|
#include <KConfigGroup>
|
|
|
|
RecentItemsModel::RecentItemsModel()
|
|
{
|
|
}
|
|
|
|
RecentItemsModel::~RecentItemsModel()
|
|
{
|
|
}
|
|
|
|
void RecentItemsModel::loadEntries(const KConfigGroup &cg)
|
|
{
|
|
clearEntries();
|
|
|
|
// Based on implementation of KRecentFilesAction::loadEntries.
|
|
|
|
// read file list
|
|
for (int i = 1; i <= maxItems(); i++) {
|
|
const QString key = QStringLiteral("File%1").arg(i);
|
|
const QString value = cg.readPathEntry(key, QString());
|
|
if (value.isEmpty()) {
|
|
continue;
|
|
}
|
|
const QUrl url = QUrl::fromUserInput(value);
|
|
|
|
// Don't restore if file doesn't exist anymore
|
|
if (url.isLocalFile() && !QFile::exists(url.toLocalFile())) {
|
|
continue;
|
|
}
|
|
|
|
const QString nameKey = QStringLiteral("Name%1").arg(i);
|
|
const QString nameValue = cg.readPathEntry(nameKey, url.fileName());
|
|
m_recentItems.append(RecentItem {nameValue, url});
|
|
}
|
|
|
|
Q_EMIT layoutChanged();
|
|
}
|
|
|
|
void RecentItemsModel::clearEntries()
|
|
{
|
|
m_recentItems.clear();
|
|
|
|
Q_EMIT layoutChanged();
|
|
}
|
|
|
|
int RecentItemsModel::rowCount(const QModelIndex &parent) const
|
|
{
|
|
Q_UNUSED(parent);
|
|
|
|
return m_recentItems.size();
|
|
}
|
|
|
|
QVariant RecentItemsModel::data(const QModelIndex &index, int role) const
|
|
{
|
|
const RecentItemsModel::RecentItem *item = getItem(index);
|
|
|
|
if (item != nullptr) {
|
|
switch (role) {
|
|
case Qt::ItemDataRole::DisplayRole:
|
|
if (item->name.isEmpty()) {
|
|
if (item->url.isLocalFile()) {
|
|
return item->url.toLocalFile();
|
|
} else {
|
|
return item->url.toString();
|
|
}
|
|
} else {
|
|
return item->name;
|
|
}
|
|
|
|
case Qt::ItemDataRole::ToolTipRole:
|
|
if (item->url.isLocalFile()) {
|
|
return item->url.toLocalFile();
|
|
} else {
|
|
return item->url.toString();
|
|
}
|
|
|
|
case Qt::ItemDataRole::DecorationRole:
|
|
if (item->url.isLocalFile()) {
|
|
return m_iconProvider.icon(QFileInfo(item->url.toLocalFile()));
|
|
} else {
|
|
// Fallback icon for remote files.
|
|
return QIcon::fromTheme(QStringLiteral("network-server"));
|
|
}
|
|
|
|
default:
|
|
return QVariant();
|
|
}
|
|
} else {
|
|
return QVariant();
|
|
}
|
|
}
|
|
|
|
RecentItemsModel::RecentItem const *RecentItemsModel::getItem(int index) const
|
|
{
|
|
if (m_recentItems.size() > index && index >= 0) {
|
|
// We reverse the order of items.
|
|
return &m_recentItems[m_recentItems.size() - index - 1];
|
|
} else {
|
|
return nullptr;
|
|
}
|
|
}
|
|
|
|
RecentItemsModel::RecentItem const *RecentItemsModel::getItem(const QModelIndex &index) const
|
|
{
|
|
return getItem(index.row());
|
|
}
|