--- /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
+