/**
- * \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 <config.h>
#include "CustomizedWidgets.h"
+#include "FuncRequest.h"
#include "GuiKeySymbol.h"
+#include <QApplication>
+#include <QKeyEvent>
+#include <QMouseEvent>
+#include <QShowEvent>
+
#include "support/qstring_helpers.h"
using lyx::KeySymbol;
+using lyx::KeySequence;
+using lyx::KeyModifier;
using lyx::toqstr;
-void ShortcutLineEdit::keyPressEvent(QKeyEvent * e)
+namespace lyx {
+namespace frontend {
+
+ShortcutWidget::ShortcutWidget(QWidget * parent)
+ : QLabel(parent), keysequence_()
+{
+ has_cursor_ = false;
+ setFrameShape(QFrame::Panel);
+ setFrameShadow(QFrame::Raised);
+ setLineWidth(3);
+ setFocusPolicy(Qt::StrongFocus);
+ setAlignment(Qt::AlignCenter);
+}
+
+
+void ShortcutWidget::reset()
{
- int keyQt = e->key();
- switch (e->key()) {
+ clear();
+ keysequence_ = KeySequence();
+}
+
+
+KeySequence const ShortcutWidget::getKeySequence() const
+{
+ return keysequence_;
+}
+
+
+void ShortcutWidget::setKeySequence(lyx::KeySequence const & s)
+{
+ keysequence_ = s;
+}
+
+
+void ShortcutWidget::keyPressEvent(QKeyEvent * e)
+{
+ int const keyQt = e->key();
+ if (!keyQt)
+ return;
+
+ switch(keyQt) {
case Qt::Key_AltGr: //or else we get unicode salad
case Qt::Key_Shift:
case Qt::Key_Control:
case Qt::Key_Meta:
break;
default:
- if (keyQt) {
- uint modifierKeys = e->modifiers();
-
- QString txt;
- if (modifierKeys & Qt::SHIFT)
- txt += "S-";
- if (modifierKeys & Qt::CTRL)
- txt += "C-";
- if (modifierKeys & Qt::ALT)
- txt += "M-";
-
- KeySymbol sym;
- setKeySymbol(&sym, e);
- txt += toqstr(sym.getSymbolName());
-
- if (text().isEmpty())
- setText(txt);
- else
- setText(text() + " " + txt);
- }
+ appendToSequence(e);
+ setText(toqstr(keysequence_.print(KeySequence::ForGui)));
}
}
-//prevent Qt from special casing Tab and Backtab
-bool ShortcutLineEdit::event(QEvent* e)
+bool ShortcutWidget::event(QEvent * e)
{
- if (e->type() == QEvent::ShortcutOverride)
- return false;
-
- if (e->type() == QEvent::KeyPress) {
- keyPressEvent(static_cast<QKeyEvent *>(e));
- return true;
+ 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:
+ return true;
+ default:
+ break;
}
-
- return QLineEdit::event(e);
+ return QLabel::event(e);
}
-QString const SearchLineEdit::hintMessage() const
+void ShortcutWidget::appendToSequence(QKeyEvent * e)
{
- return toqstr("Search ...");
-}
+ KeySymbol sym;
+ setKeySymbol(&sym, e);
-
-void SearchLineEdit::focusInEvent(QFocusEvent * e)
-{
- if (text() == hintMessage())
- clear();
+ if (sym.isOK()) {
+ KeyModifier mod = lyx::q_key_state(e->modifiers());
+ keysequence_.addkey(sym, mod, lyx::NoModifier);
+ }
}
-void SearchLineEdit::focusOutEvent(QFocusEvent * e)
+void ShortcutWidget::removeFromSequence()
{
- if (text().isEmpty())
- setText(hintMessage());
+ keysequence_.removeKey();
+ setText(toqstr(keysequence_.print(KeySequence::ForGui)));
}
+} // namespace frontend
+} // namespace lyx
-#include "CustomizedWidgets_moc.cpp"
+#include "moc_CustomizedWidgets.cpp"