diff -r 000000000000 -r 6a9f87576119 filemanager/View/src/CFileManagerFileNameQueryDlg.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/filemanager/View/src/CFileManagerFileNameQueryDlg.cpp Mon Jan 18 20:09:41 2010 +0200 @@ -0,0 +1,249 @@ +/* +* Copyright (c) 2002-2007 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: Dialog for asking file name from user +* +*/ + + +// INCLUDE FILES +#include +#include +#include +#include +#include +#include "CFileManagerFileNameQueryDlg.h" +#include "CFileManagerCommonDefinitions.h" +#include "CFileManagerItemProperties.h" +#include "FileManagerDlgUtils.h" + + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CFileManagerFileNameQueryDlg::NewL +// +// ----------------------------------------------------------------------------- +// +CFileManagerFileNameQueryDlg* CFileManagerFileNameQueryDlg::NewL( + const TDesC& aOldName, + TDes& aNewName, + CFileManagerEngine& aEngine ) + { + CFileManagerFileNameQueryDlg* self = + new( ELeave ) CFileManagerFileNameQueryDlg( + aNewName, aEngine ); + + CleanupStack::PushL( self ); + self->ConstructL( aOldName ); + CleanupStack::Pop( self ); + + return self; + } + +// ----------------------------------------------------------------------------- +// CFileManagerFileNameQueryDlg::CFileManagerFileNameQueryDlg +// C++ default constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +// +CFileManagerFileNameQueryDlg::CFileManagerFileNameQueryDlg( + TDes& aNewName, + CFileManagerEngine& aEngine ) : + CAknTextQueryDialog( aNewName ), + iEngine( aEngine ) + { + } + +// ----------------------------------------------------------------------------- +// CFileManagerFileNameQueryDlg::ConstructL +// +// ----------------------------------------------------------------------------- +// +void CFileManagerFileNameQueryDlg::ConstructL( const TDesC& aOldName ) + { + TParsePtrC name( aOldName ); + Text().Copy( name.NameAndExt() ); + iOldName = aOldName.AllocL(); + + // Strip any directionality markers to get pure name + TPtr ptr( iOldName->Des() ); + AknTextUtils::StripCharacters( ptr, KFmgrDirectionalChars ); + } + +// ----------------------------------------------------------------------------- +// CFileManagerFileNameQueryDlg::~CFileManagerFileNameQueryDlg +// Destructor +// ----------------------------------------------------------------------------- +// +CFileManagerFileNameQueryDlg::~CFileManagerFileNameQueryDlg() + { + delete iOldName; + } + +// ----------------------------------------------------------------------------- +// CFileManagerFileNameQueryDlg::DoOkToExitL +// +// ----------------------------------------------------------------------------- +// +TBool CFileManagerFileNameQueryDlg::DoOkToExitL( TInt aButtonId ) + { + TBool result( CAknTextQueryDialog::OkToExitL( aButtonId ) ); + + HBufC* userText = Text().AllocLC(); + TPtr ptrUserText( userText->Des() ); + + // Strip any directionality markers to get pure name + AknTextUtils::StripCharacters( ptrUserText, KFmgrDirectionalChars ); + + // Check file name + TBool isValidName( EFalse ); + TParsePtrC oldName( *iOldName ); + if ( oldName.PathPresent() ) + { + isValidName = iEngine.IsValidName( + oldName.DriveAndPath(), *userText, EFalse ); + } + else + { + isValidName = iEngine.IsValidName( KNullDesC, *userText, EFalse ); + } + + if( !isValidName ) + { + if( iEngine.IllegalChars( *userText ) ) + { + FileManagerDlgUtils::ShowInfoNoteL( + R_QTN_FLDR_ILLEGAL_CHARACTERS ); + } + else + { + FileManagerDlgUtils::ShowInfoNoteL( + R_QTN_FLDR_BAD_FILE_NAME ); + } + CAknQueryControl* queryControl = QueryControl(); + if (queryControl) + { + CEikEdwin* edwin = static_cast< CEikEdwin* >( + queryControl->ControlByLayoutOrNull( EDataLayout ) ); + if (edwin) + { + edwin->SetSelectionL( edwin->TextLength(), 0 ); + } + } + CleanupStack::PopAndDestroy( userText ); + return EFalse; + } + + HBufC* userTextFullPath = HBufC::NewLC( KMaxFileName ); + TPtr ptrUserTextFullPath( userTextFullPath->Des() ); + + ptrUserTextFullPath.Append( oldName.DriveAndPath() ); + ptrUserTextFullPath.Append( *userText ); + // if some other entry found with same name + // not ok except if name same as original + if( oldName.NameAndExt().CompareF( *userText ) && + ( iEngine.IsNameFoundL( ptrUserTextFullPath ) || + BaflUtils::FileExists(CCoeEnv::Static()->FsSession(), ptrUserTextFullPath)) ) + { + TBool overWrite( EFalse ); + TUint32 fileType( 0 ); + + TRAPD( err, fileType = iEngine.FileTypeL( ptrUserTextFullPath ) ); + if ( err != KErrNone && err != KErrAccessDenied ) + { + User::Leave( err ); + } + + if( ( fileType & ( CFileManagerItemProperties::EOpen | + CFileManagerItemProperties::EReadOnly | + CFileManagerItemProperties::EFolder ) ) || + ( err == KErrAccessDenied ) ) + { + FileManagerDlgUtils::ShowInfoNoteL( + R_QTN_FLDR_NAME_ALREADY_USED, Text() ); + } + else + { + overWrite = + FileManagerDlgUtils::ShowConfirmQueryWithYesNoL( + R_QTN_ITEM_OVERWRITE_QUERY, Text() ); + } + + if( !overWrite ) + { + CAknQueryControl* queryControl = QueryControl(); + if (queryControl) + { + CEikEdwin* edwin = static_cast< CEikEdwin* >( + queryControl->ControlByLayoutOrNull( EDataLayout ) ); + if (edwin) + { + edwin->SetSelectionL( edwin->TextLength(), 0 ); + } + } + result = EFalse; + } + } + + TParsePtrC newName( ptrUserText ); + if ( result && oldName.Ext().CompareF( newName.Ext() ) ) + { + FileManagerDlgUtils::ShowWarningNoteL( + R_QTN_FM_WARNING_FILE_EXTENSION ); + } + + CleanupStack::PopAndDestroy( userTextFullPath ); + CleanupStack::PopAndDestroy( userText ); + return result; + } + +// ----------------------------------------------------------------------------- +// CFileManagerFileNameQueryDlg::OkToExitL +// +// ----------------------------------------------------------------------------- +// +TBool CFileManagerFileNameQueryDlg::OkToExitL( TInt aButtonId ) + { + if ( iCallbackDisabled ) + { + return EFalse; // Block unwanted softkey events + } + TBool ret( EFalse ); + iCallbackDisabled = ETrue; + TRAPD( err, ret = DoOkToExitL( aButtonId ) ); + iCallbackDisabled = EFalse; + User::LeaveIfError( err ); + return ret; + } + +// ----------------------------------------------------------------------------- +// CFileManagerFileNameQueryDlg::OfferKeyEventL +// +// ----------------------------------------------------------------------------- +// +TKeyResponse CFileManagerFileNameQueryDlg::OfferKeyEventL( const TKeyEvent& aKeyEvent, TEventCode aType ) + { + TKeyResponse response = EKeyWasNotConsumed; + if ( aType == EEventKey && aKeyEvent.iCode == EKeyEnter ) + { + response = EKeyWasConsumed; + } + else + { + response = CAknTextQueryDialog::OfferKeyEventL(aKeyEvent, aType); + } + return response; + } + +// End of File