summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorunknown <Roopesh Chander@.(none)>2009-11-10 12:52:14 +0530
committerunknown <Roopesh Chander@.(none)>2009-11-10 12:52:14 +0530
commitd4fc90c52482661418de2d91525b6cbe85398d65 (patch)
treee993768653a906224e60c3bbee07cc6cb8db0249
parent4743c29415dfac9749e3076de96ab41fe2228e0d (diff)
refactor the animations as associated with state transitions
-rw-r--r--mainwindow.cpp119
-rw-r--r--mainwindow.h15
-rw-r--r--webscrap.h4
3 files changed, 87 insertions, 51 deletions
diff --git a/mainwindow.cpp b/mainwindow.cpp
index 446e16c..3f34eca 100644
--- a/mainwindow.cpp
+++ b/mainwindow.cpp
@@ -7,6 +7,7 @@
#include <QDebug>
#include <QWebFrame>
#include <QState>
+#include <QSignalTransition>
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "webview.h"
@@ -23,6 +24,7 @@ MainWindow::MainWindow(QWidget *parent) :
m_webView->setVisible(false);
m_browserToolbar->setVisible(false);
adjustTitle();
+ createAnimations();
m_settings = new QSettings("Nokia", "WebScraps", this);
loadSettings();
@@ -30,14 +32,23 @@ MainWindow::MainWindow(QWidget *parent) :
QState *seeScraps = new QState;
QState *browseWeb = new QState;
- connect(browseWeb, SIGNAL(entered()), m_webView, SLOT(show()));
- connect(browseWeb, SIGNAL(exited()), m_webView, SLOT(hide()));
- seeScraps->addTransition(m_gotoBrowserButton, SIGNAL(clicked()), browseWeb);
- browseWeb->addTransition(m_gotoScrapsButton, SIGNAL(clicked()), seeScraps);
m_stateMachine.addState(seeScraps);
m_stateMachine.addState(browseWeb);
m_stateMachine.setInitialState(seeScraps);
+ QSignalTransition *transitionToBrowser = seeScraps->addTransition(m_gotoBrowserButton, SIGNAL(clicked()), browseWeb);
+ QSignalTransition *transitionToScraps = browseWeb->addTransition(m_gotoScrapsButton, SIGNAL(clicked()), seeScraps);
+ QSignalTransition *transitionToScraps2 = browseWeb->addTransition(m_webView, SIGNAL(scrapAdded(QUrl,QSize,QRect,QPoint)), seeScraps);
+
+ transitionToBrowser->addAnimation(m_scrapsToBrowserAnimation);
+ transitionToScraps->addAnimation(m_browserToScrapsAnimation);
+ transitionToScraps2->addAnimation(m_browserToScrapsAnimation);
+ connect(browseWeb, SIGNAL(entered()), m_webView, SLOT(show()));
+ connect(m_browserToScrapsAnimation, SIGNAL(finished()), m_webView, SLOT(hide()));
+
+ connect(browseWeb, SIGNAL(entered()), SLOT(showBrowserToolbar()));
+ connect(seeScraps, SIGNAL(entered()), SLOT(showScrapsToolbar()));
+
seeScraps->assignProperty(this, "webTitleShown", false);
browseWeb->assignProperty(this, "webTitleShown", true);
connect(seeScraps, SIGNAL(polished()), SLOT(adjustTitle()));
@@ -74,6 +85,7 @@ void MainWindow::addScrap(QUrl url, QSize pageSize,
m_scraps << container;
container->setZValue(m_scraps.count());
bubbleUpScrap(container);
+ addScrapToAnimations(container);
}
void MainWindow::initBrowser() {
@@ -84,7 +96,6 @@ void MainWindow::initBrowser() {
connect(m_webView, SIGNAL(loadFinished(bool)), SLOT(adjustLocation()));
connect(m_webView, SIGNAL(titleChanged(const QString&)), SLOT(adjustTitle()));
connect(m_webView, SIGNAL(scrapAdded(QUrl,QSize,QRect,QPoint)), SLOT(addScrap(QUrl, QSize, QRect, QPoint)));
- connect(m_webView, SIGNAL(scrapAdded(QUrl,QSize,QRect,QPoint)), SLOT(showScraps()));
createBrowserToolbar(scene());
m_browserToolbar->setFillLevelBrush(QColor(50, 50, 200, 50));
connect(m_webView->page(), SIGNAL(loadProgress(int)), m_browserToolbar, SLOT(setFillLevel(int)));
@@ -111,7 +122,6 @@ void MainWindow::createScrapsToolbar(QGraphicsScene *scene) {
connect(m_dropDownList, SIGNAL(activated(int)), SLOT(scrapDropDownListActivated(int)));
connect(m_searchBar, SIGNAL(textChanged(QString)), SLOT(searchTextChanged(QString)));
- connect(m_gotoBrowserButton, SIGNAL(clicked()), SLOT(showBrowser()));
}
void MainWindow::createBrowserToolbar(QGraphicsScene *scene) {
@@ -148,7 +158,6 @@ void MainWindow::createBrowserToolbar(QGraphicsScene *scene) {
connect(m_selectScrapsButton, SIGNAL(clicked(bool)), m_webView, SLOT(setScrapSelectionEnabled(bool)));
connect(m_addressBar, SIGNAL(returnPressed()), SLOT(changeLocation()));
- connect(m_gotoScrapsButton, SIGNAL(clicked()), SLOT(showScraps()));
}
MainWindow::~MainWindow()
@@ -178,60 +187,63 @@ void MainWindow::adjustTitle()
setWindowTitle(title);
}
-void MainWindow::showBrowser() {
- QParallelAnimationGroup *anim = new QParallelAnimationGroup(this);
- anim->addAnimation(createScrapsAnim(Leave, anim));
- anim->addAnimation(createBrowserAnim(Enter, anim));
- anim->addAnimation(createToolbarAnim(m_scrapsToolbar, m_browserToolbar, AntiClockwise, anim));
- anim->start(QAbstractAnimation::DeleteWhenStopped);
- m_selectScrapsButton->setChecked(false);
- m_webView->setScrapSelectionEnabled(false);
- adjustTitle();
+void MainWindow::createAnimations() {
+ m_scrapsEnter = new QParallelAnimationGroup(this);
+ m_scrapsLeave = new QParallelAnimationGroup(this);
+ QAbstractAnimation *browserEnter = createBrowserAnim(Enter, this);
+ QAbstractAnimation *browserLeave = createBrowserAnim(Leave, this);
+
+ m_browserToScrapsAnimation = new QParallelAnimationGroup(this);
+ m_browserToScrapsAnimation->addAnimation(browserLeave);
+ m_browserToScrapsAnimation->addAnimation(m_scrapsEnter);
+
+ m_scrapsToBrowserAnimation = new QParallelAnimationGroup(this);
+ m_scrapsToBrowserAnimation->addAnimation(m_scrapsLeave);
+ m_scrapsToBrowserAnimation->addAnimation(browserEnter);
}
-void MainWindow::showScraps() {
- QParallelAnimationGroup *anim = new QParallelAnimationGroup(this);
- anim->addAnimation(createScrapsAnim(Enter, anim));
- anim->addAnimation(createBrowserAnim(Leave, anim));
- anim->addAnimation(createToolbarAnim(m_browserToolbar, m_scrapsToolbar, Clockwise, anim));
- anim->start(QAbstractAnimation::DeleteWhenStopped);
- adjustTitle();
+void MainWindow::addScrapToAnimations(WebScrapContainer *container) {
+ Q_ASSERT(m_scrapsEnter);
+ Q_ASSERT(m_scrapsLeave);
+
+ QPointF flyOffset = QPointF(3000, 1000);
+
+ QPropertyAnimation *enterAnim = new QPropertyAnimation(container, "pos", this);
+ enterAnim->setDuration(500 + 150 * m_scraps.count());
+ enterAnim->setEndValue(container->data(WebScrapContainer::Position).toPointF());
+ enterAnim->setEasingCurve(QEasingCurve::OutCubic);
+ m_scrapsEnter->addAnimation(enterAnim);
+
+ QPropertyAnimation *leaveAnim = new QPropertyAnimation(container, "pos", this);
+ leaveAnim->setDuration(500 + 150 * m_scraps.count());
+ leaveAnim->setEndValue(sceneRect().center() + flyOffset);
+ leaveAnim->setEasingCurve(QEasingCurve::InCubic);
+ m_scrapsLeave->addAnimation(leaveAnim);
+
+ container->setData(WebScrapContainer::EnterAnimation, qVariantFromValue(enterAnim));
+ container->setData(WebScrapContainer::LeaveAnimation, qVariantFromValue(leaveAnim));
}
-QAbstractAnimation* MainWindow::createScrapsAnim(const Movement move, QObject *parent) {
- QParallelAnimationGroup *allScrapsAnim = new QParallelAnimationGroup(parent);
- int i = 0;
- QPointF flyOffset = QPointF(3000, ((rand() % 3) - 1) * 1000);
- foreach (QGraphicsWidget *scrap, m_scraps) {
- ++i;
- QPropertyAnimation *moveAnim = new QPropertyAnimation(scrap, "pos", allScrapsAnim);
- moveAnim->setDuration(500 + 150 * (rand() % 10));
- if (move == Enter) {
- moveAnim->setEndValue(scrap->data(WebScrapContainer::Position).toPointF());
- moveAnim->setEasingCurve(QEasingCurve::OutCubic);
- }
- if (move == Leave) {
- scrap->setData(WebScrapContainer::Position, scrap->pos());
- moveAnim->setEndValue(sceneRect().center() + flyOffset);
- moveAnim->setEasingCurve(QEasingCurve::InCubic);
- }
- allScrapsAnim->addAnimation(moveAnim);
- }
- return allScrapsAnim;
+void MainWindow::removeScrapFromAnimations(WebScrapContainer *container) {
+ QPropertyAnimation *enterAnim = container->data(WebScrapContainer::EnterAnimation).value<QPropertyAnimation*>();
+ m_scrapsEnter->removeAnimation(enterAnim);
+ enterAnim->deleteLater();
+
+ QPropertyAnimation *leaveAnim = container->data(WebScrapContainer::LeaveAnimation).value<QPropertyAnimation*>();
+ m_scrapsLeave->removeAnimation(leaveAnim);
+ leaveAnim->deleteLater();
}
QAbstractAnimation* MainWindow::createBrowserAnim(const Movement move, QObject *parent) {
QPropertyAnimation *moveAnim = new QPropertyAnimation(m_webView, "pos", parent);
moveAnim->setDuration(1000);
if (move == Enter) {
- m_webView->setPos(sceneRect().topLeft() - QPointF(3000, 0));
- m_webView->show();
+ moveAnim->setStartValue(sceneRect().topLeft() - QPointF(3000, 0));
moveAnim->setEndValue(sceneRect().topLeft());
moveAnim->setEasingCurve(QEasingCurve::OutCubic);
}
if (move == Leave) {
moveAnim->setEndValue(sceneRect().topLeft() - QPointF(3000, 0));
- connect(moveAnim, SIGNAL(finished()), m_webView, SLOT(hide()));
moveAnim->setEasingCurve(QEasingCurve::InCubic);
}
return moveAnim;
@@ -292,9 +304,9 @@ void MainWindow::bubbleUpScraps(QList<QGraphicsWidget*> scraps) {
}
void MainWindow::removeSenderScrap() {
- QGraphicsWidget *scrap = 0;
+ WebScrapContainer *scrap = 0;
if (sender())
- scrap = qobject_cast<QGraphicsWidget*>(sender());
+ scrap = qobject_cast<WebScrapContainer*>(sender());
if (scrap) {
scene()->removeItem(scrap);
for (int i = 0; i < m_scraps.count(); i++) {
@@ -304,6 +316,7 @@ void MainWindow::removeSenderScrap() {
}
}
scrap->deleteLater();
+ removeScrapFromAnimations(scrap);
}
adjustTitle();
}
@@ -413,3 +426,13 @@ void MainWindow::setWebTitleShown(bool shown) {
bool MainWindow::webTitleShown() const {
return m_isWebTitleShown;
}
+
+void MainWindow::showBrowserToolbar() {
+ QAbstractAnimation *anim = createToolbarAnim(m_scrapsToolbar, m_browserToolbar, AntiClockwise, this);
+ anim->start(QAbstractAnimation::DeleteWhenStopped);
+}
+
+void MainWindow::showScrapsToolbar() {
+ QAbstractAnimation *anim = createToolbarAnim(m_browserToolbar, m_scrapsToolbar, Clockwise, this);
+ anim->start(QAbstractAnimation::DeleteWhenStopped);
+}
diff --git a/mainwindow.h b/mainwindow.h
index 6fb6209..6f3a584 100644
--- a/mainwindow.h
+++ b/mainwindow.h
@@ -10,6 +10,7 @@
#include <QComboBox>
#include <QSettings>
#include <QStateMachine>
+#include <QParallelAnimationGroup>
#include "webview.h"
#include "graphicsview.h"
#include "graphicstoolbar.h"
@@ -50,18 +51,22 @@ public:
void setWebTitleShown(bool shown);
bool webTitleShown() const;
+ void createAnimations();
+ void addScrapToAnimations(WebScrapContainer *scrapContainer);
+ void removeScrapFromAnimations(WebScrapContainer *scrapContainer);
+
public slots:
void adjustLocation();
void changeLocation();
void adjustTitle();
- void showBrowser();
- void showScraps();
void addScrap(QUrl url, QSize pageSize, QRect scrapRect, QPoint position, qreal xScale = 1.0, qreal yScale = 1.0, int refreshMins = 60);
void bubbleUpScrap(QGraphicsWidget *scrap = 0);
void removeSenderScrap();
void updateDropDownList();
void scrapDropDownListActivated(int index);
void searchTextChanged(const QString& text);
+ void showBrowserToolbar();
+ void showScrapsToolbar();
private:
Ui::MainWindow *ui;
@@ -82,6 +87,12 @@ private:
QLineEdit *m_addressBar;
QToolButton *m_selectScrapsButton, *m_addScrapButton, *m_gotoScrapsButton;
GraphicsToolBar *m_browserToolbar;
+
+ // animations
+ QParallelAnimationGroup *m_browserToScrapsAnimation, *m_scrapsToBrowserAnimation;
+ QParallelAnimationGroup *m_scrapsEnter, *m_scrapsLeave;
+ QAbstractAnimation *m_toBrowserToolbarAnimation, *m_toScrapsToolbarAnimation;
};
+Q_DECLARE_METATYPE(QPropertyAnimation*)
#endif // MAINWINDOW_H
diff --git a/webscrap.h b/webscrap.h
index 570e374..aa33c98 100644
--- a/webscrap.h
+++ b/webscrap.h
@@ -56,7 +56,9 @@ class WebScrapContainer : public QGraphicsWidget {
Q_OBJECT
public:
enum Data {
- Position = 0
+ Position = 0,
+ EnterAnimation,
+ LeaveAnimation
};
WebScrapContainer(WebScrap *scrap, QGraphicsScene *scene, qreal xScale = 1.0, qreal yScale = 1.0);
void createToolbar();