mediasettings/gsvideoplugin/src/GSVideoPlugin.cpp
changeset 0 96612d01cf9f
child 1 6711b85517b7
--- /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