upnpsettings/upnpgsplugin/src/upnpgspluginview.cpp
changeset 0 7f85d04be362
--- /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
+