diff -r 000000000000 -r 96612d01cf9f mediasettings/gsvideoplugin/src/GSVideoPlugin.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mediasettings/gsvideoplugin/src/GSVideoPlugin.cpp Mon Jan 18 20:21:12 2010 +0200 @@ -0,0 +1,595 @@ +/* +* 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 the License "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: GSVideoPlugin.cpp* +*/ + + +// Version : %version: 6 % + + + +// INCLUDES +#include "MPSettingsModelForROP.h" +#include "GSVideoPlugin.h" +#include "MPSettingsConstants.h" +#include "MPSettingsMainView.h" +#include "MPSettingsProxyView.h" +#include "MPSettingsNetworkView.h" +#include "MPSettingsPluginView.h" +#include "MPSettingsAdvancedBwView.h" +#include "MPSettingsMainContainer.h" +#include "mediasettings.hrh" +#include "gstabhelper.h" +#include "GSMediaPlayerVideoView.h" +#include "GSMediaPlayerStreamingView.h" +#include "feedsettingsview.h" +#include "mpxlog.h" + +#include +#include // For HlpLauncher +#include +#include +#include +#include +#include //for StringLoader +#include +#include +#include +#include //for KGSMainViewUid +#include +#include +#include + +// CONSTANTS +const TInt KGSRopSettViewIdArrayGranularity = 3; +const TInt KGSRopSettTopItemIndex = 0; + +// ========================= MEMBER FUNCTIONS ================================ + +// --------------------------------------------------------------------------- +// CGSVideoPlugin::CGSVideoPlugin() +// Constructor +// +// --------------------------------------------------------------------------- +// +CGSVideoPlugin::CGSVideoPlugin() + : iResources( *iCoeEnv ), iConstructAsGsPlugin(ETrue) + { + MPX_FUNC("#MS# CGSVideoPlugin::CGSVideoPlugin()"); + } + +// --------------------------------------------------------------------------- +// CGSVideoPlugin::~CGSVideoPlugin() +// +// Destructor +// --------------------------------------------------------------------------- +// +CGSVideoPlugin::~CGSVideoPlugin() + { + MPX_FUNC("#MS# CGSVideoPlugin::~CGSVideoPlugin()"); + FeatureManager::UnInitializeLib(); + iImplInfoArray.ResetAndDestroy(); + + if ( iTabHelper ) + { + delete iTabHelper; + } + + iResources.Close(); + + if ( iViewIds ) + { + delete iViewIds; + } + + if ( iModel ) + { + delete iModel; + iModel = NULL; + } + + if ( iViewArray ) + { + iViewArray->Reset(); + delete iViewArray; + } + } + +// --------------------------------------------------------------------------- +// CGSVideoPlugin::ConstructL(const TRect& aRect) +// Symbian OS two-phased constructor +// +// --------------------------------------------------------------------------- +// +void CGSVideoPlugin::ConstructL() + { + MPX_FUNC("#MS# CGSVideoPlugin::ConstructL()"); + FeatureManager::InitializeLibL(); + iViewArray = new (ELeave) CArrayPtrFlat( 3 ); + + TFileName fileName; + LocateFilePathL( fileName, EFalse ); + OpenLocalizedResourceFileL( fileName, iResources ); + + BaseConstructL(R_GS_MEDIASETTING_VIEW); + + iTabHelper = CGSTabHelper::NewL(); + } + +// --------------------------------------------------------------------------- +// CGSVideoPlugin::NewL() +// Static constructor +// +// --------------------------------------------------------------------------- +// +CGSVideoPlugin* CGSVideoPlugin::NewL( /* TAny* aInitParams */) + { + MPX_FUNC("#MS# CGSVideoPlugin::NewL()"); + CGSVideoPlugin* self = new( ELeave ) CGSVideoPlugin(); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(self); + return self; + } + +// --------------------------------------------------------------------------- +// CGSVideoPlugin::Id +// +// Returns own view ID. +// --------------------------------------------------------------------------- +// +TUid CGSVideoPlugin::Id() const + { + MPX_FUNC("#MS# CGSVideoPlugin::Id()"); + return KGSVideoPluginUid; + } + +// --------------------------------------------------------------------------- +// CGSVideoPlugin::HandleClientRectChange +// +// Handle changes to rect(). +// --------------------------------------------------------------------------- +// +void CGSVideoPlugin::HandleClientRectChange() + { + MPX_FUNC("#MS# CGSVideoPlugin::HandleClientRectChange()"); + if ( iContainer ) + { + iContainer->SetRect( ClientRect() ); + } + } + +// --------------------------------------------------------------------------- +// CGSVideoPlugin::DoActivateL +// +// First method called by the Avkon framwork to invoke a view. +// --------------------------------------------------------------------------- +// +void CGSVideoPlugin::DoActivateL( const TVwsViewId& aPrevViewId, + TUid /* aCustomMessageId */, + const TDesC8& /* aCustomMessage */) + { + MPX_FUNC("#MS# CGSVideoPlugin::DoActivateL()"); + iPrevViewId = aPrevViewId; + if( iContainer ) + { + AppUi()->RemoveFromViewStack( *this, iContainer ); + + delete iContainer; + iContainer = NULL; + } + + if (!iViewIds) + { + CreateLocalViewsL(); + } + CreateContainerL(); + AppUi()->AddToViewStackL( *this, iContainer ); + iContainer->ListBox()->SetListBoxObserver( this ) ; + ResetSelectedItemIndex(); + } + +// --------------------------------------------------------------------------- +// CGSVideoPlugin::DoDeactivate +// +// Called by the Avkon view framework when closing. +// --------------------------------------------------------------------------- +// +void CGSVideoPlugin::DoDeactivate() + { + MPX_FUNC("#MS# CGSVideoPlugin::DoDeactivate()"); + if ( iContainer ) + { + AppUi()->RemoveFromViewStack( *this, iContainer ); + delete iContainer; + iContainer = NULL; + } + } + +// --------------------------------------------------------------------------- +// CGSVideoPlugin::HandleCommandL +// +// Handle user menu actions in this view. +// --------------------------------------------------------------------------- +// +void CGSVideoPlugin::HandleCommandL( TInt aCommand ) + { + MPX_FUNC("#MS# CGSVideoPlugin::HandleCommandL()"); + switch ( aCommand ) + { + case EMPSettCmdOpen: + HandleListBoxSelectionL(); + break; + case EAknSoftkeyBack: + SetCurrentItem(EGSMediaSettingsVideoIndex); + AppUi()->ActivateLocalViewL( KGSAppsPluginUid ); + break; + case EMPSettCmdHelp: + { + if( FeatureManager::FeatureSupported( KFeatureIdHelp ) ) + { + HlpLauncher::LaunchHelpApplicationL( + iEikonEnv->WsSession(), AppUi()->AppHelpContextL() ); + } + break; + } + default: + AppUi()->HandleCommandL( aCommand ); + break; + } + } + +// --------------------------------------------------------------------------- +// CGSVideoPlugin::GetCaption +// +// Return application/view caption. +// --------------------------------------------------------------------------- +// +void CGSVideoPlugin::GetCaptionL( TDes& aCaption ) const + { + MPX_FUNC("#MS# CGSVideoPlugin::GetCaptionL()"); + // the resource file is already opened. + HBufC* result = StringLoader::LoadL( R_GS_MEDIASETTING_VIEW_CAPTION ); + + aCaption.Copy( *result ); + delete result; + } + +// --------------------------------------------------------------------------- +// CGSVideoPlugin::PluginProviderCategory +// +// A means to identify the location of this plug-in in the framework. +// --------------------------------------------------------------------------- +// +TInt CGSVideoPlugin::PluginProviderCategory() const + { + MPX_FUNC("#MS# CGSVideoPlugin::PluginProviderCategory()"); + //To identify internal plug-ins. + return KGSPluginProviderInternal; + } + +// ========================= From CGSBaseView ================== + + +// --------------------------------------------------------------------------- +// CGSVideoPlugin::NewContainerL +// +// Creates new iContainer. +// --------------------------------------------------------------------------- +// +void CGSVideoPlugin::NewContainerL() + { + MPX_FUNC("#MS# CGSVideoPlugin::NewContainerL()"); + iContainer = new( ELeave ) CMPSettingsMainContainer; + } + +// --------------------------------------------------------------------------- +// CGSVideoPlugin::HandleListBoxSelectionL +// +// Handle any user actions while in the list view. +// --------------------------------------------------------------------------- +void CGSVideoPlugin::HandleListBoxSelectionL() + { + MPX_FUNC("#MS# CGSVideoPlugin::HandleListBoxSelectionL()"); + iCurrentItem = iContainer->ListBox()->CurrentItemIndex(); + iTopItemIndex = iContainer->ListBox()->TopItemIndex(); + + CGSMediaPlayerVideoView* videoView = NULL; + CGSMediaPlayerStreamingView* streamingView = NULL; + + TInt count = iViewIds->Count(); + + for (TInt i = 0; i < count; i++) + { + if (i == 0) //first item of the list is Video view + { + videoView = static_cast(AppUi()->View(iViewIds->At(i))); + videoView->SetCurrentItem(KGSRopSettTopItemIndex); + } + else if (i == 1) //second item of the list is Streaming view + { + streamingView = static_cast(AppUi()->View(iViewIds->At(i))); + streamingView->SetCurrentItem(KGSRopSettTopItemIndex); + } + // Third item of the list is "Video service selection" + } + + AppUi()->ActivateLocalViewL(iViewIds->At(iCurrentItem)); + } + +// --------------------------------------------------------------------------- +// CGSVideoPlugin::Container +// +// Return handle to container class. +// --------------------------------------------------------------------------- +// +CMPSettingsMainContainer* CGSVideoPlugin::Container() + { + MPX_FUNC("#MS# CGSVideoPlugin::Container()"); + return static_cast( iContainer ); + } + +// --------------------------------------------------------------------------- +// CGSVideoPlugin::CreateContainerL() +// +// +// --------------------------------------------------------------------------- +// +void CGSVideoPlugin::CreateContainerL() + { + MPX_FUNC("#MS# CGSVideoPlugin::CreateContainerL()"); + NewContainerL(); + __ASSERT_DEBUG( + iContainer, User::Panic( KGSDoActivateError, EGSViewPanicNullPtr ) ); + iContainer->SetMopParent( this ); + + TRAPD( error, iContainer->ConstructL( ClientRect() ) ); + + if ( error ) + { + delete iContainer; + iContainer = NULL; + User::Leave( error ); + } + } + +// --------------------------------------------------------------------------- +// CGSVideoPlugin::CreateLocalViews() +// +// +// --------------------------------------------------------------------------- +// +void CGSVideoPlugin::CreateLocalViewsL() + { + MPX_FUNC("#MS# CGSVideoPlugin::CreateLocalViewsL()"); + // model creation + iModel = CMPSettingsModelForROP::NewL(); + + // Create vector which contains view id's for all setting folders. + iViewIds = new(ELeave) CArrayFixFlat(KGSRopSettViewIdArrayGranularity); + iViewIds->AppendL(KMPSettVideoViewId); + iViewIds->AppendL(KMPSettStreamingViewId); + iViewIds->AppendL(KMPSettFeedsViewId); + CAknView* view; + + view = CMPSettingsMainView::NewLC(iViewIds,iModel,iConstructAsGsPlugin); + AppUi()->AddViewL(view); // transfer ownership to CAknViewAppUi + CleanupStack::Pop(); // view + + // iMainView is not owned, i.e. it is not deleted in the destructor -> + // main view cannot be directly creted to iMainView, as it's against the coding + // conventions to place class' pointers to cleanup stack => static_cast. + iMainView = static_cast(view); + + view = CGSMediaPlayerVideoView::NewLC(iModel,iViewArray); + AppUi()->AddViewL(view); // transfer ownership to CAknViewAppUi + CleanupStack::Pop(); // view + + view = CGSMediaPlayerStreamingView::NewLC(iModel,iViewArray); + AppUi()->AddViewL(view); // transfer ownership to CAknViewAppUi + CleanupStack::Pop(); // view + + view = CVcxNsSettingsView::NewLC( iViewArray ); + AppUi()->AddViewL(view); // transfer ownership to CAknViewAppUi + CleanupStack::Pop(); // view + + view = CMPSettingsProxyView::NewLC(iModel,iConstructAsGsPlugin); + AppUi()->AddViewL(view); // transfer ownership to CAknViewAppUi + CleanupStack::Pop(); // view + + view = CMPSettingsNetworkView::NewLC(iModel,iConstructAsGsPlugin); + AppUi()->AddViewL(view); // transfer ownership to CAknViewAppUi + CleanupStack::Pop(); // view + + view = CMPSettingsAdvancedBwView::NewLC(iModel,iConstructAsGsPlugin); + AppUi()->AddViewL(view); // transfer ownership to CAknViewAppUi + CleanupStack::Pop(); // view + + // Construct plug-in views (if any exists) + CMPSettingsPluginView::ListImplementationsL(iImplInfoArray); + TInt count = iImplInfoArray.Count(); + + if (count > 0) + { + CMPSettingsPluginView* pluginView = NULL; + + for (TInt ii(0); ii < count; ++ii) + { + TUid uid = iImplInfoArray[ii]->ImplementationUid(); + pluginView = CMPSettingsPluginView::NewL(uid); + CleanupStack::PushL(pluginView); + AppUi()->AddViewL(pluginView); + CleanupStack::Pop(); // pluginView + + if (pluginView->OpenedFromMainView()) + { + iViewIds->AppendL(pluginView->Id()); + } + } + // Sort UID array to rising order + TKeyArrayFix sortKey(0, ECmpTUint); + User::LeaveIfError(iViewIds->Sort(sortKey)); + } + } + +// --------------------------------------------------------------------------- +// CGSVideoPlugin::CreateIconL +// +// Return the icon, if has one. +// --------------------------------------------------------------------------- +// +CGulIcon* CGSVideoPlugin::CreateIconL( const TUid aIconType ) + { + MPX_FUNC("#MS# CGSVideoPlugin::CreateIconL()"); + //EMbm + CGulIcon* icon; + + TFileName fileName; + LocateFilePathL( fileName ); + + if( aIconType == KGSIconTypeLbxItem ) + { + icon = AknsUtils::CreateGulIconL( + AknsUtils::SkinInstance(), + KAknsIIDDefault, + fileName, + EMbmMediasettingsQgn_menu_video, + EMbmMediasettingsQgn_menu_video_mask ); + } + else + { + icon = CGSPluginInterface::CreateIconL( aIconType ); + } + + return icon; + } + +// --------------------------------------------------------------------------- +// CGSVideoPlugin::TabbedViews() +// Returns pointer to tabbed views of application. +// --------------------------------------------------------------------------- +// +CArrayPtrFlat* CGSVideoPlugin::TabbedViews() + { + MPX_FUNC("#MS# CGSVideoPlugin::TabbedViews()"); + return iViewArray; + } + +// ----------------------------------------------------------------------------- +// CGSVideoPlugin::ResetSelectedItemIndex() +// +// +// ----------------------------------------------------------------------------- +// +void CGSVideoPlugin::ResetSelectedItemIndex() + { + MPX_FUNC("#MS# CGSVideoPlugin::ResetSelectedItemIndex()"); + if( iContainer ) + { + iContainer->SetSelectedItem( iCurrentItem ); + } + } + +// --------------------------------------------------------------------------- +// CGSVideoPlugin::SetCurrentItem +// +// +// --------------------------------------------------------------------------- +void CGSVideoPlugin::SetCurrentItem( TInt aIndex ) + { + MPX_FUNC("#MS# CGSVideoPlugin::SetCurrentItem()"); + iCurrentItem = aIndex; + } + +// --------------------------------------------------------------------------- +// CGSVideoPlugin::DynInitMenuPaneL +// Before showing a options menu +// --------------------------------------------------------------------------- +void CGSVideoPlugin::DynInitMenuPaneL(TInt aResourceId, CEikMenuPane* aMenuPane) + { + MPX_FUNC("#MS# CGSVideoPlugin::DynInitMenuPaneL()"); + if ( aResourceId == R_MPSETT_APP_MENU ) + { + // Help should be displayed only if the feature is supported according + // to Feature Manager + if (!FeatureManager::FeatureSupported(KFeatureIdHelp)) + { + aMenuPane->SetItemDimmed(EMPSettCmdHelp, ETrue); + } + } + } + +// ----------------------------------------------------------------------------- +// CGSVideoPlugin::LocateFilePathL +// ----------------------------------------------------------------------------- +// +void CGSVideoPlugin::LocateFilePathL( TFileName& aFileName, TBool aBitmapFile ) + { + _LIT( KGSResourceFileName, "mediasettings.rsc" ); + //_LIT( KGSIconFileName, "mediasettings.mbm"); + _LIT( KGSIconFileName, "mediasettings.mif"); + + TParse parse; + TFileName temp; + + if ( aBitmapFile ) // Mbm file + { + temp.Append(KGSIconFileName); + } + else // Rsc file + { + temp.Append(KGSResourceFileName); + } + + parse.Set( temp, &KDC_APP_RESOURCE_DIR, NULL ); + TPtrC iconFile = parse.FullName(); + + // This is done to ensure upgraded file is used first. + // If no upgraded file is found, default file in Z: drive will be used. + TFindFile find( CCoeEnv::Static()->FsSession() ); + TInt err = find.FindByDir( iconFile, KNullDesC ); + + if ( err ) + { + if ( aBitmapFile ) + { + aFileName.Append( KGSVideoPluginIconFileName ); + } + else + { + aFileName.Append( KGSVideoPluginResourceFileName ); + } + } + else + { + if ( aBitmapFile ) + { + // this Mbm file has the whole path including the drive + aFileName.Append( find.File() ); + } + else + { + // General Settings base class would only take in this format : + // So, the file name is returned in that particular format + TFileName tempFile; + tempFile.Append( find.File() ); // this rsc file has the whole path including the drive + aFileName.Append( tempFile[0] ); // append drive letter + aFileName.Append( tempFile[1] ); // append delimiter + aFileName.Append( KGSResourceFileName ); // append rsc_file_name + } + } + MPX_DEBUG3(_L("#MS# CGSVideoPlugin::LocateFilePathL(%d,%S)"),aBitmapFile,&aFileName); + } + +//End of File