ginebra2/ViewStack.cpp
changeset 0 1450b09d0cfd
child 3 0954f5dd2cd0
child 5 0f2326c2a325
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ginebra2/ViewStack.cpp	Tue May 04 12:39:35 2010 +0300
@@ -0,0 +1,331 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+#include "Utilities.h"
+#include <QtCore/QUrl>
+#include "ViewStack.h"
+#include "ViewController.h"
+#include "ChromeWidget.h"
+#include "webpagecontroller.h"
+#include "HistoryFlowView.h"
+#include "BookmarksTreeView.h"
+#include "BookMarksHistoryView.h"
+#include "WindowFlowView.h"
+
+namespace GVA {
+
+static const QString KBookmarkHistoryViewName = "BookmarkHistoryView";
+static const QString KBookmarkTreeViewName = "BookmarkTreeView";
+static const QString KGoAnywhereViewName = "GoAnywhereView";
+static const QString KWebViewName = "WebView";
+static const QString KWindowViewName = "WindowView";
+static const QString KHistoryViewName = "HistoryView";
+static const QString KSettingsViewName = "SettingsView";
+
+
+ViewStack* ViewStack::getSingleton()
+{
+    static ViewStack* singleton = 0;
+    if(!singleton)
+    {
+        singleton = new ViewStack;
+        singleton->setObjectName("ViewStack");
+    } // if(! singleton)
+
+    assert(singleton);
+    return singleton;
+}
+
+void ViewStack::fromWindowView(const QString &to)
+{
+    emit (deActivateWindowView());
+
+    //m_chromeView->setViewofCurrentPage();
+
+    WRT::WindowFlowView* windowView = static_cast<WRT::WindowFlowView *>(m_viewController->view(KWindowViewName));
+
+    disconnect(windowView, SIGNAL(ok(WrtBrowserContainer*)), this, SLOT(goBackFromWindowView()));
+    disconnect(windowView, SIGNAL(addPageComplete()), this, SLOT(goBackFromWindowView()));
+    disconnect(windowView, SIGNAL(centerIndexChanged(int)), this, SIGNAL(pageChanged(int)));
+
+    m_viewController->showContent(to);
+}
+
+void ViewStack::fromSettingsView(const QString &to)  // goto WebView
+{
+    emit (deActivateSettingsView());    
+    emit (currentViewChanged());
+    m_viewController->showContent(to);
+}
+
+void ViewStack::fromGoAnywhereView(const QString &to)
+{
+    WRT::HistoryFlowView* historyView = static_cast<WRT::HistoryFlowView*>(m_viewController->view(KHistoryViewName));
+    WRT::BookmarksTreeView* bookmarkTreeView = static_cast<WRT::BookmarksTreeView *>(m_viewController->view(KBookmarkTreeViewName));
+    WRT::BookmarksHistoryView* bookmarkHistoryView = static_cast<WRT::BookmarksHistoryView *>(m_viewController->view(KBookmarkHistoryViewName));
+
+    disconnect(historyView, SIGNAL(ok(int)), this, SLOT(loadHistoryItem(int)));
+    disconnect(bookmarkTreeView, SIGNAL(openUrl(const QUrl &)), this, SLOT(goBackFromGoAnywhereView()));
+    disconnect(bookmarkHistoryView, SIGNAL(openUrl(const QUrl &)), this, SLOT(goBackFromGoAnywhereView()));
+
+    m_viewController->showContent(to);
+
+    disconnect(bookmarkTreeView, SIGNAL(activated()), this, SIGNAL(activateBookmark()));
+    disconnect(bookmarkTreeView, SIGNAL(deactivated()), this, SIGNAL(deActivateBookmark()));
+    disconnect(historyView, SIGNAL(activated()), this, SIGNAL(activateHistory()));
+    disconnect(historyView, SIGNAL(deactivated()), this, SIGNAL(deActivateHistory()));
+    disconnect(bookmarkHistoryView, SIGNAL(activated()), this, SIGNAL(activateBookMarkHistory()));
+    disconnect(bookmarkHistoryView, SIGNAL(deactivated()), this, SIGNAL(deActivateBookMarkHistory()));
+}
+
+void ViewStack::fromWebView(const QString &to)
+{
+    m_viewController->showContent(to);
+    emit (deActivateWebView());
+}
+
+
+void ViewStack::fromBookmarkTreeView(const QString &to)
+{
+    //m_viewController->showContent(to);
+    //WRT::BookmarksTreeView* bookmarkTreeView = static_cast<WRT::BookmarksTreeView *>(m_viewController->view(KBookmarkTreeViewName));
+
+    //disconnect(bookmarkTreeView, SIGNAL(openUrl(const QUrl &)), this, SLOT(goBackFromBookmarkView()));
+    m_viewController->viewChanged();
+    
+    emit(deActivateBookmark());
+}
+
+
+void ViewStack::fromBookmarkHistoryView(const QString &to)
+{
+    //m_viewController->showContent(to);
+    //WRT::BookmarksHistoryView* bookmarkHistoryView = static_cast<WRT::BookmarksHistoryView *>(m_viewController->view(KBookmarkHistoryViewName));
+
+    //disconnect(bookmarkHistoryView, SIGNAL(openUrl(const QUrl &)), this, SLOT(goBackFromRecentUrlView()));
+    m_viewController->viewChanged();
+
+    emit(deActivateBookMarkHistory());
+}
+
+void ViewStack::toGoAnywhereView()
+{
+    emit (activateHistory()); // by default go to history view
+
+    /* Connect ALL of goAnywhere's signals in one shot */
+
+    WRT::HistoryFlowView* historyView = static_cast<WRT::HistoryFlowView*>(m_viewController->view(KHistoryViewName));
+    WRT::BookmarksTreeView* bookmarkTreeView = static_cast<WRT::BookmarksTreeView *>(m_viewController->view(KBookmarkTreeViewName));
+    WRT::BookmarksHistoryView* bookmarkHistoryView = static_cast<WRT::BookmarksHistoryView *>(m_viewController->view(KBookmarkHistoryViewName));
+
+    safe_connect(historyView, SIGNAL(ok(int)), this, SLOT(loadHistoryItem(int)))
+    safe_connect(bookmarkTreeView, SIGNAL(openUrl(const QUrl &)), this, SLOT(goBackFromGoAnywhereView()))
+    safe_connect(bookmarkHistoryView, SIGNAL(openUrl(const QUrl &)), this, SLOT(goBackFromGoAnywhereView()));
+    safe_connect(bookmarkTreeView, SIGNAL(activated()), this, SIGNAL(activateBookmark()));
+    safe_connect(bookmarkTreeView, SIGNAL(deactivated()), this, SIGNAL(deActivateBookmark()));
+    safe_connect(historyView, SIGNAL(activated()), this, SIGNAL(activateHistory()));
+    safe_connect(historyView, SIGNAL(deactivated()), this, SIGNAL(deActivateHistory()));
+    safe_connect(bookmarkHistoryView, SIGNAL(activated()), this, SIGNAL(activateBookMarkHistory()));
+    safe_connect(bookmarkHistoryView, SIGNAL(deactivated()), this, SIGNAL(deActivateBookMarkHistory()));
+}
+
+void  ViewStack::initWindowView()
+{
+    /*
+    int width = m_chromeView->size().width();
+    int height = m_chromeView->size().height();
+    // FIXME: the snippet id is hardcode
+    ChromeSnippet* visibleSnippet = m_chromeView->getChromeWidget()->getSnippet("StatusBarChromeId");
+    if (visibleSnippet)
+        height -= (int) (visibleSnippet->rect().height()); 
+
+    visibleSnippet = m_chromeView->getChromeWidget()->getSnippet("WebViewToolbarId");
+    if (visibleSnippet)
+        height -= (int) (visibleSnippet->rect().height()); 
+
+    if (m_chromeView->displayMode() ==  ChromeView::DisplayModePortrait) {
+        visibleSnippet = m_chromeView->getChromeWidget()->getSnippet("WindowCountBarId");
+        if (visibleSnippet)
+            height -= (int) (visibleSnippet->rect().height()); 
+    }
+    QSize windowViewSize(100,100);
+    WRT::WindowFlowView* windowView = static_cast<WRT::WindowFlowView *>(m_viewController->view(KWindowViewName));
+    windowView->setSize(windowViewSize);
+*/
+}
+
+
+void ViewStack::toWindowView()
+{
+    emit(activateWindowView());
+
+    WRT::WindowFlowView* windowView = static_cast<WRT::WindowFlowView *>(m_viewController->view(KWindowViewName));
+
+    safe_connect(windowView, SIGNAL(ok(WrtBrowserContainer*)), this, SLOT(goBackFromWindowView()));
+    safe_connect(windowView, SIGNAL(addPageComplete()), this, SLOT(goBackFromWindowView()));
+    safe_connect(windowView, SIGNAL(centerIndexChanged(int)), this, SIGNAL(pageChanged(int)));
+}
+
+void  ViewStack::initSettingsView()
+{
+}
+
+void ViewStack::toSettingsView()
+{
+    emit(activateSettingsView());    
+    emit(currentViewChanged());
+}
+
+void ViewStack::toWebView()
+{
+    emit (activateWebView());
+}
+
+void ViewStack::toBookmarkHistoryView()
+{
+    emit(activateBookMarkHistory());
+
+    m_viewController->viewChanged();
+    //WRT::BookmarksHistoryView* bookmarkHistoryView = static_cast<WRT::BookmarksHistoryView *>(m_viewController->view(KBookmarkHistoryViewName));
+
+    //safe_connect(bookmarkHistoryView, SIGNAL(openUrl(const QUrl &)), this, SLOT(goBackFromRecentUrlView()));
+}
+
+void ViewStack::toBookmarkView()
+{
+    emit(activateBookmark());
+    
+    m_viewController->viewChanged();
+
+    //WRT::BookmarksTreeView* bookmarkTreeView = static_cast<WRT::BookmarksTreeView *>(m_viewController->view(KBookmarkTreeViewName));
+
+    //safe_connect(bookmarkTreeView, SIGNAL(openUrl(const QUrl &)), this, SLOT(goBackFromBookmarkView()));
+}
+
+
+void ViewStack::switchView(const QString &to, const QString &from) {
+    qDebug() << "ViewStack::switchView: " << to << " " << from;
+
+    if (to == from) {
+        return;
+    }
+    if (!m_viewController) {
+        return;
+    }
+
+    if (from == KWindowViewName) {
+        fromWindowView(to);
+    }
+    else if (from == KGoAnywhereViewName) {
+        fromGoAnywhereView(to);
+    }
+    else if (from == KWebViewName) {
+       if (to == KWindowViewName)
+           initWindowView(); // to fix the size issue of windows view
+       fromWebView(to);
+    }
+    else if (from == KBookmarkHistoryViewName) {
+        fromBookmarkHistoryView(to);
+    }
+    else if (from == KBookmarkTreeViewName) {
+        fromBookmarkTreeView(to);
+    }
+    else if (from == KSettingsViewName) {
+        fromSettingsView(to);
+    }
+
+    if (to == KWindowViewName) {
+        toWindowView();
+    }
+    else if (to == KGoAnywhereViewName) {
+        toGoAnywhereView();
+    }
+    else if (to == KWebViewName) {
+        toWebView();
+    }
+    else if (to == KBookmarkHistoryViewName) {
+        toBookmarkHistoryView();
+    }
+    else if (to == KBookmarkTreeViewName) {
+        toBookmarkView();
+    }
+    else if (to == KSettingsViewName) {
+        toSettingsView();
+    }
+}
+
+
+void ViewStack::loadHistoryItem(int item) {
+
+    if (!m_viewController) {
+        return;
+    }
+    WRT::HistoryFlowView* historyView = static_cast<WRT::HistoryFlowView*>(m_viewController->view(KHistoryViewName));
+    //var myIndex = window.viewManager.historyView.currentHistIndex;
+    int myIndex = historyView->currentIndex();
+
+    if (myIndex != item ) {
+        //window.chrome.alert("loadFromHistory");
+        WebPageController::getSingleton()->currentSetFromHistory(item);
+        safe_connect(m_viewController,SIGNAL(loadProgess(const int)), this, SLOT(showContentView(const int)));
+    }
+    else {
+        //window.chrome.alert("Just go back");
+        goBackFromGoAnywhereView();
+    }
+}
+
+void ViewStack::goBackFromGoAnywhereView() {
+    switchView(KWebViewName, KGoAnywhereViewName);
+}
+
+
+void ViewStack::goBackFromWindowView() {
+    switchView(KWebViewName, KWindowViewName);
+}
+
+void ViewStack::goBackFromRecentUrlView() {
+    switchView(KWebViewName, KBookmarkHistoryViewName);
+}
+
+void ViewStack::goBackFromBookmarkView() {
+    switchView(KWebViewName, KBookmarkTreeViewName);
+}
+
+void ViewStack::goBackFromSettingsView() {
+    switchView(KWebViewName, KSettingsViewName);
+}
+
+void ViewStack::showContentView(int progress) {
+
+    if (!m_viewController) {
+        return;
+    }
+
+    if (progress >= 30 && m_viewController->currentView()->type() == KGoAnywhereViewName) {
+        //goBackToWebView();
+        goBackFromGoAnywhereView();
+        disconnect(m_viewController,SIGNAL(loadProgess(const int)), this, SLOT(showContentView(const int)));
+    }
+    else if ( m_viewController->currentView()->type() == KWebViewName ) {
+        disconnect(m_viewController,SIGNAL(loadProgess(const int)), this, SLOT(showContentView(const int)));
+    }
+}
+
+}  // end of namespace
+