3 * This file is part of LyX, the document processor.
4 * Licence details can be found in the file COPYING.
9 * Full author contact details are available in file CREDITS.
13 The code for the ShortcutWidget class was adapted from
14 kkeysequencewidget.cpp, which is part of the KDE libraries.
15 Copyright (C) 1998 Mark Donohoe <donohoe@kde.org>
16 Copyright (C) 2001 Ellis Whitehead <ellis@kde.org>
17 Copyright (C) 2007 Andreas Hartmetz <ahartmetz@gmail.com>
18 Licensed under version 2 of the General Public License and
19 used here in accordance with the terms of that license.
24 #include "CustomizedWidgets.h"
25 #include "FuncRequest.h"
26 #include "GuiKeySymbol.h"
28 #include <QApplication>
30 #include <QMouseEvent>
33 #include "support/qstring_helpers.h"
37 using lyx::KeySequence;
38 using lyx::KeyModifier;
44 ShortcutWidget::ShortcutWidget(QWidget * parent)
45 : QLabel(parent), keysequence_()
47 QApplication::instance()->installEventFilter(this);
49 setFrameShape(QFrame::StyledPanel);
50 setFrameShadow(QFrame::Raised);
51 setFocusPolicy(Qt::StrongFocus);
52 setAlignment(Qt::AlignCenter);
56 void ShortcutWidget::reset()
59 keysequence_ = KeySequence();
63 bool ShortcutWidget::eventFilter(QObject * obj, QEvent * e)
69 // swallow these if we have focus and they come from elsewhere
70 case QEvent::Shortcut:
71 case QEvent::ShortcutOverride:
81 KeySequence const ShortcutWidget::getKeySequence() const
87 void ShortcutWidget::keyPressEvent(QKeyEvent * e)
89 int const keyQt = e->key();
94 case Qt::Key_AltGr: //or else we get unicode salad
102 setText(toqstr(keysequence_.print(KeySequence::ForGui)));
107 bool ShortcutWidget::event(QEvent * e)
110 case QEvent::FocusOut:
112 setFrameShadow(QFrame::Raised);
114 case QEvent::FocusIn:
116 setFrameShadow(QFrame::Sunken);
118 case QEvent::ShortcutOverride:
119 keyPressEvent(static_cast<QKeyEvent *>(e));
121 case QEvent::KeyRelease:
122 case QEvent::Shortcut:
123 case QEvent::KeyPress:
128 return QLabel::event(e);
132 void ShortcutWidget::appendToSequence(QKeyEvent * e)
135 setKeySymbol(&sym, e);
137 KeyModifier mod = lyx::q_key_state(e->modifiers());
139 keysequence_.addkey(sym, mod, lyx::NoModifier);
142 } // namespace frontend
145 #include "CustomizedWidgets_moc.cpp"