-
Notifications
You must be signed in to change notification settings - Fork 6
/
recentfileshelper.cpp
117 lines (104 loc) · 3.68 KB
/
recentfileshelper.cpp
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
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
/*
Drumstick MIDI File Player Multiplatform Program
Copyright (C) 2006-2024, Pedro Lopez-Cabanillas <[email protected]>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
This program 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 General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include <QMenu>
#include <QAction>
#include <QFileInfo>
#include <drumstick/settingsfactory.h>
#include "recentfileshelper.h"
#include "iconutils.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(IconUtils::GetIcon("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()
{
using namespace drumstick::widgets;
SettingsFactory settings;
settings->beginGroup("RecentFiles");
settings->setValue("recentFileList", QStringList());
settings->endGroup();
updateRecentFileActions();
}
void RecentFilesHelper::setCurrentFile(const QString &fileName)
{
using namespace drumstick::widgets;
SettingsFactory 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()
{
using namespace drumstick::widgets;
SettingsFactory 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()
{
using namespace drumstick::widgets;
SettingsFactory settings;
settings->beginGroup("RecentFiles");
QStringList files = settings->value("recentFileList").toStringList();
settings->endGroup();
return files;
}
void RecentFilesHelper::retranslateUi()
{
clearAct->setText(tr("Clear recent files"));
}