skin: make menu key button
[sdk/emulator/qemu.git] / tizen / src / ui / controller / dockingconview.cpp
1 /*
2  * Qt UI
3  *
4  * Copyright (C) 2014 Samsung Electronics Co., Ltd. All rights reserved.
5  *
6  * Contact:
7  * GiWoong Kim <giwoong.kim@samsung.com>
8  * Sangho Park <sangho1206.park@samsung.com>
9  *
10  * This program is free software; you can redistribute it and/or
11  * modify it under the terms of the GNU General Public License
12  * as published by the Free Software Foundation; either version 2
13  * of the License, or (at your option) any later version.
14  *
15  * This program is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  * GNU General Public License for more details.
19  *
20  * You should have received a copy of the GNU General Public License
21  * along with this program; if not, write to the Free Software
22  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
23  * MA 02110-1301, USA.
24  *
25  * Contributors:
26  * - S-Core Co., Ltd
27  *
28  */
29
30 #include "dockingconview.h"
31 #include "mainwindow.h"
32 #include "skinkeyitem.h"
33 #include "controller/generalpurposecon.h"
34 #include "resource/ui_strings.h"
35
36 DockingConView::DockingConView(QWidget *parent,
37     ControllerForm *conForm, QGraphicsScene *scene) : SkinView(parent, scene)
38 {
39     this->parent = (DockingController *)parent;
40     this->conViewStat = CONVIEW_NORMAL;
41
42     setFocusPolicy(Qt::NoFocus);
43     setStyleSheet("DockingConView { background: transparent; border-style: none; }" +
44         QString(STYLE_TOOLTIP));
45
46     rubberPos = SKINVIEW_NULLITY_POSITION;
47     rubberBand = new QRubberBand(QRubberBand::Rectangle, NULL);
48
49     createItems(conForm);
50 }
51
52 void DockingConView::createItems(ControllerForm *conForm)
53 {
54     /* bezel */
55     bezelItem = createBezelItem(NULL, conForm);
56     scene()->addItem(bezelItem);
57
58     if (conForm->isGeneralPurpose() == false) {
59         /* HW keys */
60         QList<HardwareKey *> &keyList = conForm->getKeyList();
61         HardwareKey *hwKey = NULL;
62         for (int i = 0; i < keyList.count(); i++) {
63             hwKey = keyList.at(i);
64             if (hwKey != NULL) {
65                 createKeyItem(bezelItem, conForm, hwKey);
66             }
67         }
68     } else {
69         GeneralPurposeCon *generalCon = new GeneralPurposeCon();
70         QList<HWKeyButton *> buttons
71                     = generalCon->createButtons(parentWidget(), conForm);
72
73         for (int i = 0; i < buttons.count(); i++) {
74             HWKeyButton *button = buttons.at(i);
75             if (button->getSlot() == NULL) {
76                 continue;
77             }
78             connect(button, SIGNAL(clicked()),
79                parent->getMainWindow()->getPopupMenu(), button->getSlot());
80        }
81     }
82 }
83
84 void DockingConView::grabWindow(QMouseEvent *event)
85 {
86     SkinView::grabWindow(event->globalPos());
87
88     eventPos = event->pos();
89 }
90
91 /* override */
92 void DockingConView::releaseWindow()
93 {
94     SkinView::releaseWindow();
95
96     eventPos = SKINVIEW_NULLITY_POSITION;
97     setConViewStatus(CONVIEW_NORMAL);
98 }
99
100 /* override */
101 QRegion DockingConView::getKeyWinRegion(
102     QWidget *base, QRect &keyRect, LayoutForm::SkinImgType type)
103 {
104     return ((MainWindow *)parent->parentWidget())->
105         getUiInfo()->getConKeyRegion(base, keyRect, type);
106 }
107
108 /* override */
109 void DockingConView::resizeEvent(QResizeEvent *event)
110 {
111     /* do nothing */
112
113     SkinView::resizeEvent(event);
114 }
115
116 /* override */
117 void DockingConView::mousePressEvent(QMouseEvent *event)
118 {
119     SkinView::mousePressEvent(event);
120
121     if (bezelItem->isHWKeyHandling() == true) {
122         /* do nothing */
123         return;
124     }
125
126     if (event->button() == Qt::LeftButton) {
127         grabWindow(event);
128
129         QWidget *win = parent->parentWidget();
130         rubberPos.setX(win->pos().x() + parent->pos().x());
131         rubberPos.setY(win->pos().y() + parent->pos().y());
132
133         if (rubberBand != NULL) {
134             rubberBand->setGeometry(QRect(rubberPos, size()));
135             rubberBand->show();
136         }
137     }
138 }
139
140 /* override */
141 void DockingConView::mouseDoubleClickEvent(QMouseEvent *event)
142 {
143     SkinView::mouseDoubleClickEvent(event);
144
145     /* do nothing */
146 }
147
148 /* override */
149 void DockingConView::mouseReleaseEvent(QMouseEvent *event)
150 {
151     SkinView::mouseReleaseEvent(event);
152
153     if (bezelItem->isHWKeyHandling() == true) {
154         /* do nothing */
155         return;
156     }
157
158     if (event->button() == Qt::LeftButton) {
159         if (isGrabWindow() == true) {
160             if (rubberBand != NULL) {
161                 rubberBand->hide();
162             }
163
164             if (getConViewStatus() == CONVIEW_DRAG_OUT) {
165                 /* toggle */
166                 MainWindow *win = ((MainWindow *)parent->parent());
167                 win->getUiState()->getConState()->setRecentlyFloatPos(
168                     event->globalPos() - eventPos);
169                 win->openController(
170                     win->getUiState()->getConState()->getConFormIndex(), -1);
171             }
172         }
173     }
174
175     releaseWindow();
176 }
177
178 /* override */
179 void DockingConView::mouseMoveEvent(QMouseEvent *event)
180 {
181     SkinView::mouseMoveEvent(event);
182
183     if (bezelItem->isHWKeyHandling() == true) {
184         /* do nothing */
185         return;
186     }
187
188     if (isGrabWindow() == true) {
189         if (rubberBand != NULL) {
190             rubberBand->setGeometry(
191                 QRect(rubberPos + (event->globalPos() - grabPos), size()));
192         }
193         setConViewStatus(CONVIEW_DRAG_OUT);
194     }
195 }
196
197 void DockingConView::setConViewStatus(conViewStatus status)
198 {
199     conViewStat = status;
200 }
201
202 int DockingConView::getConViewStatus()
203 {
204     return conViewStat;
205 }
206
207 DockingConView::~DockingConView()
208 {
209     qDebug("destroy docking controller view");
210
211     if (rubberBand != NULL) {
212         rubberBand->close();
213         delete rubberBand;
214         rubberBand = NULL;
215     }
216 }