From: GiWoong Kim Date: Tue, 21 Oct 2014 06:09:05 +0000 (+0900) Subject: controller: implement longPress key in controller X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=68de54a76e1e0b03df2e226798e1d1743753a41c;p=sdk%2Femulator%2Fqemu.git controller: implement longPress key in controller Change-Id: Ib834560fd6f580f0fcd25f4f5ecc361f64cff32d Signed-off-by: GiWoong Kim --- diff --git a/tizen/src/ui/Makefile.objs b/tizen/src/ui/Makefile.objs index 498adede84..2e0f143b01 100644 --- a/tizen/src/ui/Makefile.objs +++ b/tizen/src/ui/Makefile.objs @@ -15,7 +15,7 @@ obj-$(CONFIG_QT) += hardwarekey.o obj-$(CONFIG_QT) += mainwindow.o moc_mainwindow.o obj-$(CONFIG_QT) += skinbezelitem.o obj-$(CONFIG_QT) += skincontrollerview.o -obj-$(CONFIG_QT) += skinkeyitem.o +obj-$(CONFIG_QT) += skinkeyitem.o moc_skinkeyitem.o obj-$(CONFIG_QT) += mainform.o obj-$(CONFIG_QT) += keyboardhelper.o obj-$(CONFIG_QT) += skinview.o @@ -42,3 +42,6 @@ $(obj)/moc_displayswwidget.cpp: $(obj)/displayswwidget.h $(obj)/moc_mainwindow.o: $(obj)/moc_mainwindow.cpp $(obj)/moc_mainwindow.cpp: $(obj)/mainwindow.h moc $< -o $@ +$(obj)/moc_skinkeyitem.o: $(obj)/moc_skinkeyitem.cpp +$(obj)/moc_skinkeyitem.cpp: $(obj)/skinkeyitem.h + moc $< -o $@ diff --git a/tizen/src/ui/skinkeyitem.cpp b/tizen/src/ui/skinkeyitem.cpp index 5afe0fc98f..1a160be223 100644 --- a/tizen/src/ui/skinkeyitem.cpp +++ b/tizen/src/ui/skinkeyitem.cpp @@ -37,6 +37,10 @@ SkinKeyItem::SkinKeyItem(QImage pressedImg, HardwareKey *key, QGraphicsItem *par isPressed = false; hoverColor = Qt::white; // TODO: pen.setColor(Qt::transparent); + longPressTimer = new QTimer(); + longPressTimer->setInterval(3 * 1000); + longPressTimer->setSingleShot(true); + connect(longPressTimer, SIGNAL(timeout()), this, SLOT(longPressDetected())); setToolTip("" + key->tooltip + ""); @@ -47,26 +51,64 @@ SkinKeyItem::SkinKeyItem(QImage pressedImg, HardwareKey *key, QGraphicsItem *par void SkinKeyItem::mousePressEvent(QGraphicsSceneMouseEvent *event) { Q_UNUSED(event) - qDebug("key pressed : %s", key->name.toLocal8Bit().data()); isPressed = true; pen.setColor(Qt::transparent); update(); + /* check long press key */ + if (key->keycode == LONGPRESS_KEYCODE) { + longPressTimer->start(); + return; + } + qDebug("key pressed : %s", key->name.toLocal8Bit().data()); + do_hw_key_event(KEY_PRESSED, key->keycode); } void SkinKeyItem::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) { Q_UNUSED(event) - qDebug("key released : %s", key->name.toLocal8Bit().data()); - + int keyCode = 0; isPressed = false; update(); - do_hw_key_event(KEY_RELEASED, key->keycode); + if (key->keycode == LONGPRESS_KEYCODE) { + if (longPressTimer->remainingTime() <= 0) { + /* long press key */ + if (key->name.compare("KEY_RETURN", Qt::CaseInsensitive) == 0) { + qDebug("key released : KEY_EXIT"); + keyCode = 174; + } else if (key->name.compare("KEY_YELLOW", Qt::CaseInsensitive) == 0) { + qDebug("key released : KEY_MENU"); + keyCode = 125; + } else if (key->name.compare("KEY_CYAN", Qt::CaseInsensitive) == 0) { + qDebug("key released : KEY_INFO"); + keyCode = 188; + } + do_hw_key_event(KEY_RELEASED, keyCode); + return; + } else { + /* short press key */ + longPressTimer->stop(); + if (key->name.compare("KEY_RETURN", Qt::CaseInsensitive) == 0) { + keyCode = 1; + } else if (key->name.compare("KEY_YELLOW", Qt::CaseInsensitive) == 0) { + keyCode = 61; + } else if (key->name.compare("KEY_CYAN", Qt::CaseInsensitive) == 0) { + keyCode = 62; + } + qDebug("key pressed : %s", key->name.toLocal8Bit().data()); + do_hw_key_event(KEY_PRESSED, keyCode); + } + } else { + keyCode = key->keycode; + } + + qDebug("key released : %s", key->name.toLocal8Bit().data()); + do_hw_key_event(KEY_RELEASED, keyCode); } void SkinKeyItem::hoverEnterEvent(QGraphicsSceneHoverEvent *event) @@ -104,7 +146,29 @@ void SkinKeyItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *optio } } +void SkinKeyItem::longPressDetected() +{ + int keyCode = 0; + + qDebug("long press detected"); + if (key->name.compare("KEY_RETURN", Qt::CaseInsensitive) == 0) { + qDebug("key pressed : KEY_EXIT"); + keyCode = 174; + } else if (key->name.compare("KEY_YELLOW", Qt::CaseInsensitive) == 0) { + qDebug("key pressed : KEY_MENU"); + keyCode = 125; + } else if (key->name.compare("KEY_CYAN", Qt::CaseInsensitive) == 0) { + qDebug("key pressed : KEY_INFO"); + keyCode = 188; + } + do_hw_key_event(KEY_PRESSED, keyCode); +} + SkinKeyItem::~SkinKeyItem() { + if (longPressTimer) { + delete longPressTimer; + longPressTimer = NULL; + } //qDebug("destory key item"); } diff --git a/tizen/src/ui/skinkeyitem.h b/tizen/src/ui/skinkeyitem.h index f8ea988981..228f2d30d1 100644 --- a/tizen/src/ui/skinkeyitem.h +++ b/tizen/src/ui/skinkeyitem.h @@ -32,6 +32,7 @@ #include #include +#include #include "hardwarekey.h" @@ -40,18 +41,24 @@ extern "C" { #include "emul_state.h" } -class SkinKeyItem : public QGraphicsRectItem +#define LONGPRESS_KEYCODE (-999) + +class SkinKeyItem : public QObject, public QGraphicsRectItem { + Q_OBJECT + public: SkinKeyItem(QImage pressedImg, HardwareKey *key, QGraphicsItem *parent = 0); ~SkinKeyItem(); HardwareKey *key; QImage pressedImg; + QTimer *longPressTimer; signals: public slots: + void longPressDetected(); protected: void mousePressEvent(QGraphicsSceneMouseEvent *event);