1 /****************************************************************************
2 **
3 ** Copyright (C) 2016 The Qt Company Ltd.
4 ** Contact: https://www.qt.io/licensing/
5 **
6 ** This file is part of the QtGui module of the Qt Toolkit.
7 **
8 ** $QT_BEGIN_LICENSE:LGPL$
9 ** Commercial License Usage
10 ** Licensees holding valid commercial Qt licenses may use this file in
11 ** accordance with the commercial license agreement provided with the
12 ** Software or, alternatively, in accordance with the terms contained in
13 ** a written agreement between you and The Qt Company. For licensing terms
14 ** and conditions see https://www.qt.io/terms-conditions. For further
15 ** information use the contact form at https://www.qt.io/contact-us.
16 **
17 ** GNU Lesser General Public License Usage
18 ** Alternatively, this file may be used under the terms of the GNU Lesser
19 ** General Public License version 3 as published by the Free Software
20 ** Foundation and appearing in the file LICENSE.LGPL3 included in the
21 ** packaging of this file. Please review the following information to
22 ** ensure the GNU Lesser General Public License version 3 requirements
23 ** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
24 **
25 ** GNU General Public License Usage
26 ** Alternatively, this file may be used under the terms of the GNU
27 ** General Public License version 2.0 or (at your option) the GNU General
28 ** Public license version 3 or any later version approved by the KDE Free
29 ** Qt Foundation. The licenses are as published by the Free Software
30 ** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
31 ** included in the packaging of this file. Please review the following
32 ** information to ensure the GNU General Public License requirements will
33 ** be met: https://www.gnu.org/licenses/gpl-2.0.html and
34 ** https://www.gnu.org/licenses/gpl-3.0.html.
35 **
36 ** $QT_END_LICENSE$
37 **
38 ****************************************************************************/
39 
40 #ifndef QKEYSEQUENCE_H
41 #define QKEYSEQUENCE_H
42 
43 #include <QtGui/qtguiglobal.h>
44 #include <QtCore/qstring.h>
45 #include <QtCore/qobjectdefs.h>
46 
47 QT_BEGIN_NAMESPACE
48 
49 
50 #if !defined(QT_NO_SHORTCUT) || defined(Q_CLANG_QDOC)
51 
52 class QKeySequence;
53 
54 /*****************************************************************************
55   QKeySequence stream functions
56  *****************************************************************************/
57 #if !defined(QT_NO_DATASTREAM) || defined(Q_CLANG_QDOC)
58 Q_GUI_EXPORT QDataStream &operator<<(QDataStream &in, const QKeySequence &ks);
59 Q_GUI_EXPORT QDataStream &operator>>(QDataStream &out, QKeySequence &ks);
60 #endif
61 
62 #if defined(Q_CLANG_QDOC)
63 void qt_set_sequence_auto_mnemonic(bool b);
64 #endif
65 
66 class QVariant;
67 class QKeySequencePrivate;
68 
69 Q_GUI_EXPORT Q_DECL_PURE_FUNCTION uint qHash(const QKeySequence &key, uint seed = 0) noexcept;
70 
71 class Q_GUI_EXPORT QKeySequence
72 {
73     Q_GADGET
74 
75 public:
76     enum StandardKey {
77         UnknownKey,
78         HelpContents,
79         WhatsThis,
80         Open,
81         Close,
82         Save,
83         New,
84         Delete,
85         Cut,
86         Copy,
87         Paste,
88         Undo,
89         Redo,
90         Back,
91         Forward,
92         Refresh,
93         ZoomIn,
94         ZoomOut,
95         Print,
96         AddTab,
97         NextChild,
98         PreviousChild,
99         Find,
100         FindNext,
101         FindPrevious,
102         Replace,
103         SelectAll,
104         Bold,
105         Italic,
106         Underline,
107         MoveToNextChar,
108         MoveToPreviousChar,
109         MoveToNextWord,
110         MoveToPreviousWord,
111         MoveToNextLine,
112         MoveToPreviousLine,
113         MoveToNextPage,
114         MoveToPreviousPage,
115         MoveToStartOfLine,
116         MoveToEndOfLine,
117         MoveToStartOfBlock,
118         MoveToEndOfBlock,
119         MoveToStartOfDocument,
120         MoveToEndOfDocument,
121         SelectNextChar,
122         SelectPreviousChar,
123         SelectNextWord,
124         SelectPreviousWord,
125         SelectNextLine,
126         SelectPreviousLine,
127         SelectNextPage,
128         SelectPreviousPage,
129         SelectStartOfLine,
130         SelectEndOfLine,
131         SelectStartOfBlock,
132         SelectEndOfBlock,
133         SelectStartOfDocument,
134         SelectEndOfDocument,
135         DeleteStartOfWord,
136         DeleteEndOfWord,
137         DeleteEndOfLine,
138         InsertParagraphSeparator,
139         InsertLineSeparator,
140         SaveAs,
141         Preferences,
142         Quit,
143         FullScreen,
144         Deselect,
145         DeleteCompleteLine,
146         Backspace,
147         Cancel
148      };
149      Q_ENUM(StandardKey)
150 
151     enum SequenceFormat {
152         NativeText,
153         PortableText
154     };
155 
156     QKeySequence();
157     QKeySequence(const QString &key, SequenceFormat format = NativeText);
158     QKeySequence(int k1, int k2 = 0, int k3 = 0, int k4 = 0);
159     QKeySequence(const QKeySequence &ks);
160     QKeySequence(StandardKey key);
161     ~QKeySequence();
162 
163     int count() const;
164     bool isEmpty() const;
165 
166     enum SequenceMatch {
167         NoMatch,
168         PartialMatch,
169         ExactMatch
170     };
171 
172     QString toString(SequenceFormat format = PortableText) const;
173     static QKeySequence fromString(const QString &str, SequenceFormat format = PortableText);
174 
175     static QList<QKeySequence> listFromString(const QString &str, SequenceFormat format = PortableText);
176     static QString listToString(const QList<QKeySequence> &list, SequenceFormat format = PortableText);
177 
178     SequenceMatch matches(const QKeySequence &seq) const;
179     static QKeySequence mnemonic(const QString &text);
180     static QList<QKeySequence> keyBindings(StandardKey key);
181 
182 #if QT_DEPRECATED_SINCE(5, 0)
QString()183     QT_DEPRECATED operator QString() const { return toString(QKeySequence::NativeText); }
184     QT_DEPRECATED operator int() const { if (1 <= count()) return operator [](0); return 0; }
185 #endif
186     operator QVariant() const;
187     int operator[](uint i) const;
188     QKeySequence &operator=(const QKeySequence &other);
189     QKeySequence &operator=(QKeySequence &&other) noexcept { swap(other); return *this; }
swap(QKeySequence & other)190     void swap(QKeySequence &other) noexcept { qSwap(d, other.d); }
191 
192     bool operator==(const QKeySequence &other) const;
193     inline bool operator!= (const QKeySequence &other) const
194     { return !(*this == other); }
195     bool operator< (const QKeySequence &ks) const;
196     inline bool operator> (const QKeySequence &other) const
197     { return other < *this; }
198     inline bool operator<= (const QKeySequence &other) const
199     { return !(other < *this); }
200     inline bool operator>= (const QKeySequence &other) const
201     { return !(*this < other); }
202 
203     bool isDetached() const;
204 private:
205     static int decodeString(const QString &ks);
206     static QString encodeString(int key);
207     int assign(const QString &str);
208     int assign(const QString &str, SequenceFormat format);
209     void setKey(int key, int index);
210 
211     QKeySequencePrivate *d;
212 
213     friend Q_GUI_EXPORT QDataStream &operator<<(QDataStream &in, const QKeySequence &ks);
214     friend Q_GUI_EXPORT QDataStream &operator>>(QDataStream &in, QKeySequence &ks);
215     friend Q_GUI_EXPORT uint qHash(const QKeySequence &key, uint seed) noexcept;
216     friend class QShortcutMap;
217     friend class QShortcut;
218 
219 public:
220     typedef QKeySequencePrivate * DataPtr;
data_ptr()221     inline DataPtr &data_ptr() { return d; }
222 };
223 
224 Q_DECLARE_SHARED(QKeySequence)
225 
226 #if !defined(QT_NO_DEBUG_STREAM) || defined(Q_CLANG_QDOC)
227 Q_GUI_EXPORT QDebug operator<<(QDebug, const QKeySequence &);
228 #endif
229 
230 #else
231 
232 class Q_GUI_EXPORT QKeySequence
233 {
234 public:
235     QKeySequence() {}
236     QKeySequence(int) {}
237 };
238 
239 #endif // QT_NO_SHORTCUT
240 
241 QT_END_NAMESPACE
242 
243 #endif // QKEYSEQUENCE_H
244