Don't look up pid/tid on YAGL_LOG_FUNC_SET
[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(parent->getMainWindow());
70
71         generalCon->createHeaderBarAndBorder(scene(), false);
72         QList<HWKeyButton *> buttons
73                     = generalCon->createButtons(scene(), parentWidget(), conForm);
74     }
75 }
76
77 void DockingConView::grabWindow(QMouseEvent *event)
78 {
79     SkinView::grabWindow(event->globalPos());
80
81     eventPos = event->pos();
82 }
83
84 /* override */
85 void DockingConView::releaseWindow()
86 {
87     SkinView::releaseWindow();
88
89     eventPos = SKINVIEW_NULLITY_POSITION;
90     setConViewStatus(CONVIEW_NORMAL);
91 }
92
93 /* override */
94 QRegion DockingConView::getKeyWinRegion(
95     QWidget *base, QRect &keyRect, LayoutForm::SkinImgType type)
96 {
97     return ((MainWindow *)parent->parentWidget())->
98         getUiInfo()->getConKeyRegion(base, keyRect, type);
99 }
100
101 /* override */
102 void DockingConView::resizeEvent(QResizeEvent *event)
103 {
104     /* do nothing */
105
106     SkinView::resizeEvent(event);
107 }
108
109 /* override */
110 void DockingConView::mousePressEvent(QMouseEvent *event)
111 {
112     SkinView::mousePressEvent(event);
113
114     if (bezelItem->isHWKeyHandling() == true) {
115         /* do nothing */
116         return;
117     }
118
119     if (event->button() == Qt::LeftButton) {
120         grabWindow(event);
121
122         QWidget *win = parent->parentWidget();
123         rubberPos.setX(win->pos().x() + parent->pos().x());
124         rubberPos.setY(win->pos().y() + parent->pos().y());
125
126         if (rubberBand != NULL) {
127             rubberBand->setGeometry(QRect(rubberPos, size()));
128             rubberBand->show();
129         }
130     }
131 }
132
133 /* override */
134 void DockingConView::mouseDoubleClickEvent(QMouseEvent *event)
135 {
136     SkinView::mouseDoubleClickEvent(event);
137
138     /* do nothing */
139 }
140
141 /* override */
142 void DockingConView::mouseReleaseEvent(QMouseEvent *event)
143 {
144     SkinView::mouseReleaseEvent(event);
145
146     if (bezelItem->isHWKeyHandling() == true) {
147         /* do nothing */
148         return;
149     }
150
151     if (event->button() == Qt::LeftButton) {
152         if (isGrabWindow() == true) {
153             if (rubberBand != NULL) {
154                 rubberBand->hide();
155             }
156
157             if (getConViewStatus() == CONVIEW_DRAG_OUT) {
158                 /* toggle */
159                 MainWindow *win = ((MainWindow *)parent->parent());
160                 win->getUiState()->getConState()->setRecentlyFloatPos(
161                     event->globalPos() - eventPos);
162                 win->openController(
163                     win->getUiState()->getConState()->getConFormIndex(), -1);
164             }
165         }
166     }
167
168     releaseWindow();
169 }
170
171 /* override */
172 void DockingConView::mouseMoveEvent(QMouseEvent *event)
173 {
174     SkinView::mouseMoveEvent(event);
175
176     if (bezelItem->isHWKeyHandling() == true) {
177         /* do nothing */
178         return;
179     }
180
181     if (isGrabWindow() == true) {
182         if (rubberBand != NULL) {
183             rubberBand->setGeometry(
184                 QRect(rubberPos + (event->globalPos() - grabPos), size()));
185         }
186         setConViewStatus(CONVIEW_DRAG_OUT);
187     }
188 }
189
190 void DockingConView::setConViewStatus(conViewStatus status)
191 {
192     conViewStat = status;
193 }
194
195 int DockingConView::getConViewStatus()
196 {
197     return conViewStat;
198 }
199
200 DockingConView::~DockingConView()
201 {
202     qDebug("destroy docking controller view");
203
204     if (rubberBand != NULL) {
205         rubberBand->close();
206         delete rubberBand;
207         rubberBand = NULL;
208     }
209 }