File: KeyReference.h

package info (click to toggle)
sonic-visualiser 5.2.1-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 24,744 kB
  • sloc: cpp: 158,888; ansic: 11,920; sh: 1,785; makefile: 517; xml: 64; perl: 31
file content (134 lines) | stat: -rw-r--r-- 4,419 bytes parent folder | download | duplicates (2)
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
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
/* -*- c-basic-offset: 4 indent-tabs-mode: nil -*-  vi:set ts=8 sts=4 sw=4: */

/*
    Sonic Visualiser
    An audio file viewer and annotation editor.
    Centre for Digital Music, Queen Mary, University of London.
    This file copyright 2007 QMUL.
    
    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 2 of the
    License, or (at your option) any later version.  See the file
    COPYING included with this distribution for more information.
*/

#ifndef SV_KEY_REFERENCE_H
#define SV_KEY_REFERENCE_H

#include <QObject>
#include <QString>
#include <vector>
#include <map>
#include <QKeySequence>

class QAction;
class QTextEdit;
class QDialog;
class QAbstractButton;

namespace sv {

class KeyReference : public QObject
{
    Q_OBJECT

public:
    KeyReference();
    virtual ~KeyReference();

    void setCategory(QString category);

    /** Register the key sequence for the given action using the text
     *  of that action as the name of the assocated operation.
     */
    void registerShortcut(QAction *);

    /** Register the key sequence for the given action using the given
     *  name as the name of the assocated operation.
     */
    void registerShortcut(QAction *, QString actionName);

    /** Register the given key sequence as the primary shortcut for
     *  the action of the given name, with the given descriptive text.
     */
    void registerShortcut(QString actionName, QKeySequence shortcut, QString tipText);
    
    /** Register the given mouse mechanism as a shortcut for the
     *  action of the given name, with the given descriptive
     *  text. This is similar to registerShortcutVerbatim in that the
     *  mouse action is used almost literally, except that modifiers
     *  such as Ctrl are remapped appropriately for the Mac in a
     *  similar manner to QKeySequence.
     */
    void registerMouseAction(QString actionName, QString mouseAction, QString tipText);
    
    /** Register the given text as the primary shortcut for the action
     *  of the given name, with the given descriptive text. The
     *  shortcut text is used verbatim and does not necessarily have
     *  to be a key sequence.
     */
    void registerShortcutVerbatim(QString actionName, QString shortcut, QString tipText);

    /** Register the given key sequence as an alternative shortcut for
     *  the given action.
     */
    void registerAlternativeShortcut(QAction *, QKeySequence alternative);

    /** Register the given text as an alternative shortcut for the
     *  given action. The text is used verbatim and does not
     *  necessarily have to be a key sequence.
     */
    void registerAlternativeShortcutVerbatim(QAction *, QString alternative);
    
    /** Register the given key sequence as an alternative shortcut for
     *  the action of the given name.
     */
    void registerAlternativeShortcut(QString actionName, QKeySequence alternative);
    
    /** Register the given mouse mechanism as an alternative shortcut
     *  for the action of the given name. This is similar to
     *  registerAlternativeShortcutVerbatim in that the mouse action
     *  is used almost literally, except that modifiers such as Ctrl
     *  are remapped appropriately for the Mac in a similar manner to
     *  QKeySequence.
     */
    void registerAlternativeMouseAction(QString actionName, QString mouseAction);

    /** Register the given text as an alternative shortcut for the
     *  action of the given name. The text is used verbatim and does
     *  not necessarily have to be a key sequence.
     */
    void registerAlternativeShortcutVerbatim(QString actionName, QString alternative);

    void show();
    void hide();

protected slots:
    void dialogButtonClicked(QAbstractButton *);

protected:
    struct KeyDetails {
        QString actionName;
        QString shortcut;
        QString tip;
        std::vector<QString> alternatives;
    };

    void makeMacMouseReplacements(QString &);
    
    typedef std::vector<KeyDetails> KeyList;
    typedef std::map<QString, KeyList> CategoryMap;
    typedef std::vector<QString> CategoryList;
    
    QString m_currentCategory;
    CategoryMap m_map;
    CategoryList m_categoryOrder;

    QTextEdit *m_text;
    QDialog *m_dialog;
};

} // end namespace sv

#endif