diff -r 000000000000 -r 72b543305e3a mobilemessaging/smum/src/SmumEmailServiceCentreItemDialog.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mobilemessaging/smum/src/SmumEmailServiceCentreItemDialog.cpp Thu Dec 17 08:44:11 2009 +0200 @@ -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 // resource identifiers +#include // CSmsSettings +#include // CEikStatusPane +#include // CAknTitlePane +#include // StringLoader +#include // CommonPhoneParser +#include +#include // CEikMenuPane +#include // For HlpLauncher +#include +// 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 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 ( 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 + ( CEikonEnv::Static()->EikAppUi())->StatusPane(); + iTitlePane = static_cast + ( 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 + ( ControlEnv()->AppUi() ); + CArrayFix* 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 +