--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/upnpsettings/upnpgsplugin/src/upnpgspluginview.cpp Thu Dec 17 08:52:00 2009 +0200
@@ -0,0 +1,352 @@
+/*
+* Copyright (c) 2008 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: CUPnPGSPluginView class implementation
+*
+*/
+
+
+
+
+
+
+
+#include <upnpgspluginrsc.rsg>
+#include <hlplch.h>
+#include <avkon.mbg>
+#include <bautils.h>
+#include <gsfwviewuids.h>
+#include <aknnavide.h>
+#include <StringLoader.h>
+#include <featmgr.h>
+#include <akntitle.h>
+#include <pathinfo.h>
+#include <upnpgspluginrsc.mbg>
+
+#include "upnpappsettingslist.h"
+#include "upnpfilesharingengine.h"
+#include "upnpgsplugin.hrh"
+#include "upnpgspluginview.h"
+#include "upnpsettingsengine.h"
+
+_LIT( KComponentLogfile, "upnpgsplugin.txt");
+#include "upnplog.h"
+
+// CONSTANTS
+const TUid KUPnPGSPluginImpUid = { KUPnPGSPluginImplementationUid };
+
+_LIT( KUPnPGSPluginRscFile, "\\resource\\upnpgspluginrsc.rsc" );
+_LIT( KAknHomeConnectMbmFileName, "\\resource\\apps\\upnpgspluginrsc.mif" );
+
+// ======== MEMBER FUNCTIONS ========
+
+// --------------------------------------------------------------------------
+// Two phased constructor.
+// --------------------------------------------------------------------------
+//
+CUPnPGSPluginView* CUPnPGSPluginView::NewL()
+ {
+ CUPnPGSPluginView* self = new ( ELeave ) CUPnPGSPluginView();
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+// --------------------------------------------------------------------------
+// CUPnPGSPluginView::CUPnPGSPluginView()
+// --------------------------------------------------------------------------
+//
+CUPnPGSPluginView::CUPnPGSPluginView()
+ {
+ __LOG("CUPnPGSPluginView::CUPnPGSPluginView");
+ }
+
+// --------------------------------------------------------------------------
+// CUPnPGSPluginView::ConstructL()
+// --------------------------------------------------------------------------
+//
+void CUPnPGSPluginView::ConstructL()
+ {
+ __LOG( "CUPnPGSPlugin::ConstructL" );
+ // Get the pointer to coe env (owned by Eikon env)
+ iCoeEnv = CEikonEnv::Static();
+
+ if( !iCoeEnv )
+ {
+ User::Leave( KErrNotSupported );
+ }
+
+ // Get the filesession reference from coe env
+ RFs& fileSession = iCoeEnv->FsSession();
+
+ // Load resource file
+ TFileName rscFileName( KUPnPGSPluginRscFile );
+ TFileName dllName;
+ Dll::FileName( dllName );
+ TBuf<2> drive = dllName.Left( 2 ); // Drive letter followed by ':'
+ rscFileName.Insert( 0, drive );
+
+ // Get the exact filename of the resource file
+ BaflUtils::NearestLanguageFile( fileSession, rscFileName );
+
+ // Check if the resource file exists or not
+ if ( !BaflUtils::FileExists( fileSession, rscFileName ) )
+ {
+ __LOG( "[UpnpCommand]\t Resource file does not exist!" );
+ User::Leave( KErrNotFound );
+ }
+
+ // Read the resource file offset
+ iResFileOffset = iCoeEnv->AddResourceFileL( rscFileName );
+
+ BaseConstructL( R_GS_UPNP_VIEW );
+ }
+
+// --------------------------------------------------------------------------
+// CUPnPGSPluginView::~CUPnPGSPluginView()
+// --------------------------------------------------------------------------
+//
+CUPnPGSPluginView::~CUPnPGSPluginView()
+ {
+ __LOG("CMSMainView::~CUPnPGSPluginView");
+
+ if ( iResFileOffset )
+ {
+ iCoeEnv->DeleteResourceFile( iResFileOffset );
+ }
+
+ DoDeactivate();
+ }
+
+// --------------------------------------------------------------------------
+// TUid CUPnPGSPluginView::Id()
+// --------------------------------------------------------------------------
+//
+TUid CUPnPGSPluginView::Id() const
+ {
+ __LOG("CUPnPGSPluginView::Id");
+
+ return KUPnPGSPluginImpUid;
+ }
+
+// --------------------------------------------------------------------------
+// CUPnPGSPluginView::HandleCommandL(TInt aCommand)
+// --------------------------------------------------------------------------
+//
+void CUPnPGSPluginView::HandleCommandL( TInt aCommand )
+ {
+ switch ( aCommand )
+ {
+
+ case EAknSoftkeyChange:
+ {
+ TInt selectedItem =
+ iSettingItemList->ListBox()->CurrentItemIndex();
+ iSettingItemList->EditItemL(selectedItem, ETrue);
+
+ // fix ESLX-7LYLR7
+ iSettingItemList->DrawNow();
+ break;
+ }
+ case EAknSoftkeyBack:
+ {
+ AppUi()->ActivateLocalViewL( iViewToClose.iViewUid );
+ break;
+ }
+ case EAknCmdHelp :
+ {
+ TRAP_IGNORE( HlpLauncher::LaunchHelpApplicationL(
+ iEikonEnv->WsSession(),
+ iEikonEnv->EikAppUi()->AppHelpContextL() ));
+ break;
+ }
+ default:
+ {
+ AppUi()->HandleCommandL( aCommand );
+ break;
+ }
+ }
+ }
+
+// --------------------------------------------------------------------------
+// CUPnPGSPluginView::DoActivateL(...)
+// --------------------------------------------------------------------------
+//
+void CUPnPGSPluginView::DoActivateL(
+ const TVwsViewId& aPrevViewId, TUid /*aCustomMessageId*/,
+ const TDesC8& /*aCustomMessage*/ )
+ {
+ __LOG("CUPnPGSPluginView::DoActivateL");
+
+ iViewToClose = aPrevViewId;
+
+ // Set title pane text to default
+ SetTitlePaneTextL( R_UPNP_GS_SETTINGS_VIEW_TITLE );
+
+ if( !iFileSharing )
+ {
+ iFileSharing = CUPnPFileSharingEngine::NewL();
+ iFileSharing->SetObserver( this );
+ }
+
+ if ( !iSettingItemList )
+ {
+ iSharingState = static_cast<TInt>( iFileSharing->SharingStateL() );
+ // create settings screen
+ iSettingItemList =
+ CUPnPAppSettingsList::NewL( iSharingState,
+ R_UPNP_GS_SETTINGS_LIST );
+ iSettingItemList->SetMopParent( this );
+ iSettingItemList->LoadDataFromEngineL();
+ // now control receives keyboard events
+ AppUi()->AddToStackL( *this, iSettingItemList );
+ iSettingItemList->ActivateL();
+ }
+
+ }
+
+// --------------------------------------------------------------------------
+// CUPnPGSPluginView::DoDeactivate()
+// --------------------------------------------------------------------------
+//
+void CUPnPGSPluginView::DoDeactivate()
+ {
+ __LOG("CUPnPGSPluginView::DoDeactivate");
+
+ if( iFileSharing )
+ {
+ iFileSharing->SetObserver( NULL );
+ }
+ delete iFileSharing;
+ iFileSharing = NULL;
+
+ if ( iSettingItemList )
+ {
+ AppUi()->RemoveFromStack( iSettingItemList );
+ }
+
+ delete iSettingItemList; // Deletes the container class object.
+ iSettingItemList = NULL;
+ }
+
+// --------------------------------------------------------------------------
+// Method for getting caption of this plugin.
+// --------------------------------------------------------------------------
+//
+void CUPnPGSPluginView::GetCaptionL( TDes& aCaption ) const
+ {
+ HBufC* pluginText = StringLoader::LoadLC(
+ R_UPNP_GS_SETTINGS_VIEW_CAPTION );
+ aCaption.Copy( *pluginText );
+ CleanupStack::PopAndDestroy( pluginText );
+ }
+
+// --------------------------------------------------------------------------
+// Creates a new icon of desired type.
+// --------------------------------------------------------------------------
+//
+CGulIcon* CUPnPGSPluginView::CreateIconL( const TUid /*aIconType*/ )
+ {
+ MAknsSkinInstance* skin = AknsUtils::SkinInstance();
+ TFileName iconsPath( AknIconUtils::AvkonIconFileName() );
+
+ CFbsBitmap* bitmap = NULL;
+ CFbsBitmap* mask = NULL;
+
+ AknsUtils::CreateIconLC(
+ skin,
+ KAknsIIDDefault,
+ bitmap,
+ mask,
+ KAknHomeConnectMbmFileName,
+ EMbmUpnpgspluginrscQgn_menu_upnp_homemedia,
+ EMbmUpnpgspluginrscQgn_menu_upnp_homemedia_mask );
+
+ CGulIcon* icon = CGulIcon::NewL(bitmap, mask);
+ CleanupStack::Pop(mask);
+ CleanupStack::Pop(bitmap);
+ bitmap = NULL;
+ mask = NULL;
+
+ return icon;
+ }
+
+// --------------------------------------------------------------------------
+// CUPnPGSPluginView::SetTitlePaneTextL()
+// Sets text to title pane.
+// --------------------------------------------------------------------------
+void CUPnPGSPluginView::SetTitlePaneTextL( TInt aResourceId )
+ {
+ // Fetches pointer to the default title pane control.
+ CAknTitlePane* titlePane = static_cast<CAknTitlePane*>(
+ StatusPane()->ControlL( TUid::Uid( EEikStatusPaneUidTitle ) ) );
+
+ TBuf<KMaxFileName> titleText( 0 );
+ iCoeEnv->ReadResourceL( titleText, aResourceId );
+ titlePane->SetTextL( titleText );
+ }
+
+// --------------------------------------------------------------------------
+// CUPnPGSPlugin::DynInitMenuPaneL()
+//
+// dynamically handle help item if not supported
+// --------------------------------------------------------------------------
+//
+void CUPnPGSPluginView::DynInitMenuPaneL( TInt aResourceId,
+ CEikMenuPane* aMenuPane )
+ {
+ if( aResourceId == R_HOMECONNECT_SETTINGS_MENU )
+ {
+ User::LeaveIfNull( aMenuPane );
+
+ if ( FeatureManager::FeatureSupported( KFeatureIdHelp ))
+ {
+ aMenuPane->SetItemDimmed( EAknCmdHelp, EFalse );
+ }
+ else
+ {
+ aMenuPane->SetItemDimmed( EAknCmdHelp, ETrue );
+ }
+ }
+ }
+
+// --------------------------------------------------------------------------
+// CUPnPGSPlugin::OnSharingStatusChanged
+// From MUPnPFileSharingEngineObserver
+// Function informs when file sharing was enabled or disabled
+// --------------------------------------------------------------------------
+//
+void CUPnPGSPluginView::OnSharingStatusChanged(
+ TInt aError, TBool aEnabled )
+ {
+ __LOG("CUPnPGSPlugin::OnSharingStatusChanged");
+ if ( !aError )
+ {
+ iSharingState = aEnabled;
+ }
+ }
+
+// --------------------------------------------------------------------------
+// CUPnPGSPluginView::OnSharingConnectionLost
+// From MUPnPFileSharingEngineObserver
+// Callback to inform if connection has been lost
+// --------------------------------------------------------------------------
+//
+void CUPnPGSPluginView::OnSharingConnectionLost()
+ {
+ iSharingState = EFalse;
+ }
+
+// End of File
+