From 9727658b85c0f13827c982331c1acccbb1b616c9 Mon Sep 17 00:00:00 2001 From: GiWoong Kim Date: Wed, 1 Oct 2014 17:29:52 +0900 Subject: [PATCH] controller: make mutually exclusive event The controller view events and key events should be mutually exclusive each other. Change-Id: I1aa9341bbd4524fd0176bb38babcdfee60525b41 Signed-off-by: GiWoong Kim --- tizen/src/ui/dockingconview.cpp | 27 +++++++++++++++++++-------- tizen/src/ui/dockingconview.h | 2 ++ tizen/src/ui/floatingconview.cpp | 27 +++++++++++++++++++-------- tizen/src/ui/floatingconview.h | 3 +++ tizen/src/ui/skinbezelitem.cpp | 11 +++++++++++ tizen/src/ui/skinbezelitem.h | 4 ++++ tizen/src/ui/skinkeyitem.cpp | 8 ++++++-- tizen/src/ui/skinkeyitem.h | 4 +++- 8 files changed, 67 insertions(+), 19 deletions(-) diff --git a/tizen/src/ui/dockingconview.cpp b/tizen/src/ui/dockingconview.cpp index adcc8707e0..84725cb731 100644 --- a/tizen/src/ui/dockingconview.cpp +++ b/tizen/src/ui/dockingconview.cpp @@ -35,7 +35,6 @@ DockingConView::DockingConView(ControllerForm *conForm, QGraphicsScene *scene, Q QGraphicsView(scene, parent) { setStyleSheet("background: transparent"); - //setAttribute(Qt::WA_TranslucentBackground); setStyleSheet("border-style: none"); setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); @@ -52,7 +51,7 @@ DockingConView::DockingConView(ControllerForm *conForm, QGraphicsScene *scene, Q void DockingConView::createItems(ControllerForm *conForm) { /* bezel */ - SkinBezelItem *bezelItem = new SkinBezelItem(conForm->conImg[ControllerForm::normal]); + bezelItem = new SkinBezelItem(conForm->conImg[ControllerForm::normal]); scene()->addItem(bezelItem); /* HW keys */ @@ -77,6 +76,12 @@ void DockingConView::resizeEvent(QResizeEvent *event) void DockingConView::mousePressEvent(QMouseEvent *event) { + QGraphicsView::mousePressEvent(event); + + if (bezelItem->isKeyHandling() == true) { + return; + } + if (event->button() == Qt::LeftButton) { QWidget *win = ((QWidget *) this->parent()); @@ -89,12 +94,16 @@ void DockingConView::mousePressEvent(QMouseEvent *event) rubberBand->show(); } } - - QGraphicsView::mousePressEvent(event); } void DockingConView::mouseReleaseEvent(QMouseEvent *event) { + QGraphicsView::mouseReleaseEvent(event); + + if (bezelItem->isKeyHandling() == true) { + return; + } + if (event->button() == Qt::LeftButton) { if (grabPos != QPoint(-1, -1)) { if (rubberBand != NULL) { @@ -109,18 +118,20 @@ void DockingConView::mouseReleaseEvent(QMouseEvent *event) return; } } - - QGraphicsView::mouseReleaseEvent(event); } void DockingConView::mouseMoveEvent(QMouseEvent *event) { + QGraphicsView::mouseMoveEvent(event); + + if (bezelItem->isKeyHandling() == true) { + return; + } + if (grabPos != QPoint(-1, -1)) { rubberBand->setGeometry( QRect(rubberPos + (event->globalPos() - grabPos), size())); } - - QGraphicsView::mouseMoveEvent(event); } DockingConView::~DockingConView() diff --git a/tizen/src/ui/dockingconview.h b/tizen/src/ui/dockingconview.h index 75450669d6..dc1b6ff9d5 100644 --- a/tizen/src/ui/dockingconview.h +++ b/tizen/src/ui/dockingconview.h @@ -33,6 +33,7 @@ #include #include "skinview.h" +#include "skinbezelitem.h" #include "controllerform.h" class DockingConView : public QGraphicsView @@ -55,6 +56,7 @@ protected: private: void createItems(ControllerForm *conForm); + SkinBezelItem *bezelItem; QRubberBand *rubberBand; }; diff --git a/tizen/src/ui/floatingconview.cpp b/tizen/src/ui/floatingconview.cpp index 4a9d70e022..a798e3247d 100644 --- a/tizen/src/ui/floatingconview.cpp +++ b/tizen/src/ui/floatingconview.cpp @@ -53,7 +53,7 @@ FloatingConView::FloatingConView(ControllerForm *conForm, QGraphicsScene *scene, void FloatingConView::createItems(ControllerForm *conForm) { /* bezel */ - SkinBezelItem *bezelItem = new SkinBezelItem(conForm->conImg[ControllerForm::normal]); + bezelItem = new SkinBezelItem(conForm->conImg[ControllerForm::normal]); scene()->addItem(bezelItem); /* HW keys */ @@ -78,18 +78,28 @@ void FloatingConView::resizeEvent(QResizeEvent *event) void FloatingConView::mousePressEvent(QMouseEvent *event) { + QGraphicsView::mousePressEvent(event); + + if (bezelItem->isKeyHandling() == true) { + return; + } + if (event->button() == Qt::LeftButton) { QWidget *con = ((QWidget *) this->parent()); grabPos = event->globalPos(); conPos = con->pos(); } - - QGraphicsView::mousePressEvent(event); } void FloatingConView::mouseReleaseEvent(QMouseEvent *event) { + QGraphicsView::mouseReleaseEvent(event); + + if (bezelItem->isKeyHandling() == true) { + return; + } + if (event->button() == Qt::LeftButton) { grabPos = QPoint(-1, -1); } @@ -113,19 +123,20 @@ void FloatingConView::mouseReleaseEvent(QMouseEvent *event) win->openController(win->getUIState()->conState.conFormIndex, true); return; } - - QGraphicsView::mouseReleaseEvent(event); } void FloatingConView::mouseMoveEvent(QMouseEvent *event) { - QWidget *con = ((QWidget *)this->parent()); + QGraphicsView::mouseMoveEvent(event); + if (bezelItem->isKeyHandling() == true) { + return; + } + + QWidget *con = ((QWidget *)this->parent()); if (grabPos != QPoint(-1, -1)) { con->move(conPos + (event->globalPos() - grabPos)); } - - QGraphicsView::mouseMoveEvent(event); } FloatingConView::~FloatingConView() diff --git a/tizen/src/ui/floatingconview.h b/tizen/src/ui/floatingconview.h index e717e8c92d..81fa6d9762 100644 --- a/tizen/src/ui/floatingconview.h +++ b/tizen/src/ui/floatingconview.h @@ -31,6 +31,7 @@ #define FLOATINGCONVIEW_H #include "skinview.h" +#include "skinbezelitem.h" #include "controllerform.h" class FloatingConView : public QGraphicsView @@ -51,6 +52,8 @@ protected: private: void createItems(ControllerForm *conForm); + + SkinBezelItem *bezelItem; }; #endif // FLOATINGCONVIEW_H diff --git a/tizen/src/ui/skinbezelitem.cpp b/tizen/src/ui/skinbezelitem.cpp index 06d5f8b8dc..4d900660fe 100644 --- a/tizen/src/ui/skinbezelitem.cpp +++ b/tizen/src/ui/skinbezelitem.cpp @@ -35,6 +35,17 @@ SkinBezelItem::SkinBezelItem(QImage bezelImg, QGraphicsItem *parent) : QGraphicsPixmapItem(QPixmap::fromImage(bezelImg), parent) { + keyHandling = false; +} + +void SkinBezelItem::setKeyHandling(bool doing) +{ + keyHandling = doing; +} + +bool SkinBezelItem::isKeyHandling() +{ + return keyHandling; } SkinBezelItem::~SkinBezelItem() diff --git a/tizen/src/ui/skinbezelitem.h b/tizen/src/ui/skinbezelitem.h index 876db43e23..e8754f856f 100644 --- a/tizen/src/ui/skinbezelitem.h +++ b/tizen/src/ui/skinbezelitem.h @@ -38,9 +38,13 @@ public: SkinBezelItem(QImage bezelImg, QGraphicsItem *parent = 0); ~SkinBezelItem(); + void setKeyHandling(bool doing); + bool isKeyHandling(); + protected: private: + bool keyHandling; }; #endif // SKINBEZELITEM_H diff --git a/tizen/src/ui/skinkeyitem.cpp b/tizen/src/ui/skinkeyitem.cpp index 1a160be223..5685fa6cbd 100644 --- a/tizen/src/ui/skinkeyitem.cpp +++ b/tizen/src/ui/skinkeyitem.cpp @@ -29,14 +29,16 @@ #include "skinkeyitem.h" -SkinKeyItem::SkinKeyItem(QImage pressedImg, HardwareKey *key, QGraphicsItem *parent) : - QGraphicsRectItem(key->region, parent) +SkinKeyItem::SkinKeyItem(QImage pressedImg, HardwareKey *key, SkinBezelItem *parent) : + QGraphicsRectItem(key->region, (QGraphicsItem *)parent) { + this->bezelParent = parent; this->pressedImg = pressedImg; this->key = key; isPressed = false; hoverColor = Qt::white; // TODO: pen.setColor(Qt::transparent); + longPressTimer = new QTimer(); longPressTimer->setInterval(3 * 1000); longPressTimer->setSingleShot(true); @@ -53,6 +55,7 @@ void SkinKeyItem::mousePressEvent(QGraphicsSceneMouseEvent *event) Q_UNUSED(event) isPressed = true; + bezelParent->setKeyHandling(true); pen.setColor(Qt::transparent); update(); @@ -72,6 +75,7 @@ void SkinKeyItem::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) Q_UNUSED(event) int keyCode = 0; isPressed = false; + bezelParent->setKeyHandling(false); update(); diff --git a/tizen/src/ui/skinkeyitem.h b/tizen/src/ui/skinkeyitem.h index 228f2d30d1..ce311b9322 100644 --- a/tizen/src/ui/skinkeyitem.h +++ b/tizen/src/ui/skinkeyitem.h @@ -34,6 +34,7 @@ #include #include +#include "skinbezelitem.h" #include "hardwarekey.h" extern "C" { @@ -48,7 +49,7 @@ class SkinKeyItem : public QObject, public QGraphicsRectItem Q_OBJECT public: - SkinKeyItem(QImage pressedImg, HardwareKey *key, QGraphicsItem *parent = 0); + SkinKeyItem(QImage pressedImg, HardwareKey *key, SkinBezelItem *parent = 0); ~SkinKeyItem(); HardwareKey *key; @@ -69,6 +70,7 @@ protected: void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget); private: + SkinBezelItem *bezelParent; bool isPressed; QColor hoverColor; QPen pen; -- 2.34.1