remotestoragefw/gsplugin/src/rsfwgsplugin.cpp
branchRCL_3
changeset 20 1aa8c82cb4cb
parent 0 3ad9d5175a89
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/remotestoragefw/gsplugin/src/rsfwgsplugin.cpp	Wed Sep 01 12:15:08 2010 +0100
@@ -0,0 +1,699 @@
+/*
+* 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 "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:  RsfwPlugin Implementation
+*
+*/
+
+
+// Includes
+#include <StringLoader.h>
+#include <rsfwgspluginrsc.rsg> 
+#include <gsfwviewuids.h> // for KUidGS
+#include <aknnotewrappers.h>
+#include <hlplch.h>
+#include <utf.h>
+#include <rsfwgsplugin.mbg>
+#include <featmgr.h>
+#include <csxhelp/cp.hlp.hrh>
+#include <rsfwmountman.h>
+#include <rsfwmountentry.h>
+
+#include "rsfwgsplugin.h"
+#include "rsfwinterface.h"
+#include "rsfwgsplugindrivelistcontainer.h"
+#include "rsfwgsremotedrivesettingscontainer.h"
+#include "rsfwgslocalviewids.h"
+
+
+#define KUidGeneralSettings   0x100058EC
+
+// ========================= MEMBER FUNCTIONS ================================
+
+// ---------------------------------------------------------------------------
+// CRsfwGsPlugin::CRsfwGsPlugin()
+// Constructor
+//
+// ---------------------------------------------------------------------------
+//
+CRsfwGsPlugin::CRsfwGsPlugin( )
+    : iAppUi( CAknView::AppUi() ), iResources( *CCoeEnv::Static() )
+    {
+    
+    }
+
+// ---------------------------------------------------------------------------
+// CRsfwGsPlugin::~CRsfwGsPlugin()
+// Destructor
+//
+// ---------------------------------------------------------------------------
+//
+CRsfwGsPlugin::~CRsfwGsPlugin()
+    {    
+    FeatureManager::UnInitializeLib();
+    
+    if (iCurrentContainer && iAppUi)
+        {
+        iAppUi->RemoveFromViewStack( *this, iCurrentContainer );
+        }
+    delete iMainListContainer;
+    delete iSettingListContainer;
+    delete iMountMan;
+    delete iSender;
+    iResources.Close();
+    /** Nice to know when the plugin is cleaned up */
+    #ifdef _DEBUG
+    RDebug::Print( _L( "[CRsfwGsPlugin] ~CRsfwGsPlugin()" ) );
+    #endif
+
+    }
+
+// ---------------------------------------------------------------------------
+// CRsfwGsPlugin::ConstructL()
+// Symbian OS two-phased constructor
+// ---------------------------------------------------------------------------
+//
+void CRsfwGsPlugin::ConstructL()
+    {
+    // To know if the plugin is loaded (for debugging)
+    #ifdef _DEBUG
+    RDebug::Print(_L("[CRsfwGsPlugin] ConstructL()" ));
+    RDebug::Print( _L( "[CRsfwGsPlugin] Loading resource from :" ) );
+    RDebug::Print( KRsfwGsPluginResourceFileName );
+    #endif
+    
+   	iMountMan = CRsfwMountMan::NewL(0, NULL);   
+   	
+   	iSender = CRsfwGsRemoteDriveSend::NewL(EGSCmdAppSendLink);
+    
+    TFileName fileName( KRsfwGsPluginResourceFileName );
+    iResources.OpenL( fileName ); 
+    BaseConstructL( R_GS_RSFW_MAIN_VIEW );
+    	
+    FeatureManager::InitializeLibL();		
+   	
+    }
+
+// ---------------------------------------------------------------------------
+// CRsfwGsPlugin::NewL()
+// Static constructor
+// ---------------------------------------------------------------------------
+//
+CRsfwGsPlugin* CRsfwGsPlugin::NewL( TAny* /*aInitParams*/ )
+    {
+    CRsfwGsPlugin* self = new(ELeave) CRsfwGsPlugin( );
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+
+// ---------------------------------------------------------------------------
+// CRsfwGsPlugin::Id() const
+// ---------------------------------------------------------------------------
+//
+TUid CRsfwGsPlugin::Id() const
+    {
+    return KGSRsfwPluginUID;
+    }
+
+// ---------------------------------------------------------------------------
+// CRsfwGsPlugin::HandleClientRectChange()
+// ---------------------------------------------------------------------------
+//
+void CRsfwGsPlugin::HandleViewRectChange()
+    {
+    if ( iMainListContainer->IsVisible() )
+        {
+        iMainListContainer->SetRect( ClientRect() );
+        }
+        
+    if ( iSettingListContainer->IsVisible() )
+        {
+        iSettingListContainer->SetRect( ClientRect() );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CRsfwGsPlugin::DoActivateL()
+// ---------------------------------------------------------------------------
+//
+void CRsfwGsPlugin::DoActivateL( const TVwsViewId& aPrevViewId,
+                                  TUid aCustomMessageId,
+                                  const TDesC8& aCustomMessage )
+    {
+    iPrevViewId = aPrevViewId;
+    if (iCurrentContainer)
+        {
+        iAppUi->RemoveFromViewStack( *this, iCurrentContainer );
+        iCurrentContainer = NULL;
+        }
+        
+
+    if( iMainListContainer )
+        {
+        delete iMainListContainer;
+        iMainListContainer=NULL;
+        }
+
+    if( iSettingListContainer )
+        {
+        delete iSettingListContainer;
+        iSettingListContainer = NULL;
+        }
+            
+    iMainListContainer = new( ELeave ) CRsfwGsPluginDriveListContainer(this);
+    iMainListContainer->SetMopParent(this);
+    TRAPD( error, iMainListContainer->ConstructL( ClientRect(), iMountMan ) );
+    if (error)
+        {
+        delete iMainListContainer;
+        iMainListContainer = NULL;
+        User::Leave( error );
+        }
+        
+    iSettingListContainer = new( ELeave ) CRsfwGsPluginDriveSettingsContainer(this);
+    iSettingListContainer->SetMopParent(this);
+    TRAPD( error1, iSettingListContainer->ConstructL( ClientRect(), iMountMan));
+    if (error1)
+        {
+        delete iSettingListContainer;
+        iSettingListContainer = NULL;
+        User::Leave( error1 );
+        }
+
+  if (aCustomMessageId == KRemoteDriveSettingsViewId)  
+    	{
+    	TBuf<KMaxFriendlyNameLength> remoteDrive;
+    	CnvUtfConverter::ConvertToUnicodeFromUtf8(remoteDrive, aCustomMessage);
+    	iSettingListContainer->MakeVisible(ETrue);
+    	if (remoteDrive.Length() > 0) 
+    	    {
+    	    LoadSettingsViewL(EEditExisting, remoteDrive, EFalse); 
+    	    }
+    	 else 
+    	    {
+    	    LoadSettingsViewL(ENewDefault, 
+                    iMainListContainer->GetNextRemoteDriveNameL(), EFalse);
+    	    }
+    	iCurrentContainer = iSettingListContainer;
+    	} 
+    else 
+    	{
+    	iSettingListContainer->MakeVisible(EFalse);
+    	iCurrentContainer = iMainListContainer;
+    	}
+
+    UpdateCbaL();
+    iAppUi->AddToViewStackL( *this, iCurrentContainer ); 
+    }
+
+
+// ---------------------------------------------------------------------------
+// CRsfwGsPlugin::DoDeactivate()
+// ---------------------------------------------------------------------------
+//
+void CRsfwGsPlugin::DoDeactivate()
+    {
+    // try to save settings if in settings list container
+    if ( iCurrentContainer && iSettingListContainer
+        && iCurrentContainer == iSettingListContainer )
+        {
+        TRAP_IGNORE(iSettingListContainer->SaveSettingsL());
+        }
+        
+    if ( iCurrentContainer )
+        {
+        iAppUi->RemoveFromViewStack( *this, iCurrentContainer );
+        }
+    iCurrentContainer = NULL;
+
+    if( iMainListContainer )
+        {
+        delete iMainListContainer;
+        iMainListContainer = NULL;
+        }
+        
+    if( iSettingListContainer )
+        {
+        delete iSettingListContainer;
+        iSettingListContainer = NULL;
+        }        
+    }
+
+
+
+// ---------------------------------------------------------------------------
+// CRsfwGsPlugin::HandleCommandL()
+// ---------------------------------------------------------------------------
+//
+void CRsfwGsPlugin::HandleCommandL( TInt aCommand )
+    {
+  	switch ( aCommand )
+        {
+        case EAknSoftkeyBack:
+            if (iCurrentContainer == iSettingListContainer)
+                {
+                if (iSettingListContainer->IsExitProcessingOKL()) 
+                	{
+                	// if we are called from GS, go back to the main view
+                	// otherwise we are called e.g. from FileManager =>
+                	// go back to the previous view
+                	if (iPrevViewId.iAppUid == KUidGS)
+                		{
+                		LoadMainViewL();
+                		// set focus on the newly created/modified drive
+                		// we have to pass the name cause in case a drive has just been created
+                		// we don't know its position on the list
+                		iMainListContainer->SetFocusL(iSettingListContainer->GetCurrentRemoteDriveName());
+                		}
+                	else 
+                		{
+                		iAppUi->ActivateLocalViewL( iPrevViewId.iViewUid );	
+                		}
+                	
+                	}              
+                }
+            else  
+          	  {
+               iAppUi->ActivateLocalViewL( iPrevViewId.iViewUid );
+           	  }
+                
+            break;
+        case EGSCmdAppEdit:
+            if (!(iMainListContainer->IsListEmpty())) 
+                {
+                iMainListContainer->EditCurrentItemL();
+                }
+        	break;
+        case EGSCmdAppChange:
+            iSettingListContainer->EditCurrentItemL();                       
+            break;   
+        case EGSCmdAppNew:
+        	// Number of remote drives is limited to 9, so that drive
+        	// letters are also available for other technologies.
+        	if (iMainListContainer->RemoteDriveCount() < KMaxRemoteDrives) 
+        	{
+      			LoadSettingsViewL(ENewDefault, 
+                    iMainListContainer->GetNextRemoteDriveNameL(), ETrue);
+        	}
+        	else 
+        	{
+                HBufC* myDisplayMessage = NULL;
+                myDisplayMessage = StringLoader::LoadLC(R_STR_RSFW_ERROR_MAX_DRIVES);
+                CAknErrorNote* errorNote = new CAknErrorNote(EFalse);
+                errorNote->ExecuteLD(*myDisplayMessage);
+                CleanupStack::PopAndDestroy(myDisplayMessage);
+        	}
+            break;
+        case EGSCmdAppDelete:
+            DeleteRemoteDriveL();
+            break;
+       	case EGSCmdAppConnect:
+       		ConnectRemoteDriveL();
+       		break;
+       	case EGSCmdAppDisconnect:
+       		DisconnectRemoteDriveL();
+       		break;	
+        case EAknCmdHelp:
+        	{
+            if (iCurrentContainer == iSettingListContainer)
+                {
+                LaunchHelpL(KRD_HLP_REMOTE_DRIVE_CONFIG);
+                }
+               
+            else 
+                {
+                LaunchHelpL(KRD_HLP_REMOTE_DRIVES);
+                }
+            
+        	}
+        	break;
+        case EGSCmdAppSendLink:
+        	{
+        	SendLinkL();
+        	}
+        	break;
+        default:
+            iAppUi->HandleCommandL( aCommand );
+            break;
+        }
+    }
+    
+
+// ---------------------------------------------------------------------------
+// CRsfwGsPlugin::GetCaptionL()
+// ---------------------------------------------------------------------------
+//
+void CRsfwGsPlugin::GetCaptionL( TDes& aCaption ) const
+    {
+    StringLoader::Load( aCaption, R_GS_REMOTE_DRIVES_VIEW_CAPTION );
+    }
+
+// ---------------------------------------------------------------------------
+// CRsfwGsPlugin::CreateIconL()
+// ---------------------------------------------------------------------------
+//
+ CGulIcon* CRsfwGsPlugin::CreateIconL( const TUid aIconType )
+ 	{
+ 	 CGulIcon* icon;
+       
+    if( aIconType == KGSIconTypeLbxItem )
+        {
+        icon = AknsUtils::CreateGulIconL(
+        AknsUtils::SkinInstance(), 
+        KAknsIIDQgnPropSetConnRemotedrive, 
+        KGSPluginBitmapFile,
+        EMbmRsfwgspluginQgn_prop_set_conn_remotedrive,
+        EMbmRsfwgspluginQgn_prop_set_conn_remotedrive_mask);
+        }
+     else
+        {
+        icon = CGSPluginInterface::CreateIconL( aIconType );
+        }
+ 	return icon;
+ 	}
+
+
+// ---------------------------------------------------------------------------
+// CRsfwGsPlugin::LoadSettingsViewL()
+// ---------------------------------------------------------------------------
+//
+void CRsfwGsPlugin::LoadSettingsViewL(TRsfwSettingsViewType aType, TDesC& aRemoteDrive, TBool aAddToViewStack)
+    {
+    switch(aType)
+        {
+        case EEditExisting:
+            iSettingListContainer->PrepareRemoteDriveForEditingL(aRemoteDrive);
+            break;
+        case ENewDefault:
+            iSettingListContainer->PrepareRemoteDriveNewDefaultL(aRemoteDrive);
+            break;
+        default:
+            break;
+        }
+    if (iCurrentContainer)
+        iAppUi->RemoveFromViewStack( *this, iCurrentContainer );
+    iCurrentContainer = iSettingListContainer;
+    if (aAddToViewStack) 
+        {
+        iAppUi->AddToViewStackL( *this, iCurrentContainer );
+        }
+    iMainListContainer->MakeVisible(EFalse);
+    iSettingListContainer->MakeVisible(ETrue);
+    UpdateCbaL();
+    }
+
+
+// ---------------------------------------------------------------------------
+// CRsfwGsPlugin::LoadMainViewL()
+// ---------------------------------------------------------------------------
+//
+void CRsfwGsPlugin::LoadMainViewL()
+    {
+    iMainListContainer->LoadRemoteDriveListArrayL();
+    if (iCurrentContainer)
+        iAppUi->RemoveFromViewStack( *this, iCurrentContainer );
+    iCurrentContainer = iMainListContainer;
+    iAppUi->AddToViewStackL( *this, iCurrentContainer );
+   
+    iMainListContainer->SetFocus();
+   
+    iSettingListContainer->MakeVisible(EFalse);  
+    UpdateCbaL();
+    iMainListContainer->MakeVisible(ETrue);
+    Cba()->DrawDeferred();  
+    }
+    
+
+    
+// ---------------------------------------------------------------------------
+// CRsfwGsPlugin::DynInitMenuPaneL()
+// ---------------------------------------------------------------------------
+//
+void CRsfwGsPlugin::DynInitMenuPaneL( TInt aResourceId, 
+                                      CEikMenuPane* aMenuPane )
+    {
+    if ( aResourceId == R_GS_REMOTE_DRIVES_MENU )
+        {
+        if (iCurrentContainer == iMainListContainer)
+       		{
+        	aMenuPane->SetItemDimmed(EGSCmdAppChange, ETrue);
+        	if (iMainListContainer->IsListEmpty())
+            	{
+				aMenuPane->SetItemDimmed( EGSCmdAppEdit, ETrue );
+            	aMenuPane->SetItemDimmed( EGSCmdAppDelete, ETrue ); 
+            	aMenuPane->SetItemDimmed( EGSCmdAppConnect, ETrue );
+            	aMenuPane->SetItemDimmed( EGSCmdAppDisconnect, ETrue );  
+            	aMenuPane->SetItemDimmed( EGSCmdAppSendLink, ETrue );
+            	}
+            else 
+                {
+                TBool isDriveConnected = IsDriveConnectedL();
+                aMenuPane->SetItemDimmed( EGSCmdAppDelete, isDriveConnected ); 
+                aMenuPane->SetItemDimmed( EGSCmdAppConnect, isDriveConnected );  
+                aMenuPane->SetItemDimmed( EGSCmdAppEdit, isDriveConnected );  
+            	aMenuPane->SetItemDimmed( EGSCmdAppDisconnect, !isDriveConnected );  	
+                }
+       		}
+        else 
+        	{
+        	aMenuPane->SetItemDimmed( EGSCmdAppNew, ETrue );
+    		aMenuPane->SetItemDimmed( EGSCmdAppEdit, ETrue );
+            aMenuPane->SetItemDimmed( EGSCmdAppDelete, ETrue ); 
+            aMenuPane->SetItemDimmed( EGSCmdAppConnect, ETrue );
+            aMenuPane->SetItemDimmed( EGSCmdAppDisconnect, ETrue );  
+            aMenuPane->SetItemDimmed( EGSCmdAppSendLink, ETrue );
+        	}
+        
+        }
+        
+     if (aResourceId == R_GS_MENU_ITEM_EXIT) 
+        {
+       if (!FeatureManager::FeatureSupported( KFeatureIdHelp )) 
+            {
+            aMenuPane->SetItemDimmed( EAknCmdHelp , ETrue );
+            }
+        }       
+    }
+
+
+// ---------------------------------------------------------------------------
+// CRsfwGsPlugin::DeleteRemoteDriveL()
+// ---------------------------------------------------------------------------
+//
+void CRsfwGsPlugin::DeleteRemoteDriveL()
+    {
+  
+    HBufC* myFormatMessage = NULL;
+    HBufC* here = iMainListContainer->GetCurrentRemoteDriveNameLC();
+    TChar driveId = iMainListContainer->GetCurrentRemoteDriveIdL();
+    
+    if (!iMainListContainer->IsDriveConnectedL(*here)) 
+        {
+        if ( here->Length() )
+            {
+            myFormatMessage = StringLoader::LoadLC( R_STR_RSFW_CONF_DELETE, *here );
+            }
+        else
+            {
+            myFormatMessage = StringLoader::LoadLC( R_STR_RSFW_CONF_DELETE );
+            }
+    
+        CAknQueryDialog* query = CAknQueryDialog::NewL(CAknQueryDialog::EConfirmationTone);
+        
+        iDialog = query;
+        iDeletingId = iMainListContainer->GetCurrentRemoteDriveIdL();
+   
+        if ( query->ExecuteLD( R_CONFIRMATION_QUERY, *myFormatMessage ) )
+            {
+            if (iMainListContainer->RemoteDriveCount() > 0) 
+                {
+                TChar currentdriveId = iMainListContainer->GetCurrentRemoteDriveIdL();
+                if (driveId == currentdriveId) 
+                    {
+                    iMainListContainer->DeleteCurrentRemoteDriveL();
+                    }
+                }
+            }
+        iDialog = NULL;
+        
+        CleanupStack::PopAndDestroy(myFormatMessage); 
+    
+        UpdateCbaL();  
+
+        }
+    CleanupStack::PopAndDestroy(here);
+    }
+    
+// ---------------------------------------------------------------------------
+// CRsfwGsPlugin::ProcessDeletingDialog()
+// ---------------------------------------------------------------------------
+//
+void CRsfwGsPlugin::ProcessDeletingDialog()
+    {
+	  if ( (iMainListContainer->RemoteDriveCount() == 0) || 
+            (iDeletingId != iMainListContainer->GetCurrentRemoteDriveIdL()) )
+        {
+        if (iDialog)
+            {
+            delete iDialog;
+			      iDialog = NULL;
+			      }
+		    }
+	  }
+    
+// ---------------------------------------------------------
+// CRsfwGsPlugin::LaunchHelpL()
+// ---------------------------------------------------------
+//
+void CRsfwGsPlugin::LaunchHelpL( const TDesC& aContext )
+	{
+	//make context array
+    //granurality 1 is ok cos there is added just one item
+    CArrayFix< TCoeHelpContext >* cntx = new( ELeave ) CArrayFixFlat< TCoeHelpContext >( 1 );
+    CleanupStack::PushL( cntx );
+
+    cntx->AppendL( TCoeHelpContext( TUid::Uid(KUidGeneralSettings), aContext ) );
+    CleanupStack::Pop( cntx );
+
+    //and launch help - takes ownership of context array
+    HlpLauncher::LaunchHelpApplicationL( iEikonEnv->WsSession(), cntx);
+	}    
+	
+// ---------------------------------------------------------
+// CRsfwGsPlugin::HandleResourceChangeManual
+// ---------------------------------------------------------
+//
+void CRsfwGsPlugin::HandleResourceChangeManual(TInt aType)
+    {
+    if (iCurrentContainer==iSettingListContainer)
+        iMainListContainer->HandleResourceChangeManual(aType);
+    else if (iCurrentContainer==iMainListContainer)
+        iSettingListContainer->HandleResourceChangeManual(aType);    
+    }  
+    
+// ---------------------------------------------------------------------------
+// CRsfwGsPlugin::IsDriveConnected()
+// ---------------------------------------------------------------------------
+//    
+TBool CRsfwGsPlugin::IsDriveConnectedL()
+    {
+    TBool connected;
+	HBufC* currentDriveName = iMainListContainer->GetCurrentRemoteDriveNameLC();
+	if (!currentDriveName) 
+	    {
+	    User::Leave(KErrNotFound);
+	    }
+    TPtrC drivePtr = currentDriveName->Ptr();
+    connected = iMainListContainer->IsDriveConnectedL(drivePtr.Left(currentDriveName->Length()));
+    CleanupStack::PopAndDestroy(currentDriveName);
+    return connected;  
+    }
+
+// ---------------------------------------------------------------------------
+// CRsfwGsPlugin::ConnectRemoteDrive()
+// ---------------------------------------------------------------------------
+//    
+void CRsfwGsPlugin::ConnectRemoteDriveL()
+    {
+    iMainListContainer->ConnectCurrentRemoteDriveL();  
+    }    
+    
+// ---------------------------------------------------------------------------
+// CRsfwGsPlugin::DisconnectRemoteDrive()
+// ---------------------------------------------------------------------------
+//    
+void CRsfwGsPlugin::DisconnectRemoteDriveL()
+    {
+    iMainListContainer->DisconnectCurrentRemoteDriveL();  
+    }    
+   
+   
+
+// ----------------------------------------------------
+//  CRsfwGsPlugin::DoSendAsL
+// ----------------------------------------------------
+//
+void CRsfwGsPlugin::DoSendAsL()
+    {
+    // read the source setting
+    const CRsfwMountEntry* mountEntry = NULL;
+    HBufC* currentDriveName = iMainListContainer->GetCurrentRemoteDriveNameLC();
+    TPtrC drivePtr = currentDriveName->Ptr();
+    mountEntry = iMountMan->MountEntryL(
+    						drivePtr.Left(currentDriveName->Length()));
+    CleanupStack::PopAndDestroy(currentDriveName);
+    iSender->SendL( *mountEntry );
+    }
+   
+   
+void CRsfwGsPlugin::SendLinkL( )
+	{
+	HBufC* driveBuf = iMainListContainer->GetCurrentRemoteDriveNameLC();	
+	iSender->DisplaySendCascadeMenuL();
+
+    // make sure that the mountentry was not deleted
+    if (driveBuf) 
+        {	
+        const CRsfwMountEntry* mountentry = iMountMan->MountEntryL(*driveBuf);
+	    CleanupStack::PopAndDestroy(driveBuf);
+	    if (mountentry) 
+	        {
+	        if (iSender->CanSend()) 
+		        {
+		        DoSendAsL();
+		        }   
+	        }
+        }
+
+	}
+	
+void CRsfwGsPlugin::UpdateCbaL() 
+    {
+    CEikButtonGroupContainer* cbaGroup = Cba();
+    
+    if (iCurrentContainer == iMainListContainer) 
+        {
+        cbaGroup->SetCommandSetL(R_RSFW_SOFTKEYS_OPTIONS_BACK_EDIT);
+        if (iMainListContainer->IsListEmpty())
+            {
+            cbaGroup->MakeCommandVisible(EGSCmdAppEdit, EFalse);
+            }
+        else if (IsDriveConnectedL()) 
+            {
+            cbaGroup->MakeCommandVisible(EGSCmdAppEdit, EFalse);
+            }
+        else
+            {
+            cbaGroup->MakeCommandVisible(EGSCmdAppEdit, ETrue);
+            }
+        }
+    else if (iCurrentContainer == iSettingListContainer) 
+        {
+        cbaGroup->SetCommandSetL(R_RSFW_SOFTKEYS_OPTIONS_BACK_CHANGE);
+        // it is possible that the MSK command was dimmed 
+        cbaGroup->MakeCommandVisible(EGSCmdAppChange, ETrue);
+        }
+    
+    Cba()->DrawDeferred();    
+    }
+  
+CCoeControl* CRsfwGsPlugin::CurrentContainer() 
+    {
+    return iCurrentContainer;
+    }  
+    
+// End of file
+