diff -r aecbbf00d063 -r d48ab3b357f1 psln/Src/PslnBaseView.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/psln/Src/PslnBaseView.cpp Wed Sep 01 12:16:19 2010 +0100 @@ -0,0 +1,266 @@ +/* +* Copyright (c) 2002-2007 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: Provides Psln Application Base view methods. +* +*/ + + +// INCLUDE FILES + +#include "PslnBaseView.h" + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#include "PslnFeatures.h" +#include "PslnUi.h" +#include "PslnBaseContainer.h" +#include "PslnConst.h" + +// ========================= MEMBER FUNCTIONS ================================ +// --------------------------------------------------------------------------- +// Constructor +// --------------------------------------------------------------------------- +// +CPslnBaseView::CPslnBaseView() + { + iPslnUi = static_cast( AppUi() ); + + if ( !iModel ) + { + iModel = iPslnUi->Model(); + } + } + +// --------------------------------------------------------------------------- +// Destructor +// --------------------------------------------------------------------------- +// +CPslnBaseView::~CPslnBaseView() + { + if ( iContainer ) + { + if( iPslnUi ) + { + iPslnUi->RemoveFromStack( iContainer ); + } + delete iContainer; + } + if ( iNaviPaneContext && + iNaviPaneContext != iPslnUi->PslnTabGroup() ) + { + delete iNaviPaneContext; + } + } + +// --------------------------------------------------------------------------- +// CPslnBaseView::HandleListBoxEventL +// --------------------------------------------------------------------------- +// +void CPslnBaseView::HandleListBoxEventL( + CEikListBox* /*aListBox*/, TListBoxEvent aEventType) + { + switch ( aEventType ) + { + case EEventEnterKeyPressed: + case EEventItemSingleClicked: + HandleListBoxSelectionL(); + break; + default: + break; + } + } + +// --------------------------------------------------------------------------- +// CPslnBaseView::DoActivateL +// Activates the view. +// --------------------------------------------------------------------------- +// +void CPslnBaseView::DoActivateL( const TVwsViewId& aPrevViewId, + TUid aCustomMessageId, const TDesC8& /*aCustomMessage*/ ) + { + if( aPrevViewId.iViewUid == Id() && + aPrevViewId.iAppUid == KUidPsln )//same view? + { + //if continuous activate same view twice,direct return,do nothing + return; + } + + if( iContainer ) + { + RemoveContainer(); + } + + CreateContainerL(); + iPslnUi->AddToStackL( *this, iContainer ); + iContainer->SetListBoxObserver( this ); + + SetNaviPaneL(); + TInt titlePaneResourceID = KErrNone; + SetTitlePaneL( titlePaneResourceID ); + // Retrieve title pane and set it. + CEikStatusPane* sp = iAvkonAppUi->StatusPane(); + if ( sp ) + { + CAknTitlePane* titlePane = static_cast( + sp->ControlL( TUid::Uid( EEikStatusPaneUidTitle ) ) ); + if ( ( titlePaneResourceID > KErrNone ) && titlePane ) + { + HBufC* titlePaneText = NULL; + titlePaneText = StringLoader::LoadLC( titlePaneResourceID ); + titlePane->SetTextL( titlePaneText->Des() ); + CleanupStack::PopAndDestroy( titlePaneText ); + } + } + + CEikButtonGroupContainer* cba = Cba(); + if (cba) + { + TInt id = CbaResourceId( aPrevViewId, aCustomMessageId ); + cba->SetCommandSetL( id ); + cba->DrawDeferred(); + } + } + +// --------------------------------------------------------------------------- +// CPslnBaseView::DoDeactivate +// --------------------------------------------------------------------------- +// +void CPslnBaseView::DoDeactivate() + { + if ( iContainer ) + { + iCurrentItem = iContainer->CurrentItemIndex(); + RemoveContainer(); + } + } + +// --------------------------------------------------------------------------- +// CPslnBaseView::CreateContainerL() +// --------------------------------------------------------------------------- +// +void CPslnBaseView::CreateContainerL() + { + NewContainerL(); + iContainer->SetMopParent( this ); + + CPslnBaseContainer* container = iContainer; + iContainer = NULL; + CleanupStack::PushL( container ); + container->ConstructL( ClientRect() ); + CleanupStack::Pop( container ); + iContainer = container; + } + +// --------------------------------------------------------------------------- +// CPslnBaseView::SetNaviPaneL +// --------------------------------------------------------------------------- +// +void CPslnBaseView::SetNaviPaneL() + { +#ifndef RD_CONTROL_PANEL + CAknNavigationControlContainer* naviPane = iPslnUi->NaviContainer(); + if ( !naviPane ) + { + return; + } + if ( iNaviPaneContext ) + { + iPslnUi->NaviContainer()->PushL( *iNaviPaneContext ); + + if ( iNaviPaneContext == iPslnUi->PslnTabGroup() ) + { + iPslnUi->UpdateTabIndex(); + } + } + else + { + iPslnUi->NaviContainer()->PushDefaultL(); + } +#else + iPslnUi->NaviContainer()->PushDefaultL(); +#endif //RD_CONTROL_PANEL + } + +// --------------------------------------------------------------------------- +// Sets middle softkey label. +// --------------------------------------------------------------------------- +// +void CPslnBaseView::SetMiddleSoftKeyLabelL( + const TInt aResourceId, const TInt aCommandId ) + { + CEikButtonGroupContainer* cbaGroup = Cba(); + if ( cbaGroup ) + { + HBufC* middleSKText = StringLoader::LoadLC( aResourceId ); + TPtr mskPtr = middleSKText->Des(); + cbaGroup->AddCommandToStackL( + KPslnMSKControlID, + aCommandId, + mskPtr ); + CleanupStack::PopAndDestroy( middleSKText ); + } + } + +// --------------------------------------------------------------------------- +// Removes Help if it is not supported. +// --------------------------------------------------------------------------- +// +void CPslnBaseView::DynInitMenuPaneL( TInt aResourceId, CEikMenuPane* aMenuPane ) + { + if ( aResourceId == R_PSLN_BASIC_MENUPANE ) + { + if( !PslnFeatures::IsHelpSupported() ) + { + // Disable help if not supported + aMenuPane->SetItemDimmed( EPslnCmdAppHelp, ETrue ); + } + } + } + +// --------------------------------------------------------------------------- +// Whether to set right softkey as exit +// --------------------------------------------------------------------------- +// +TInt CPslnBaseView::CbaResourceId(const TVwsViewId& /*aPrevViewId*/,TUid /*aCustomMessageId*/ ) + { + return R_AVKON_SOFTKEYS_OPTIONS_BACK; + } + +// --------------------------------------------------------------------------- +// Removes container. +// --------------------------------------------------------------------------- +// +void CPslnBaseView::RemoveContainer() + { + if ( iPslnUi ) + { + iPslnUi->RemoveFromStack( iContainer ); + } + delete iContainer; + iContainer = NULL; + } + +//End of File