diff -r e4f038c420f7 -r 3ac3aaebaee5 homescreenapp/stateplugins/hshomescreenstateplugin/src/hsidlestate.cpp --- a/homescreenapp/stateplugins/hshomescreenstateplugin/src/hsidlestate.cpp Mon Sep 13 13:03:23 2010 +0300 +++ b/homescreenapp/stateplugins/hshomescreenstateplugin/src/hsidlestate.cpp Mon Sep 20 10:19:07 2010 +0300 @@ -228,7 +228,12 @@ QState *state_waitInput = new QState(this); setInitialState(state_waitInput); + QState *state_moveWidget = new QState(this); + QState *state_moveWidgetMoving = new QState(state_moveWidget); + QState *state_moveWidgetDelete = new QState(state_moveWidget); + state_moveWidget->setInitialState(state_moveWidgetMoving); + QState *state_moveScene = new QState(this); HsWallpaperSelectionState *state_wallpaperSelectionState = new HsWallpaperSelectionState(this); @@ -252,7 +257,11 @@ state_waitInput->addTransition( this, SIGNAL(event_moveWidget()), state_moveWidget); - state_moveWidget->addTransition( + state_moveWidgetMoving->addTransition( + this, SIGNAL(event_waitInput()), state_waitInput); + state_moveWidgetMoving->addTransition( + this, SIGNAL(event_MoveWidgetDelete()), state_moveWidgetDelete); + state_moveWidgetDelete->addTransition( this, SIGNAL(event_waitInput()), state_waitInput); state_moveScene->addTransition( @@ -298,14 +307,16 @@ ENTRY_ACTION(state_moveWidget, action_moveWidget_connectGestureHandlers) ENTRY_ACTION(state_moveWidget, action_moveWidget_connectOrientationChangeEventHandler) ENTRY_ACTION(state_moveWidget, action_moveWidget_setWidgetSnap) - EXIT_ACTION(state_moveWidget, action_moveWidget_reparentToPage) EXIT_ACTION(state_moveWidget, action_moveWidget_startWidgetDropEffect) + EXIT_ACTION(state_moveWidget, action_moveWidget_disableInteractive) EXIT_ACTION(state_moveWidget, action_moveWidget_disconnectGestureHandlers) EXIT_ACTION(state_moveWidget, action_moveWidget_disconnectOrientationChangeEventHandler) EXIT_ACTION(state_moveWidget, action_moveWidget_preventZoneAnimation) EXIT_ACTION(state_moveWidget, action_moveWidget_deleteWidgetSnap) + ENTRY_ACTION(state_moveWidgetDelete, action_moveWidgetDelete_deleteWidgetOnTrashbin) + ENTRY_ACTION(state_moveScene, action_moveScene_connectGestureHandlers) EXIT_ACTION(state_moveScene, action_moveScene_moveToNearestPage) EXIT_ACTION(state_moveScene, action_moveScene_disconnectGestureHandlers) @@ -335,7 +346,9 @@ */ void HsIdleState::startPageChangeAnimation(int targetPageIndex, int duration) { - hbInstance->allMainWindows().first()->setInteractive(false); + if (!HsScene::instance()->activeWidget()) { + hbInstance->allMainWindows().first()->setInteractive(false); + } HsPropertyAnimationWrapper *animation = HsGui::instance()->pageChangeAnimation(); if (animation->isRunning()) { animation->stop(); @@ -615,7 +628,6 @@ void HsIdleState::onWidgetTapStarted(QPointF point, HsWidgetHost *widget) { HsScene *scene = HsScene::instance(); - scene->setActiveWidget(widget); HsPage *page = scene->activePage(); QMetaObject::invokeMethod(page, "updateZValues", Qt::QueuedConnection); HbVkbHost::HbVkbStatus status = HbVkbHostBridge::instance()->keypadStatus(); @@ -712,7 +724,7 @@ { Q_UNUSED(scenePos) Q_UNUSED(widget) - emit event_waitInput(); + emit event_MoveWidgetDelete(); } /*! @@ -765,6 +777,7 @@ void HsIdleState::action_idle_orientationChanged() { HsScene::instance()->activePage()->resetNewWidgets(); + stopPageChangeAnimations(); action_idle_showActivePage(); } @@ -1041,7 +1054,6 @@ HsGui::instance()->pageCrawlingAnimation(); if (pageCrawlingAnimation->isRunning()&& pageCrawlingAnimation->isForward()) { - pageCrawlingAnimation->setDuration(HSCONFIGURATION_GET(pageChangeZoneReverseAnimationDuration)); pageCrawlingAnimation->setBackward(); } @@ -1049,13 +1061,8 @@ HsScene *scene = HsScene::instance(); HsPage *page = scene->activePage(); HsWidgetHost *widget = scene->activeWidget(); - - if (HsGui::instance()->idleWidget()->trashBin()->isUnderMouse()) { - HbInstantFeedback::play(HSCONFIGURATION_GET(widgetDropToTrashbinFeedbackEffect)); - widget->page()->removeWidget(widget); - widget->remove(); - scene->setActiveWidget(0); - } else { + + if (widget) { if (widget->page() != page) { widget->page()->removeWidget(widget); page->addExistingWidget(widget); @@ -1080,11 +1087,30 @@ widget->savePresentation(); page->updateZValues(); + + widget->visual()->setParentItem(HsScene::instance()->activePage()->visual()); } + HsGui::instance()->idleWidget()->showPageIndicator(); + + emit event_waitInput(); +} + - widget->visual()->setParentItem(HsScene::instance()->activePage()->visual()); +/*! + Reparents the active widget to the active page. +*/ +void HsIdleState::action_moveWidgetDelete_deleteWidgetOnTrashbin() +{ + HsScene *scene = HsScene::instance(); + HsWidgetHost *widget = scene->activeWidget(); - HsGui::instance()->idleWidget()->showPageIndicator(); + if ( widget && HsGui::instance()->idleWidget()->trashBin()->isUnderMouse() ) { + HbInstantFeedback::play(HSCONFIGURATION_GET(widgetDropToTrashbinFeedbackEffect)); + widget->page()->removeWidget(widget); + widget->remove(); + scene->setActiveWidget(0); + } + emit event_waitInput(); } /*! @@ -1099,6 +1125,21 @@ } /*! + Set interactive to false. +*/ +void HsIdleState::action_moveWidget_disableInteractive() +{ + HsWidgetHost *widget = HsScene::instance()->activeWidget(); + if (widget) { + HsPropertyAnimationWrapper *animation = HsGui::instance()->pageChangeAnimation(); + if (animation->isRunning()) { + hbInstance->allMainWindows().first()->setInteractive(false); + } + HsScene::instance()->setActiveWidget(0); + } +} + +/*! Disconnects gesture handlers */ void HsIdleState::action_moveWidget_disconnectGestureHandlers() @@ -1512,3 +1553,24 @@ } return isWidgetEditor; } + +/*! + Stops page change and page crawling animations. +*/ +void HsIdleState::stopPageChangeAnimations() +{ + HsPropertyAnimationWrapper *animation = HsGui::instance()->pageChangeAnimation(); + if (animation->isRunning()) { + animation->stop(); + hbInstance->allMainWindows().first()->setInteractive(true); + } + animation->disconnect(this); + + HsPropertyAnimationWrapper *pageCrawlingAnimation = + HsGui::instance()->pageCrawlingAnimation(); + + if (pageCrawlingAnimation->isRunning()) { + pageCrawlingAnimation->stop(); + } +} +