phonebookui/pbkcommonui/src/cntviewmanager.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Fri, 19 Mar 2010 09:27:18 +0200
changeset 24 0ba2181d7c28
child 25 76a2435edfd4
permissions -rw-r--r--
Revision: 201007 Kit: 201011

/*
* Copyright (c) 2009 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 "cntviewmanager.h"
#include "cntbaseview.h"
#include "cntmainwindow.h"

#include "cntnamesview.h"
#include "cntcollectionview.h"
#include "cntfavoritesview.h"
#include "cntfavoritesselectionview.h"
#include "cntcontactcardview.h"
#include "cntemaileditorview.h"
#include "cntnameseditorview.h"
#include "cnturleditorview.h"
#include "cntcompanyeditorview.h" 
#include "cntphonenumbereditorview.h"
#include "cntonlineaccounteditorview.h"
#include "cntnoteeditorview.h"
#include "cntfamilydetaileditorview.h"
#include "cntaddresseditorview.h"
#include "cntdateeditorview.h"
#include "cntimageeditorview.h"
#include "cnteditview.h"
#include "cntmycardview.h"
#include "cntmycardselectionview.h"
#include "cntgroupeditorview.h"
#include "cntgroupmemberview.h"
#include "cntgroupactionsview.h"
#include "cnthistoryview.h"

#include <hbstyleloader.h>
/*!
\class CntViewManager
\brief
View manager is a class between mainwindow and different views. It is used to provide navigation between views and also creating the views for the mainwindow.
Pointer to viewmanager is passed to each created view and therefore they can access also QMainWindow that is normally not possible. This is needed e.g. when we want to
change or activate view from some other view.

*/


/*!
Constructor
*/
CntViewManager::CntViewManager(CntMainWindow *mainWindow, CntViewParameters::ViewId defaultView):
    mMainWindow(mainWindow),
    mDefaultView(0),
    mDefaultViewId(CntViewParameters::noView)
{
    // load styles
    HbStyleLoader::registerFilePath(":/style");

    if (defaultView!=CntViewParameters::noView)
    {
        //set the default view
        setDefaultView(defaultView);
    
        //activate the view
        CntViewParameters viewParameters(defaultView);
        setPreviousViewParameters(mDefaultView, viewParameters);
        mDefaultView->activateView(viewParameters);
    }
}

/*!
Destructor
*/
CntViewManager::~CntViewManager()
{

}

/*!
\return Pointer to mainwindow
*/
CntMainWindow *CntViewManager::mainWindow()
{
    return mMainWindow;
}

/*!
Set the default view
*/
void CntViewManager::setDefaultView(CntViewParameters::ViewId defaultView)
{
    CntBaseView *view = getView(defaultView);

    if (view && view != mDefaultView)
    {
        addViewToWindow(view);

        // delete the old default view if it exists
        if (mDefaultView)
        {
            mainWindow()->removeView(mDefaultView);
            mDefaultView->setParent(0);
            mDefaultView->deleteLater();
        }

        //set the new view as default
        mDefaultViewId = defaultView;
        mDefaultView = view;
    }
}

//save previous view's parameters
void CntViewManager::setPreviousViewParameters(const CntBaseView *currentView, const CntViewParameters &previousViewParameters)
{
    if (currentView)
    {
        mPreviousViewParameters = previousViewParameters;

        //set current view to be the activated when call previous
        mPreviousViewParameters.setNextViewId(currentView->viewId());

        //previous view is the view that is being actiavated
        mPreviousViewParameters.setPreviousViewId(previousViewParameters.nextViewId());
    }
}

//return previous view's parameters
CntViewParameters &CntViewManager::previousViewParameters()
{
    return mPreviousViewParameters;
}


/*!
Activate view based on \a id
View's will be kept in QStack locally, but ownership is in main window.
NamesView is kept in stack & memory all the time
*/
void CntViewManager::onActivateView(int aViewId)
{
    CntViewParameters viewParameters;
    viewParameters.setNextViewId(static_cast<CntViewParameters::ViewId>(aViewId));

    onActivateView(viewParameters);
}

