3 * This file is part of LyX, the document processor.
4 * Licence details can be found in the file COPYING.
8 * \author Jürgen Spitzmüller
10 * Full author contact details are available in file CREDITS.
14 The code for the ShortcutWidget class was adapted from
15 kkeysequencewidget.cpp, which is part of the KDE libraries.
16 Copyright (C) 1998 Mark Donohoe <donohoe@kde.org>
17 Copyright (C) 2001 Ellis Whitehead <ellis@kde.org>
18 Copyright (C) 2007 Andreas Hartmetz <ahartmetz@gmail.com>
19 Licensed under version 2 of the General Public License and
20 used here in accordance with the terms of that license.
25 #include "CustomizedWidgets.h"
26 #include "FuncRequest.h"
27 #include "GuiKeySymbol.h"
29 #include <QApplication>
31 #include <QMouseEvent>
34 #include "support/qstring_helpers.h"
38 using lyx::KeySequence;
39 using lyx::KeyModifier;
45 ShortcutWidget::ShortcutWidget(QWidget * parent)
46 : QLabel(parent), keysequence_()
48 QApplication::instance()->installEventFilter(this);
50 setFrameShape(QFrame::Panel);
51 setFrameShadow(QFrame::Raised);
53 setFocusPolicy(Qt::StrongFocus);
54 setAlignment(Qt::AlignCenter);
58 void ShortcutWidget::reset()
61 keysequence_ = KeySequence();
65 bool ShortcutWidget::eventFilter(QObject * obj, QEvent * e)
71 // swallow these if we have focus and they come from elsewhere
72 case QEvent::Shortcut:
73 case QEvent::ShortcutOverride:
83 KeySequence const ShortcutWidget::getKeySequence() const
89 void ShortcutWidget::setKeySequence(lyx::KeySequence const s)
95 void ShortcutWidget::keyPressEvent(QKeyEvent * e)
97 int const keyQt = e->key();
102 case Qt::Key_AltGr: //or else we get unicode salad
104 case Qt::Key_Control:
110 setText(toqstr(keysequence_.print(KeySequence::ForGui)));
115 bool ShortcutWidget::event(QEvent * e)
118 case QEvent::FocusOut:
120 setFrameShadow(QFrame::Raised);
122 case QEvent::FocusIn:
124 setFrameShadow(QFrame::Sunken);
126 case QEvent::ShortcutOverride:
127 keyPressEvent(static_cast<QKeyEvent *>(e));
129 case QEvent::KeyRelease:
130 case QEvent::Shortcut:
131 case QEvent::KeyPress:
136 return QLabel::event(e);
140 void ShortcutWidget::appendToSequence(QKeyEvent * e)
143 setKeySymbol(&sym, e);
145 KeyModifier mod = lyx::q_key_state(e->modifiers());
147 keysequence_.addkey(sym, mod, lyx::NoModifier);
151 void ShortcutWidget::removeFromSequence()
153 keysequence_.removeKey();
154 setText(toqstr(keysequence_.print(KeySequence::ForGui)));
157 } // namespace frontend
160 #include "CustomizedWidgets_moc.cpp"