diff -r 000000000000 -r 72b543305e3a email/mail/EditorSrc/cmsgmailreplytosetting.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/email/mail/EditorSrc/cmsgmailreplytosetting.cpp Thu Dec 17 08:44:11 2009 +0200 @@ -0,0 +1,221 @@ +/* +* Copyright (c) 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: Reply-to setting item and setting page +* +*/ + + +#include "cmsgmailreplytosetting.h" +#include "MsgMailEditorDocument.h" +#include "MailLog.h" +#include "MailUtils.h" +#include +#include +#include + +// const +const TInt KMaxEmailAddressLength(100); // KStringLength + +inline void CMsgMailEditorReplyToSettingItem::ConstructL() + { + SetSettingValueL(); + } + +CMsgMailEditorReplyToSettingItem* + CMsgMailEditorReplyToSettingItem::NewL( + TInt aIdentifier, CMsgMailEditorDocument& aDocument ) + { + CMsgMailEditorReplyToSettingItem* self = + new( ELeave ) CMsgMailEditorReplyToSettingItem( + aIdentifier, aDocument ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop(self); // self + return self; + } + + +CMsgMailEditorReplyToSettingItem::CMsgMailEditorReplyToSettingItem( + TInt aIdentifier, + CMsgMailEditorDocument& aDocument ): + CAknTextSettingItem( aIdentifier, iSettingValue ), + iDocument( aDocument ) + { + // iSettingValue is set later + } + +CMsgMailEditorReplyToSettingItem::~CMsgMailEditorReplyToSettingItem() + { + iSettingValue.Close(); + } + +// ---------------------------------------------------------------------------- +// // From CAknTextSettingItem +// ---------------------------------------------------------------------------- +// +void CMsgMailEditorReplyToSettingItem::EditItemL( + TBool /* aCalledFromMenu */ ) + { + TPtrC settingName = SettingName(); + + SetInitialValueL(); + CAknTextSettingItem::LoadL(); // update setting value to listbox + SetSettingPageFlags( CAknTextSettingPage::EZeroLengthAllowed ); + + CAknSettingPage* dlg = new( ELeave )CMsgMailEditorReplyToSettingPage( + &settingName, + SettingNumber(), + EEikCtTextButton, + SettingEditorResourceId(), + SettingPageResourceId(), + InternalTextPtr(), + SettingPageFlags() ); + SetSettingPage( dlg ); + SettingPage()->SetSettingPageObserver( this ); // not used + SettingPage()->ExecuteLD( CAknSettingPage::EUpdateWhenAccepted ); + + SaveSettingValueL(); + SetSettingValueL(); + CAknTextSettingItem::LoadL(); // update setting value to listbox + UpdateListBoxTextL(); + SetSettingPage( 0 ); // it is deleted now + } + +// ---------------------------------------------------------------------------- +// // From CAknTextSettingItem +// ---------------------------------------------------------------------------- +// +void CMsgMailEditorReplyToSettingItem::LoadL() + { + SetSettingValueL(); + CAknTextSettingItem::LoadL(); + } + +// ---------------------------------------------------------------------------- +// Save to settings +// ---------------------------------------------------------------------------- +// +void CMsgMailEditorReplyToSettingItem::SaveSettingValueL() + { + // get store for the message + CMsvStore* store = iDocument.CurrentEntry().EditStoreL(); + CleanupStack::PushL(store); + + CImHeader& header = iDocument.HeaderL(); + TPtr editedText = InternalTextPtr(); +#if defined (_UNICODE) + header.SetReplyToL( editedText ); +#else + HBufC8* replyto = HBufC8::NewLC( editedText.Length() ); + replyto->Des().Copy( editedText ); + header.SetReplyToL( *replyto ); + CleanupStack::PopAndDestroy( replyto ); +#endif // _UNICODE + iDocument.SetChanged( ETrue ); + + // store message header + header.StoreL( *store ); + store->CommitL(); + CleanupStack::PopAndDestroy( store ); + } + +// ---------------------------------------------------------------------------- +// Set current reply-to address to setting list +// ---------------------------------------------------------------------------- +// +void CMsgMailEditorReplyToSettingItem::SetSettingValueL() + { + // Reply to address + CImHeader& header = iDocument.HeaderL(); + + iSettingValue.Close(); + iSettingValue.CreateL( header.ReplyTo() ); + } + +// ---------------------------------------------------------------------------- +// Set initial value to editor +// ---------------------------------------------------------------------------- +// +void CMsgMailEditorReplyToSettingItem::SetInitialValueL() + { + // alloc new buffer for new value + iSettingValue.Close(); + iSettingValue.CreateL( KMaxEmailAddressLength ); + + // current Reply to address + CImHeader& header = iDocument.HeaderL(); + iSettingValue.Append( header.ReplyTo() ); + } + +CMsgMailEditorReplyToSettingPage::CMsgMailEditorReplyToSettingPage( + TInt aResourceID, + TDes& aText, + TInt aTextSettingPageFlags ) + : CAknTextSettingPage( + aResourceID, aText, aTextSettingPageFlags ) + { + } + +CMsgMailEditorReplyToSettingPage::CMsgMailEditorReplyToSettingPage( + const TDesC* aSettingText, + TInt aSettingNumber, + TInt aControlType, + TInt aEditorResourceId, + TInt aResourceID, + TDes& aText, + TInt aTextSettingPageFlags ) + : CAknTextSettingPage( + aSettingText, + aSettingNumber, + aControlType, + aEditorResourceId, + aResourceID, + aText, + aTextSettingPageFlags ) + { + } + +CMsgMailEditorReplyToSettingPage::~CMsgMailEditorReplyToSettingPage() + { + } + +// ---------------------------------------------------------------------------- +// From CAknTextSettingPage +// ---------------------------------------------------------------------------- +// +TBool CMsgMailEditorReplyToSettingPage::OkToExitL( TBool aAccept ) + { + if ( !aAccept ) + { + return ETrue; + } + + TBool retVal( ETrue ); + HBufC* editedText = TextControl()->GetTextInHBufL(); + if ( editedText && editedText->Length() ) + { + CleanupStack::PushL( editedText ); + retVal = MsvUiServiceUtilities::IsValidEmailAddressL( *editedText ); + CleanupStack::PopAndDestroy( editedText ); + } + if ( !retVal ) + { + MailUtils::InformationNoteL( R_QTN_MCE_ERROR_MISSING_CHARACTER ); + // Highlight the email address if it is in a wrong format. + TextControl()->SelectAllL(); + } + + return retVal; + } +// End of File