// Copyright (C) 2020-2022 Jakub Melka // // This file is part of PDF4QT. // // PDF4QT is free software: you can redistribute it and/or modify // it under the terms of the GNU Lesser General Public License as published by // the Free Software Foundation, either version 3 of the License, or // with the written consent of the copyright owner, any later version. // // PDF4QT is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU Lesser General Public License for more details. // // You should have received a copy of the GNU Lesser General Public License // along with PDF4QT. If not, see . #include "pdfrecentfilemanager.h" #include "pdfdbgheap.h" namespace pdfviewer { PDFRecentFileManager::PDFRecentFileManager(QObject* parent) : BaseClass(parent), m_recentFilesLimit(DEFAULT_RECENT_FILES), m_actions() { // Initialize actions int index = 0; for (auto it = m_actions.begin(); it != m_actions.end(); ++it) { QAction* recentFileAction = new QAction(this); recentFileAction->setObjectName(QString("actionRecentFile%1").arg(++index)); recentFileAction->setVisible(false); connect(recentFileAction, &QAction::triggered, this, &PDFRecentFileManager::onRecentFileActionTriggered); *it = recentFileAction; } } void PDFRecentFileManager::addRecentFile(QString fileName) { m_recentFiles.removeAll(fileName); m_recentFiles.push_front(fileName); update(); } void PDFRecentFileManager::setRecentFiles(QStringList recentFiles) { if (m_recentFiles != recentFiles) { m_recentFiles = qMove(recentFiles); update(); } } void PDFRecentFileManager::setRecentFilesLimit(int recentFilesLimit) { recentFilesLimit = qBound(getMinimumRecentFiles(), recentFilesLimit, getMaximumRecentFiles()); if (m_recentFilesLimit != recentFilesLimit) { m_recentFilesLimit = recentFilesLimit; update(); } } void PDFRecentFileManager::update() { while (m_recentFiles.size() > m_recentFilesLimit) { m_recentFiles.pop_back(); } for (int i = 0; i < static_cast(m_actions.size()); ++i) { QAction* recentFileAction = m_actions[i]; if (i < m_recentFiles.size()) { recentFileAction->setData(m_recentFiles[i]); recentFileAction->setText(tr("(&%1) %2").arg(i + 1).arg(m_recentFiles[i])); recentFileAction->setVisible(true); } else { recentFileAction->setData(QVariant()); recentFileAction->setText(tr("Recent file dummy &%1").arg(i + 1)); recentFileAction->setVisible(false); } } } void PDFRecentFileManager::onRecentFileActionTriggered() { QAction* action = qobject_cast(sender()); Q_ASSERT(action); QVariant data = action->data(); if (data.typeId() == QMetaType::QString) { Q_EMIT fileOpenRequest(data.toString()); } } } // namespace pdfviewer