From cdc1419bf4b010ee9b820956e284f372423fc585 Mon Sep 17 00:00:00 2001 From: Adriano Rezende Date: Fri, 27 Nov 2009 11:56:20 -0300 Subject: HyperUI: Adjusted menu to keep dialer alive --- hyperui/menuview.cpp | 6 +++++- hyperui/menuview.h | 3 +++ hyperui/pageview.cpp | 8 ++++++-- hyperui/pageview.h | 3 ++- 4 files changed, 16 insertions(+), 4 deletions(-) diff --git a/hyperui/menuview.cpp b/hyperui/menuview.cpp index fa34193..4eda89d 100644 --- a/hyperui/menuview.cpp +++ b/hyperui/menuview.cpp @@ -84,6 +84,10 @@ MenuView::MenuView(QGraphicsItem *parent) m_mainIconIPos, SLOT(onPhoneClicked())); createStateMachine(); + + // keep always alive to reduce transition time + m_phoneView = new PhoneView(); + m_phoneView->setParent(this); } Button *MenuView::addIcon(const QPixmap &pixmap, const QPointF &pos, @@ -100,7 +104,7 @@ Button *MenuView::addIcon(const QPixmap &pixmap, const QPointF &pos, void MenuView::onPhoneClicked() { - pageView()->add(new PhoneView()); + pageView()->add(m_phoneView, true); } void MenuView::createStateMachine() diff --git a/hyperui/menuview.h b/hyperui/menuview.h index 7c73d82..d557816 100644 --- a/hyperui/menuview.h +++ b/hyperui/menuview.h @@ -34,6 +34,7 @@ #include "view.h" +class PhoneView; class QAbstractAnimation; @@ -68,6 +69,8 @@ protected: Button *m_btnCamera; Button *m_btnPhone; + PhoneView *m_phoneView; + void createStateMachine(); QAbstractAnimation *createInOutAnimation(bool out); diff --git a/hyperui/pageview.cpp b/hyperui/pageview.cpp index 1d2c25f..3f3812d 100644 --- a/hyperui/pageview.cpp +++ b/hyperui/pageview.cpp @@ -138,12 +138,13 @@ PageView::PageView(QGraphicsItem *parent) m_newSlot->setPos(0, m_topOffset); } -bool PageView::add(View *view) +bool PageView::add(View *view, bool keepAlive) { if (!view || isAnimating()) return false; view->setPageView(this); + m_keepAlive[view] = keepAlive; if (m_views.isEmpty()) { m_views.push(view); @@ -200,7 +201,10 @@ void PageView::transitionFinished() if (m_isBack) { m_oldSlot->setContents(0); - delete oldView; + bool keepAlive = m_keepAlive[oldView]; + m_keepAlive.remove(oldView); + if (!keepAlive) + delete oldView; } else { oldView->hide(); m_views.push(newView); diff --git a/hyperui/pageview.h b/hyperui/pageview.h index 1a6b82e..130e9eb 100644 --- a/hyperui/pageview.h +++ b/hyperui/pageview.h @@ -49,7 +49,7 @@ class PageView : public QGraphicsWidget public: PageView(QGraphicsItem *parent = 0); - bool add(View *view); + bool add(View *view, bool keepAlive = false); bool back(); bool isAnimating() const; @@ -71,6 +71,7 @@ private: bool m_isAnimating; QStack m_views; + QHash m_keepAlive; PageMenu *m_menu; Button *m_backButton; -- cgit v1.2.3