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
|
/*********
*
* This file is part of BibleTime's source code, http://www.bibletime.info/.
*
* Copyright 1999-2014 by the BibleTime developers.
* The BibleTime source code is licensed under the GNU General Public License version 2.0.
*
**********/
#include "frontend/displaywindow/btactioncollection.h"
#include <QAction>
#include <QDebug>
#include <QKeySequence>
#include <QString>
#include <QStringList>
#include "util/directory.h"
class BtActionItem: public QObject {
public: /* Methods: */
BtActionItem(QAction *action, QObject *parent = 0)
: QObject(parent), defaultKeys(action->shortcut()), action(action)
{
// Intentionally empty
}
public: /* Fields: */
QKeySequence defaultKeys;
QAction* action;
};
QList<QAction*> BtActionCollection::actions() {
QList<QAction*> actionList;
for (ActionMap::const_iterator iter = m_actions.constBegin();
iter != m_actions.constEnd();
++iter)
{
actionList.append(iter.value()->action);
}
return actionList;
}
QAction *BtActionCollection::action(const QString &name) const {
ActionMap::const_iterator it = m_actions.find(name);
if (it != m_actions.constEnd())
return (*it)->action;
qWarning() << "A QAction for a shortcut named" << name << "was requested but it is not defined.";
return 0;
}
QAction* BtActionCollection::addAction(const QString& name, QAction* action) {
Q_ASSERT(action != 0);
ActionMap::iterator it = m_actions.find(name);
if (it != m_actions.constEnd())
delete *it;
m_actions.insert(name, new BtActionItem(action, this));
return action;
}
QAction* BtActionCollection::addAction(const QString &name, const QObject *receiver, const char* member) {
QAction* action = new QAction(name, this);
if (receiver && member) {
bool ok = connect(action, SIGNAL(triggered()),
receiver, SLOT(triggered()));
Q_ASSERT(ok);
}
return addAction(name, action);
}
QKeySequence BtActionCollection::getDefaultShortcut(QAction* action) {
for (ActionMap::const_iterator iter = m_actions.constBegin();
iter != m_actions.constEnd();
++iter)
{
if (iter.value()->action == action) {
return iter.value()->defaultKeys;
}
}
return QKeySequence();
}
void BtActionCollection::readShortcuts(const QString &group) {
QHash<QString, QList <QKeySequence > > shortcuts = btConfig().getShortcuts(group);
for(QHash<QString, QList <QKeySequence> >::const_iterator iter = shortcuts.begin();
iter != shortcuts.end();
++iter)
{
QAction *a = action(iter.key());
if (a == 0)
continue;
action(iter.key())->setShortcuts(iter.value());
}
}
void BtActionCollection::writeShortcuts(const QString &group) {
QHash< QString, QList<QKeySequence> > shortcuts;
for (ActionMap::const_iterator iter = m_actions.constBegin();
iter != m_actions.constEnd();
++iter)
{
shortcuts.insert(iter.key(), iter.value()->action->shortcuts());
}
btConfig().setShortcuts(group, shortcuts);
}
|