controller: implement longPress key in controller 85/29085/2
authorGiWoong Kim <giwoong.kim@samsung.com>
Tue, 21 Oct 2014 06:09:05 +0000 (15:09 +0900)
committerSeokYeon Hwang <syeon.hwang@samsung.com>
Wed, 22 Oct 2014 04:50:10 +0000 (21:50 -0700)
Change-Id: Ib834560fd6f580f0fcd25f4f5ecc361f64cff32d
Signed-off-by: GiWoong Kim <giwoong.kim@samsung.com>
tizen/src/ui/Makefile.objs
tizen/src/ui/skinkeyitem.cpp
tizen/src/ui/skinkeyitem.h

index 498adede845bd9db8e6f199260c1674bbb5f1e5b..2e0f143b011f297cfdad795129eaaf95c443b503 100644 (file)
@@ -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 $@
index 5afe0fc98f999a7f7388737bcec523a0f5b4181b..1a160be223bbb43a2fb318d7135527667e4029ec 100644 (file)
@@ -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("<span style=background-color:white><font color=black>"
         + key->tooltip + "</font></span>");
@@ -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");
 }
index f8ea988981506e8cde492e18597ded579968c479..228f2d30d1d152fae0548b1f5e921eeb16e19a34 100644 (file)
@@ -32,6 +32,7 @@
 
 #include <QGraphicsRectItem>
 #include <QPainter>
+#include <QTimer>
 
 #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);