mobilemessaging/smum/src/SmumEmailServiceCentreItemDialog.cpp
changeset 79 2981cb3aa489
parent 0 72b543305e3a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mobilemessaging/smum/src/SmumEmailServiceCentreItemDialog.cpp	Wed Nov 03 09:52:46 2010 +0530
@@ -0,0 +1,411 @@
+/*
+* 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:  
+*     A dialog for adding new and editing old service centres.
+*
+*/
+
+
+
+// INCLUDE FILES
+#include <SMUM.rsg>                     // resource identifiers
+#include <smutset.h>                    // CSmsSettings
+#include <aknappui.h>                   // CEikStatusPane
+#include <akntitle.h>                   // CAknTitlePane
+#include <StringLoader.h>               // StringLoader
+#include <commonphoneparser.h>          // CommonPhoneParser
+#include <aknnotewrappers.h>
+#include <eikmenup.h>                   // CEikMenuPane
+#include <hlplch.h>                     // For HlpLauncher
+#include <csxhelp/mce.hlp.hrh>
+// locals
+#include "SmumSettingsDialogGSM.h"         // KStringLength
+#include "SmumEmailServiceCentreItemDialog.h"// CSmumEmailServiceCentreDialog 
+#include "SMSU.HRH"                     // resource header
+#include "SmumServiceCentresDialog.h"   // CSmsServiceCentresDialog
+#include "smsui.pan"
+
+// CONSTANTS
+const TInt KSCNameLength = 100;
+// ================= MEMBER FUNCTIONS =======================
+// C++ constructor can NOT contain any code, that
+// might leave.
+CSmumEmailServiceCentreDialog::CSmumEmailServiceCentreDialog (
+    TDes&           aGateway, 
+    TDes&           aSC,
+    const TBool&    aModifiable,
+    TInt&           aExitCode,
+    TBool           aHelpFeatureSupported ) 
+        :iGateway               ( aGateway ), 
+        iSC                     ( aSC ),
+        iModifiable             ( aModifiable ),
+        iExitCode               ( aExitCode ),
+        iHelpFeatureSupported   ( aHelpFeatureSupported ),
+        iLaunchDialog           ( EFalse )
+    {
+    }
+
+// Destructor
+CSmumEmailServiceCentreDialog::~CSmumEmailServiceCentreDialog ()
+    {
+    if ( iListBox )
+        {
+        iListBox->SetScrollBarFrame( NULL, CEikListBox::EOwnedExternally );
+        }
+    delete iPreviousTitleText;
+    // iSettingsArray, iListBox, iTitlePane are
+    // plain pointers to objects owned by other classes which take
+    // care also about deletion.
+    // Set to NULL to satisfy Lint
+    iSettingsArray = NULL;
+    iListBox = NULL;
+    iTitlePane = NULL;
+    }
+
+// ----------------------------------------------------
+// CSmumEmailServiceCentreDialog::OkToExitL
+//
+// ----------------------------------------------------
+TInt CSmumEmailServiceCentreDialog::OkToExitL( TInt aButtonId )
+    {
+    TInt returnValue;
+
+    switch( aButtonId )
+        {
+        case ESmsSettingsChoiceMenuChange:
+	        {
+	        ProcessCommandL( aButtonId );
+	        returnValue = EFalse; // Cannot exit, since MSK was pressed
+	        }     
+	        break;
+        // menu / system exit
+        case EAknSoftkeyCancel: 
+            {
+            if ( iExitCode != ESmumSmsSettingsMenuExit &&
+                iExitCode != ESmumSmsSettingsSystemExit )
+                {
+                // system exit
+                iExitCode = ESmumSmsSettingsSystemExit;
+                }
+            // Special handling for menu exit
+            if ( iExitCode == ESmumSmsSettingsMenuExit )
+                {
+                returnValue = ClosingEmailSettingsItemDialogL();
+                }
+            else
+                {
+                TRAP_IGNORE( ClosingEmailSettingsItemDialogL() ); 
+                returnValue = ETrue; // to be sure of not leaving and exiting
+                }
+            }
+            break;
+        case EAknSoftkeyBack:
+            {
+            iExitCode = ESmumSmsSettingsBack;
+            returnValue = ClosingEmailSettingsItemDialogL();
+            }
+            break;
+        default :
+            returnValue = CAknDialog::OkToExitL( aButtonId );
+            break;
+        }
+
+    return returnValue;
+    }
+
+// ----------------------------------------------------
+// CSmumEmailServiceCentreDialog::HandleListBoxEventL
+//
+// ----------------------------------------------------
+void CSmumEmailServiceCentreDialog::HandleListBoxEventL(
+    CEikListBox* /*aListBox*/, 
+    TListBoxEvent aEventType )
+    {
+    switch( aEventType )
+        {
+        case EEventEnterKeyPressed:
+        case EEventItemSingleClicked:
+            OpenSettingPageL( ETrue );
+            break;
+        default :
+            // panic
+            break;
+        }
+    }
+
+// ----------------------------------------------------
+// CSmumEmailServiceCentreDialog::OfferKeyEventL
+//
+// ----------------------------------------------------
+TKeyResponse CSmumEmailServiceCentreDialog::OfferKeyEventL(
+    const TKeyEvent& aKeyEvent,
+    TEventCode aType )
+    {
+    TKeyResponse returnValue = CAknDialog::OfferKeyEventL( aKeyEvent, aType );
+    return returnValue;
+    }
+
+// ----------------------------------------------------
+// CSmumEmailServiceCentreDialog::ProcessCommandL
+//
+// ----------------------------------------------------
+void CSmumEmailServiceCentreDialog::ProcessCommandL(
+    TInt aCommandId )
+    {
+    CAknDialog::ProcessCommandL( aCommandId ) ;
+    switch ( aCommandId )
+        {
+        case ESmsSettingsChoiceMenuChange:
+            OpenSettingPageL( EFalse );
+        break;
+        case EAknCmdHelp:           
+            LaunchHelpL();            
+            break;
+        case ESmsSettingsChoiceMenuExit:
+            { 
+            iExitCode = ESmumSmsSettingsMenuExit;
+            TryExitL( EAknSoftkeyCancel );
+            }
+            break;
+        default :
+            break;
+        }
+    }
+
+// ----------------------------------------------------
+// CSmumEmailServiceCentreDialog::OpenSettingPageL
+//
+// ----------------------------------------------------
+void CSmumEmailServiceCentreDialog::OpenSettingPageL(
+    TBool aEnterPressed )
+    {
+    TInt index = iListBox->CurrentItemIndex();
+    __ASSERT_DEBUG( index >= 0 , Panic( ESmsetdlgInvalidIndex ));
+    
+    if ( KErrNotFound != index )//check we have something in listbox
+        {
+        if ( iModifiable ) // Permisson to edit
+            { // Edit the selected setting
+            ModifySettingNumberL( aEnterPressed, index );
+            }
+        else // Show note
+            {
+            ShowInformationNoteL( R_QTN_SMS_EMAIL_SETT_CANNOT_CHANGE );
+            }
+        }
+    }
+
+// ---------------------------------------------------------
+// CSmumEmailServiceCentreDialog::DynInitMenuPaneL
+//
+// ---------------------------------------------------------
+void CSmumEmailServiceCentreDialog::DynInitMenuPaneL(
+    TInt aMenuId, 
+    CEikMenuPane* aMenuPane)
+    {
+    if ( aMenuPane )
+        {
+        switch ( aMenuId )
+            {
+            case R_SMS_SERVICECENTRE_ITEM_CHOICE_MENUPANE:
+                // Help handling
+                aMenuPane->SetItemDimmed( EAknCmdHelp, !iHelpFeatureSupported );
+                break;
+            default :
+                // panic
+                break;
+            }
+        }
+    }
+
+// ----------------------------------------------------
+// CSmumEmailServiceCentreDialog::ModifySettingNumberL
+//
+// ----------------------------------------------------
+void CSmumEmailServiceCentreDialog::ModifySettingNumberL( TBool aEnterPressed, TInt aIndex )
+    {
+    TBool validNumber = EFalse;
+    TBool canExit = EFalse;
+    // Take the original number safe
+    TBuf<KSCNameLength> origNumber = iSettingsArray->At( aIndex ).iUserText;
+    // Check validity
+    while ( !canExit )
+        {
+        // Did user press ok in setting page ?
+        if ( iSettingsArray->EditItemL( aIndex, aEnterPressed ))
+            {
+            // yes, ok pressed
+            // Check number with commonphoneparser
+            validNumber = CommonPhoneParser::ParsePhoneNumber( 
+                iSettingsArray->At( aIndex ).iUserText,
+                CommonPhoneParser::ESMSNumber );
+            if ( validNumber )
+                {                
+                canExit = ETrue;
+                // Update the ListView accordingly
+		    	iListBox->DrawNow();    
+                }
+            else 
+                {
+                // Show "invalid number"-note
+                ShowInformationNoteL( R_QTN_INFO_INVALID_NUMBER );
+                canExit = EFalse;
+                }            
+            }
+        else
+            {
+            // no, cancel pressed
+            // In case of cancel, restore the value
+            iSettingsArray->At( aIndex ).iUserText = origNumber;
+            canExit = ETrue;
+            }
+        }
+    }
+
+// ----------------------------------------------------
+// CSmumEmailServiceCentreDialog::PreLayoutDynInitL
+//
+// ----------------------------------------------------
+void CSmumEmailServiceCentreDialog::PreLayoutDynInitL()
+    {
+    // Setting arrays in order
+    iListBox = static_cast<CEikTextListBox*> ( Control( ESmsSCAddEditId ) );
+    iSettingsArray = CMuiuSettingsArray::NewL( R_EMAIL_SERVICECENTRE_ITEMS );
+
+    iSettingsArray->At( ESmumEmailServiceCentreNumber ).iUserText.Copy( iSC );
+    iSettingsArray->At( ESmumEmailGateway ).iUserText.Copy( iGateway );
+
+    iListBox->SetListBoxObserver( this );
+
+    CTextListBoxModel* model = iListBox->Model();
+    model->SetItemTextArray( iSettingsArray );
+
+    // Fetch pointer to titlepane
+    CEikStatusPane *sp =  static_cast<CAknAppUi*> 
+        ( CEikonEnv::Static()->EikAppUi())->StatusPane();
+    iTitlePane = static_cast<CAknTitlePane*> 
+        ( sp->ControlL( TUid::Uid( EEikStatusPaneUidTitle )) );
+    // Take old titlepane text safe
+    iPreviousTitleText = ( *iTitlePane->Text() ).Alloc();
+    HBufC* text = StringLoader::LoadLC( R_QTN_MCE_SETT_TITLE_SMS_MAIL );
+    iTitlePane->SetTextL( *text );
+    CleanupStack::PopAndDestroy(); // text
+    }
+
+// ----------------------------------------------------
+// CSmumEmailServiceCentreDialog::ClosingEmailSettingsItemDialogL
+//
+// ----------------------------------------------------
+TBool CSmumEmailServiceCentreDialog::ClosingEmailSettingsItemDialogL()
+    {
+    TBool retValue = EFalse;
+    TInt scSize( 
+        iSettingsArray->At( ESmumEmailServiceCentreNumber ).iUserText.Size() );
+    TInt gatewaySize( 
+        iSettingsArray->At( ESmumEmailGateway ).iUserText.Size() );
+    // Did user left empty fields?
+    if ( !scSize || !gatewaySize )
+        { // Yes, we have empty fields
+        if ( iExitCode == ESmumSmsSettingsSystemExit ) // Are we exiting?
+            { // Exiting fast without any queries or titlepane updates
+            iSC.Zero();
+            iGateway.Zero();
+            retValue = ETrue;
+            }
+        else 
+            {
+            // do we exit without valid settings?
+            CAknQueryDialog* dlg = CAknQueryDialog::NewL();
+            if ( dlg->ExecuteLD( R_EMAIL_SETTINGS_INCOMPLETE_QUERY ) )
+                {// Yes
+                // reset values
+                iSC.Zero();
+                iGateway.Zero();
+                retValue = ETrue;
+                }
+            else
+                {// No
+                // Set the focus accordingly
+                if ( !gatewaySize )
+                    {
+                    iListBox->SetCurrentItemIndexAndDraw( 
+                        ESmumEmailGateway );
+                    }
+                else
+                    {
+                    iListBox->SetCurrentItemIndexAndDraw( 
+                        ESmumEmailServiceCentreNumber );
+                    }
+                }
+            }
+        }
+    else{ // no empty fields
+        iSC.Copy( iSettingsArray->At( 
+            ESmumEmailServiceCentreNumber ).iUserText );
+        iGateway.Copy( 
+            iSettingsArray->At( ESmumEmailGateway ).iUserText );
+        retValue = ETrue;
+        }
+    
+    if ( retValue && iExitCode == ESmumSmsSettingsBack )
+        {
+        // Replace title with old title text
+        iTitlePane->SetTextL( *iPreviousTitleText );
+        }
+
+    return retValue;
+    }
+
+// ----------------------------------------------------
+// CSmumEmailServiceCentreDialog::LaunchHelpL
+// launch help using context
+//
+// ----------------------------------------------------
+void CSmumEmailServiceCentreDialog::LaunchHelpL() const
+    {
+    if ( iHelpFeatureSupported )
+        {
+        CCoeAppUi* editorAppUi = static_cast<CCoeAppUi*>
+            ( ControlEnv()->AppUi() );
+        CArrayFix<TCoeHelpContext>* helpContext = editorAppUi->AppHelpContextL();
+        HlpLauncher::LaunchHelpApplicationL( iEikonEnv->WsSession(), helpContext );
+        }
+    }
+
+// ----------------------------------------------------
+// CSmumEmailServiceCentreDialog::GetHelpContext
+// returns helpcontext as aContext
+//
+// ----------------------------------------------------
+void CSmumEmailServiceCentreDialog::GetHelpContext
+        (TCoeHelpContext& aContext) const
+    {    
+    const TUid KUidMce ={0x100058C5};      
+    aContext.iMajor = KUidMce;
+    aContext.iContext = KSMS_HLP_SETTINGS_SMS_EMAIL;
+    }
+
+// ----------------------------------------------------
+// CSmumEmailServiceCentreDialog::ShowInformationNoteL
+//
+// ----------------------------------------------------
+void CSmumEmailServiceCentreDialog::ShowInformationNoteL( TInt aResource )
+    {
+    HBufC* text = StringLoader::LoadLC( aResource, iCoeEnv );
+    CAknInformationNote* note = new ( ELeave ) CAknInformationNote( ETrue );
+    note->ExecuteLD( *text );
+    CleanupStack::PopAndDestroy(); // text
+    }
+//  End of File  
+