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::StyledPanel);
51 setFrameShadow(QFrame::Raised);
52 setFocusPolicy(Qt::StrongFocus);
53 setAlignment(Qt::AlignCenter);
57 void ShortcutWidget::reset()
60 keysequence_ = KeySequence();
64 bool ShortcutWidget::eventFilter(QObject * obj, QEvent * e)
70 // swallow these if we have focus and they come from elsewhere
71 case QEvent::Shortcut:
72 case QEvent::ShortcutOverride:
82 KeySequence const ShortcutWidget::getKeySequence() const
88 void ShortcutWidget::setKeySequence(lyx::KeySequence const s)
94 void ShortcutWidget::keyPressEvent(QKeyEvent * e)
96 int const keyQt = e->key();
101 case Qt::Key_AltGr: //or else we get unicode salad
103 case Qt::Key_Control:
109 setText(toqstr(keysequence_.print(KeySequence::ForGui)));
114 bool ShortcutWidget::event(QEvent * e)
117 case QEvent::FocusOut:
119 setFrameShadow(QFrame::Raised);
121 case QEvent::FocusIn:
123 setFrameShadow(QFrame::Sunken);
125 case QEvent::ShortcutOverride:
126 keyPressEvent(static_cast<QKeyEvent *>(e));
128 case QEvent::KeyRelease:
129 case QEvent::Shortcut:
130 case QEvent::KeyPress:
135 return QLabel::event(e);
139 void ShortcutWidget::appendToSequence(QKeyEvent * e)
142 setKeySymbol(&sym, e);
144 KeyModifier mod = lyx::q_key_state(e->modifiers());
146 keysequence_.addkey(sym, mod, lyx::NoModifier);
150 void ShortcutWidget::removeFromSequence()
152 keysequence_.removeKey();
153 setText(toqstr(keysequence_.print(KeySequence::ForGui)));
156 } // namespace frontend
159 #include "CustomizedWidgets_moc.cpp"