Repository navigation
Expand file tree
/
Copy pathrecentfileshelper.cpp
More file actions
98 lines (87 loc) · 2.79 KB
/
Copy pathrecentfileshelper.cpp
File metadata and controls
98 lines (87 loc) · 2.79 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
// Copyright (C) 2025-2026 Pedro López-Cabanillas
// SPDX-License-Identifier: GPL-3.0-or-later
#include <QAction>
#include <QFileInfo>
#include <QMenu>
#include <QSettings>
#include "recentfileshelper.h"
RecentFilesHelper::RecentFilesHelper(QObject *parent)
: QObject(parent)
{
QMenu* menu = qobject_cast<QMenu *>(parent);
if (menu) {
for (int i = 0; i < MaxRecentFiles; ++i) {
recentFileActs[i] = new QAction(this);
recentFileActs[i]->setVisible(false);
menu->addAction(recentFileActs[i]);
connect(recentFileActs[i], &QAction::triggered, this, &RecentFilesHelper::openRecentFile);
}
menu->addSeparator();
clearAct = new QAction(tr("Clear recent files"), this);
clearAct->setIcon(QIcon::fromTheme("edit-delete"));
menu->addAction(clearAct);
connect(clearAct, &QAction::triggered, this, &RecentFilesHelper::clear);
}
}
void RecentFilesHelper::openRecentFile()
{
QAction *action = qobject_cast<QAction *>(sender());
if (action) {
emit selectedFile(action->data().toString());
}
}
void RecentFilesHelper::clear()
{
QSettings settings;
settings.beginGroup("RecentFiles");
settings.setValue("recentFileList", QStringList());
settings.endGroup();
updateRecentFileActions();
}
void RecentFilesHelper::setCurrentFile(const QString &fileName)
{
QSettings settings;
settings.beginGroup("RecentFiles");
QStringList files = settings.value("recentFileList").toStringList();
files.removeAll(fileName);
files.prepend(fileName);
while (files.size() > MaxRecentFiles)
files.removeLast();
settings.setValue("recentFileList", files);
settings.endGroup();
updateRecentFileActions();
}
void RecentFilesHelper::updateRecentFileActions()
{
QSettings settings;
settings.beginGroup("RecentFiles");
QStringList files = settings.value("recentFileList").toStringList();
settings.endGroup();
int numRecentFiles = qMin(files.size(), (int)MaxRecentFiles);
for (int i = 0; i < numRecentFiles; ++i) {
QString text = tr("&%1 %2").arg(i + 1).arg(strippedName(files[i]));
recentFileActs[i]->setText(text);
recentFileActs[i]->setData(files[i]);
recentFileActs[i]->setVisible(true);
}
for (int j = numRecentFiles; j < MaxRecentFiles; ++j) {
recentFileActs[j]->setVisible(false);
}
clearAct->setEnabled(numRecentFiles > 0);
}
QString RecentFilesHelper::strippedName(const QString &fullFileName)
{
return QFileInfo(fullFileName).fileName();
}
QStringList RecentFilesHelper::files()
{
QSettings settings;
settings.beginGroup("RecentFiles");
QStringList files = settings.value("recentFileList").toStringList();
settings.endGroup();
return files;
}
void RecentFilesHelper::retranslateUi()
{
clearAct->setText(tr("Clear recent files"));
}