email/mail/EditorSrc/MsgMailOptionsDlg.cpp
changeset 0 72b543305e3a
--- /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 <akntitle.h>
+#include <hlplch.h>
+#include <MsgEditor.hrh>
+#include <MsgMailEditor.rsg>
+#include <StringLoader.h>
+
+
+// ================= 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<CAknAppUi*> ( iEikonEnv->EikAppUi() )->StatusPane();
+    iTitlePane = static_cast<CAknTitlePane *> ( 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<TCoeHelpContext>* help =
+                            new( ELeave ) CArrayFixFlat<TCoeHelpContext>( 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