diff -r 2d44f6561e72 -r 2d2b5e3c59a7 QTfrontend/hwform.cpp --- a/QTfrontend/hwform.cpp Fri Nov 25 23:22:35 2011 +0300 +++ b/QTfrontend/hwform.cpp Sat Nov 26 00:45:00 2011 -0500 @@ -40,6 +40,8 @@ #include #include #include +#include +#include #include "hwform.h" #include "game.h" @@ -544,32 +546,101 @@ void HWForm::GoToPage(int id) { + bool stopAnim = false; + int lastid = ui.Pages->currentIndex(); PagesStack.push(ui.Pages->currentIndex()); + OnPageShown(id, lastid); ui.Pages->setCurrentIndex(id); + + if (id == ID_PAGE_DRAWMAP) + stopAnim = true; + + if (frontendEffects && !stopAnim) + { + /**Start animation :**/ + + QGraphicsOpacityEffect *effectNew = new QGraphicsOpacityEffect(ui.Pages->widget(id)); + ui.Pages->widget(id)->setGraphicsEffect(effectNew); + + QGraphicsOpacityEffect *effectLast = new QGraphicsOpacityEffect(ui.Pages->widget(lastid)); + ui.Pages->widget(lastid)->setGraphicsEffect(effectLast); + + //New page animation + animationNewSlide = new QPropertyAnimation(ui.Pages->widget(id), "pos"); + animationNewSlide->setDuration(500); + animationNewSlide->setStartValue(QPoint(width()/2, 0)); + animationNewSlide->setEndValue(QPoint(0, 0)); + animationNewSlide->setEasingCurve(QEasingCurve::OutCubic); + animationNewSlide->start(); + + animationNewOpacity = new QPropertyAnimation(effectNew, "opacity"); + animationNewOpacity->setDuration(500); + animationNewOpacity->setStartValue(0.01); + animationNewOpacity->setEndValue(1); + animationNewOpacity->setEasingCurve(QEasingCurve::OutCubic); + animationNewOpacity->start(); + + //Last page animation + ui.Pages->widget(lastid)->setHidden(false); + + animationOldSlide = new QPropertyAnimation(ui.Pages->widget(lastid), "pos"); + animationOldSlide->setDuration(500); + animationOldSlide->setStartValue(QPoint(0, 0)); + animationOldSlide->setEndValue(QPoint(-width()/2, 0)); + animationOldSlide->setEasingCurve(QEasingCurve::OutCubic); + animationOldSlide->start(); + + animationOldOpacity = new QPropertyAnimation(effectLast, "opacity"); + animationOldOpacity->setDuration(500); + animationOldOpacity->setStartValue(1); + animationOldOpacity->setEndValue(0.01); + animationOldOpacity->setEasingCurve(QEasingCurve::OutCubic); + animationOldOpacity->start(); + + connect(animationOldSlide, SIGNAL(finished()), ui.Pages->widget(lastid), SLOT(hide())); + } } void HWForm::GoBack() { + bool stopAnim = false; int curid = ui.Pages->currentIndex(); if (curid == ID_PAGE_MAIN) + { + stopAnim = true; exit(); + } int id = PagesStack.isEmpty() ? ID_PAGE_MAIN : PagesStack.pop(); ui.Pages->setCurrentIndex(id); OnPageShown(id, curid); if (id == ID_PAGE_CONNECTING) + { + stopAnim = true; GoBack(); + } if (id == ID_PAGE_NETSERVER) + { + stopAnim = true; GoBack(); + } if ((!hwnet) && (id == ID_PAGE_ROOMSLIST)) + { + stopAnim = true; GoBack(); + } + if (curid == ID_PAGE_DRAWMAP) + stopAnim = true; if ((!hwnet) || (!hwnet->isInRoom())) if (id == ID_PAGE_NETGAME || id == ID_PAGE_NETGAME) + { + stopAnim = true; GoBack(); + } if (curid == ID_PAGE_ROOMSLIST || curid == ID_PAGE_CONNECTING) NetDisconnect(); if (curid == ID_PAGE_NETGAME && hwnet && hwnet->isInRoom()) hwnet->partRoom(); @@ -578,6 +649,55 @@ if (curid == ID_PAGE_SCHEME) ammoSchemeModel->Save(); + + /**Start animation :**/ + + if (curid != 0 && frontendEffects && !stopAnim) + { + + QGraphicsOpacityEffect *effectNew = new QGraphicsOpacityEffect(ui.Pages->widget(id)); + effectNew->setOpacity(1); + ui.Pages->widget(id)->setGraphicsEffect(effectNew); + + QGraphicsOpacityEffect *effectLast = new QGraphicsOpacityEffect(ui.Pages->widget(curid)); + ui.Pages->widget(curid)->setGraphicsEffect(effectLast); + + //Last page animation + animationOldSlide = new QPropertyAnimation(ui.Pages->widget(id), "pos"); + animationOldSlide->setDuration(500); + animationOldSlide->setStartValue(QPoint(-width()/2, 0)); + animationOldSlide->setEndValue(QPoint(0, 0)); + animationOldSlide->setEasingCurve(QEasingCurve::OutCubic); + animationOldSlide->start(); + + animationOldOpacity = new QPropertyAnimation(effectLast, "opacity"); + animationOldOpacity->setDuration(500); + animationOldOpacity->setStartValue(1); + animationOldOpacity->setEndValue(0.01); + animationOldOpacity->setEasingCurve(QEasingCurve::OutCubic); + animationOldOpacity->start(); + + //New page animation + ui.Pages->widget(curid)->setHidden(false); + + animationNewSlide = new QPropertyAnimation(ui.Pages->widget(curid), "pos"); + animationNewSlide->setDuration(500); + animationNewSlide->setStartValue(QPoint(0, 0)); + animationNewSlide->setEndValue(QPoint(width()/2, 0)); + animationNewSlide->setEasingCurve(QEasingCurve::OutCubic); + animationNewSlide->start(); + + animationNewOpacity = new QPropertyAnimation(effectNew, "opacity"); + animationNewOpacity->setDuration(500); + animationNewOpacity->setStartValue(0.01); + animationNewOpacity->setEndValue(1); + animationNewOpacity->setEasingCurve(QEasingCurve::OutCubic); + animationNewOpacity->start(); + + connect(animationNewSlide, SIGNAL(finished()), ui.Pages->widget(curid), SLOT(hide())); + } + + } void HWForm::OpenSnapshotFolder()