--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/commonuis/CommonDialogs/src/CAknFileNamePromptDialog.cpp Tue Feb 02 01:00:49 2010 +0200
@@ -0,0 +1,404 @@
+/*
+* Copyright (c) 2002-2006 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: ?Description
+*
+*/
+
+
+// INCLUDES
+#include "CAknFileNamePromptDialog.h"
+
+#include <AknQueryDialog.h> // CAknTextQueryDialog
+#include <barsread.h> // TResourceReader
+#include <bautils.h>
+#include <commondialogs.rsg>
+
+#include "CAknCommonDialogsQueryDialog.h"
+#include "AknCFDUtility.h"
+
+// CONSTANTS
+// If number is 10 or more 2 digits are needed to display it
+const TInt KTwoDigitNeeded = 10;
+_LIT( KFormatStringTwoDigit, "%02d" );
+_LIT( KFormatString, "%d" );
+const TInt KFormatBufLen = 16;
+const TInt KMaxAutoNum = 99;
+// =========================== MEMBER FUNCTIONS ==============================
+
+// ---------------------------------------------------------------------------
+// CAknFileNamePromptDialog::CAknFileNamePromptDialog
+//
+//
+// -----------------------------------------------------------------------------
+//
+CAknFileNamePromptDialog::CAknFileNamePromptDialog()
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CAknFileNamePromptDialog::ConstructFromResourceL
+//
+// -----------------------------------------------------------------------------
+//
+void CAknFileNamePromptDialog::ConstructFromResourceL( TInt aResourceId )
+ {
+ BaseConstructL();
+ if( aResourceId )
+ {
+ // If a resource id is given, read settings from it.
+ ReadFromResourceL( aResourceId );
+ }
+ // After user resource is read, "patch" the missing values with defaults
+ // by reading all missing settings from default resource.
+ SetResourceId( aResourceId );
+ ReadFromResourceL( aResourceId );
+ }
+
+// -----------------------------------------------------------------------------
+// CAknFileNamePromptDialog::NewL
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CAknFileNamePromptDialog* CAknFileNamePromptDialog::NewL()
+ {
+ return NewL( 0 );
+ }
+
+// -----------------------------------------------------------------------------
+// CAknFileNamePromptDialog::NewL
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CAknFileNamePromptDialog* CAknFileNamePromptDialog::NewL( TInt aResourceId )
+ {
+ CAknFileNamePromptDialog* self = new( ELeave ) CAknFileNamePromptDialog();
+ CleanupStack::PushL( self );
+ self->ConstructFromResourceL( aResourceId );
+ CleanupStack::Pop(); // self
+ return self;
+ }
+
+// Destructor
+EXPORT_C CAknFileNamePromptDialog::~CAknFileNamePromptDialog()
+ {
+ delete iTitle;
+ delete iRightSoftkey;
+ delete iLeftSoftkey;
+ delete iPath;
+ delete iDefaultFileName;
+ }
+
+
+// -----------------------------------------------------------------------------
+// CAknFileNamePromptDialog::SetPathL
+//
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CAknFileNamePromptDialog::SetPathL( const TDesC& aPath )
+ {
+ AknCFDUtility::AllocateIfValidL( iPath, aPath );
+ }
+
+// -----------------------------------------------------------------------------
+// CAknFileNamePromptDialog::SetObserver
+//
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CAknFileNamePromptDialog::SetObserver( MAknFileSelectionObserver* aObserver )
+ {
+ iObserver = aObserver;
+ }
+
+// -----------------------------------------------------------------------------
+// CAknFileNamePromptDialog::SetTitleL
+//
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CAknFileNamePromptDialog::SetTitleL( const TDesC& aText )
+ {
+ AknCFDUtility::AllocateIfValidL( iTitle, aText );
+ }
+
+// -----------------------------------------------------------------------------
+// CAknFileNamePromptDialog::SetLeftSoftkeyL
+//
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CAknFileNamePromptDialog::SetLeftSoftkeyL( const TDesC& aText )
+ {
+ AknCFDUtility::AllocateIfValidL( iLeftSoftkey, aText );
+ }
+
+// -----------------------------------------------------------------------------
+// CAknFileNamePromptDialog::SetRightSoftkeyL
+//
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CAknFileNamePromptDialog::SetRightSoftkeyL( const TDesC& aText )
+ {
+ AknCFDUtility::AllocateIfValidL( iRightSoftkey, aText );
+ }
+
+// -----------------------------------------------------------------------------
+// CAknFileNamePromptDialog::ShowDialogL
+//
+//
+// -----------------------------------------------------------------------------
+//
+TBool CAknFileNamePromptDialog::ShowDialogL( TDes& aFilename, TBool aIfRename )
+ {
+ __ASSERT_DEBUG( iPath,
+ User::Panic( KCFDPanicText, ECFDPanicNoPathForFileNamePromptDialog ) );
+ __ASSERT_DEBUG( iTitle && iLeftSoftkey && iRightSoftkey,
+ User::Panic( KCFDPanicText, ECFDPanicTitleOrSoftkeyNotSet ) );
+
+ TParsePtr parse(aFilename);
+ if( ( iDefaultFileName ) && ( aFilename.Length() == 0 ) )
+ {
+ // If default filename is only set in resource, use it.
+ TPtr defaultFileName = iDefaultFileName->Des();
+ parse = TParsePtr( defaultFileName );
+ }
+
+ HBufC * originDataText = parse.Name().AllocL();
+ originDataText = originDataText->ReAllocL( KMaxFileName );
+ CleanupStack::PushL( originDataText );
+
+ TPtr dataText = originDataText->Des();
+ TInt pathLength( 0 );
+ if( iPath )
+ {
+ pathLength = iPath->Length();
+ }
+ TInt maxLength( aFilename.MaxLength() - parse.Ext().Length() - pathLength );
+ if ( aIfRename == EFalse )
+ {
+ //Give a default file name
+ TInt i = 0;
+ TFileName fileName;
+ TBuf< KFormatBufLen > numBuf; // For autonumbering
+
+ while ( ETrue )
+ {
+ // Create a TFileName descriptor and set full path + filename to it
+ fileName = *iPath;
+ TInt tempNumber = dataText.Length();
+ if ( ( i > 1 ) && ( tempNumber >= 2 ) )
+ {
+ // Delete previous automatic number
+ dataText.Delete( tempNumber - 2, 2 );
+ }
+ dataText += numBuf;
+ tempNumber = dataText.Length();
+ if( tempNumber > maxLength )
+ {
+ if( i )
+ {
+ dataText.Delete(( maxLength - 2 ), ( tempNumber - maxLength ));
+ }
+ else
+ {
+ dataText.Delete( maxLength, ( tempNumber - maxLength ));
+ }
+ }
+ fileName += dataText;
+ fileName += parse.Ext();
+
+ if( !BaflUtils::FileExists( iCoeEnv->FsSession(), fileName ) )
+ {
+ // If the file does not exist, accept it
+ break;
+ }
+ else
+ {
+ i++;
+ if( i > KMaxAutoNum )
+ {
+ break;
+ }
+ numBuf.Zero();
+ if( i < KTwoDigitNeeded )
+ {
+ numBuf.Format( KFormatStringTwoDigit, i );
+ }
+ else
+ {
+ numBuf.Format( KFormatString, i );
+ }
+
+ AknTextUtils::DisplayTextLanguageSpecificNumberConversion(
+ numBuf ); // Localize digits
+ }
+ }
+ }
+
+ CAknCommonDialogsQueryDialog* dialog = new( ELeave ) CAknCommonDialogsQueryDialog(
+ iObserver, *iPath, dataText, parse.Ext(), iCoeEnv );
+
+ dialog->PrepareLC( R_CFD_FILENAME_PROMPT_DIALOG );
+
+ if( ( maxLength >= 0 ) && ( maxLength < KMaxFileName ) )
+ {
+ dialog->SetMaxLength( maxLength );
+ }
+
+ dialog->SetPromptL( *iTitle );
+ CEikButtonGroupContainer* cba = &dialog->ButtonGroupContainer();
+ MEikButtonGroup* buttonGroup = cba->ButtonGroup();
+ cba->SetCommandL( buttonGroup->CommandId( 0 ), *iLeftSoftkey );
+ cba->SetCommandL( buttonGroup->CommandId( 2 ), *iRightSoftkey );
+
+ // Run dialog
+ TBool returnValue( dialog->RunLD() == EAknSoftkeyOk );
+
+ if( dataText.Length() == 0 )
+ {
+ // User has cancelled a query launched by dialog:
+ CleanupStack::PopAndDestroy(); // originDataText
+ return EFalse;
+ }
+
+ if( returnValue )
+ {
+ dataText += parse.Ext();
+ aFilename = dataText;
+ }
+
+ CleanupStack::PopAndDestroy(); // originDataText
+ return returnValue;
+ }
+
+// -----------------------------------------------------------------------------
+// CAknFileNamePromptDialog::ExecuteL
+//
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TBool CAknFileNamePromptDialog::ExecuteL( TDes& aFileName )
+ {
+ return ShowDialogL( aFileName, EFalse );
+ }
+
+// -----------------------------------------------------------------------------
+// CAknFileNamePromptDialog::RenameL
+//
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TBool CAknFileNamePromptDialog::RenameL( TDes& aFileName )
+ {
+ return ShowDialogL( aFileName, ETrue );
+ }
+
+// -----------------------------------------------------------------------------
+// CAknFileNamePromptDialog::RunDlgLD
+// A wrapper for RunL.
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TBool CAknFileNamePromptDialog::RunDlgLD( TDes& aFileName,
+ const TDesC& aPath,
+ MAknFileSelectionObserver* aObserver )
+ {
+ return RunL( 0, aFileName, aPath, KNullDesC, aObserver );
+ }
+
+// -----------------------------------------------------------------------------
+// CAknFileNamePromptDialog::RunDlgLD
+// A wrapper for RunL.
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TBool CAknFileNamePromptDialog::RunDlgLD( TDes& aFileName,
+ const TDesC& aPath,
+ const TDesC& aTitle,
+ MAknFileSelectionObserver* aObserver )
+ {
+ return RunL( 0, aFileName, aPath, aTitle, aObserver );
+ }
+
+// -----------------------------------------------------------------------------
+// CAknFileNamePromptDialog::RunDlgLD
+// A wrapper for RunL.
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TBool CAknFileNamePromptDialog::RunDlgLD( TDes& aFileName,
+ const TDesC& aPath,
+ TInt aResourceId,
+ MAknFileSelectionObserver* aObserver )
+ {
+ return RunL( aResourceId, aFileName, aPath, KNullDesC, aObserver );
+ }
+
+// -----------------------------------------------------------------------------
+// CAknFileNamePromptDialog::RunL
+//
+//
+// -----------------------------------------------------------------------------
+//
+TBool CAknFileNamePromptDialog::RunL(
+ TInt aResourceId,
+ TDes& aFileName,
+ const TDesC& aPath,
+ const TDesC& aTitle,
+ MAknFileSelectionObserver* aObserver )
+ {
+ CAknFileNamePromptDialog* self = CAknFileNamePromptDialog::NewL( aResourceId );
+ CleanupStack::PushL( self );
+ self->SetPathL( aPath );
+ self->SetTitleL( aTitle );
+ self->iObserver = aObserver;
+
+ TBool returnValue( self->ExecuteL( aFileName ) );
+
+ CleanupStack::PopAndDestroy(); // self
+ return returnValue;
+ }
+
+// -----------------------------------------------------------------------------
+// CAknFileNamePromptDialog::?member_function
+//
+//
+// -----------------------------------------------------------------------------
+//
+void CAknFileNamePromptDialog::SetResourceId( TInt& aResourceId ) const
+ {
+ aResourceId = R_CFD_DEFAULT_SAVE_FILENAME_PROMPT;
+ }
+
+// -----------------------------------------------------------------------------
+// CAknFileNamePromptDialog::?member_function
+//
+//
+// -----------------------------------------------------------------------------
+//
+void CAknFileNamePromptDialog::ReadFromResourceL( TInt aResourceId )
+ {
+ TResourceReader reader;
+ iCoeEnv->CreateResourceReaderLC( reader, aResourceId );
+ AknCFDUtility::AllocateIfNullL( iTitle, reader.ReadTPtrC() );
+ AknCFDUtility::AllocateIfNullL( iDefaultFileName, reader.ReadTPtrC() );
+ AknCFDUtility::AllocateIfNullL( iPath, reader.ReadTPtrC() );
+ AknCFDUtility::AllocateIfNullL( iLeftSoftkey, reader.ReadTPtrC() );
+ AknCFDUtility::AllocateIfNullL( iRightSoftkey, reader.ReadTPtrC() );
+ CleanupStack::PopAndDestroy(); // reader
+ }
+
+// End of File