diff -r 000000000000 -r 72b543305e3a email/mail/EditorSrc/MsgMailOptionsDlg.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/email/mail/EditorSrc/MsgMailOptionsDlg.cpp Thu Dec 17 08:44:11 2009 +0200 @@ -0,0 +1,257 @@ +/* +* Copyright (c) 2002 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: Implements a dialog for view/edit sending options +* +*/ + + +// INCLUDE FILES +#include "MsgMailUIDs.h" +#include "MsgMailOptionsDlg.h" +#include "MsgMailEditorAppUi.h" +#include "MsgMailEditorDocument.h" +#include "msgmaileditor.hrh" +#include "cmsgmaileditorsettinglist.h" +#include "csxhelp/mail.hlp.hrh" +#include +#include +#include +#include +#include + + +// ================= MEMBER FUNCTIONS ======================= + +// ----------------------------------------------------------------------------- +// CMsgMailOptionsDlg::NewL +// ----------------------------------------------------------------------------- +CMsgMailOptionsDlg* CMsgMailOptionsDlg::NewL(CMsgMailEditorDocument* aDocument, + TBool aHelpSupported) + { + ASSERT(aDocument); + CMsgMailOptionsDlg* self = new( ELeave ) CMsgMailOptionsDlg; + self->iDocument = aDocument; + self->ConstructL(); + self->iHelpSupported = aHelpSupported; + return self; + } + +// ----------------------------------------------------------------------------- +// Constructor +// ----------------------------------------------------------------------------- +CMsgMailOptionsDlg::CMsgMailOptionsDlg() + {} + +// ----------------------------------------------------------------------------- +// CMsgMailOptionsDlg::ConstructL() +// ----------------------------------------------------------------------------- +inline void CMsgMailOptionsDlg::ConstructL() + { + CAknDialog::ConstructL( R_SEND_OPTIONS_MENUBAR ); + CEikStatusPane *sp = + static_cast ( iEikonEnv->EikAppUi() )->StatusPane(); + iTitlePane = static_cast ( sp->ControlL( + TUid::Uid(EEikStatusPaneUidTitle))); + + iOldTitlePaneText = iTitlePane->Text()->AllocL(); + TResourceReader reader; + iCoeEnv->CreateResourceReaderLC(reader, R_SEND_OPTIONS_TITLE_TEXT); + iTitlePane->SetFromResourceL(reader); + CleanupStack::PopAndDestroy(); // CSI: 12 # reader + } + +//----------------------------------------------------------------------------- +// Destructor +//----------------------------------------------------------------------------- +CMsgMailOptionsDlg::~CMsgMailOptionsDlg() + { + delete iSettingList; + + if ( iOldTitlePaneText && iTitlePane ) + { + // Code scanner warning ignored, since existance of data + // member is checked before accessing + iTitlePane->SetText(iOldTitlePaneText); // CSI: 23 # See comment above + } + } + +//----------------------------------------------------------------------------- +// CMsgMailOptionsDlg::OkToExitL() +//----------------------------------------------------------------------------- +TBool CMsgMailOptionsDlg::OkToExitL(TInt aButtonId) + { + if ( aButtonId == EAknSoftkeyBack ) + { + return ETrue; + } + else if( aButtonId == EMsgMailSendOptionsChange ) + { + ProcessCommandL( aButtonId ); + return EFalse; + } + + return CAknDialog::OkToExitL(aButtonId); + } + +//----------------------------------------------------------------------------- +// CMsgMailOptionsDlg::ProcessCommandL() +//----------------------------------------------------------------------------- +void CMsgMailOptionsDlg::ProcessCommandL(TInt aCommandId) + { + const TBool calledFromMenu( MenuShowing() ); + CAknDialog::ProcessCommandL(aCommandId); + + if ( aCommandId == EAknCmdHelp && iHelpSupported ) + { + + CArrayFix* help = + new( ELeave ) CArrayFixFlat( 1 ); + + TCoeHelpContext helpContext; + + + helpContext = TCoeHelpContext( TUid::Uid( KUidMsgMailEditor ), + KMAIL_HLP_SENDING_OPTIONS() ); + + help->AppendL(helpContext); + + // Launch help + HlpLauncher::LaunchHelpApplicationL( iEikonEnv->WsSession(), + help ); + + } + else if ( aCommandId == EMsgMailEditorSendOptionsCmdExit ) + { + TryExitL(EAknSoftkeyOk); + } + else if ( aCommandId == EMsgMailSendOptionsChange ) + { + TInt index = iSettingList->ListBox()->CurrentItemIndex(); + iSettingList->EditItemL( index, calledFromMenu ); + //Update settings after editing. This needs to be done because + //changing mailbox affects also on reply-to setting. + iSettingList->LoadSettingsL(); + iSettingList->DrawNow(); + + } + } + +//----------------------------------------------------------------------------- +// CMsgMailOptionsDlg::OfferKeyEventL() +//----------------------------------------------------------------------------- +TKeyResponse CMsgMailOptionsDlg::OfferKeyEventL( + const TKeyEvent& aKeyEvent, + TEventCode aType ) + { + ASSERT( iSettingList ); + + TKeyResponse response = iSettingList->OfferKeyEventL( aKeyEvent, aType ); + + if ( response == EKeyWasNotConsumed ) + { + // Let the base class handle the event + response = CAknDialog::OfferKeyEventL( aKeyEvent, aType ); + } + + if (aType == EEventKey && aKeyEvent.iCode == EKeyEscape) + { // must exit application (e.g. End key) + ProcessCommandL(EMsgMailEditorSendOptionsCmdExit); + } + + return response; + } + +//----------------------------------------------------------------------------- +// CMsgMailOptionsDlg::DynInitMenuPaneL() +//----------------------------------------------------------------------------- +void CMsgMailOptionsDlg::DynInitMenuPaneL(TInt aMenuId, CEikMenuPane* aMenuPane) + { + if (aMenuId == R_SEND_OPTIONS_MENU) + { + aMenuPane->SetItemDimmed( EAknCmdHelp, !iHelpSupported); + } + } + +//----------------------------------------------------------------------------- +// From CEikDialog +//----------------------------------------------------------------------------- +void CMsgMailOptionsDlg::PreLayoutDynInitL() + { + iSettingList = CMailEditorSettingList::NewL( + *iDocument, R_SERVICE_SETTINGS_LIST ); + ASSERT( iSettingList ); + + iSettingList->ListBox()->SetListBoxObserver( this ); + iSettingList->SetMopParent( this ); + iSettingList->MakeVisible( ETrue ); + iSettingList->ActivateL(); + } + + +//----------------------------------------------------------------------------- +// CMsgMailOptionsDlg::SizeChanged() +//----------------------------------------------------------------------------- +void CMsgMailOptionsDlg::SizeChanged() + { + CAknDialog::SizeChanged(); + + if ( iSettingList ) + { + TRect parent; + AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EMainPane, parent ); + AknLayoutUtils::LayoutControl( + iSettingList, parent, AknLayout::list_gen_pane( 0 ) ); + } + } + +//----------------------------------------------------------------------------- +// CMsgMailOptionsDlg::SizeChanged() +//----------------------------------------------------------------------------- +void CMsgMailOptionsDlg::HandleResourceChange( TInt aType ) + { + // We mustn't call SizeChanged for all resource changes since that + // isn't needed for KAknsMessageSkinChange events and would slow down + // skin change operation. CAknDialog and other controls can handle + // resizing on their own. + + CAknDialog::HandleResourceChange(aType); + + CEikStatusPane* statusPane = iAvkonAppUi->StatusPane(); + if ( statusPane ) + { + statusPane->HandleResourceChange( aType ); + } + if ( iSettingList ) + { + iSettingList->HandleResourceChange( aType ); + } + } + +//----------------------------------------------------------------------------- +// CMsgMailOptionsDlg::HandleListBoxEventL() +//----------------------------------------------------------------------------- +void CMsgMailOptionsDlg::HandleListBoxEventL(CEikListBox* aListBox, + TListBoxEvent aEventType) + { + iSettingList->HandleListBoxEventL( aListBox, aEventType ); + + // Refresh settings listbox when items are edited + if ( aEventType == EEventItemDoubleClicked ) + { + iSettingList->LoadSettingsL(); + iSettingList->DrawNow(); + } + + } +// End of File