2 * \file CustomizedWidgets.cpp
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_()
49 setFrameShape(QFrame::Panel);
50 setFrameShadow(QFrame::Raised);
52 setFocusPolicy(Qt::StrongFocus);
53 setAlignment(Qt::AlignCenter);
57 void ShortcutWidget::reset()
60 keysequence_ = KeySequence();
64 KeySequence const ShortcutWidget::getKeySequence() const
70 void ShortcutWidget::setKeySequence(lyx::KeySequence const & s)
76 void ShortcutWidget::keyPressEvent(QKeyEvent * e)
78 int const keyQt = e->key();
83 case Qt::Key_AltGr: //or else we get unicode salad
91 setText(toqstr(keysequence_.print(KeySequence::ForGui)));
96 bool ShortcutWidget::event(QEvent * e)
99 case QEvent::FocusOut:
101 setFrameShadow(QFrame::Raised);
103 case QEvent::FocusIn:
105 setFrameShadow(QFrame::Sunken);
107 case QEvent::ShortcutOverride:
108 // accepting the ShortcutOverride event lets us override shortcuts
109 // and capture them as keypress events instead
112 case QEvent::KeyPress:
113 keyPressEvent(static_cast<QKeyEvent *>(e));
115 case QEvent::KeyRelease:
116 case QEvent::Shortcut:
121 return QLabel::event(e);
125 void ShortcutWidget::appendToSequence(QKeyEvent * e)
128 setKeySymbol(&sym, e);
131 KeyModifier mod = lyx::q_key_state(e->modifiers());
132 keysequence_.addkey(sym, mod, lyx::NoModifier);
137 void ShortcutWidget::removeFromSequence()
139 keysequence_.removeKey();
140 setText(toqstr(keysequence_.print(KeySequence::ForGui)));
143 } // namespace frontend
146 #include "moc_CustomizedWidgets.cpp"