30 #include <hbmenu.h> |
30 #include <hbmenu.h> |
31 #include <hbaction.h> |
31 #include <hbaction.h> |
32 #include <hbwidgetfeedback.h> |
32 #include <hbwidgetfeedback.h> |
33 #include <hbinstance.h> |
33 #include <hbinstance.h> |
34 #include <hbnamespace.h> |
34 #include <hbnamespace.h> |
35 #include <hbpangesture.h> |
35 |
|
36 #include <hbswipegesture.h> |
36 |
37 |
37 #include "hbtitlebar_p.h" |
38 #include "hbtitlebar_p.h" |
38 #include "hbtitlebar_p_p.h" |
39 #include "hbtitlebar_p_p.h" |
39 |
40 |
40 #include "hbmainwindow_p.h" |
41 #include "hbmainwindow_p.h" |
77 mIndicatorButton, SLOT(deactivate(const QList<IndicatorClientInfo> &))); |
78 mIndicatorButton, SLOT(deactivate(const QList<IndicatorClientInfo> &))); |
78 q->connect(q, SIGNAL(allActivated(const QList<IndicatorClientInfo> &)), |
79 q->connect(q, SIGNAL(allActivated(const QList<IndicatorClientInfo> &)), |
79 mIndicatorButton, SLOT(activateAll(const QList<IndicatorClientInfo> &))); |
80 mIndicatorButton, SLOT(activateAll(const QList<IndicatorClientInfo> &))); |
80 q->connect(mMainWindow, SIGNAL(currentViewChanged(HbView*)), q, SLOT(currentViewChanged(HbView*))); |
81 q->connect(mMainWindow, SIGNAL(currentViewChanged(HbView*)), q, SLOT(currentViewChanged(HbView*))); |
81 q->connect(mDefaultNavigationAction, SIGNAL(triggered()), qApp, SLOT(quit())); |
82 q->connect(mDefaultNavigationAction, SIGNAL(triggered()), qApp, SLOT(quit())); |
|
83 } |
|
84 |
|
85 void HbTitleBarPrivate::init() |
|
86 { |
|
87 Q_Q(HbTitleBar); |
82 |
88 |
83 q->setFlag(QGraphicsItem::ItemIsPanel, true); |
89 q->setFlag(QGraphicsItem::ItemIsPanel, true); |
84 } |
|
85 |
|
86 void HbTitleBarPrivate::init() |
|
87 { |
|
88 Q_Q(HbTitleBar); |
|
89 |
90 |
90 // create title pane |
91 // create title pane |
91 mTitlePane = new HbTitlePane(q); |
92 mTitlePane = new HbTitlePane(q); |
92 mTitlePane->setZValue(HbPrivate::TitlePaneZValue); |
93 mTitlePane->setZValue(HbPrivate::TitlePaneZValue); |
93 |
94 |
108 HbStyle::setItemName(mIndicatorButton, "status"); |
109 HbStyle::setItemName(mIndicatorButton, "status"); |
109 HbStyle::setItemName(mNavigationButton, "back"); |
110 HbStyle::setItemName(mNavigationButton, "back"); |
110 |
111 |
111 mPreviousTitleBarProperties = 0; // view not yet ready |
112 mPreviousTitleBarProperties = 0; // view not yet ready |
112 |
113 |
113 QObject::connect(this->mTitlePane, SIGNAL(panRight()), q, SLOT(gestureRight())); |
114 QObject::connect(this->mTitlePane, SIGNAL(swipeRight()), q, SLOT(gestureSwipeRight())); |
114 QObject::connect(this->mTitlePane, SIGNAL(panLeft()), q, SLOT(gestureLeft())); |
115 QObject::connect(this->mTitlePane, SIGNAL(swipeLeft()), q, SLOT(gestureSwipeLeft())); |
115 } |
116 } |
116 |
117 |
117 void HbTitleBarPrivate::initSceneEventFilters(HbView *view) |
118 void HbTitleBarPrivate::initSceneEventFilters(HbView *view) |
118 { |
119 { |
119 Q_Q(HbTitleBar); |
120 Q_Q(HbTitleBar); |
122 // Install sceneEvent filter(s) |
123 // Install sceneEvent filter(s) |
123 mTouchAreaItem = q->style()->createPrimitive(HbStyle::P_TitleBar_toucharea, q); |
124 mTouchAreaItem = q->style()->createPrimitive(HbStyle::P_TitleBar_toucharea, q); |
124 mTouchAreaItem->setAcceptedMouseButtons(Qt::LeftButton); |
125 mTouchAreaItem->setAcceptedMouseButtons(Qt::LeftButton); |
125 mTouchAreaItem->installSceneEventFilter(q); |
126 mTouchAreaItem->installSceneEventFilter(q); |
126 QGraphicsObject *touchAreaItemGraphicsObject = static_cast<QGraphicsObject*>(mTouchAreaItem); |
127 QGraphicsObject *touchAreaItemGraphicsObject = static_cast<QGraphicsObject*>(mTouchAreaItem); |
127 touchAreaItemGraphicsObject->grabGesture(Qt::PanGesture); |
128 touchAreaItemGraphicsObject->grabGesture(Qt::SwipeGesture); |
128 } |
129 } |
129 } else { // Remove scene event filter |
130 } else { // Remove scene event filter |
130 if (mTouchAreaItem) { |
131 if (mTouchAreaItem) { |
131 mTouchAreaItem->removeSceneEventFilter(q); |
132 mTouchAreaItem->removeSceneEventFilter(q); |
132 delete mTouchAreaItem; |
133 delete mTouchAreaItem; |
171 { |
172 { |
172 Q_D(HbTitleBar); |
173 Q_D(HbTitleBar); |
173 d->q_ptr = this; |
174 d->q_ptr = this; |
174 d->mMainWindow = mainWindow; |
175 d->mMainWindow = mainWindow; |
175 d->init(); |
176 d->init(); |
|
177 setFlag(QGraphicsItem::ItemIsPanel, true); |
176 } |
178 } |
177 |
179 |
178 HbTitleBar::HbTitleBar(HbTitleBarPrivate &dd, HbMainWindow *mainWindow, |
180 HbTitleBar::HbTitleBar(HbTitleBarPrivate &dd, HbMainWindow *mainWindow, |
179 QGraphicsItem *parent) |
181 QGraphicsItem *parent) |
180 : HbWidget(dd, parent) |
182 : HbWidget(dd, parent) |
273 Q_D(HbTitleBar); |
275 Q_D(HbTitleBar); |
274 setNavigationAction(d->mDefaultNavigationAction); |
276 setNavigationAction(d->mDefaultNavigationAction); |
275 } |
277 } |
276 |
278 |
277 /* |
279 /* |
278 gestureRight. Handles left-to-right flick. |
280 gestureSwipeRight. Handles left-to-right flick. |
279 if(layoutDirection() == Qt::LeftToRight) { |
281 */ |
280 */ |
282 |
281 |
283 void HbTitleBar::gestureSwipeRight() |
282 void HbTitleBar::gestureRight() |
284 { |
283 { |
285 Q_D(HbTitleBar); |
284 Q_D(HbTitleBar); |
286 |
285 |
287 if (!minimizable()) { |
286 if (!minimizable()) { |
|
287 return; |
288 return; |
288 } |
289 } |
|
290 |
289 HbWidgetFeedback::triggered(this, Hb::InstantFlicked); |
291 HbWidgetFeedback::triggered(this, Hb::InstantFlicked); |
290 |
292 |
291 Position p(position()); |
293 Position p(position()); |
292 QSize screenSize = HbDeviceProfile::profile(this).logicalSize(); |
294 QSize screenSize = HbDeviceProfile::profile(this).logicalSize(); |
293 QRectF handleRect = d->mTitleBarHandle->boundingRect(); |
295 QRectF handleRect = d->mTitleBarHandle->boundingRect(); |
294 |
296 |
295 if (d->mMainWindow && |
297 if (d->mMainWindow && |
296 d->mIndicatorButton->isVisible() && |
298 d->mIndicatorButton->isVisible() && |
297 p == HbTitleBar::Original) { |
299 p == HbTitleBar::Original) { |
298 #ifdef HB_EFFECTS |
300 #ifdef HB_EFFECTS |
299 //grabMouse(); // this prevents taps/gestures on top of animating titlebar |
|
300 QRectF extRect(scenePos().x(), 0.0, screenSize.width(), 10.0); |
301 QRectF extRect(scenePos().x(), 0.0, screenSize.width(), 10.0); |
301 HbEffect::start(this, "titlebar", "minimize", this, "effectFinished", QVariant(), extRect); |
302 HbEffect::start(this, "titlebar", "minimize", this, "effectFinished", QVariant(), extRect); |
302 #else // no effects, just do the translation |
303 #else // no effects, just do the translation |
303 translate(screenSize.width()-handleRect.width(), 0); |
304 translate(screenSize.width()-handleRect.width(), 0); |
304 #endif //HB_EFFECTS |
305 #endif //HB_EFFECTS |
305 } |
306 } |
306 } |
307 } |
307 |
308 |
308 /* |
309 /* |
309 gestureLeft. Handles right-to-left flick. |
310 gestureSwipeLeft. Handles right-to-left flick. |
310 */ |
311 */ |
311 |
312 |
312 void HbTitleBar::gestureLeft() |
313 void HbTitleBar::gestureSwipeLeft() |
313 { |
314 { |
314 Q_D(HbTitleBar); |
315 Q_D(HbTitleBar); |
315 |
316 |
316 if (!minimizable()) { |
317 if (!minimizable()) { |
317 return; |
318 return; |
318 } |
319 } |
|
320 |
319 HbWidgetFeedback::triggered(this, Hb::InstantFlicked); |
321 HbWidgetFeedback::triggered(this, Hb::InstantFlicked); |
320 |
322 |
321 Position p(position()); |
323 Position p(position()); |
322 QSize screenSize = HbDeviceProfile::profile(this).logicalSize(); |
324 QSize screenSize = HbDeviceProfile::profile(this).logicalSize(); |
323 QRectF handleRect = d->mTitleBarHandle->boundingRect(); |
325 QRectF handleRect = d->mTitleBarHandle->boundingRect(); |
325 // titlebar's transformation information |
327 // titlebar's transformation information |
326 if (d->mMainWindow && |
328 if (d->mMainWindow && |
327 d->mIndicatorButton->isVisible() && |
329 d->mIndicatorButton->isVisible() && |
328 p == HbTitleBar::Minimized) { |
330 p == HbTitleBar::Minimized) { |
329 #ifdef HB_EFFECTS |
331 #ifdef HB_EFFECTS |
330 //grabMouse(); // this prevents taps/gestures on top of animating titlebar |
|
331 // effect translates widget from rect's right x-coordinate to left x-coordinate |
332 // effect translates widget from rect's right x-coordinate to left x-coordinate |
332 QRectF extRect(-handleRect.width(), 0.0, scenePos().x(), 10.0); // height not used in effect |
333 QRectF extRect(-handleRect.width(), 0.0, scenePos().x(), 10.0); // height not used in effect |
333 HbEffect::start(this, "titlebar", "maximize", this, "effectFinished", QVariant(), extRect); |
334 HbEffect::start(this, "titlebar", "maximize", this, "effectFinished", QVariant(), extRect); |
334 #else // no effects, just do the translation |
335 #else // no effects, just do the translation |
335 translate(x()-scenePos().x(), y()-scenePos().y()); |
336 translate(x()-scenePos().x(), y()-scenePos().y()); |
432 { |
433 { |
433 Q_UNUSED(watched) |
434 Q_UNUSED(watched) |
434 |
435 |
435 Q_D(HbTitleBar); |
436 Q_D(HbTitleBar); |
436 bool filterOutEvent = false; |
437 bool filterOutEvent = false; |
437 switch(event->type()){ |
438 switch(event->type()){ |
438 case QEvent::GraphicsSceneMousePress: |
439 case QEvent::GraphicsSceneMousePress: |
439 HbWidgetFeedback::triggered(this, Hb::InstantPressed); |
440 HbWidgetFeedback::triggered(this, Hb::InstantPressed); |
440 event->accept(); //we need to catch the mouse release and move events also |
441 event->accept(); //we need to catch the mouse release and move events also |
441 filterOutEvent = true; |
442 filterOutEvent = true; |
442 break; |
443 break; |
460 } else if (d->mHandleDown) { |
461 } else if (d->mHandleDown) { |
461 d->mHandleDown = false; |
462 d->mHandleDown = false; |
462 HbWidgetFeedback::triggered(this, Hb::InstantReleased); |
463 HbWidgetFeedback::triggered(this, Hb::InstantReleased); |
463 } |
464 } |
464 filterOutEvent = true; |
465 filterOutEvent = true; |
465 break; |
466 break; |
466 } |
467 } |
467 case QEvent::Gesture: { |
468 case QEvent::Gesture: { |
468 QGestureEvent *gestureEvent = static_cast<QGestureEvent*>(event); |
469 QGestureEvent *gestureEvent = static_cast<QGestureEvent*>(event); |
469 if (HbPanGesture *pan = qobject_cast<HbPanGesture*>(gestureEvent->gesture(Qt::PanGesture))) { |
470 HbSwipeGesture *swipe = qobject_cast<HbSwipeGesture*>(gestureEvent->gesture(Qt::SwipeGesture)); |
470 if (pan->state() == Qt::GestureFinished) { |
471 if(swipe) { |
471 if(pan->sceneDelta().x() < -0) { |
472 if(swipe->sceneHorizontalDirection() == QSwipeGesture::Right) { |
472 gestureLeft(); |
473 gestureSwipeRight(); |
473 } |
474 } else if(swipe->sceneHorizontalDirection() == QSwipeGesture::Left) { |
474 else if (pan->sceneDelta().x() > 0) { |
475 gestureSwipeLeft(); |
475 gestureRight(); |
|
476 } |
|
477 gestureEvent->accept(); |
|
478 } |
476 } |
479 } |
477 gestureEvent->accept(); |
|
478 } |
|
479 |
480 filterOutEvent = true; |
480 filterOutEvent = true; |
481 break; |
481 break; |
482 } |
482 } |
483 default: |
483 default: |
484 break; |
484 break; |
485 } |
485 } |
486 return filterOutEvent; |
486 return filterOutEvent; |
487 } |
487 } |