From 52071c71ddfde1354e6c17737660a3d161d0bc89 Mon Sep 17 00:00:00 2001 From: Alessandro Portale Date: Tue, 26 May 2009 20:59:55 +0200 Subject: Introducing QKeyEventSoftKey helper class. It maps softkeys to actual key events. Making it easy and non-intrusive to add softkey usage to existing widgets. --- src/gui/widgets/qsoftkeystack.cpp | 24 ++++++++++++++++++++++++ src/gui/widgets/qsoftkeystack_p.h | 14 ++++++++++++++ 2 files changed, 38 insertions(+) diff --git a/src/gui/widgets/qsoftkeystack.cpp b/src/gui/widgets/qsoftkeystack.cpp index 0054c6b..3591dc1 100644 --- a/src/gui/widgets/qsoftkeystack.cpp +++ b/src/gui/widgets/qsoftkeystack.cpp @@ -43,6 +43,7 @@ #include "qsoftkeystack_p.h" #include "qapplication.h" #include "qmainwindow.h" +#include "qevent.h" static bool isSame(const QSoftkeySet& a, const QSoftkeySet& b) { @@ -228,3 +229,26 @@ void QSoftKeyStackPrivate::setNativeSoftKeys() { } #endif // !defined(Q_WS_S60) + +QKeyEventSoftKey::QKeyEventSoftKey(QSoftKeyAction *softKeyAction, Qt::Key key, QObject *parent) + : QObject(parent) + , m_softKeyAction(softKeyAction) + , m_key(key) +{ +} + +void QKeyEventSoftKey::addSoftKey(QSoftKeyAction::StandardRole standardRole, Qt::Key key, QWidget *actionWidget) +{ + QSoftKeyStack *stack = QSoftKeyStack::softKeyStackOfWidget(actionWidget); + if (!stack) + return; + QSoftKeyAction *action = new QSoftKeyAction(standardRole, actionWidget); + QKeyEventSoftKey *softKey = new QKeyEventSoftKey(action, key, actionWidget); + connect(action, SIGNAL(triggered()), softKey, SLOT(sendKeyEvent())); + stack->push(action); +} + +void QKeyEventSoftKey::sendKeyEvent() +{ + QApplication::postEvent(parent(), new QKeyEvent(QEvent::KeyPress, m_key, Qt::NoModifier)); +} diff --git a/src/gui/widgets/qsoftkeystack_p.h b/src/gui/widgets/qsoftkeystack_p.h index b698178..e728cbb 100644 --- a/src/gui/widgets/qsoftkeystack_p.h +++ b/src/gui/widgets/qsoftkeystack_p.h @@ -70,6 +70,7 @@ QT_BEGIN_NAMESPACE class QSoftKeyStackPrivate : public QObjectPrivate { + Q_DECLARE_PUBLIC(QSoftKeyStack); public: QSoftKeyStackPrivate(); ~QSoftKeyStackPrivate(); @@ -91,6 +92,19 @@ private: QStack softKeyStack; }; +class QKeyEventSoftKey : QObject +{ + Q_OBJECT +public: + QKeyEventSoftKey(QSoftKeyAction *softKeyAction, Qt::Key key, QObject *parent); + static void addSoftKey(QSoftKeyAction::StandardRole standardRole, Qt::Key key, QWidget *actionWidget); +private: + QSoftKeyAction *m_softKeyAction; + Qt::Key m_key; +private Q_SLOTS: + void sendKeyEvent(); +}; + QT_END_NAMESPACE #endif // QSOFTKEYSTACK_P_H -- cgit v0.12