~ubuntu-branches/debian/sid/qpdfview/sid

« back to all changes in this revision

Viewing changes to sources/shortcuthandler.cpp

  • Committer: Package Import Robot
  • Author(s): Benjamin Eltzner
  • Date: 2013-05-26 13:52:50 UTC
  • mfrom: (1.2.8)
  • Revision ID: package-import@ubuntu.com-20130526135250-s1rhw935iqd8fcfs
Tags: 0.4.3-1
* New upstream release.
* Added menu file and fetch xpm icon file in debian folder.

Show diffs side-by-side

added added

removed removed

Lines of Context:
21
21
 
22
22
#include "shortcuthandler.h"
23
23
 
24
 
#include <QAction>
 
24
#include <QApplication>
25
25
#include <QSettings>
26
26
 
27
27
#include "documentview.h"
28
28
 
29
 
ShortcutHandler::ShortcutHandler(QObject* parent) : QAbstractTableModel(parent),
30
 
    m_settings(0),
31
 
    m_actions(),
32
 
    m_shortcuts(),
33
 
    m_defaultShortcuts()
34
 
{
35
 
    m_settings = new QSettings("qpdfview", "shortcuts", this);
36
 
 
37
 
    // skip backward shortcut
38
 
 
39
 
    m_skipBackwardAction = new QAction(tr("Skip backward"), this);
40
 
    m_skipBackwardAction->setObjectName(QLatin1String("skipBackward"));
41
 
 
42
 
    m_skipBackwardAction->setShortcut(::DocumentView::skipBackwardShortcut());
43
 
    registerAction(m_skipBackwardAction);
44
 
 
45
 
    // skip forward shortcut
46
 
 
47
 
    m_skipForwardAction = new QAction(tr("Skip forward"), this);
48
 
    m_skipForwardAction->setObjectName(QLatin1String("skipForward"));
49
 
 
50
 
    m_skipForwardAction->setShortcut(::DocumentView::skipForwardShortcut());
51
 
    registerAction(m_skipForwardAction);
52
 
 
53
 
    // move up shortcut
54
 
 
55
 
    m_moveUpAction = new QAction(tr("Move up"), this);
56
 
    m_moveUpAction->setObjectName(QLatin1String("moveUp"));
57
 
 
58
 
    m_moveUpAction->setShortcut(::DocumentView::moveUpShortcut());
59
 
    registerAction(m_moveUpAction);
60
 
 
61
 
    // move down shortcut
62
 
 
63
 
    m_moveDownAction = new QAction(tr("Move down"), this);
64
 
    m_moveDownAction->setObjectName(QLatin1String("moveDown"));
65
 
 
66
 
    m_moveDownAction->setShortcut(::DocumentView::moveDownShortcut());
67
 
    registerAction(m_moveDownAction);
68
 
 
69
 
    // move left shortcut
70
 
 
71
 
    m_moveLeftAction = new QAction(tr("Move left"), this);
72
 
    m_moveLeftAction->setObjectName(QLatin1String("moveLeft"));
73
 
 
74
 
    m_moveLeftAction->setShortcut(::DocumentView::moveLeftShortcut());
75
 
    registerAction(m_moveLeftAction);
76
 
 
77
 
    // move right shortcut
78
 
 
79
 
    m_moveRightAction = new QAction(tr("Move right"), this);
80
 
    m_moveRightAction->setObjectName(QLatin1String("moveRight"));
81
 
 
82
 
    m_moveRightAction->setShortcut(::DocumentView::moveRightShortcut());
83
 
    registerAction(m_moveRightAction);
 
29
static QList< QKeySequence > toShortcuts(const QStringList& stringList)
 
30
{
 
31
    QList< QKeySequence > shortcuts;
 
32
 
 
33
    foreach(const QString& string, stringList)
 
34
    {
 
35
        QKeySequence shortcut(string.trimmed());
 
36
 
 
37
        if(!shortcut.isEmpty())
 
38
        {
 
39
            shortcuts.append(shortcut);
 
40
        }
 
41
    }
 
42
 
 
43
    return shortcuts;
 
44
}
 
45
 
 
46
static QStringList toStringList(const QList< QKeySequence >& shortcuts, QKeySequence::SequenceFormat format = QKeySequence::PortableText)
 
47
{
 
48
    QStringList stringList;
 
49
 
 
50
    foreach(const QKeySequence& shortcut, shortcuts)
 
51
    {
 
52
        stringList.append(shortcut.toString(format));
 
53
    }
 
54
 
 
55
    return stringList;
 
56
}
 
57
 
 
58
static bool matches(const QKeySequence& keySequence, const QList< QKeySequence >& shortcuts)
 
59
{
 
60
    foreach(const QKeySequence& shortcut, shortcuts)
 
61
    {
 
62
        if(keySequence.matches(shortcut) == QKeySequence::ExactMatch)
 
63
        {
 
64
            return true;
 
65
        }
 
66
    }
 
67
 
 
68
    return false;
 
69
}
 
70
 
 
71
ShortcutHandler* ShortcutHandler::s_instance = 0;
 
72
 
 
73
ShortcutHandler* ShortcutHandler::instance()
 
74
{
 
75
    if(s_instance == 0)
 
76
    {
 
77
        s_instance = new ShortcutHandler(qApp);
 
78
    }
 
79
 
 
80
    return s_instance;
 
81
}
 
82
 
 
83
ShortcutHandler::~ShortcutHandler()
 
84
{
 
85
    s_instance = 0;
84
86
}
85
87
 
86
88
void ShortcutHandler::registerAction(QAction* action)
87
89
{
88
90
    Q_ASSERT(!action->objectName().isEmpty());
89
91
 
90
 
    QKeySequence defaultShortcut = action->shortcut();
91
 
    QKeySequence shortcut = m_settings->value(action->objectName(), action->shortcut()).value< QKeySequence >();
 
92
    const QList< QKeySequence > defaultShortcuts = action->shortcuts();
 
93
    const QList< QKeySequence > shortcuts = toShortcuts(m_settings->value(action->objectName(), toStringList(defaultShortcuts)).toStringList());
92
94
 
93
 
    action->setShortcut(shortcut);
 
95
    action->setShortcuts(shortcuts);
94
96
 
95
97
    m_actions.append(action);
96
 
    m_shortcuts.insert(action, shortcut);
97
 
    m_defaultShortcuts.insert(action, defaultShortcut);
 
98
    m_shortcuts.insert(action, shortcuts);
 
99
    m_defaultShortcuts.insert(action, defaultShortcuts);
98
100
}
99
101
 
100
102
int ShortcutHandler::columnCount(const QModelIndex& parent) const
150
152
{
151
153
    if((role == Qt::DisplayRole || role == Qt::EditRole) && index.row() >= 0 && index.row() < m_actions.count())
152
154
    {
 
155
        QAction* action = m_actions.at(index.row());
 
156
 
153
157
        switch(index.column())
154
158
        {
155
159
        case 0:
156
 
            return m_actions.at(index.row())->text().remove(QLatin1Char('&'));
 
160
            return action->text().remove(QLatin1Char('&'));
157
161
            break;
158
162
        case 1:
159
 
            return m_shortcuts.value(m_actions.at(index.row()));
 
163
            return toStringList(m_shortcuts.value(action), QKeySequence::NativeText).join(";");
160
164
            break;
161
165
        }
162
 
 
163
 
        return QString::number(index.row()) + ":" + QString::number(index.column());
164
166
    }
165
167
 
166
168
    return QVariant();
170
172
{
171
173
    if(role == Qt::EditRole && index.column() == 1 && index.row() >= 0 && index.row() < m_actions.count())
172
174
    {
173
 
        QKeySequence shortcut(value.toString());
 
175
        QList< QKeySequence > shortcuts = toShortcuts(value.toString().split(";", QString::SkipEmptyParts));
174
176
 
175
 
        if(!shortcut.isEmpty() || value.toString().isEmpty())
 
177
        if(!shortcuts.isEmpty() || value.toString().isEmpty())
176
178
        {
177
 
            m_shortcuts.insert(m_actions.at(index.row()), shortcut);
 
179
            m_shortcuts.insert(m_actions.at(index.row()), shortcuts);
178
180
 
179
181
            emit dataChanged(index, index);
180
182
 
185
187
    return false;
186
188
}
187
189
 
 
190
bool ShortcutHandler::matchesSkipBackward(const QKeySequence& keySequence) const
 
191
{
 
192
    return matches(keySequence, m_skipBackwardAction->shortcuts());
 
193
}
 
194
 
 
195
bool ShortcutHandler::matchesSkipForward(const QKeySequence& keySequence) const
 
196
{
 
197
    return matches(keySequence, m_skipForwardAction->shortcuts());
 
198
}
 
199
 
 
200
bool ShortcutHandler::matchesMoveUp(const QKeySequence& keySequence) const
 
201
{
 
202
    return matches(keySequence, m_moveUpAction->shortcuts());
 
203
}
 
204
 
 
205
bool ShortcutHandler::matchesMoveDown(const QKeySequence& keySequence) const
 
206
{
 
207
    return matches(keySequence, m_moveDownAction->shortcuts());
 
208
}
 
209
 
 
210
bool ShortcutHandler::matchesMoveLeft(const QKeySequence& keySequence) const
 
211
{
 
212
    return matches(keySequence, m_moveLeftAction->shortcuts());
 
213
}
 
214
 
 
215
bool ShortcutHandler::matchesMoveRight(const QKeySequence& keySequence) const
 
216
{
 
217
    return matches(keySequence, m_moveRightAction->shortcuts());
 
218
}
 
219
 
188
220
bool ShortcutHandler::submit()
189
221
{
190
 
    for(QMap< QAction*, QKeySequence >::iterator iterator = m_shortcuts.begin(); iterator != m_shortcuts.end(); ++iterator)
191
 
    {
192
 
        iterator.key()->setShortcut(iterator.value());
193
 
    }
194
 
 
195
 
    foreach(QAction* action, m_actions)
196
 
    {
197
 
        m_settings->setValue(action->objectName(), action->shortcut().toString(QKeySequence::PortableText));
198
 
    }
199
 
 
200
 
    DocumentView::setSkipBackwardShortcut(m_skipBackwardAction->shortcut());
201
 
    DocumentView::setSkipForwardShortcut(m_skipForwardAction->shortcut());
202
 
 
203
 
    DocumentView::setMoveUpShortcut(m_moveUpAction->shortcut());
204
 
    DocumentView::setMoveDownShortcut(m_moveDownAction->shortcut());
205
 
    DocumentView::setMoveLeftShortcut(m_moveLeftAction->shortcut());
206
 
    DocumentView::setMoveRightShortcut(m_moveRightAction->shortcut());
 
222
    for(QMap< QAction*, QList< QKeySequence > >::iterator iterator = m_shortcuts.begin(); iterator != m_shortcuts.end(); ++iterator)
 
223
    {
 
224
        iterator.key()->setShortcuts(iterator.value());
 
225
    }
 
226
 
 
227
    foreach(const QAction* action, m_actions)
 
228
    {
 
229
        m_settings->setValue(action->objectName(), toStringList(action->shortcuts()));
 
230
    }
207
231
 
208
232
    return true;
209
233
}
210
234
 
211
235
void ShortcutHandler::revert()
212
236
{
213
 
    for(QMap< QAction*, QKeySequence >::iterator iterator = m_shortcuts.begin(); iterator != m_shortcuts.end(); ++iterator)
 
237
    for(QMap< QAction*, QList< QKeySequence > >::iterator iterator = m_shortcuts.begin(); iterator != m_shortcuts.end(); ++iterator)
214
238
    {
215
 
        iterator.value() = iterator.key()->shortcut();
 
239
        iterator.value() = iterator.key()->shortcuts();
216
240
    }
217
241
}
218
242
 
219
243
void ShortcutHandler::reset()
220
244
{
221
 
    m_shortcuts = m_defaultShortcuts;
 
245
    for(QMap< QAction*, QList< QKeySequence > >::iterator iterator = m_defaultShortcuts.begin(); iterator != m_defaultShortcuts.end(); ++iterator)
 
246
    {
 
247
        m_shortcuts.insert(iterator.key(), iterator.value());
 
248
    }
222
249
 
223
250
    emit dataChanged(createIndex(0, 1), createIndex(m_actions.count(), 1));
224
251
}
 
252
 
 
253
ShortcutHandler::ShortcutHandler(QObject* parent) : QAbstractTableModel(parent),
 
254
    m_settings(new QSettings("qpdfview", "shortcuts", this)),
 
255
    m_actions(),
 
256
    m_shortcuts(),
 
257
    m_defaultShortcuts()
 
258
{
 
259
    // skip backward shortcut
 
260
 
 
261
    m_skipBackwardAction = new QAction(tr("Skip backward"), this);
 
262
    m_skipBackwardAction->setObjectName(QLatin1String("skipBackward"));
 
263
    m_skipBackwardAction->setShortcut(QKeySequence(Qt::Key_PageUp));
 
264
    registerAction(m_skipBackwardAction);
 
265
 
 
266
    // skip forward shortcut
 
267
 
 
268
    m_skipForwardAction = new QAction(tr("Skip forward"), this);
 
269
    m_skipForwardAction->setObjectName(QLatin1String("skipForward"));
 
270
    m_skipForwardAction->setShortcut(QKeySequence(Qt::Key_PageDown));
 
271
    registerAction(m_skipForwardAction);
 
272
 
 
273
    // move up shortcut
 
274
 
 
275
    m_moveUpAction = new QAction(tr("Move up"), this);
 
276
    m_moveUpAction->setObjectName(QLatin1String("moveUp"));
 
277
    m_moveUpAction->setShortcut(QKeySequence(Qt::Key_Up));
 
278
    registerAction(m_moveUpAction);
 
279
 
 
280
    // move down shortcut
 
281
 
 
282
    m_moveDownAction = new QAction(tr("Move down"), this);
 
283
    m_moveDownAction->setObjectName(QLatin1String("moveDown"));
 
284
    m_moveDownAction->setShortcut(QKeySequence(Qt::Key_Down));
 
285
    registerAction(m_moveDownAction);
 
286
 
 
287
    // move left shortcut
 
288
 
 
289
    m_moveLeftAction = new QAction(tr("Move left"), this);
 
290
    m_moveLeftAction->setObjectName(QLatin1String("moveLeft"));
 
291
    m_moveLeftAction->setShortcut(QKeySequence(Qt::Key_Left));
 
292
    registerAction(m_moveLeftAction);
 
293
 
 
294
    // move right shortcut
 
295
 
 
296
    m_moveRightAction = new QAction(tr("Move right"), this);
 
297
    m_moveRightAction->setObjectName(QLatin1String("moveRight"));
 
298
    m_moveRightAction->setShortcut(QKeySequence(Qt::Key_Right));
 
299
    registerAction(m_moveRightAction);
 
300
}