diff -r 87c71b25c937 -r 88ee4cf65e19 remotestoragefw/gsplugin/src/rsfwgsplugindrivelistcontainer.cpp --- a/remotestoragefw/gsplugin/src/rsfwgsplugindrivelistcontainer.cpp Wed Jun 09 10:37:35 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,735 +0,0 @@ -/* -* Copyright (c) 2003 - 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: The control container (view) of the remote drives list view -* -*/ - - -// INCLUDE FILES -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "rsfwgslocalviewids.h" -#include "rsfwgsplugindrivelistcontainer.h" -#include "rsfwgsplugin.h" -#include "rsfwmountman.h" -#include "rsfwcontrol.h" -#include "rsfwmountentry.h" - - _LIT(KTabulator, "\t"); - _LIT(KConnectedIcon, "\t0"); - -// ============================ MEMBER FUNCTIONS =============================== - -// --------------------------------------------------------------------------- -// CRsfwGsPluginDriveListContainer::CRsfwGsPluginDriveListContainer() -// --------------------------------------------------------------------------- -// -CRsfwGsPluginDriveListContainer::CRsfwGsPluginDriveListContainer(CRsfwGsPlugin* aView) : iView(aView) - { - - } - - -// ----------------------------------------------------------------------------- -// GSSettListRemoteDrivesListContainer::ConstructL -// Symbian 2nd phase constructor can leave. -// ----------------------------------------------------------------------------- -// -void CRsfwGsPluginDriveListContainer::ConstructL( - const TRect& aRect, - CRsfwMountMan* aMountMan) - { - iMountMan = aMountMan; - - CEikStatusPane* sp = static_cast - ( iEikonEnv->EikAppUi() )->StatusPane(); - iTitlePane = static_cast - ( sp->ControlL( TUid::Uid( EEikStatusPaneUidTitle ) ) ); - - // Set title - StringLoader::Load ( iTitle, R_STR_REMOTE_DRIVES_VIEW_TITLE ); - iTitlePane->SetTextL(iTitle);// FromResourceL( rReader ); - CreateWindowL(); // Makes the control a window-owning control - - // Main List creation and initialization - iMainList = new(ELeave) CAknSingleStyleListBox(); - iMainList->SetContainerWindowL(*this); - iMainList->ConstructL(this, EAknListBoxLoopScrolling); - - // Main list scroll bar issues - iMainList->CreateScrollBarFrameL(EFalse); - iMainList->ScrollBarFrame()->SetScrollBarVisibilityL( - CEikScrollBarFrame::EOff, CEikScrollBarFrame::EAuto); - - // Empty text processing - _LIT (KStringHeader, "%S\n%S"); - HBufC* emptyText = iEikonEnv->AllocReadResourceLC(R_GS_RSFW_NO_REMOTE_DRIVES); - HBufC* emptyText2 = iEikonEnv->AllocReadResourceLC(R_GS_RSFW_NO_REMOTE_DRIVES_EXPLANATORY); - HBufC* myString = HBufC::NewLC(emptyText->Length() + emptyText2->Length() + 5); - TPtr emptyStringPtr = myString->Des(); - emptyStringPtr.Format(KStringHeader, emptyText, emptyText2); - - iMainList->SetListBoxObserver(this); - iMainList->View()->SetListEmptyTextL(*myString); - CleanupStack::PopAndDestroy( 3 ); //emptyText, emptyText2, myString - - CArrayPtrFlat* iconArray = new(ELeave) CAknIconArray(4); - - CGulIcon* icon2; - icon2 = AknsUtils::CreateGulIconL( - AknsUtils::SkinInstance(), - KAknsIIDQgnIndiConnectionOnAdd, - KGSPluginBitmapFile, - EMbmRsfwgspluginQgn_indi_connection_on_add, - EMbmRsfwgspluginQgn_indi_connection_on_add_mask); - - CleanupStack::PushL(icon2); - iconArray->AppendL(icon2); - CleanupStack::Pop(icon2); - - CGulIcon* icon3; - icon3 = AknsUtils::CreateGulIconL( - AknsUtils::SkinInstance(), - KAknsIIDQgnIndiMarkedAdd, - AknIconUtils::AvkonIconFileName(), - EMbmAvkonQgn_indi_marked_add, - EMbmAvkonQgn_indi_marked_add_mask); - - CleanupStack::PushL(icon3); - iconArray->AppendL(icon3); - CleanupStack::Pop(icon3); - - (static_cast(iMainList))-> - ItemDrawer()->ColumnData()->SetIconArray(iconArray); - - SetupListL(); - - // Start receiving P&S notifier about the changes in drive connection states - // if the key is not found, will leave with an error code - // just ignore for now... - TRAP_IGNORE(iDriveConnectObserver = CRsfwGsPropertyWatch::NewL(this)); - - SetRect( aRect ); - ActivateL(); - - iCoeEnv->AddForegroundObserverL( *this ); - } - -// --------------------------------------------------------------------------- -// CRsfwGsPluginDriveListContainer::~CRsfwGsPluginDriveListContainer() -// Destructor -// -// --------------------------------------------------------------------------- -// -CRsfwGsPluginDriveListContainer::~CRsfwGsPluginDriveListContainer() - { - if (iMainList) - { - delete iMainList; - } - - if (iDriveConnectObserver) - { - delete iDriveConnectObserver; - } - iCoeEnv->RemoveForegroundObserver( *this ); - } - -// --------------------------------------------------------------------------- -// CRsfwGsPluginDriveListContainer::SizeChanged() -// --------------------------------------------------------------------------- -// -void CRsfwGsPluginDriveListContainer::SizeChanged() - { - iMainList->SetRect(Rect()); - } - -// --------------------------------------------------------------------------- -// CRsfwGsPluginDriveListContainer::CountComponentControls() const -// --------------------------------------------------------------------------- -// -TInt CRsfwGsPluginDriveListContainer::CountComponentControls() const - { - return 1; - } - -// --------------------------------------------------------------------------- -// CRsfwGsPluginDriveListContainer::ComponentControl() const -// --------------------------------------------------------------------------- -// -CCoeControl* CRsfwGsPluginDriveListContainer::ComponentControl( TInt aIndex ) const - { - switch ( aIndex ) - { - case 0: - return iMainList; - default: - return NULL; - } - } - - -// --------------------------------------------------------------------------- -// CRsfwGsPluginDriveListContainer::EditCurrentItemL() -// --------------------------------------------------------------------------- -// -void CRsfwGsPluginDriveListContainer::EditCurrentItemL() - { - HBufC* currentDriveName = GetCurrentRemoteDriveNameLC(); - if (!(iView->IsDriveConnectedL())) - { - TPtrC drivePtr = currentDriveName->Ptr(); - iCurrentItemIndex=iMainList->CurrentItemIndex(); - TPtrC namePtr = drivePtr.Left(currentDriveName->Length()); - iView->LoadSettingsViewL(EEditExisting, namePtr, ETrue); - - } - else - { - HBufC* myDisplayMessage = NULL; - if ( currentDriveName->Length() ) - { - myDisplayMessage = StringLoader::LoadLC( R_STR_RSFW_ERROR_EDIT_CONNECTED, *currentDriveName ); - } - else - { - myDisplayMessage = StringLoader::LoadLC( R_STR_RSFW_ERROR_EDIT_CONNECTED ); - } - CAknErrorNote* errorNote = new CAknErrorNote(EFalse); - errorNote->ExecuteLD(*myDisplayMessage); - CleanupStack::PopAndDestroy(myDisplayMessage); - } - CleanupStack::PopAndDestroy(currentDriveName); - } - - - -// --------------------------------------------------------------------------- -// CRsfwGsPluginDriveListContainer::GetCurrentRemoteDriveNameLC() -// --------------------------------------------------------------------------- -// -HBufC* CRsfwGsPluginDriveListContainer::GetCurrentRemoteDriveNameLC() - { - TPtrC16 remoteDriveName, remoteDriveNameClipped, remoteDriveNamePtr; - TInt currentItemIndex = iMainList->CurrentItemIndex(); - if (currentItemIndex == KErrNotFound) - { - User::Leave(KErrNotFound); - } - remoteDriveName.Set(iRemoteDriveListArray->MdcaPoint(currentItemIndex)); - // remove '\t' from the beginning - remoteDriveNameClipped.Set(remoteDriveName.Mid(1)); - // remove the trailing '\tn'if exists - TInt posit = remoteDriveNameClipped.Find(KTabulator); - if (posit != KErrNotFound) - { - remoteDriveNamePtr.Set(remoteDriveNameClipped.Left(posit)); - } - else - { - remoteDriveNamePtr.Set(remoteDriveNameClipped); - } - - return remoteDriveNamePtr.AllocLC(); - } - -// --------------------------------------------------------------------------- -// CRsfwGsPluginDriveListContainer::GetRemoteDriveNameLC(TInt aIndex) -// --------------------------------------------------------------------------- -// -TPtrC CRsfwGsPluginDriveListContainer::GetRemoteDriveNameL(TInt aIndex) - { - TPtrC16 remoteDriveName, remoteDriveNameClipped, remoteDriveNamePtr; - remoteDriveName.Set(iRemoteDriveListArray->MdcaPoint(aIndex)); - // remove '\t' from the beginning - remoteDriveNameClipped.Set(remoteDriveName.Mid(1)); - // remove the trailing '\tn' - TInt posit = remoteDriveNameClipped.Find(KTabulator); - if (posit != KErrNotFound) - { - remoteDriveNamePtr.Set(remoteDriveNameClipped.Left(posit)); - } - else - { - remoteDriveNamePtr.Set(remoteDriveNameClipped); - } - - return remoteDriveNamePtr; - } - -// --------------------------------------------------------------------------- -// CRsfwGsPluginDriveListContainer::OfferKeyEventL() -// --------------------------------------------------------------------------- -// -TKeyResponse CRsfwGsPluginDriveListContainer::OfferKeyEventL( const TKeyEvent& aKeyEvent, - TEventCode aType ) - { - if (iMainList) - { - // if cancel key is pressed and list is not empty, invoke deletion - if ((aKeyEvent.iCode == EKeyBackspace ) && (aType == EEventKey) ) - { - if(!IsListEmpty()) - { - CRsfwGsPlugin* iTempView = static_cast (iView); - iTempView->DeleteRemoteDriveL(); - } - return EKeyWasConsumed; - } - else - { - TKeyResponse returnValue = iMainList->OfferKeyEventL (aKeyEvent, aType); - if ((aKeyEvent.iCode == EKeyUpArrow || aKeyEvent.iCode == EKeyDownArrow ) - && (aType == EEventKey)) - { - // Cba needs to be updated any time the user goes through the drive list - // as MSK "Edit" is dependent on connection state - // Note that we had to call iMainList->OfferKeyEventL() first - // to make sure that the correct drive is highlighted - iCurrentItemIndex = iMainList->CurrentItemIndex(); - iView->UpdateCbaL(); - } - return returnValue; - } - } - return EKeyWasNotConsumed; - } - -// --------------------------------------------------------------------------- -// CRsfwGsPluginDriveListContainer::HandleListBoxEventL() -// --------------------------------------------------------------------------- -// -void CRsfwGsPluginDriveListContainer::HandleListBoxEventL(CEikListBox* /*aListBox*/, TListBoxEvent aListBoxEvent) - { - // if the Select Key has been pressed - if ((aListBoxEvent == MEikListBoxObserver::EEventEnterKeyPressed) || - (aListBoxEvent == MEikListBoxObserver::EEventItemSingleClicked)) - { - EditCurrentItemL(); - } - } - - - -// --------------------------------------------------------------------------- -// CRsfwGsPluginDriveListContainer::SetupListL() -// --------------------------------------------------------------------------- -// -void CRsfwGsPluginDriveListContainer::SetupListL() - { - CTextListBoxModel* model = iMainList->Model(); - model->SetOwnershipType(ELbmOwnsItemArray); - - iRemoteDriveListArray = static_cast(model->ItemTextArray()); - LoadRemoteDriveListArrayL(); - } - - - -// --------------------------------------------------------------------------- -// CRsfwGsPluginDriveListContainer::LoadSettingsListArrayL() -// --------------------------------------------------------------------------- -// -TInt CRsfwGsPluginDriveListContainer::LoadRemoteDriveListArrayL() - { - iTitlePane->SetTextL(iTitle); - - CDesCArray* remoteDriveList = NULL; - remoteDriveList = GetRemoteDriveNamesL(); - CleanupStack::PushL(remoteDriveList); - TInt remoteDriveListCount = remoteDriveList->Count(); - iRemoteDriveListArray->Reset(); - for (TInt i = 0; i< remoteDriveListCount; i++) - { - TBuf string; // maximum name + \t + \tn - string.Append(KTabulator); - string.Append(remoteDriveList->MdcaPoint(i)); - if ( IsDriveConnectedL(remoteDriveList->MdcaPoint(i))) - { - string.Append(KConnectedIcon); - } - iRemoteDriveListArray->AppendL(string); - - } - CleanupStack::PopAndDestroy(remoteDriveList); - iMainList->HandleItemRemovalL(); - iMainList->HandleItemAdditionL(); - return remoteDriveListCount; - } - - - -// --------------------------------------------------------------------------- -// CRsfwGsPluginDriveListContainer::IsListEmpty() -// --------------------------------------------------------------------------- -// -TBool CRsfwGsPluginDriveListContainer::IsListEmpty() - { - if (iRemoteDriveListArray->Count()) - return EFalse; - return ETrue; - } - -// --------------------------------------------------------------------------- -// CRsfwGsPluginDriveListContainer::IsLastItem() -// --------------------------------------------------------------------------- -// -TBool CRsfwGsPluginDriveListContainer::IsLastItem() - { - if (iRemoteDriveListArray->Count() == 1) - return ETrue; - return EFalse; - } - - -// --------------------------------------------------------------------------- -// CRsfwGsPluginDriveListContainer::DeleteCurrentRemoteDriveL() -// --------------------------------------------------------------------------- -// -void CRsfwGsPluginDriveListContainer::DeleteCurrentRemoteDriveL() - { - TBool deletingLast = EFalse; - if (iMainList->CurrentItemIndex() == iMainList->BottomItemIndex()) - { - deletingLast = ETrue; - } - - HBufC* currentDriveName = GetCurrentRemoteDriveNameLC(); - TPtrC drivePtr = currentDriveName->Ptr(); - iMountMan->DeleteMountEntryL(drivePtr.Left(currentDriveName->Length())); - iRemoteDriveListArray->Delete(iMainList->CurrentItemIndex()); - iMainList->HandleItemRemovalL(); - iMainList->DrawDeferred(); - CleanupStack::PopAndDestroy(currentDriveName); - - if (deletingLast) - { - if (iRemoteDriveListArray->Count() > 0) - { - iMainList->SetCurrentItemIndex(iMainList->BottomItemIndex()); - } - - } - } - -// --------------------------------------------------------------------------- -// CRsfwGsPluginDriveListContainer::IsDriveConnectedL() -// --------------------------------------------------------------------------- -// -TBool CRsfwGsPluginDriveListContainer::IsDriveConnectedL(const TDesC& aName) - { - - TInt err; - const CRsfwMountEntry* mountEntry; - TRsfwMountInfo mountInfo; - TChar driveL; - mountEntry = mountEntry = iMountMan->MountEntryL(aName); - if (!mountEntry) - { - User::Leave(KErrNotFound); - } - const HBufC* drive = (mountEntry->Item(EMountEntryItemDrive)); - if (drive && drive->Length()) - { - driveL =(*drive)[0]; - } - else - { - // getting drive letter failed - return EFalse; - } - err = iMountMan->GetMountInfo(driveL, mountInfo); - if ((err == KErrNone) && (mountInfo.iMountStatus.iConnectionState == KMountStronglyConnected)) - { - return ETrue; - } - return EFalse; - } - -// --------------------------------------------------------------------------- -// CRsfwGsPluginDriveListContainer::SetDriveConnectedStateL() -// --------------------------------------------------------------------------- -// -void CRsfwGsPluginDriveListContainer::SetDriveConnectedStateL(const TDesC& aName, TBool aConnected) - { - TInt i; - for (i=0; i < iRemoteDriveListArray->Count(); i++) - { - TPtrC driveString = GetRemoteDriveNameL(i); - if (driveString.Compare(aName) == 0) - { - // newString has space for the friendly name, tabulator and connected icon - TBuf newString; - newString.Append(KTabulator); - newString.Append(driveString); - if (aConnected) - { - newString.Append(KConnectedIcon); - } - iRemoteDriveListArray->Delete(i); - iRemoteDriveListArray->InsertL(i, newString); - iMainList->DrawDeferred(); - // Cba needs to be updated as MSK "Edit" is dependent on connection state - iView->UpdateCbaL(); - break; - } - - } - - } - -// --------------------------------------------------------------------------- -// CRsfwGsPluginDriveListContainer::ConnectCurrentRemoteDriveL() -// --------------------------------------------------------------------------- -// -void CRsfwGsPluginDriveListContainer::ConnectCurrentRemoteDriveL() -{ - User::LeaveIfError(iMountMan->SetMountConnectionStateBlind(GetCurrentRemoteDriveIdL(), - KMountStronglyConnected)); -} - -// --------------------------------------------------------------------------- -// CRsfwGsPluginDriveListContainer::DisconnectCurrentRemoteDriveL() -// --------------------------------------------------------------------------- -// -void CRsfwGsPluginDriveListContainer::DisconnectCurrentRemoteDriveL() -{ - User::LeaveIfError(iMountMan->SetMountConnectionState(GetCurrentRemoteDriveIdL(), - KMountNotConnected)); - -} - -// --------------------------------------------------------------------------- -// CRsfwGsPluginDriveListContainer::GetNextRemoteDriveNameL -// --------------------------------------------------------------------------- -// -TDesC& CRsfwGsPluginDriveListContainer::GetNextRemoteDriveNameL() - { - // Always return "New drive" as the default starting name - // in case there is already a drive with the name "new name" - // user is not allowed to save the new drive before changing the name. - StringLoader::Load(iSettingNewName, R_STR_REMOTE_DRIVE_NEW_NAME); - return iSettingNewName; - } - - - -// --------------------------------------------------------------------------- -// CRsfwGsPluginDriveListContainer::GetCurrentRemoteDriveIdL -// --------------------------------------------------------------------------- -// -TChar CRsfwGsPluginDriveListContainer::GetCurrentRemoteDriveIdL() - { - const CRsfwMountEntry* mountEntry; - HBufC* currentDriveName = GetCurrentRemoteDriveNameLC(); - TPtrC drivePtr = currentDriveName->Ptr(); - mountEntry = iMountMan->MountEntryL(drivePtr.Left(currentDriveName->Length())); - if (!mountEntry) - { - User::Leave(KErrNotFound); - } - CleanupStack::PopAndDestroy(currentDriveName); - const HBufC* drive = (mountEntry->Item(EMountEntryItemDrive)); - if (drive && drive->Length()) - { - return (*drive)[0]; - } - - // should not come here.... - // return the drive letter of the default drive - RFs fs; - User::LeaveIfError(fs.Connect()); - TChar defaultd; - fs.DriveToChar(EDriveC, defaultd); - fs.Close(); - return defaultd; - } - -// --------------------------------------------------------------------------- -// CRsfwGsPluginDriveListContainer::GetRemoteDriveNamesL -// --------------------------------------------------------------------------- -// -CDesCArray* CRsfwGsPluginDriveListContainer::GetRemoteDriveNamesL() - { - CDesCArray* myArray = new (ELeave) CDesC16ArraySeg(4); - iMountMan->GetMountNamesL(myArray); - return myArray; - } - -// --------------------------------------------------------------------------- -// CRsfwGsPluginDriveListContainer::RemoteDriveCount -// --------------------------------------------------------------------------- -// -TInt CRsfwGsPluginDriveListContainer::RemoteDriveCount() - { - return iRemoteDriveListArray->Count(); - } - -// --------------------------------------------------------------------------- -// CRsfwGsPluginDriveListContainer::HandleResourceChange() -// --------------------------------------------------------------------------- -// -void CRsfwGsPluginDriveListContainer::HandleResourceChange( TInt aType ) - { - if ( aType == KAknsMessageSkinChange || - aType == KEikDynamicLayoutVariantSwitch ) - { - if (aType != KAknsMessageSkinChange) - { - TRect mainPaneRect; - AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EMainPane, - mainPaneRect); - SetRect( mainPaneRect ); - } - DrawDeferred(); - CRsfwGsPlugin* iTempView = static_cast (iView); - - iTempView->HandleResourceChangeManual(aType); - } - CCoeControl::HandleResourceChange( aType ); - } - -// --------------------------------------------------------------------------- -// CRsfwGsPluginDriveListContainer::HandleResourceChangeManual() -// --------------------------------------------------------------------------- -// -void CRsfwGsPluginDriveListContainer::HandleResourceChangeManual(TInt aType) - { - if (aType != KAknsMessageSkinChange) - { - TRect mainPaneRect; - AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EMainPane, - mainPaneRect); - SetRect( mainPaneRect ); - } - DrawDeferred(); - iMainList->HandleResourceChange(aType); - } - -// --------------------------------------------------------------------------- -// CRsfwGsPluginDriveListContainer::FocusChanged -// Set focus on the selected listbox. For animated skins feature. -// --------------------------------------------------------------------------- -// -void CRsfwGsPluginDriveListContainer::FocusChanged(TDrawNow /*aDrawNow*/) - { - if(iMainList) - { - iMainList->SetFocus( IsFocused() ); - } - } - -// --------------------------------------------------------------------------- -// CRsfwGsPluginDriveListContainer::GetHelpContext -// This function is called when Help application is launched. -// --------------------------------------------------------------------------- -// -void CRsfwGsPluginDriveListContainer::GetHelpContext( TCoeHelpContext& aContext ) const - { - aContext.iMajor = KGSRsfwPluginUID; - } - -// --------------------------------------------------------------------------- -// CRsfwGsPluginDriveListContainer::HandleGainingForeground -// --------------------------------------------------------------------------- -// -void CRsfwGsPluginDriveListContainer::HandleGainingForeground() - { - TRAP_IGNORE(HandleGainingForegroundL()); - } - -// --------------------------------------------------------------------------- -// CRsfwGsPluginDriveListContainer::HandleGainingForegroundL -// Called from HandleGainingForeground in order to trap potential leaves. -// --------------------------------------------------------------------------- -// -void CRsfwGsPluginDriveListContainer::HandleGainingForegroundL() - { - if (iView->CurrentContainer() == this) - { - // update the drive list - LoadRemoteDriveListArrayL(); - SetFocus(); - iView->ProcessDeletingDialog(); - iView->UpdateCbaL(); - } - } - -// --------------------------------------------------------------------------- -// CRsfwGsPluginDriveListContainer::HandleLosingForeground -// --------------------------------------------------------------------------- -// -void CRsfwGsPluginDriveListContainer::HandleLosingForeground() - { - - } - -// --------------------------------------------------------------------------- -// CRsfwGsPluginDriveListContainer::SetFocus -// --------------------------------------------------------------------------- -// -void CRsfwGsPluginDriveListContainer::SetFocus() - { - TInt remoteDriveCount = iRemoteDriveListArray->Count(); - - if (remoteDriveCount > 0) - { - if (iCurrentItemIndex >= remoteDriveCount) - { - // set to the beginning of the list - iCurrentItemIndex = 0; - } - - iMainList->SetCurrentItemIndex(iCurrentItemIndex); - } - } - -// --------------------------------------------------------------------------- -// CRsfwGsPluginDriveListContainer::SetFocusL -// finds the given name on the drive list and sets focus accordingly -// --------------------------------------------------------------------------- -// -void CRsfwGsPluginDriveListContainer::SetFocusL(const TDes& aDriveName) - { - CDesCArray* remoteDriveList = NULL; - remoteDriveList = GetRemoteDriveNamesL(); - CleanupStack::PushL(remoteDriveList); - - for ( TInt i = 0; i < remoteDriveList->Count(); i++ ) - { - if (aDriveName.Compare(remoteDriveList->MdcaPoint(i)) == 0) - { - iMainList->SetCurrentItemIndex(i); - CleanupStack::PopAndDestroy(remoteDriveList); - return; - } - } - CleanupStack::PopAndDestroy(remoteDriveList); - - // if drive name not found on the list, use default behaviour - SetFocus(); - } - - -// End of File