ginebra2/ViewStack.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Wed, 18 Aug 2010 09:37:05 +0300
changeset 10 232fbd5a2dcb
parent 6 1c3b8676e58c
permissions -rw-r--r--
Revision: 201031 Kit: 201033

/*
* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
* All rights reserved.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, version 2.1 of the License.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program.  If not,
* see "http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html/".
*
* Description:
*
*/

#include "Utilities.h"
#include <QtCore/QUrl>
#include "ViewStack.h"
#include "ViewController.h"
#include "webpagecontroller.h"
#include "HistoryFlowView.h"
#include "WindowFlowView.h"
#include "ChromeSnippet.h"

namespace GVA {

static const QString KBookmarkHistoryViewName = "BookmarkHistoryView";
static const QString KBookmarkTreeViewName = "BookmarkTreeView";
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());

    ChromeSnippet* tbSnippet = m_chrome->getSnippet("WindowViewToolbarId");
    if (tbSnippet)
        tbSnippet->hide();

    //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
{
    m_viewController->showContent(to);
    ChromeSnippet* tbSnippet = m_chrome->getSnippet("SettingsViewToolbarId");
    if (tbSnippet)
        tbSnippet->hide();

    WebPageController::getSingleton()->setSettingsLoaded(0);
}

void ViewStack::fromWebView(const QString &to)
{
    m_viewController->showContent(to);
    ChromeSnippet* tbSnippet = m_chrome->getSnippet("WebViewToolbarId");
    if (tbSnippet)
        tbSnippet->hide(false);
}

void ViewStack::fromBookmarkTreeView(const QString &to)
{
     m_viewController->showContent(to);
    // Hide toolbar and dialog if visible
    ChromeSnippet* visibleSnippet = m_chrome->getSnippet("BookmarkViewToolbarId");
    if (visibleSnippet)
        visibleSnippet->hide();
    
    visibleSnippet = m_chrome->getSnippet("BookmarkDialogId");
    if (visibleSnippet)
        visibleSnippet->hide();
}


void ViewStack::fromBookmarkHistoryView(const QString &to)
{
    m_viewController->showContent(to);
    ChromeSnippet* tbSnippet = m_chrome->getSnippet("RecentUrlViewToolbarId");
    if (tbSnippet)
        tbSnippet->hide();
    
    ChromeSnippet* visibleSnippet  = m_chrome->getSnippet("ClearHistoryDialogId");
    if (visibleSnippet)
         visibleSnippet->hide();
}

void ViewStack::toWindowView()
{
    emit(activateWindowView());

    ChromeSnippet* tbSnippet = m_chrome->getSnippet("WindowViewToolbarId");
    if (tbSnippet)
        tbSnippet->show();

    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::toSettingsView()
{
    ChromeSnippet* tbSnippet = m_chrome->getSnippet("SettingsViewToolbarId");
    if (tbSnippet)
        tbSnippet->show();

    WebPageController::getSingleton()->setSettingsLoaded(0);

}

void ViewStack::toWebView()
{
    ChromeSnippet* tbSnippet = m_chrome->getSnippet("WebViewToolbarId");
    if (tbSnippet)
        tbSnippet->show(false);
}

void ViewStack::toBookmarkHistoryView()
{
    ChromeSnippet* tbSnippet = m_chrome->getSnippet("RecentUrlViewToolbarId");
    if (tbSnippet)
        tbSnippet->show();
}

void ViewStack::toBookmarkView()
{
    ChromeSnippet* tbSnippet = m_chrome->getSnippet("BookmarkViewToolbarId");
    if (tbSnippet)
        tbSnippet->show();

    emit activateBookmark();
}

void ViewStack::creatingPage(WRT::WrtBrowserContainer* page) {
    Q_UNUSED(page);

    //qDebug() << "VIEW STACK:: Received creating Page" << page;

    if (m_viewController->currentView()->type() == "webView" ) {
        //qDebug() << "ViewStack::page: " << page << "Created In " << m_viewController->currentView()->type() ;

        WRT::WindowFlowView* windowView = static_cast<WRT::WindowFlowView *>(m_viewController->view(KWindowViewName));
        windowView->setMode(WRT::WindowView::WindowViewModeTransition);
        windowView->onPageCreated(page);
        ViewStack::getSingleton()->switchView(KWindowViewName, KWebViewName);
    }

}

void ViewStack::switchView(const QString &to, const QString &from) {

    if (to == from) {
        return;
    }
    if (!m_viewController) {
        return;
    }

    if (from == KWindowViewName) {
        fromWindowView(to);
    }
    else if (from == KWebViewName) {
        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 == 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)));
    }
}

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) {
    Q_UNUSED(progress);

    if (!m_viewController) {
        return;
    }

    if ( m_viewController->currentView()->type() == KWebViewName ) {
        disconnect(m_viewController,SIGNAL(loadProgess(const int)), this, SLOT(showContentView(const int)));
    }
}

}  // end of namespace