diff -r 11d3954df52a -r 627c4a0fd0e7 src/hbcore/gui/hbpopup.cpp --- a/src/hbcore/gui/hbpopup.cpp Thu May 27 13:10:59 2010 +0300 +++ b/src/hbcore/gui/hbpopup.cpp Fri Jun 11 13:58:22 2010 +0300 @@ -281,7 +281,9 @@ preferredPosSet(false), mStartEffect(false), mScreenMargin(0.0), + mAutoLayouting(true), mVgMaskEffect(0), + mOrientationEffectHide(false), timeoutTimerInstance(0) { } @@ -358,16 +360,33 @@ hidingInProgress = false; } -void HbPopupPrivate::_q_orientationChange(Qt::Orientation orient, bool animate) +void HbPopupPrivate::_q_orientationAboutToChange(Qt::Orientation orient, bool animate) { - Q_UNUSED(orient); - if (animate) { + Q_UNUSED(orient); Q_Q(HbPopup); - HbEffect::start(q, "HB_POPUP", "orientationswitch"); + if (animate && q->isVisible()) { + HbEffect::start(q, "HB_POPUP", "orient_disappear"); + mOrientationEffectHide = true; } +} + +#endif // HB_EFFECTS +void HbPopupPrivate::_q_orientationChanged() +{ + Q_Q(HbPopup); + if (q->isVisible()) { + QEvent userEvent(QEvent::ContextMenu); + QCoreApplication::sendEvent(q, &userEvent); + } +#ifdef HB_EFFECTS + if (mOrientationEffectHide) { + HbEffect::cancel(q); + HbEffect::start(q, "HB_POPUP", "orient_appear"); + mOrientationEffectHide = false; + } +#endif } -#endif // HB_EFFECTS void HbPopupPrivate::_q_timeoutFinished() { @@ -514,8 +533,13 @@ } if (hasEffects ) { hasEffects = HbEffectInternal::add("HB_POPUP", - "dialog_rotate", - "orientationswitch"); + "popup_orient_disappear", + "orient_disappear"); + } + if (hasEffects ) { + hasEffects = HbEffectInternal::add("HB_POPUP", + "popup_orient_appear", + "orient_appear"); } #endif } @@ -792,7 +816,10 @@ { Q_D(HbPopup); - /*if (change == QGraphicsItem::ItemVisibleHasChanged) { + if (change == QGraphicsItem::ItemPositionChange) { + d->mAutoLayouting = false; + } + if (change == QGraphicsItem::ItemVisibleHasChanged) { if (value.toBool()) { if(d->hasEffects && boundingRect().isValid()) { @@ -801,6 +828,7 @@ -boundingRect().height(), boundingRect().width(), 0); + HbEffect::cancel(this); HbEffect::start(this, d->effectType, "appear", 0, 0, QVariant(), extRect); #endif//HB_EFFECTS d->mStartEffect = false; @@ -808,7 +836,7 @@ d->mStartEffect = true; } } - }*/ + } if (change == QGraphicsItem::ItemVisibleChange) { if (value.toBool()) { @@ -837,6 +865,7 @@ -boundingRect().height(), boundingRect().width(), 0); + HbEffect::cancel(this); if (!HbEffect::start(this, d->effectType, "disappear", this, "_q_delayedHide", QVariant(), extRect)) { @@ -856,9 +885,12 @@ } else if (change == QGraphicsItem::ItemSceneHasChanged) { HbMainWindow* w(mainWindow()); if ( w ){ + disconnect(this, SLOT(_q_orientationAboutToChange(Qt::Orientation, bool))); + connect( w, SIGNAL(aboutToChangeOrientation(Qt::Orientation, bool)), + this, SLOT(_q_orientationAboutToChange(Qt::Orientation, bool)) ); disconnect(this, SLOT(handlePopupPos())); connect( w, SIGNAL(orientationChanged(Qt::Orientation)), - this, SLOT(handlePopupPos()) ); + this, SLOT(_q_orientationChanged()) ); } } return HbWidget::itemChange(change, value); @@ -869,8 +901,9 @@ */ void HbPopup::handlePopupPos() { + //Not used inside hbpopup, deprecate this(?) QEvent userEvent(QEvent::ContextMenu); - QCoreApplication::sendEvent(this, &userEvent); + QCoreApplication::sendEvent(this, &userEvent); } /*! @@ -1041,7 +1074,7 @@ */ bool HbPopup::event(QEvent *event) { -/* Q_D(HbPopup); + Q_D(HbPopup); if (event->type() == QEvent::LayoutRequest) { //Workaround when showing first time #ifdef HB_EFFECTS @@ -1052,17 +1085,12 @@ -boundingRect().height(), boundingRect().width(), 0); + HbEffect::cancel(this); HbEffect::start(this, d->effectType, "appear", 0, 0, QVariant(), extRect); - qDebug() << "effect start"; } #endif//HB_EFFECTS //workaround ends - } - qDebug() << "event: " << event;*/ - /*Q_D(HbPopup); - if (event->type() == QEvent::LayoutDirectionChange) { - d->calculateShape(); - }*/ + } return HbWidget::event(event); } @@ -1070,15 +1098,18 @@ Sets preferred position\a position for popup with \a placement as origin. + By default popup is placed in the middle of the screen. If other positions are needed please + ensure that the preferred position is working properly with different screen sizes. + \param position is the position at which the popup is shown. \param placement is the corner or edge which \a position refers to Example usage: \code - HbDialog popup; + HbPopup *popup = new HbPopup(); ... - popup.setPreferredPosition( QPointF(x,y), HbPopupBase::BottomEdgeCenter ); - popup.show(); + popup->setPreferredPosition( QPointF(x,y), HbPopupBase::BottomEdgeCenter ); + popup->show(); \endcode */ @@ -1099,7 +1130,8 @@ d->preferredPosSet = true; //If position updated, informing layoutproxy with layoutrequest if (layoutFlag) { - QApplication::sendEvent(this, new QEvent(QEvent::LayoutRequest)); + QEvent layoutRequest = QEvent::LayoutRequest; + QApplication::sendEvent(this, &layoutRequest); } }