--- a/src/hbcore/gui/hbview.cpp Mon Oct 04 17:49:30 2010 +0300
+++ b/src/hbcore/gui/hbview.cpp Mon Oct 18 18:23:13 2010 +0300
@@ -38,6 +38,7 @@
#include "hbscreen_p.h"
#include "hbviewactionmanager_p.h"
#include "hbglobal_p.h"
+#include "hbevent.h"
#include <QPointer>
/*!
@@ -271,6 +272,18 @@
}
/*!
+ \internal
+ */
+void HbViewPrivate::delayedConstruction()
+{
+ //view content is drawn already on screen.Try to
+ //create the content of options menu now.
+ if (menu) {
+ HbMenuPrivate::d_ptr(menu)->delayedLayout();
+ }
+}
+
+/*!
Constructs a view with the given \a parent.
*/
HbView::HbView(QGraphicsItem *parent) :
@@ -408,8 +421,13 @@
{
Q_D(const HbView);
if (!d->toolBar) {
- HbView *that = const_cast<HbView *>(this);
- that->setToolBar(new HbToolBar);
+ HbViewPrivate* p = const_cast<HbViewPrivate*>(d);
+ p->toolBar = new HbToolBar;
+ // duplicates functionality of HbMainWindowPrivate::_q_viewToolBarChanged as a perf optimisation
+ if ( mainWindow() && mainWindow()->currentView() == this ) {
+ HbMainWindowPrivate::d_ptr(mainWindow())->addToolBarToLayout(p->toolBar);
+ }
+
}
return d->toolBar;
}
@@ -534,6 +552,9 @@
d->mLayout = 0;
}
}
+ // remove view switch effects the item might be part of
+ HbEffect::cancel(this);
+
delete d->widget;
d->widget = widget;
}
@@ -723,49 +744,53 @@
HbView::HbViewFlags originalFlags(d->mViewFlags);
d->mViewFlags = flags;
if (mainWindow()) {
-
- // Statusbar-animation
- bool statusBarAnimating = false;
- HbStatusBar *statusBar = HbMainWindowPrivate::d_ptr(mainWindow())->mStatusBar;
- if ((d->mViewFlags & HbView::ViewStatusBarHidden) && !(originalFlags & HbView::ViewStatusBarHidden)) {
+ bool isCurrentView(mainWindow()->currentView() == this);
+ if (isCurrentView) {
+ // Statusbar-animation
+ bool statusBarAnimating = false;
+ HbStatusBar *statusBar = HbMainWindowPrivate::d_ptr(mainWindow())->mStatusBar;
+ if ((d->mViewFlags & HbView::ViewStatusBarHidden) && !(originalFlags & HbView::ViewStatusBarHidden)) {
#ifdef HB_EFFECTS
HbEffect::start(statusBar, "statusbar", "disappear", this, "statusBarEffectFinished");
#endif // HB_EFFECTS
statusBarAnimating = true;
} else if (!(d->mViewFlags & HbView::ViewStatusBarHidden) && (originalFlags & HbView::ViewStatusBarHidden)) {
#ifdef HB_EFFECTS
+ statusBar->setVisible(true);
HbEffect::start(statusBar, "statusbar", "appear", this, "statusBarEffectFinished");
#endif // HB_EFFECTS
statusBarAnimating = true;
- }
+ }
- // Titlebar-animation
- bool titleBarAnimating = false;
- HbTitleBar *titleBar = HbMainWindowPrivate::d_ptr(mainWindow())->mTitleBar;
- if ((d->mViewFlags & HbView::ViewTitleBarHidden) && !(originalFlags & HbView::ViewTitleBarHidden)) {
+ // Titlebar-animation
+ bool titleBarAnimating = false;
+ HbTitleBar *titleBar = HbMainWindowPrivate::d_ptr(mainWindow())->mTitleBar;
+ if ((d->mViewFlags & HbView::ViewTitleBarHidden) && !(originalFlags & HbView::ViewTitleBarHidden)) {
#ifdef HB_EFFECTS
- HbEffect::start(titleBar, "titlebar", "disappear", this, "titleBarEffectFinished");
+ HbEffect::start(titleBar, "titlebar", "disappear", this, "titleBarEffectFinished");
#endif // HB_EFFECTS
- titleBarAnimating = true;
- } else if (!(d->mViewFlags & HbView::ViewTitleBarHidden) && (originalFlags & HbView::ViewTitleBarHidden)) {
+ titleBarAnimating = true;
+ } else if (!(d->mViewFlags & HbView::ViewTitleBarHidden) && (originalFlags & HbView::ViewTitleBarHidden)) {
#ifdef HB_EFFECTS
- HbEffect::start(titleBar, "titlebar", "appear", this, "titleBarEffectFinished");
+ titleBar->setVisible(true);
+ HbEffect::start(titleBar, "titlebar", "appear", this, "titleBarEffectFinished");
#endif // HB_EFFECTS
- titleBarAnimating = true;
- }
+ titleBarAnimating = true;
+ }
- if (!statusBarAnimating) {
- statusBar->setVisible(!(d->mViewFlags & HbView::ViewStatusBarHidden));
- statusBar->propertiesChanged();
- }
- if (!titleBarAnimating) {
- titleBar->setVisible(!(d->mViewFlags & HbView::ViewTitleBarHidden));
- if (d->mNavigationActionSet) {
- titleBar->setNavigationAction(d->mNavigationAction);
- } else {
- titleBar->setDefaultNavigationAction();
+ if (!statusBarAnimating && !titleBarAnimating) {
+ statusBar->setVisible(!(d->mViewFlags & HbView::ViewStatusBarHidden));
+ statusBar->propertiesChanged();
}
- titleBar->propertiesChanged();
+ if (!titleBarAnimating && !statusBarAnimating) {
+ titleBar->setVisible(!(d->mViewFlags & HbView::ViewTitleBarHidden));
+ if (d->mNavigationActionSet) {
+ titleBar->setNavigationAction(d->mNavigationAction);
+ } else {
+ titleBar->setDefaultNavigationAction();
+ }
+ titleBar->propertiesChanged();
+ }
}
if (d->toolBar) {
d->toolBar->updatePrimitives();
@@ -793,7 +818,7 @@
int visibilityFlags = HbView::ViewTitleBarMinimized | HbView::ViewTitleBarFloating
| HbView::ViewTitleBarMinimizable | HbView::ViewStatusBarHidden | HbView::ViewStatusBarFloating
| HbView::ViewTitleBarHidden | HbView::ViewDisableRelayout;
- if ((d->mViewFlags & visibilityFlags) != (originalFlags & visibilityFlags)) {
+ if (isCurrentView && (d->mViewFlags & visibilityFlags) != (originalFlags & visibilityFlags)) {
HbMainWindowPrivate::d_ptr(mainWindow())->mClippingItem->decoratorVisibilityChanged();
}
}
@@ -810,8 +835,9 @@
void HbView::setTitleBarVisible(bool visible)
{
Q_D(HbView);
- if (visible) {
- setViewFlags(d->mViewFlags &~ HbView::ViewTitleBarHidden);
+
+ if (visible) {
+ setViewFlags(d->mViewFlags &~ HbView::ViewTitleBarHidden);
} else {
setViewFlags(d->mViewFlags | HbView::ViewTitleBarHidden);
}
@@ -891,6 +917,7 @@
*/
void HbView::changeEvent(QEvent *event)
{
+ Q_D(const HbView);
// We're listening for layout direction changes, because the screen needs to be
// repolished, if the layout direction changes and the titlebar is minimizable.
@@ -903,6 +930,11 @@
if (mw && mw->currentView() == this) {
HbMainWindowPrivate::d_ptr(mw)->mClippingItem->decoratorVisibilityChanged();
}
+ } else if(event->type() == HbEvent::ThemeChanged) {
+ HbMainWindow *mw = mainWindow();
+ if (d->toolBar && mw && mw->currentView() != this) {
+ d->toolBar->changeEvent(event);
+ }
}
HbWidget::changeEvent(event);
@@ -1029,6 +1061,9 @@
Ownership of \a action is not taken.
+ \note The navigation button will not display text that is assigned to the
+ action.
+
\sa navigationAction()
*/
void HbView::setNavigationAction(HbAction *action)