phonebookui/pbkcommonui/src/cntviewmanager.cpp
changeset 24 0ba2181d7c28
child 25 76a2435edfd4
equal deleted inserted replaced
0:e686773b3f54 24:0ba2181d7c28
       
     1 /*
       
     2 * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description:
       
    15 *
       
    16 */
       
    17 
       
    18 #include "cntviewmanager.h"
       
    19 #include "cntbaseview.h"
       
    20 #include "cntmainwindow.h"
       
    21 
       
    22 #include "cntnamesview.h"
       
    23 #include "cntcollectionview.h"
       
    24 #include "cntfavoritesview.h"
       
    25 #include "cntfavoritesselectionview.h"
       
    26 #include "cntcontactcardview.h"
       
    27 #include "cntemaileditorview.h"
       
    28 #include "cntnameseditorview.h"
       
    29 #include "cnturleditorview.h"
       
    30 #include "cntcompanyeditorview.h" 
       
    31 #include "cntphonenumbereditorview.h"
       
    32 #include "cntonlineaccounteditorview.h"
       
    33 #include "cntnoteeditorview.h"
       
    34 #include "cntfamilydetaileditorview.h"
       
    35 #include "cntaddresseditorview.h"
       
    36 #include "cntdateeditorview.h"
       
    37 #include "cntimageeditorview.h"
       
    38 #include "cnteditview.h"
       
    39 #include "cntmycardview.h"
       
    40 #include "cntmycardselectionview.h"
       
    41 #include "cntgroupeditorview.h"
       
    42 #include "cntgroupmemberview.h"
       
    43 #include "cntgroupactionsview.h"
       
    44 #include "cnthistoryview.h"
       
    45 
       
    46 #include <hbstyleloader.h>
       
    47 /*!
       
    48 \class CntViewManager
       
    49 \brief
       
    50 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.
       
    51 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
       
    52 change or activate view from some other view.
       
    53 
       
    54 */
       
    55 
       
    56 
       
    57 /*!
       
    58 Constructor
       
    59 */
       
    60 CntViewManager::CntViewManager(CntMainWindow *mainWindow, CntViewParameters::ViewId defaultView):
       
    61     mMainWindow(mainWindow),
       
    62     mDefaultView(0),
       
    63     mDefaultViewId(CntViewParameters::noView)
       
    64 {
       
    65     // load styles
       
    66     HbStyleLoader::registerFilePath(":/style");
       
    67 
       
    68     if (defaultView!=CntViewParameters::noView)
       
    69     {
       
    70         //set the default view
       
    71         setDefaultView(defaultView);
       
    72     
       
    73         //activate the view
       
    74         CntViewParameters viewParameters(defaultView);
       
    75         setPreviousViewParameters(mDefaultView, viewParameters);
       
    76         mDefaultView->activateView(viewParameters);
       
    77     }
       
    78 }
       
    79 
       
    80 /*!
       
    81 Destructor
       
    82 */
       
    83 CntViewManager::~CntViewManager()
       
    84 {
       
    85 
       
    86 }
       
    87 
       
    88 /*!
       
    89 \return Pointer to mainwindow
       
    90 */
       
    91 CntMainWindow *CntViewManager::mainWindow()
       
    92 {
       
    93     return mMainWindow;
       
    94 }
       
    95 
       
    96 /*!
       
    97 Set the default view
       
    98 */
       
    99 void CntViewManager::setDefaultView(CntViewParameters::ViewId defaultView)
       
   100 {
       
   101     CntBaseView *view = getView(defaultView);
       
   102 
       
   103     if (view && view != mDefaultView)
       
   104     {
       
   105         addViewToWindow(view);
       
   106 
       
   107         // delete the old default view if it exists
       
   108         if (mDefaultView)
       
   109         {
       
   110             mainWindow()->removeView(mDefaultView);
       
   111             mDefaultView->setParent(0);
       
   112             mDefaultView->deleteLater();
       
   113         }
       
   114 
       
   115         //set the new view as default
       
   116         mDefaultViewId = defaultView;
       
   117         mDefaultView = view;
       
   118     }
       
   119 }
       
   120 
       
   121 //save previous view's parameters
       
   122 void CntViewManager::setPreviousViewParameters(const CntBaseView *currentView, const CntViewParameters &previousViewParameters)
       
   123 {
       
   124     if (currentView)
       
   125     {
       
   126         mPreviousViewParameters = previousViewParameters;
       
   127 
       
   128         //set current view to be the activated when call previous
       
   129         mPreviousViewParameters.setNextViewId(currentView->viewId());
       
   130 
       
   131         //previous view is the view that is being actiavated
       
   132         mPreviousViewParameters.setPreviousViewId(previousViewParameters.nextViewId());
       
   133     }
       
   134 }
       
   135 
       
   136 //return previous view's parameters
       
   137 CntViewParameters &CntViewManager::previousViewParameters()
       
   138 {
       
   139     return mPreviousViewParameters;
       
   140 }
       
   141 
       
   142 
       
   143 /*!
       
   144 Activate view based on \a id
       
   145 View's will be kept in QStack locally, but ownership is in main window.
       
   146 NamesView is kept in stack & memory all the time
       
   147 */
       
   148 void CntViewManager::onActivateView(int aViewId)
       
   149 {
       
   150     CntViewParameters viewParameters;
       
   151     viewParameters.setNextViewId(static_cast<CntViewParameters::ViewId>(aViewId));
       
   152 
       
   153     onActivateView(viewParameters);
       
   154 }
       
   155 
       
   156 void CntViewManager::onActivateView(const CntViewParameters &viewParameters)
       
   157 {
       
   158     //get the old view
       
   159     CntBaseView *oldView = static_cast<CntBaseView *>(mainWindow()->currentView());
       
   160 
       
   161     // fetch the new view and activate it
       
   162     CntBaseView *newView = getView(viewParameters.nextViewId());
       
   163 
       
   164     if (newView)
       
   165     {        
       
   166         newView->setPreferredSize(oldView->size());
       
   167         addViewToWindow(newView);
       
   168         
       
   169         if (oldView == mDefaultView)
       
   170         {
       
   171             oldView->deActivateView();
       
   172         }
       
   173         
       
   174         if (oldView)
       
   175         {
       
   176             setPreviousViewParameters(oldView, viewParameters);
       
   177             removeViewFromWindow(oldView);
       
   178         }
       
   179         newView->activateView(viewParameters);
       
   180     }
       
   181 }
       
   182 
       
   183 void CntViewManager::onActivatePreviousView()
       
   184 {
       
   185     onActivateView(previousViewParameters());
       
   186 }
       
   187 
       
   188 /*!
       
   189 Add \a view to main window and set it as current view
       
   190 */
       
   191 void CntViewManager::addViewToWindow(CntBaseView *view)
       
   192 {
       
   193     // add view to mainwindow and set it as current one
       
   194     if (view)
       
   195     {
       
   196         //if not default view add the view to main window
       
   197         if (view != mDefaultView)
       
   198         {
       
   199             view->setupView();
       
   200             mainWindow()->addView(view);
       
   201         }
       
   202 
       
   203         //set the view as current
       
   204         mainWindow()->setCurrentView( view );
       
   205     }
       
   206 }
       
   207 
       
   208 /*!
       
   209 Remove \a view from main window and delete it
       
   210 */
       
   211 void CntViewManager::removeViewFromWindow(CntBaseView *view)
       
   212 {
       
   213     if (view && view != mDefaultView)
       
   214     {
       
   215         mainWindow()->removeView(view);
       
   216         view->setParent(0);
       
   217         view->deleteLater();
       
   218     }
       
   219 }
       
   220 
       
   221 /*!
       
   222 Create a view based on ID. \Return pointer to new object if success, 0 if not.
       
   223 */
       
   224 CntBaseView *CntViewManager::getView(CntViewParameters::ViewId id)
       
   225 {
       
   226     CntBaseView* view(0);
       
   227 
       
   228     //return default view if it exists
       
   229     if (id == mDefaultViewId && mDefaultView)
       
   230     {
       
   231         view = mDefaultView;
       
   232     }
       
   233 
       
   234     //return any other view
       
   235     else
       
   236     {
       
   237         switch (id)
       
   238         {
       
   239             case CntViewParameters::namesView:
       
   240                 {
       
   241                 view = new CntNamesView(this);
       
   242                 break;
       
   243                 }
       
   244             case CntViewParameters::collectionView:
       
   245                 {
       
   246                 view = new CntCollectionView(this);
       
   247                 break;
       
   248                 }
       
   249             case CntViewParameters::collectionFavoritesView:
       
   250                 {
       
   251                 view = new CntFavoritesView(this);
       
   252                 break;
       
   253                 }
       
   254             case CntViewParameters::collectionFavoritesSelectionView:
       
   255                 {
       
   256                 view = new CntFavoritesSelectionView(this);
       
   257                 break;
       
   258                 }
       
   259             case CntViewParameters::commLauncherView:
       
   260                 {
       
   261                 view = new CntContactCardView(this);
       
   262                 break;
       
   263                 }
       
   264             case CntViewParameters::emailEditorView:
       
   265                 {
       
   266                 view = new CntEmailEditorView(this);
       
   267                 break;
       
   268                 }
       
   269             case CntViewParameters::namesEditorView:
       
   270                 {
       
   271                 view = new CntNamesEditorView(this);
       
   272                 break;
       
   273                 }
       
   274             case CntViewParameters::urlEditorView:
       
   275                 {
       
   276                 view = new CntUrlEditorView(this);
       
   277                 break;
       
   278                 }
       
   279             case CntViewParameters::companyEditorView:
       
   280                 {
       
   281                 view = new CntCompanyEditorView(this);
       
   282                 break;
       
   283                 }
       
   284             case CntViewParameters::phoneNumberEditorView:
       
   285                 {
       
   286                 view = new CntPhoneNumberEditorView(this);
       
   287                 break;
       
   288                 }
       
   289             case CntViewParameters::onlineAccountEditorView:
       
   290                 {
       
   291                 view = new CntOnlineAccountEditorView(this);
       
   292                 break;
       
   293                 }
       
   294             case CntViewParameters::noteEditorView:
       
   295                 {
       
   296                 view = new CntNoteEditorView(this);
       
   297                 break;
       
   298                 }
       
   299             case CntViewParameters::familyDetailEditorView:
       
   300                 {
       
   301                 view = new CntFamilyDetailEditorView(this);
       
   302                 break;
       
   303                 }
       
   304             case CntViewParameters::addressEditorView:
       
   305                 {
       
   306                 view = new CntAddressEditorView(this);
       
   307                 break;
       
   308                 }
       
   309             case CntViewParameters::dateEditorView:
       
   310                 {
       
   311                 view = new CntDateEditorView(this);
       
   312                 break;
       
   313                 }
       
   314             case CntViewParameters::imageEditorView:
       
   315                 {
       
   316                 view = new CntImageEditorView(this);
       
   317                 break;
       
   318                 }
       
   319             case CntViewParameters::editView:
       
   320                 {
       
   321                 view = new CntEditView(this);
       
   322                 break;
       
   323                 }
       
   324             case CntViewParameters::myCardSelectionView:
       
   325                 {
       
   326                 view = new CntMyCardSelectionView(this);
       
   327                 break;
       
   328                 }
       
   329             case CntViewParameters::myCardView:
       
   330                 {
       
   331                 view = new CntMyCardView(this);
       
   332                 break;
       
   333                 }
       
   334             case CntViewParameters::groupEditorView:
       
   335                 {
       
   336                 view = new CntGroupEditorView(this);
       
   337                 break;
       
   338                 }
       
   339             case CntViewParameters::groupMemberView:
       
   340                 {
       
   341                 view = new CntGroupMemberView(this);
       
   342                 break;
       
   343                 }
       
   344             case CntViewParameters::groupActionsView:
       
   345                 {
       
   346                 view = new CntGroupActionsView(this);
       
   347                 break;
       
   348                 }
       
   349             case CntViewParameters::historyView:
       
   350                 {
       
   351                 view = new CntHistoryView(this);
       
   352                 break;
       
   353                 }
       
   354             default:
       
   355                 {
       
   356                 break;
       
   357                 }
       
   358          }
       
   359     }
       
   360 
       
   361     return view;
       
   362 }
       
   363 
       
   364 // end of file