--- /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 <coeaui.h>
+#include <hlplch.h> // For HlpLauncher
+#include <aknview.h>
+#include <aknViewAppUi.h>
+#include <featmgr.h>
+#include <bautils.h>
+#include <StringLoader.h> //for StringLoader
+#include <gsprivatepluginproviderids.h>
+#include <gsmainview.h>
+#include <mediasettings.mbg>
+#include <gsfwviewuids.h> //for KGSMainViewUid
+#include <MediaSettings.rsg>
+#include <eiktxlbm.h>
+#include <eikmenup.h>
+
+// 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<MGSTabbedView>( 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<CGSMediaPlayerVideoView*>(AppUi()->View(iViewIds->At(i)));
+ videoView->SetCurrentItem(KGSRopSettTopItemIndex);
+ }
+ else if (i == 1) //second item of the list is Streaming view
+ {
+ streamingView = static_cast<CGSMediaPlayerStreamingView*>(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<CMPSettingsMainContainer*>( 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<TUid>(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<CMPSettingsMainView*>(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<Mbm_file_name><Bitmap_name>
+ 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<MGSTabbedView>* 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 <drive>:<rsc_file_name>
+ // 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