diff -r 000000000000 -r 2f259fa3e83a psln/Src/PslnMainView.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/psln/Src/PslnMainView.cpp Tue Feb 02 01:00:49 2010 +0200 @@ -0,0 +1,361 @@ +/* +* Copyright (c) 2005-2006 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: Main state view for Psln application. +* +*/ + + + +// INCLUDE FILES +#include + +#include +#include + +#include "PslnMainView.h" +#include "PslnMainViewContainer.h" +#include "PslnUi.h" + +// Framework +#include +#include "PslnPluginHandler.h" + +// CONSTANTS +// Main view indexes of default plugins. +const TInt KPslnASPluginLoc = 1; +const TInt KPslnAIPluginLoc = 2; + +// ============================ MEMBER FUNCTIONS =============================== +// --------------------------------------------------------------------------- +// Two-phased constructor. +// --------------------------------------------------------------------------- +// +CPslnMainView* CPslnMainView::NewLC() + { + CPslnMainView* self = new (ELeave) CPslnMainView(); + CleanupStack::PushL( self ); + self->ConstructL(); + return self; + } + +// --------------------------------------------------------------------------- +// Symbian 2nd phase constructor can leave. +// --------------------------------------------------------------------------- +// +void CPslnMainView::ConstructL() + { + BaseConstructL( R_PSLN_MAIN_VIEW ); + + ConstructViewArrayL(); + // Start background operation and create tabgroup. + iPslnUi->LoadViewsWhenIdleL(); + iPslnUi->ConstructTabGroupL(); + } + +// --------------------------------------------------------------------------- +// C++ default constructor can NOT contain any code, that might leave. +// --------------------------------------------------------------------------- +// +CPslnMainView::CPslnMainView() + { + } + +// --------------------------------------------------------------------------- +// Destructor. +// --------------------------------------------------------------------------- +// +CPslnMainView::~CPslnMainView() + { + iViewIds.Close(); + } + +// --------------------------------------------------------------------------- +// TUid CPslnMainView::Id() +// --------------------------------------------------------------------------- +// +TUid CPslnMainView::Id() const + { + return KPslnMainView2; + } + +// --------------------------------------------------------------------------- +// CPslnMainView::HandleCommandL +// --------------------------------------------------------------------------- +// +void CPslnMainView::HandleCommandL( TInt aCommand ) + { + switch ( aCommand ) + { + case EPslnCmdAppOpen: + DoActivateLocalViewL(); + break; + // If view was launched externally, handle back as exit. + case EAknSoftkeyBack: + case EAknSoftkeyExit: + aCommand = EAknCmdExit; + //lint -fallthrough + default: + iPslnUi->HandleCommandL( aCommand ); + break; + } + } + +// --------------------------------------------------------------------------- +// CPslnMainView::ActiveView +// --------------------------------------------------------------------------- +// +TInt CPslnMainView::ActiveView() const + { + return iCurrentItem; + } + +// --------------------------------------------------------------------------- +// CPslnMainView::SetActiveFolder +// --------------------------------------------------------------------------- +// +void CPslnMainView::SetActiveFolder( TInt aIndex ) + { + iCurrentItem = aIndex; + } + +// --------------------------------------------------------------------------- +// CPslnMainView::ActiveFolderUid +// --------------------------------------------------------------------------- +// +TInt CPslnMainView::ActiveFolderUid() + { + if ( ( iCurrentItem > iViewIds.Count() )|| + ( iCurrentItem < 0 ) ) + { + // If index is out-of-bounds, set first item active. + iCurrentItem = 0; + return 0; + } + return iViewIds[ iCurrentItem ].iUid; + } + +// --------------------------------------------------------------------------- +// CPslnMainView::SetActiveFolder +// --------------------------------------------------------------------------- +// +void CPslnMainView::SetActiveFolder( TUid aUid ) + { + for ( TInt idx = 0; idx < iViewIds.Count(); idx++ ) + { + if ( iViewIds[ idx ].iUid == aUid.iUid ) + { + iCurrentItem = idx; + } + } + } + +// --------------------------------------------------------------------------- +// CPslnMainView::DoActivateL +// --------------------------------------------------------------------------- +void CPslnMainView::DoActivateL( + const TVwsViewId& aPrevViewId, + TUid aCustomMessageId, + const TDesC8& aCustomMessage ) + { + // If application is launched through NULL thread, it means that it is + // launched as embedded application + if ( aPrevViewId.iAppUid.iUid == KUidPsln.iUid && + aPrevViewId.iViewUid.iUid == KPslnGeneralView.iUid ) + { + MAknsSkinInstance* si = AknsUtils::SkinInstance(); + si->SetChangeEventsEnabled( EFalse ); + si->RemoveLocalItemDefs(); + si->SetChangeEventsEnabled( ETrue ); + } + + CPslnBaseView::DoActivateL( + aPrevViewId, + aCustomMessageId, + aCustomMessage ); + + // Set middle softkey label. + CPslnBaseView::SetMiddleSoftKeyLabelL( + R_PSLN_MSK_OPEN, + EPslnCmdAppOpen ); + + //set highlight ,if returning from other view + if(iContainer && aPrevViewId.iAppUid.iUid == KUidPsln.iUid) + { + //search which item should be highlighted + TInt activateItem = GetListboxItemIndexByViewId(aPrevViewId); + if(activateItem != KErrNotFound) + { + iContainer->SetCurrentItemIndex( activateItem ); + } + else + { + iContainer->SetCurrentItemIndex( iCurrentItem ); + } + } + } + +// --------------------------------------------------------------------------- +// CPslnMainView::DynInitMenuPaneL +// --------------------------------------------------------------------------- +// +void CPslnMainView::DynInitMenuPaneL( + TInt aResourceId, CEikMenuPane* aMenuPane ) + { + CPslnBaseView::DynInitMenuPaneL( aResourceId, aMenuPane ); + } + +// --------------------------------------------------------------------------- +// CPslnMainView::HandleListBoxSelectionL +// --------------------------------------------------------------------------- +// +void CPslnMainView::HandleListBoxSelectionL() + { + HandleCommandL( EPslnCmdAppOpen ); + } + +// ----------------------------------------------------------------------------- +// CPslnMainView::HandleListBoxItemHighlightL +// ----------------------------------------------------------------------------- +// +void CPslnMainView::HandleListBoxItemHighlightL() + { + } + +// --------------------------------------------------------------------------- +// CPslnMainView::NewContainerL +// --------------------------------------------------------------------------- +// +void CPslnMainView::NewContainerL() + { + iContainer = new(ELeave) CPslnMainViewContainer( iPslnUi ); + } + +// --------------------------------------------------------------------------- +// CPslnMainView::ConstructViewArrayL +// --------------------------------------------------------------------------- +// +void CPslnMainView::ConstructViewArrayL() + { + // First add static views. + iViewIds.AppendL( KPslnGeneralView ); + + TBitFlags views = iPslnUi->ViewSupport(); + if ( views.IsSet( CPslnUi::EPslnWallpaperView ) ) + { + iViewIds.AppendL( KPslnWallpaperView ); + } + + if ( views.IsSet ( CPslnUi::EPslnScreensaverView ) ) + { + iViewIds.AppendL( KPslnScreenSaverView ); + } + + // Then start looking for plugins. + CArrayPtrFlat* array = + iPslnUi->PluginHandler()->GetPluginArray(); + CleanupStack::PushL ( array ); + if ( array ) + { + TBool appShellPluginInserted = EFalse; + for ( TInt i = 0; i < array->Count(); i++ ) + { + CAknView* view = array->At( i ); + + // If plugin is either AS or AI, insert between static views. + if ( view->Id().iUid == KPslnASPluginUid.iUid ) + { + iViewIds.InsertL( view->Id(), KPslnASPluginLoc ); + appShellPluginInserted = ETrue; + } + else if ( view->Id().iUid == KPslnAIPluginUid.iUid ) + { + if ( appShellPluginInserted ) + { + iViewIds.InsertL( view->Id(), KPslnAIPluginLoc ); + } + else + { + // If there is ASplugin - claim it's place. + // note that ASplugin maybe later inserted to this place. + iViewIds.InsertL( view->Id(), KPslnASPluginLoc ); + } + } + // Other plugins are just appended in order from plugin array. + // Plugins are already ordered in PluginHandler. + else + { + iViewIds.AppendL( view->Id() ); + } + } + } + CleanupStack::Pop( array ); + } + +// --------------------------------------------------------------------------- +// CPslnMainView::CbaExitEnabled +// --------------------------------------------------------------------------- +// +TInt CPslnMainView::CbaResourceId( const TVwsViewId& /*aPrevViewId*/,TUid /*aCustomMessageId*/ ) + { + TBool value = iEikonEnv->StartedAsServerApp(); + return value ? R_AVKON_SOFTKEYS_OPTIONS_BACK + : R_AVKON_SOFTKEYS_OPTIONS_EXIT; + } + +// --------------------------------------------------------------------------- +// Tries to activate local view from UI class. If class is not yet +// created, instructs UI class to create the view first. +// --------------------------------------------------------------------------- +// +void CPslnMainView::DoActivateLocalViewL() + { + if ( iContainer ) + { + iCurrentItem = iContainer->CurrentItemIndex(); + } + if ( iCurrentItem > iViewIds.Count() ) + { + User::Leave( KErrOverflow ); + } + // These views are possibly done dynamically. It is possible that due to + // idle time, they have already been created. + if ( iCurrentItem == KPslnGeneralView.iUid || + iCurrentItem == KPslnWallpaperView.iUid || + iCurrentItem == KPslnScreenSaverView.iUid ) + { + iPslnUi->CreateViewL( iViewIds[ iCurrentItem ] ); + } + iPslnUi->ActivateLocalViewL( iViewIds[ iCurrentItem ] ); + } + +// --------------------------------------------------------------------------- +// Return given view's index by searching the view id +// --------------------------------------------------------------------------- +// +TInt CPslnMainView::GetListboxItemIndexByViewId(const TVwsViewId& aViewId) const + { + TInt listBoxItemIndex = KErrNotFound; + + for( int i=0; i