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
|