diff -r 8ee96d21d9bf -r 7e0eff37aedb gssettingsuis/Gs/GSApplication/Src/GSMainView.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gssettingsuis/Gs/GSApplication/Src/GSMainView.cpp Wed Sep 01 12:20:44 2010 +0100 @@ -0,0 +1,449 @@ +/* +* Copyright (c) 2005 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 View. +* +*/ + + +// INCLUDE FILES +#include +#include "GSMainContainer.h" +#include "GsLogger.h" +#include "gsplugininterface.h" +#include "GSDocument.h" +#include "GSUi.h" +#include +#include + +#include +#include +#include +#include +#include // Localization +#include +#include +#include +#include + +// ========================= MEMBER FUNCTIONS ================================ + +// --------------------------------------------------------------------------- +// CGSMainView::CGSMainView +// C++ constructor. +// +// --------------------------------------------------------------------------- +// +CGSMainView::CGSMainView() + : iResourceLoader( *iCoeEnv ) + { + } + + +// --------------------------------------------------------------------------- +// CGSMainView::NewL() +// Symbian OS two-phased constructor. +// +// --------------------------------------------------------------------------- +// +CGSMainView* CGSMainView::NewL() + { + CGSMainView* self = NewLC(); + CleanupStack::Pop( self ); + return self; + } + + +// --------------------------------------------------------------------------- +// CGSMainView::NewLC() +// Symbian OS two-phased constructor. +// +// --------------------------------------------------------------------------- +// +CGSMainView* CGSMainView::NewLC() + { + CGSMainView* self = new( ELeave ) CGSMainView(); + CleanupStack::PushL( self ); + self->ConstructL(); + return self; + } + + +// --------------------------------------------------------------------------- +// CGSMainView::ConstructL(const TRect& aRect) +// Symbian OS default constuctor. +// +// --------------------------------------------------------------------------- +// +void CGSMainView::ConstructL() + { + __GSLOGSTRING( "[CGSMainView] ConstructL()" ); + iAppUi = AppUi(); + + OpenLocalizedResourceFileL( KGSMainViewResourceFileName ); + BaseConstructL( R_GS_MAIN_VIEW ); + + iPluginArray = new CArrayPtrFlat( 10 ); + + iPluginLoader = CGSPluginLoader::NewL( iAppUi ); + iPluginLoader->SetObserver( this ); + iPluginLoader->LoadAsyncL( KGSPluginInterfaceUid, KGSMainViewUid, + iPluginArray ); + iPosition.Reset(); + } + + +// --------------------------------------------------------------------------- +// CGSMainView::~CGSMainView() +// Destructor +// +// --------------------------------------------------------------------------- +// +CGSMainView::~CGSMainView() + { + __GSLOGSTRING( "[CGSMainView] ~CGSMainView" ); + if ( iPluginLoader ) + { + delete iPluginLoader; + } + + if ( iPluginArray ) + { + // Since the plugins are actually avkon views, avkon is responsible + // for owning the plugins. This means we do not reset and destroy + // the contents of the array in which the plugins reside. We have to + // leave it up to avkon to tidy up. + delete iPluginArray; + } + + iResourceLoader.Close(); + + if( iContainer && iAppUi ) + { + iAppUi->RemoveFromViewStack( *this, iContainer ); + delete iContainer; + } + } + + +// --------------------------------------------------------------------------- +// TUid CGSMainView::OpenLocalizedResourceFileL() +// +// +// --------------------------------------------------------------------------- +// +void CGSMainView::OpenLocalizedResourceFileL( const TDesC& aResourceFileName ) + { + RFs &fsSession = CCoeEnv::Static()->FsSession(); + + // Find the resource file + TParse parse; + parse.Set( aResourceFileName, &KDC_APP_RESOURCE_DIR, NULL ); + TFileName fileName( parse.FullName() ); + + // Get language of resource file + BaflUtils::NearestLanguageFile( fsSession, fileName ); + + // Open resource file + iResourceLoader.OpenL( fileName ); + } + + +// --------------------------------------------------------------------------- +// TUid CGSMainView::Id() +// +// +// --------------------------------------------------------------------------- +// +TUid CGSMainView::Id() const + { + return KGSMainViewUid; + } + + +// --------------------------------------------------------------------------- +// CGSMainView::DoActivateL() +// +// +// --------------------------------------------------------------------------- +// +void CGSMainView::DoActivateL( const TVwsViewId& /*aPrevViewId*/, + TUid /*aCustomMessageId*/, + const TDesC8& /*aCustomMessage*/ ) + { + __GSLOGSTRING( "[CGSMainView] DoActivateL()" ); + + iPluginLoader->RequestPriority( CActive::EPriorityHigh ); + + if( iContainer ) + { + iAppUi->RemoveFromViewStack( *this, iContainer ); + delete iContainer; + iContainer = NULL; + } + NewContainerL(); + + // Set the empty text of list box + _LIT( KEmptyText, "" ); + TBuf<1> empty( KEmptyText ); + iContainer->SetListBoxEmptyTextL( empty ); + + // Do this to update listbox from already existing iPluginArray. + iContainer->UpdateListBoxL(); + if ( iPosition.iCurrentItemIndex != -1 ) + { + if ( iIsLandscapeOrientation == Layout_Meta_Data::IsLandscapeOrientation() ) + { + iContainer->RestoreListBoxPositionL( iPosition, EFalse ); + } + else + { + iContainer->RestoreListBoxPositionL( iPosition, ETrue ); + } + } + iAppUi->AddToViewStackL( *this, iContainer ); + // Navigating to main view will reset all child plugin selected indexes: + for( TInt i = 0; i < iPluginArray->Count(); i++ ) + { + CGSPluginInterface* plugin = iPluginArray->operator[]( i ); + plugin->ResetSelectedItemIndex(); + } + GfxTransEffect::EndFullScreen(); + } + + +// --------------------------------------------------------------------------- +// CGSMainView::DoDeactivate() +// +// +// --------------------------------------------------------------------------- +// +void CGSMainView::DoDeactivate() + { + __GSLOGSTRING( "[CGSMainView] DoDeactivate()" ); + + iPluginLoader->RequestPriority( CActive::EPriorityLow ); + + if ( iContainer ) + { + + iPosition.Reset(); + TRAPD( err, iContainer->StoreListBoxPositionL( iPosition ) ); + iIsLandscapeOrientation = Layout_Meta_Data::IsLandscapeOrientation(); + iAppUi->RemoveFromViewStack(*this, iContainer); + delete iContainer; + iContainer = NULL; + } + } + + +// --------------------------------------------------------------------------- +// CGSMainView::NewContainerL() +// +// +// --------------------------------------------------------------------------- +// +void CGSMainView::NewContainerL() + { + iContainer = new( ELeave ) CGSMainContainer; + iContainer->SetMopParent( this ); + + TRAPD( + error, + iContainer->ConstructL( ClientRect() , AppUi(), iPluginArray ) ); + + if ( error ) + { + delete iContainer; + iContainer = NULL; + User::Leave( error ); + } + } + + +// --------------------------------------------------------------------------- +// TUid CGSMainView::HandleCommandL() +// +// +// --------------------------------------------------------------------------- +// +void CGSMainView::HandleCommandL( TInt aCommand ) + { + __GSLOGSTRING1( "[CGSMainView] HandleCommandL(%d)", aCommand ); + + switch ( aCommand ) + { + case EGSCmdAppOpen: + case EAknSoftkeyOpen: + if( iContainer ) + { + CGSPluginInterface* plugin = iContainer->SelectedPlugin(); + if ( plugin ) + { + switch (plugin->ItemType()) + { + // In these cases the plugin is a view: + case EGSItemTypeSingleLarge: + case EGSItemTypeSetting: + case EGSItemTypeSettingIcon: + iAppUi->ActivateLocalViewL(plugin->Id()); + break; + // In these cases the plugin is a dialog: + case EGSItemTypeSettingDialog: + case EGSItemTypeSingleLargeDialog: + plugin->HandleSelection(EGSSelectionByMenu); + break; + } + } + } + break; + case EAknCmdHelp: + { + if( FeatureManager::FeatureSupported( KFeatureIdHelp ) ) + { + HlpLauncher::LaunchHelpApplicationL( + iEikonEnv->WsSession(), iAppUi->AppHelpContextL() ); + } + break; + } + default: + iAppUi->HandleCommandL( aCommand ); + break; + } + } + + +// --------------------------------------------------------------------------- +// TUid CGSMainView::HandlePluginLoaded() +// +// +// --------------------------------------------------------------------------- +// +void CGSMainView::HandlePluginLoaded( KGSPluginLoaderStatus aStatus ) + { + __GSLOGSTRING1( "[CGSMainView::HandlePluginLoaded] aStatus:%d", aStatus ); + + switch( aStatus ) + { + case MGSPluginLoadObserver::EGSSuccess: + // Should not update each time when plugin is loaded, only when + // finished loading spesific view plugins? + break; + case MGSPluginLoadObserver::EGSFinished: + if( iContainer ) + { + TRAPD( err, + iContainer->UpdateListBoxL(); ) + if( err != KErrNone ) + { + __GSLOGSTRING1( + "[CGSMainView] Error updating listbox: %d", + err ); + } + } + break; + default: + break; + } + + } + + +// --------------------------------------------------------------------------- +// CGSMainView::TransferDynamicPluginL() +// +// +// --------------------------------------------------------------------------- +// +void CGSMainView::TransferDynamicPluginL( CGSPluginInterface* aPlugin ) + { + __GSLOGSTRING1( "[CGSMainView] CGSMainView::TransferDynamicPluginL() - plugin id: 0x%x added to appUi.", aPlugin->Id() ); + + CleanupStack::PushL( aPlugin ); + iAppUi->AddViewL( aPlugin ); + CleanupStack::Pop( aPlugin ); + + // Add to the overall plugin array for this parent plugin + iPluginArray->AppendL( aPlugin ); + + // Resort the plugins so that they are in order + iPluginLoader->SortPluginsL( iPluginArray ); + + // Update the listbox with the new information + HandlePluginLoaded( MGSPluginLoadObserver::EGSSuccess ); + } + + +// ------------------------------------------------- -------------------------- +// TUid CGSMainView::TabbedViews() +// +// +// --------------------------------------------------------------------------- +// +CArrayPtrFlat* CGSMainView::TabbedViews() + { + return iPluginArray; + } + + +// ----------------------------------------------------------------------------- +// CGSMainView::TabChangedL() +// +// +// ----------------------------------------------------------------------------- +// +void CGSMainView::TabChangedL( TUid selectedTabUid ) + { + // Update selected item because changing tab in main view's children + // affects also main view's selected item: + iSelectedPluginUid = selectedTabUid; + } + + +// ----------------------------------------------------------------------------- +// CGSMainView::UpdateView() +// +// +// ----------------------------------------------------------------------------- +// +void CGSMainView::UpdateView() + { + TRAP_IGNORE( iContainer->UpdateListBoxL() ); + } + + +// ----------------------------------------------------------------------------- +// CGSMainView::DynInitMenuPaneL() +// +// dynamically handle help item if not supported +// ----------------------------------------------------------------------------- +// +void CGSMainView::DynInitMenuPaneL( TInt aResourceId, + CEikMenuPane* aMenuPane ) + { + if( aResourceId == R_GS_MENU_ITEM_HELP ) + { + User::LeaveIfNull( aMenuPane ); + + if ( FeatureManager::FeatureSupported( KFeatureIdHelp )) + { + aMenuPane->SetItemDimmed( EAknCmdHelp, EFalse ); + } + else + { + aMenuPane->SetItemDimmed( EAknCmdHelp, ETrue ); + } + } + } + +//End of File