void CntViewManager::onActivateView(const CntViewParameters &viewParameters)
{
    //get the old view
    CntBaseView *oldView = static_cast<CntBaseView *>(mainWindow()->currentView());

    // fetch the new view and activate it
    CntBaseView *newView = getView(viewParameters.nextViewId());

    if (newView)
    {        
        newView->setPreferredSize(oldView->size());
        addViewToWindow(newView);
        
        if (oldView == mDefaultView)
        {
            oldView->deActivateView();
        }
        
        if (oldView)
        {
            setPreviousViewParameters(oldView, viewParameters);
            removeViewFromWindow(oldView);
        }
        newView->activateView(viewParameters);
    }
}

void CntViewManager::onActivatePreviousView()
{
    onActivateView(previousViewParameters());
}

/*!
Add \a view to main window and set it as current view
*/
void CntViewManager::addViewToWindow(CntBaseView *view)
{
    // add view to mainwindow and set it as current one
    if (view)
    {
        //if not default view add the view to main window
        if (view != mDefaultView)
        {
            view->setupView();
            mainWindow()->addView(view);
        }

        //set the view as current
        mainWindow()->setCurrentView( view );
    }
}

/*!
Remove \a view from main window and delete it
*/
void CntViewManager::removeViewFromWindow(CntBaseView *view)
{
    if (view && view != mDefaultView)
    {
        mainWindow()->removeView(view);
        view->setParent(0);
        view->deleteLater();
    }
}

/*!
Create a view based on ID. \Return pointer to new object if success, 0 if not.
*/
CntBaseView *CntViewManager::getView(CntViewParameters::ViewId id)
{
    CntBaseView* view(0);

    //return default view if it exists
    if (id == mDefaultViewId && mDefaultView)
    {
        view = mDefaultView;
    }

    //return any other view
    else
    {
        switch (id)
        {
            case CntViewParameters::namesView:
                {
                view = new CntNamesView(this);
                break;
                }
            case CntViewParameters::collectionView:
                {
                view = new CntCollectionView(this);
                break;
                }
            case CntViewParameters::collectionFavoritesView:
                {
                view = new CntFavoritesView(this);
                break;
                }
            case CntViewParameters::collectionFavoritesSelectionView:
                {
                view = new CntFavoritesSelectionView(this);
                break;
                }
            case CntViewParameters::commLauncherView:
                {
                view = new CntContactCardView(this);
                break;
                }
            case CntViewParameters::emailEditorView:
                {
                view = new CntEmailEditorView(this);
                break;
                }
            case CntViewParameters::namesEditorView:
                {
                view = new CntNamesEditorView(this);
                break;
                }
            case CntViewParameters::urlEditorView:
                {
                view = new CntUrlEditorView(this);
                break;
                }
            case CntViewParameters::companyEditorView:
                {
                view = new CntCompanyEditorView(this);
                break;
                }
            case CntViewParameters::phoneNumberEditorView:
                {
                view = new CntPhoneNumberEditorView(this);
                break;
                }
            case CntViewParameters::onlineAccountEditorView:
                {
                view = new CntOnlineAccountEditorView(this);
                break;
                }
            case CntViewParameters::noteEditorView:
                {
                view = new CntNoteEditorView(this);
                break;
                }
            case CntViewParameters::familyDetailEditorView:
                {
                view = new CntFamilyDetailEditorView(this);
                break;
                }
            case CntViewParameters::addressEditorView:
                {
                view = new CntAddressEditorView(this);
                break;
                }
            case CntViewParameters::dateEditorView:
                {
                view = new CntDateEditorView(this);
                break;
                }
            case CntViewParameters::imageEditorView:
                {
                view = new CntImageEditorView(this);
                break;
                }
            case CntViewParameters::editView:
                {
                view = new CntEditView(this);
                break;
                }
            case CntViewParameters::myCardSelectionView:
                {
                view = new CntMyCardSelectionView(this);
                break;
                }
            case CntViewParameters::myCardView:
                {
                view = new CntMyCardView(this);
                break;
                }
            case CntViewParameters::groupEditorView:
                {
                view = new CntGroupEditorView(this);
                break;
                }
            case CntViewParameters::groupMemberView:
                {
                view = new CntGroupMemberView(this);
                break;
                }
            case CntViewParameters::groupActionsView:
                {
                view = new CntGroupActionsView(this);
                break;
                }
            case CntViewParameters::historyView:
                {
                view = new CntHistoryView(this);
                break;
                }
            default:
                {
                break;
                }
         }
    }

    return view;
}

// end of file