/**
- * \file GuiPrefs.cpp
+ * \file CustomizedWidgets.cpp
* This file is part of LyX, the document processor.
* Licence details can be found in the file COPYING.
*
* \author Bo Peng
* \author Edwin Leuven
+ * \author Jürgen Spitzmüller
*
* Full author contact details are available in file CREDITS.
*/
/*
- The code for the ShortcutLineEdit class was adapted from
+ The code for the ShortcutWidget class was adapted from
kkeysequencewidget.cpp, which is part of the KDE libraries.
Copyright (C) 1998 Mark Donohoe <donohoe@kde.org>
Copyright (C) 2001 Ellis Whitehead <ellis@kde.org>
#include <QApplication>
#include <QKeyEvent>
+#include <QMouseEvent>
+#include <QShowEvent>
#include "support/qstring_helpers.h"
namespace lyx {
namespace frontend {
-ShortcutLineEdit::ShortcutLineEdit(QWidget * parent)
- : QLineEdit(parent), keysequence_()
+ShortcutWidget::ShortcutWidget(QWidget * parent)
+ : QLabel(parent), keysequence_()
{
- QApplication::instance()->installEventFilter(this);
has_cursor_ = false;
+ setFrameShape(QFrame::Panel);
+ setFrameShadow(QFrame::Raised);
+ setLineWidth(3);
+ setFocusPolicy(Qt::StrongFocus);
+ setAlignment(Qt::AlignCenter);
}
-void ShortcutLineEdit::reset()
+void ShortcutWidget::reset()
{
clear();
keysequence_ = KeySequence();
}
-bool ShortcutLineEdit::eventFilter(QObject * obj, QEvent * e)
+KeySequence const ShortcutWidget::getKeySequence() const
{
- if (!has_cursor_)
- return false;
-
- switch (e->type()) {
- // swallow these if we have focus and they come from elsewhere
- case QEvent::Shortcut:
- case QEvent::ShortcutOverride:
- if (obj != this)
- return true;
- default:
- break;
- }
- return false;
+ return keysequence_;
}
-KeySequence const ShortcutLineEdit::getKeySequence() const
+void ShortcutWidget::setKeySequence(lyx::KeySequence const & s)
{
- return keysequence_;
+ keysequence_ = s;
}
-void ShortcutLineEdit::keyPressEvent(QKeyEvent * e)
+void ShortcutWidget::keyPressEvent(QKeyEvent * e)
{
int const keyQt = e->key();
if (!keyQt)
}
-bool ShortcutLineEdit::event(QEvent * e)
+bool ShortcutWidget::event(QEvent * e)
{
switch (e->type()) {
case QEvent::FocusOut:
has_cursor_ = false;
+ setFrameShadow(QFrame::Raised);
break;
case QEvent::FocusIn:
has_cursor_ = true;
+ setFrameShadow(QFrame::Sunken);
break;
case QEvent::ShortcutOverride:
+ // accepting the ShortcutOverride event lets us override shortcuts
+ // and capture them as keypress events instead
+ e->accept();
+ return true;
+ case QEvent::KeyPress:
keyPressEvent(static_cast<QKeyEvent *>(e));
return true;
case QEvent::KeyRelease:
case QEvent::Shortcut:
- case QEvent::KeyPress:
return true;
- default:
+ default:
break;
}
- return QLineEdit::event(e);
+ return QLabel::event(e);
}
-void ShortcutLineEdit::appendToSequence(QKeyEvent * e)
+void ShortcutWidget::appendToSequence(QKeyEvent * e)
{
KeySymbol sym;
setKeySymbol(&sym, e);
- KeyModifier mod = lyx::q_key_state(e->modifiers());
-
- keysequence_.addkey(sym, mod, lyx::NoModifier);
+ if (sym.isOK()) {
+ KeyModifier mod = lyx::q_key_state(e->modifiers());
+ keysequence_.addkey(sym, mod, lyx::NoModifier);
+ }
+}
+
+
+void ShortcutWidget::removeFromSequence()
+{
+ keysequence_.removeKey();
+ setText(toqstr(keysequence_.print(KeySequence::ForGui)));
}
} // namespace frontend
} // namespace lyx
-#include "CustomizedWidgets_moc.cpp"
+#include "moc_CustomizedWidgets.cpp"