24 #include <QtGui/QActionEvent>
25 #include <QtGui/QKeySequence>
26 #include <QtCore/QCharRef>
27 #include <QtCore/QMutableStringListIterator>
34 class KShortcutPrivate
40 QKeySequence alternate;
45 : d(new KShortcutPrivate)
47 qRegisterMetaType<KShortcut>();
51 : d(new KShortcutPrivate)
53 qRegisterMetaType<KShortcut>();
58 : d(new KShortcutPrivate)
60 qRegisterMetaType<KShortcut>();
66 : d(new KShortcutPrivate)
68 qRegisterMetaType<KShortcut>();
69 d->primary = keyQtPri;
70 d->alternate = keyQtAlt;
74 : d(new KShortcutPrivate)
76 d->primary = other.d->primary;
77 d->alternate = other.d->alternate;
81 : d(new KShortcutPrivate)
83 qRegisterMetaType<KShortcut>();
84 if (seqs.count() >= 1)
85 d->primary = seqs.at(0);
86 if (seqs.count() >= 2)
87 d->alternate = seqs.at(1);
91 : d(new KShortcutPrivate)
93 qRegisterMetaType<KShortcut>();
94 if (s == QLatin1String(
"none"))
98 if (sCuts.count() > 2)
99 kWarning() <<
"asked to store more than two key sequences but can only hold two.";
102 for(
int i=0; i < sCuts.count(); i++)
103 if( sCuts[i].startsWith( QLatin1String(
"default(") ) )
104 sCuts[i] = sCuts[i].mid( 8, sCuts[i].length() - 9 );
106 if (sCuts.count() >= 1) {
108 k.replace(
"Win+",
"Meta+" );
109 k.replace(
"Plus",
"+");
110 k.replace(
"Minus",
"-");
111 d->primary = QKeySequence::fromString(k);
114 if (d->primary.isEmpty() && !k.isEmpty()) {
115 kDebug(240) <<
"unusable primary shortcut sequence " << sCuts[0];
119 if (sCuts.count() >= 2) {
121 k.replace(
"Win+",
"Meta+" );
122 d->alternate = QKeySequence::fromString(k);
123 if (d->alternate.isEmpty()) {
124 kDebug(240) <<
"unusable alternate shortcut sequence " << sCuts[1];
146 return d->primary.isEmpty() && d->alternate.isEmpty();
151 if (needle.isEmpty())
153 return d->primary == needle || d->alternate == needle;
158 if (needle.isEmpty())
161 bool primaryConflicts =
false;
162 bool alternateConflicts =
false;
164 if (!d->primary.isEmpty()) {
166 ( d->primary.matches(needle) == QKeySequence::NoMatch
167 && needle.matches(d->primary) == QKeySequence::NoMatch )
172 if (!d->alternate.isEmpty()) {
174 ( d->alternate.matches(needle) == QKeySequence::NoMatch
175 && needle.matches(d->alternate) == QKeySequence::NoMatch )
180 return primaryConflicts || alternateConflicts;
186 d->primary = newPrimary;
191 d->alternate = newAlternate;
196 if (keySeq.isEmpty())
199 if (d->primary == keySeq) {
201 d->primary = QKeySequence();
203 d->primary = d->alternate;
204 d->alternate = QKeySequence();
207 if (d->alternate == keySeq)
208 d->alternate = QKeySequence();
213 d->primary = other.d->primary;
214 d->alternate = other.d->alternate;
220 return (d->primary == other.d->primary && d->alternate == other.d->alternate);
228 KShortcut::operator QList<QKeySequence>()
const
230 return toList(RemoveEmpty);
235 QList<QKeySequence> ret;
237 if (!d->primary.isEmpty())
238 ret.append(d->primary);
239 if (!d->alternate.isEmpty())
240 ret.append(d->alternate);
242 ret.append(d->primary);
243 ret.append(d->alternate);
251 return toString(QKeySequence::PortableText);
257 foreach(
const QKeySequence &seq,
toList()) {
258 ret.append(seq.toString(format));
267 return qVariantFromValue(*
this);