--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/remotestoragefw/gsplugin/src/rsfwgsremotedrivesettingscontainer.cpp Thu Dec 17 09:07:59 2009 +0200
@@ -0,0 +1,757 @@
+/*
+* 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: Rsfw GS plugin Settins list container
+*
+*/
+
+
+// INCLUDE FILES
+#include <akntitle.h>
+#include <barsread.h>
+#include <StringLoader.h>
+#include <AknQueryDialog.h>
+#include <aknnotewrappers.h>
+#include <rsfwgspluginrsc.rsg>
+#include <uri16.h>
+
+#include "rsfwgslocalviewids.h"
+#include "rsfwgsplugin.h"
+#include "rsfwgsremotedrivesettingscontainer.h"
+#include "rsfwgspluginsettinglist.h"
+#include "rsfwgssettingsdata.h"
+#include "rsfwmountman.h"
+#include "rsfwmountentry.h"
+#include "rsfwmountutils.h"
+#include "rsfwcommon.h"
+#include "mdebug.h"
+
+
+// ---------------------------------------------------------------------------
+// CRsfwGsPluginDriveSettingsContainer::CRsfwGsPluginDriveSettingsContainer()
+// ---------------------------------------------------------------------------
+//
+CRsfwGsPluginDriveSettingsContainer::CRsfwGsPluginDriveSettingsContainer(CAknView* aView) : iView(aView)
+ {
+
+ }
+
+// ---------------------------------------------------------------------------
+// CRsfwGsPluginDriveSettingsContainer::ConstructL(const TRect& aRect)
+// ---------------------------------------------------------------------------
+//
+void CRsfwGsPluginDriveSettingsContainer::ConstructL( const TRect& aRect,
+ CRsfwMountMan* aMountMan)
+ {
+ #ifdef _DEBUG
+ RDebug::Print( _L( "[CRsfwGsPluginDriveSettingsContainer] ConstructL()" ) );
+ #endif
+
+ iMountMan = aMountMan;
+
+ CEikStatusPane* sp = static_cast<CAknAppUi*>
+ ( iEikonEnv->EikAppUi() )->StatusPane();
+ CAknTitlePane* title = static_cast<CAknTitlePane*>
+ ( sp->ControlL( TUid::Uid( EEikStatusPaneUidTitle ) ) );
+
+ // Set the proper title of this list
+ TResourceReader rReader;
+ iCoeEnv->CreateResourceReaderLC( rReader, R_GS_RSFW_REMOTE_DRIVE_SETTINGS_VIEW_TITLE );
+ title->SetFromResourceL( rReader );
+ CleanupStack::PopAndDestroy(); //rReader
+
+ CreateWindowL(); // Makes the control a window-owning control
+
+ // construct the data object the settings list will use
+ iData = CRsfwGsSettingsData::NewL();
+ // construct control and set parent
+ iSettingList = CRsfwGsPluginSettingsList::NewL(*iData);
+ iSettingList->SetContainerWindowL(*this);
+
+ // CreateResourceReaderLC will allocate a buffer to be used by
+ // the TResourceReader. This buffer is pushed onto the cleanup
+ // stack - not the TResourceReader itself
+ iEikonEnv->CreateResourceReaderLC(rReader, R_SETTINGS);
+ iSettingList->ConstructFromResourceL(rReader);
+
+ // Clean up the buffer allocated above, NOT the reader itself.
+ // Cannot use expected item overload of PopAndDestroy() as buffer
+ // is inaccessible.
+ CleanupStack::PopAndDestroy();
+ iSettingList->ActivateL();
+
+ iCoeEnv->AddForegroundObserverL( *this );
+
+ SetRect( aRect );
+ ActivateL();
+
+
+ #ifdef _DEBUG
+ RDebug::Print( _L( "[CRsfwGsPluginDriveSettingsContainer] Construct done" ) );
+ #endif
+ }
+
+// ---------------------------------------------------------------------------
+// CRsfwGsPluginDriveSettingsContainer::~CRsfwGsPluginDriveSettingsContainer()
+// ---------------------------------------------------------------------------
+//
+CRsfwGsPluginDriveSettingsContainer::~CRsfwGsPluginDriveSettingsContainer()
+ {
+ iCoeEnv->RemoveForegroundObserver( *this );
+ if (iData)
+ delete iData;
+ if(iSettingList) // if setting list has been created
+ {
+ delete iSettingList;
+ iSettingList = NULL;
+ }
+
+ // Ecom session is used to make sure that user gives address
+ // that corresponds to some installed access plugin
+ // (currently via mountils::isaddressvalid)
+ // this closes the session (if not in use anymore)
+ REComSession::FinalClose();
+ }
+
+
+// ---------------------------------------------------------------------------
+// CRsfwGsPluginDriveSettingsContainer::SizeChanged()
+// ---------------------------------------------------------------------------
+//
+void CRsfwGsPluginDriveSettingsContainer::SizeChanged()
+ {
+ iSettingList->SetRect(Rect());
+ }
+
+// ---------------------------------------------------------------------------
+// CRsfwGsPluginDriveSettingsContainer::CountComponentControls() const
+// ---------------------------------------------------------------------------
+//
+TInt CRsfwGsPluginDriveSettingsContainer::CountComponentControls() const
+ {
+ return 1;
+ }
+
+// ---------------------------------------------------------------------------
+// CRsfwGsPluginDriveSettingsContainer::ComponentControl( TInt aIndex ) const
+// ---------------------------------------------------------------------------
+//
+CCoeControl* CRsfwGsPluginDriveSettingsContainer::ComponentControl( TInt aIndex ) const
+ {
+ switch ( aIndex )
+ {
+ case 0:
+ return iSettingList;
+ default:
+ return NULL;
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CRsfwGsPluginDriveSettingsContainer::EditCurrentItemL()
+// ---------------------------------------------------------------------------
+//
+void CRsfwGsPluginDriveSettingsContainer::EditCurrentItemL()
+ {
+ iSettingList->EditCurrentItemL();
+ }
+
+// ---------------------------------------------------------------------------
+// CRsfwGsPluginDriveSettingsContainer::OfferKeyEventL()
+// ---------------------------------------------------------------------------
+//
+TKeyResponse CRsfwGsPluginDriveSettingsContainer::OfferKeyEventL(
+ const TKeyEvent& aKeyEvent,
+ TEventCode aType )
+ {
+ if (iSettingList)
+ return iSettingList->OfferKeyEventL(aKeyEvent, aType);
+ else
+ return EKeyWasNotConsumed;
+ }
+
+// ---------------------------------------------------------------------------
+// CRsfwGsPluginDriveSettingsContainer::Draw(const TRect& aRect) const
+// ---------------------------------------------------------------------------
+//
+void CRsfwGsPluginDriveSettingsContainer::Draw(const TRect& aRect) const
+ {
+ CWindowGc& gc = SystemGc();
+ gc.Clear(aRect);
+ }
+
+
+
+// ---------------------------------------------------------------------------
+// CRsfwGsPluginDriveSettingsContainer::HandleListBoxEventL()
+// ---------------------------------------------------------------------------
+//
+void CRsfwGsPluginDriveSettingsContainer::HandleListBoxEventL(CEikListBox* /*aListBox*/, TListBoxEvent aListBoxEvent)
+ {
+ // if the Select Key has been pressed
+ if ((aListBoxEvent == MEikListBoxObserver::EEventEnterKeyPressed) ||
+ (aListBoxEvent == MEikListBoxObserver::EEventItemClicked))
+ {
+ iSettingList->EditCurrentItemL();
+ }
+ }
+
+
+
+// ---------------------------------------------------------------------------
+// CRsfwGsPluginDriveSettingsContainer::PrepareRemoteDriveForEditingL(TDesC& aRemoteDriveName)
+// ---------------------------------------------------------------------------
+//
+void CRsfwGsPluginDriveSettingsContainer::PrepareRemoteDriveForEditingL(const TDesC& aRemoteDriveName)
+ {
+ DEBUGSTRING(("CRsfwGsPluginDriveSettingsContainer::PrepareRemoteDriveForEditingL enter"));
+ const CRsfwMountEntry* mountEntry = NULL;
+
+ // read the source setting
+ DEBUGSTRING(("read the source setting"));
+ mountEntry = iMountMan->MountEntryL(aRemoteDriveName);
+ User::LeaveIfNull((TAny *)mountEntry);
+
+ // compulsory fields
+ DEBUGSTRING(("compulsory fields"));
+ iData->Reset();
+ iData->iSettingName = *(mountEntry->Item(EMountEntryItemName));
+ iData->iURL =*(mountEntry->Item(EMountEntryItemUri));
+ const HBufC* drive = (mountEntry->Item(EMountEntryItemDrive));
+ if (drive && drive->Length())
+ {
+ iData->iDriveLetter =(*drive)[0];
+ }
+ // optional fields
+ DEBUGSTRING(("optional fields"));
+ if (mountEntry->Item(EMountEntryItemUserName))
+ {
+ DEBUGSTRING(("setting user id"));
+ iData->iUserID = *(mountEntry->Item(EMountEntryItemUserName));
+ }
+
+ if (mountEntry->Item(EMountEntryItemPassword))
+ {
+ DEBUGSTRING(("setting passwd"));
+ iData->iPassword = *(mountEntry->Item(EMountEntryItemPassword));
+ }
+
+ if (mountEntry->Item(EMountEntryItemIap))
+ {
+ DEBUGSTRING16(("setting access pointDes to %S", (mountEntry->Item(EMountEntryItemIap))));
+ iData->iAccessPointDes = *(mountEntry->Item(EMountEntryItemIap));
+ // if the access point name returned from CenRep was '?', set it to "None" in UI
+ if (iData->iAccessPointDes == KIapAskUser)
+ {
+ iData->iAccessPointName = KNullDesC;
+ }
+ else
+ {
+ // try to resolve access point id into name
+ TLex lex(iData->iAccessPointDes);
+ TInt ap, err;
+ err = lex.Val(ap);
+ if (!err)
+ {
+ iSettingList->GetAccessPointNameL(ap, iData->iAccessPointName);
+ DEBUGSTRING(("setting access point"));
+ iData->iAccessPoint = ap;
+ }
+ else
+ {
+ DEBUGSTRING(("setting access point name"));
+ iData->iAccessPointName = KNullDesC;
+ }
+ }
+ }
+
+ DEBUGSTRING(("iData constructed"));
+ iSettingList->LoadSettingsL();
+ SetTitlePaneTextL(iData->iSettingName);
+ iSettingList->ResetItemIndex();
+ DEBUGSTRING(("CRsfwGsPluginDriveSettingsContainer::PrepareRemoteDriveForEditingL exit"));
+ }
+
+
+// ---------------------------------------------------------------------------
+// CRsfwGsPluginDriveSettingsContainer::PrepareRemoteDriveNewDefaultL(TDesC& aRemoteDriveName);
+// ---------------------------------------------------------------------------
+//
+void CRsfwGsPluginDriveSettingsContainer::PrepareRemoteDriveNewDefaultL(TDesC& aRemoteDriveName)
+ {
+ iData->Reset();
+ iData->iSettingName = aRemoteDriveName;
+ iSettingList->LoadSettingsL();
+ iSettingList->ResetItemIndex();
+ iSettingList->DrawDeferred();
+ SetTitlePaneTextL(iData->iSettingName);
+ }
+
+
+// ---------------------------------------------------------------------------
+// CRsfwGsPluginDriveSettingsContainer::SetTitlePaneTextL( const TDesC& aTitleText ) const
+// ---------------------------------------------------------------------------
+//
+void CRsfwGsPluginDriveSettingsContainer::SetTitlePaneTextL( const TDesC& aTitleText ) const
+ {
+ CAknTitlePane* title = static_cast< CAknTitlePane* >
+ ( iEikonEnv->AppUiFactory()->StatusPane()->ControlL(
+ TUid::Uid( EEikStatusPaneUidTitle ) ) );
+ if ( !title )
+ {
+ User::Leave( KErrNotSupported );
+ }
+ title->SetTextL( aTitleText );
+ }
+
+// ---------------------------------------------------------------------------
+// CRsfwGsPluginDriveSettingsContainer::AreCompulsoryItemsFilled()
+// ---------------------------------------------------------------------------
+//
+TBool CRsfwGsPluginDriveSettingsContainer::AreCompulsoryItemsFilled()
+ {
+ TUriParser uriParser;
+ uriParser.Parse(iData->iURL);
+ HBufC* host = HBufC::NewL(KMaxURLLength);
+ TPtr hostPtr = host->Des();
+ hostPtr = uriParser.Extract(EUriHost);
+
+ if ( ((iData->iSettingName)!=KNullDesC) && (hostPtr!=KNullDesC))
+ {
+ delete host;
+ return ETrue;
+ }
+ delete host;
+ return EFalse;
+ }
+
+// ---------------------------------------------------------------------------
+// CRsfwGsPluginDriveSettingsContainer::DisplayDeleteOrDontSaveDialog()
+// ---------------------------------------------------------------------------
+//
+TBool CRsfwGsPluginDriveSettingsContainer::DisplayDeleteOrDontSaveDialogL()
+ {
+
+ HBufC* myDisplayMessage = NULL;
+ myDisplayMessage = StringLoader::LoadLC(R_STR_REMOTE_DRIVE_CONF_COMPULSORY);
+ CAknQueryDialog* query = CAknQueryDialog::NewL
+ (CAknQueryDialog::EConfirmationTone);
+ TBool answer = query->ExecuteLD( R_CONFIRMATION_QUERY, *myDisplayMessage );
+ CleanupStack::PopAndDestroy(myDisplayMessage);
+ return answer;
+ }
+
+// ---------------------------------------------------------------------------
+// CRsfwGsPluginDriveSettingsContainer::DeleteremoteDriveIfExistL()
+// ---------------------------------------------------------------------------
+//
+void CRsfwGsPluginDriveSettingsContainer::DeleteRemoteDriveIfExistL()
+ {
+ iMountMan->DeleteMountEntryL(iData->iDriveLetter);
+ }
+
+// ---------------------------------------------------------------------------
+// CRsfwGsPluginDriveSettingsContainer::IsExitProcessingOKL()
+// ---------------------------------------------------------------------------
+//
+TBool CRsfwGsPluginDriveSettingsContainer::IsExitProcessingOKL()
+ {
+ if (AreCompulsoryItemsFilled())
+ {
+ if (!(RsfwMountUtils::IsFriendlyNameValid(iData->iSettingName)))
+ {
+ HBufC* myDisplayMessage = NULL;
+ myDisplayMessage = StringLoader::LoadLC(R_STR_RSFW_ERROR_ILLEGAL_CHARACTERS);
+ CAknErrorNote* errorNote = new CAknErrorNote(EFalse);
+ errorNote->ExecuteLD(*myDisplayMessage);
+ CleanupStack::PopAndDestroy(myDisplayMessage);
+ iSettingList->ListBox()->SetCurrentItemIndex(ESettingItemDriveName-1);
+ return EFalse;
+ }
+
+ // Uri must contain some scheme, like http:// or upnp://
+ if (!IsDriveAddressValidL(iData->iURL))
+ {
+ HBufC* myDisplayMessage = NULL;
+ myDisplayMessage = StringLoader::LoadLC(R_STR_RSFW_ERROR_ILLEGAL_ADDRESS);
+ CAknNoteDialog* noteDlg = new ( ELeave ) CAknNoteDialog( );
+ noteDlg->SetTextL( *myDisplayMessage );
+ noteDlg->ExecuteLD( R_RSFW_INFORMATION_NOTE );
+ CleanupStack::PopAndDestroy(myDisplayMessage);
+ iSettingList->ListBox()->SetCurrentItemIndex(ESettingItemURL-1);
+ return EFalse;
+ }
+
+ // settings seem to be ok
+ return SaveOrCreateAndSaveRemoteDriveL(ETrue);
+ }
+ else
+ {
+ if (DisplayDeleteOrDontSaveDialogL())
+ {
+ DeleteRemoteDriveIfExistL();
+ }
+ else
+ {
+ // set focus on the address field as that is the first (and only)
+ // unfilled compulsary setting field
+ iSettingList->ListBox()->SetCurrentItemIndex(ESettingItemURL-1);
+ return EFalse;
+ }
+ }
+
+ return ETrue;
+ }
+
+// ---------------------------------------------------------------------------
+// CRsfwGsPluginDriveSettingsContainer::SaveSettingsL
+// Attempts to save settings
+// ---------------------------------------------------------------------------
+void CRsfwGsPluginDriveSettingsContainer::SaveSettingsL()
+ {
+ if (AreCompulsoryItemsFilled())
+ {
+ if (!(RsfwMountUtils::IsFriendlyNameValid(iData->iSettingName)))
+ {
+ return;
+ }
+ // Uri must contain some scheme, like http:// or upnp://
+ if (!IsDriveAddressValidL(iData->iURL))
+ {
+ return;
+ }
+ // settings seem to be ok
+ SaveOrCreateAndSaveRemoteDriveL(EFalse);
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CRsfwGsPluginDriveSettingsContainer::SaveOrCreateAndSaveremoteDriveL()
+// ---------------------------------------------------------------------------
+//
+TBool CRsfwGsPluginDriveSettingsContainer::SaveOrCreateAndSaveRemoteDriveL(TBool aShowDialog)
+ {
+ // try to get mountentry with this drive letter
+ const CRsfwMountEntry* existingMountEntry = iMountMan->MountEntryL(iData->iDriveLetter);
+
+ // to keep names unique check if the setting with this name is already exist
+ // ask user to change name
+ TBool isConflict;
+ if (existingMountEntry)
+ {
+ isConflict = IsRemoteDriveNameConflictL(iData->iSettingName, *(existingMountEntry->Item(EMountEntryItemDrive)));
+ }
+ else
+ {
+ TBuf<5> bogusDrive;
+ bogusDrive.Append(_L("C:\\"));
+ isConflict = IsRemoteDriveNameConflictL(iData->iSettingName, bogusDrive);
+ }
+
+ if (isConflict)
+ {
+ if (aShowDialog)
+ {
+ HBufC* myFormatMessage = NULL;
+ if ( iData->iSettingName.Length() )
+ {
+ myFormatMessage = StringLoader::LoadLC( R_STR_REMOTE_DRIVE_NAME_ALREADY_EXIST, iData->iSettingName);
+ }
+ else
+ {
+ myFormatMessage = StringLoader::LoadLC( R_STR_REMOTE_DRIVE_NAME_ALREADY_EXIST );
+ }
+
+ CAknErrorNote* note = new CAknErrorNote(EFalse);
+ note->SetTimeout( CAknNoteDialog::ELongTimeout );
+ note->ExecuteLD( *myFormatMessage );
+ CleanupStack::PopAndDestroy(myFormatMessage);
+ // set focus to drive
+ iSettingList->ListBox()->SetCurrentItemIndex(ESettingItemDriveName-1);
+ }
+ return EFalse;
+ }
+ else if (!existingMountEntry || DataChanged(existingMountEntry))
+ {
+
+ CRsfwMountEntry* newMountEntry = CRsfwMountEntry::NewLC();
+ if (existingMountEntry)
+ {
+ // the same drive letter must be set as it is the key
+ newMountEntry->SetItemL(EMountEntryItemDrive, *(existingMountEntry->Item(EMountEntryItemDrive)));
+ }
+
+ newMountEntry->SetItemL(EMountEntryItemName, iData->iSettingName);
+ newMountEntry->SetItemL(EMountEntryItemUri, iData->iURL);
+ if ((iData->iUserID)!=KNullDesC)
+ {
+ newMountEntry->SetItemL(EMountEntryItemUserName, iData->iUserID);
+ }
+
+ if ((iData->iPassword)!=KNullDesC)
+ {
+ newMountEntry->SetItemL(EMountEntryItemPassword, iData->iPassword);
+ }
+ if ((iData->iAccessPointDes)!=KNullDesC)
+ {
+ newMountEntry->SetItemL(EMountEntryItemIap, iData->iAccessPointDes);
+ }
+ else
+ {
+ newMountEntry->SetItemL(EMountEntryItemIap, KIapAskUser);
+ }
+
+ newMountEntry->SetItemL(EMountEntryItemInactivityTimeout, iData->iInActivityTimeout);
+
+ // depending on whether this is new mount created or existing mount edited
+ // choose proper method from MountMan API
+ // pop here from the stack since ownership is passed to the mountman
+ CleanupStack::Pop(newMountEntry);
+
+ if (!existingMountEntry)
+ {
+ iMountMan->AddMountEntryL(newMountEntry);
+ }
+ else
+ {
+ iMountMan->EditMountEntryL(newMountEntry);
+ }
+ }
+ return ETrue;
+ }
+
+// ---------------------------------------------------------------------------
+// CRsfwGsPluginDriveSettingsContainer::DataChanged
+// ---------------------------------------------------------------------------
+//
+TBool CRsfwGsPluginDriveSettingsContainer::DataChanged(const CRsfwMountEntry* aCurrentData)
+{
+ if (!aCurrentData)
+ {
+ return ETrue;
+ }
+
+ // compulsary settings
+ if (iData->iSettingName != *(aCurrentData->Item(EMountEntryItemName)))
+ {
+ return ETrue;
+ }
+ if (iData->iURL != *(aCurrentData->Item(EMountEntryItemUri)))
+ {
+ return ETrue;
+ }
+
+ // optional settings
+ if (!aCurrentData->Item(EMountEntryItemUserName))
+ {
+ if (iData->iUserID != KNullDesC)
+ {
+ return ETrue;
+ }
+ }
+ else
+ {
+ if (iData->iUserID != *(aCurrentData->Item(EMountEntryItemUserName)))
+ {
+ return ETrue;
+ }
+ }
+
+ if (!aCurrentData->Item(EMountEntryItemPassword))
+ {
+ if (iData->iPassword != KNullDesC)
+ {
+ return ETrue;
+ }
+ }
+ else
+ {
+ if (iData->iPassword != *(aCurrentData->Item(EMountEntryItemPassword)))
+ {
+ return ETrue;
+ }
+ }
+
+ if (!aCurrentData->Item(EMountEntryItemIap))
+ {
+ if (iData->iAccessPointDes != KNullDesC)
+ {
+ return ETrue;
+ }
+ }
+ else
+ {
+ if (iData->iAccessPointDes != *(aCurrentData->Item(EMountEntryItemIap)))
+ {
+ return ETrue;
+ }
+ }
+
+
+ return EFalse;
+}
+
+// ---------------------------------------------------------------------------
+// CRsfwGsPluginDriveSettingsContainer::IsRemoteDriveNameExistL(TDesC& aremoteDriveName)
+//
+// ---------------------------------------------------------------------------
+//
+TBool CRsfwGsPluginDriveSettingsContainer::IsRemoteDriveNameConflictL(
+ TDesC& aRemoteDriveName,
+ const TDesC& aDriveLetter)
+ {
+ TBool ret(EFalse);
+ CDesCArray* remoteDriveList = NULL;
+
+ TRAPD(err, remoteDriveList = LoadRemoteDriveNamesL());
+ if(err!=KErrNone)
+ {
+ return EFalse;
+ }
+ CleanupStack::PushL(remoteDriveList);
+
+ TInt remoteDriveListCount = remoteDriveList->Count();
+ for (TInt i = 0; i< remoteDriveListCount; i++)
+ {
+ if (!((remoteDriveList->MdcaPoint(i)).CompareF(aRemoteDriveName))) // if equal
+ {
+ // check whether the drive letter is the same or not
+ const CRsfwMountEntry* existingDrive =
+ iMountMan->MountEntryL(aRemoteDriveName);
+ if ((existingDrive->Item(EMountEntryItemDrive))->Compare(aDriveLetter) == 0 )
+ {
+ ret = EFalse;
+ }
+ else
+ {
+ ret = ETrue;
+ }
+ break;
+ }
+ }
+ CleanupStack::PopAndDestroy(remoteDriveList);
+ return ret;
+
+ }
+
+// ---------------------------------------------------------------------------
+// CRsfwGsPluginDriveSettingsContainer::IsDriveAddressValidL
+// ---------------------------------------------------------------------------
+//
+TBool CRsfwGsPluginDriveSettingsContainer::IsDriveAddressValidL(const TDesC& aDriveAddress)
+ {
+ HBufC8* urlBuffer = HBufC8::NewL(KMaxURLLength);
+ TPtr8 bufPtr = urlBuffer->Des();
+ bufPtr.Append(aDriveAddress);
+ TBool isAddressValid = RsfwMountUtils::IsDriveAddressValid(*urlBuffer);
+ delete urlBuffer;
+ return isAddressValid;
+ }
+
+// ---------------------------------------------------------------------------
+// CRsfwGsPluginDriveSettingsContainer::LoadRemoteDriveNamesL
+// ---------------------------------------------------------------------------
+//
+CDesCArray* CRsfwGsPluginDriveSettingsContainer::LoadRemoteDriveNamesL()
+ {
+ CDesCArray* myArray = new (ELeave) CDesC16ArraySeg(4);
+ iMountMan->GetMountNamesL(myArray);
+ return myArray;
+ }
+
+// ---------------------------------------------------------------------------
+// CRsfwGsPluginDriveSettingsContainer::HandleResourceChange()
+// ---------------------------------------------------------------------------
+void CRsfwGsPluginDriveSettingsContainer::HandleResourceChange( TInt aType )
+ {
+ if ( aType == KAknsMessageSkinChange ||
+ aType == KEikDynamicLayoutVariantSwitch )
+ {
+ if (aType != KAknsMessageSkinChange)
+ {
+ TRect mainPaneRect;
+ AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EMainPane,
+ mainPaneRect);
+ SetRect( mainPaneRect );
+ }
+
+ DrawDeferred();
+ CRsfwGsPlugin* tempView = static_cast<CRsfwGsPlugin*> (iView);
+ tempView->HandleResourceChangeManual(aType);
+ }
+ CCoeControl::HandleResourceChange( aType );
+ }
+
+
+// ---------------------------------------------------------------------------
+// CRsfwGsPluginDriveSettingsContainer::HandleResourceChangeManual()
+// ---------------------------------------------------------------------------
+void CRsfwGsPluginDriveSettingsContainer::HandleResourceChangeManual(TInt aType)
+ {
+ if (aType != KAknsMessageSkinChange)
+ {
+ TRect mainPaneRect;
+ AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EMainPane,
+ mainPaneRect);
+ SetRect( mainPaneRect );
+ }
+
+ DrawDeferred();
+ iSettingList->HandleResourceChange(aType);
+ }
+
+// ---------------------------------------------------------------------------
+// CRsfwGsPluginDriveSettingsContainer::FocusChanged
+// Set focus on the selected listbox. For animated skins feature.
+// ---------------------------------------------------------------------------
+void CRsfwGsPluginDriveSettingsContainer::FocusChanged(TDrawNow /*aDrawNow*/)
+ {
+ if(iSettingList)
+ {
+ iSettingList->SetFocus( IsFocused() );
+ }
+ }
+
+// ---------------------------------------------------------
+// CRsfwGsPluginDriveSettingsContainer::GetHelpContext
+// This function is called when Help application is launched
+// ---------------------------------------------------------
+//
+void CRsfwGsPluginDriveSettingsContainer::GetHelpContext( TCoeHelpContext& aContext ) const
+ {
+ aContext.iMajor = KGSRsfwPluginUID;
+ // aContext.iContext = KRSFW_HLP_EDIT_SET;
+ }
+
+
+ TDes& CRsfwGsPluginDriveSettingsContainer::GetCurrentRemoteDriveName()
+ {
+ return iData->iSettingName;
+ }
+
+
+// from MCoeForegroundObserver
+
+void CRsfwGsPluginDriveSettingsContainer::HandleGainingForeground()
+ {
+
+ }
+
+
+void CRsfwGsPluginDriveSettingsContainer::HandleLosingForeground()
+ {
+
+ }
+
+
+// End of File