--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mobilemessaging/smum/src/SmumServiceCentresDialog.cpp Thu Dec 17 08:44:11 2009 +0200
@@ -0,0 +1,754 @@
+/*
+* Copyright (c) 2002-2009 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:
+* Service Centres dialog for Sms.
+*
+*/
+
+
+
+// INCLUDE FILES
+#include <eikmenup.h> // CEikMenuPane
+#include <akntitle.h> // CAknTitlePane
+#include <SMUM.rsg> // resource identifiers
+#include <smutset.h> // CSmsSettings
+#include <AknQueryDialog.h> // CAknQueryDialog
+#include <StringLoader.h> // StringLoader
+#include <aknlists.h>
+#include <aknPopup.h>
+#include <eiklbx.h> // EOwnedExternally
+#include <hlplch.h> // For HlpLauncher
+#include <bldvariant.hrh>
+#include <csxhelp/mce.hlp.hrh>
+#include <centralrepository.h>
+#include <AvkonInternalCRKeys.h> // KAknMiddleSoftkeyEnabled
+#include <aknenv.h> // AppShutter
+// locals
+#include "SMSU.HRH" // resource header
+#include "SMSETDLG.H" // TSmumSCNameInfo, TSmsSettingSCNames, CSmumSCArray
+#include "SmumServiceCentreItemDialog.h"// CSmumAddEditServiceCentreDialog
+#include "SmumSettingsDialogGSM.h" // KStringLength
+#include "SmumServiceCentresDialog.h" // CSmumServiceCentresDialog
+#include "smsui.pan" // panics
+#include "SmumUtil.h" // SmumUtil
+
+//For logging
+#include "SmumLogging.h"
+
+// EXTERNAL DATA STRUCTURES
+
+// EXTERNAL FUNCTION PROTOTYPES
+
+// CONSTANTS
+const TInt KNameListGranularity = 8;
+const TInt KSmumSCArray = 4;
+
+// ================= MEMBER FUNCTIONS =======================
+
+// C++ constructor can NOT contain any code, that
+// might leave.
+//
+CSmumServiceCentresDialog::CSmumServiceCentresDialog(
+ CSmsSettings& aSettings, TInt& aExitCode, TBool aHelpFeatureSupported, TBool aSimSCsOnly )
+ : iSettings ( aSettings ),
+ iExitCode ( aExitCode ),
+ iHelpFeatureSupported ( aHelpFeatureSupported ),
+ iSimSCsOnly( aSimSCsOnly ),
+ iIdle (NULL)
+ {
+ }
+
+// Destructor
+CSmumServiceCentresDialog::~CSmumServiceCentresDialog()
+ {
+ SMUMLOGGER_ENTERFN(" CSmumServiceCentresDialog::~CSmumServiceCentresDialog");
+ if ( iListBox )
+ {
+ iListBox->SetScrollBarFrame( NULL, CEikListBox::EOwnedExternally );
+ }
+ delete iPreviousTitleText;
+ delete iSCAddressesList;
+ delete iIdle;
+ // iListBox, iSettings(reference), iTitlePane are
+ // plain pointers to objects owned by other classes which take
+ // care also about deletion.
+ SMUMLOGGER_LEAVEFN(" CSmumServiceCentresDialog::~CSmumServiceCentresDialog");
+ }
+
+// ----------------------------------------------------
+// CSmumServiceCentresDialog::NewL
+//
+// ----------------------------------------------------
+CSmumServiceCentresDialog* CSmumServiceCentresDialog::NewL(
+ CSmsSettings& aSettings,
+ TInt& aExitCode,
+ TInt aMenuTitleResourceId,
+ TBool aHelpFeatureSupported,
+ TBool aSimSCsOnly )
+ {
+ SMUMLOGGER_ENTERFN(" CSmumServiceCentresDialog::NewL");
+ CSmumServiceCentresDialog* self =
+ new ( ELeave ) CSmumServiceCentresDialog(
+ aSettings, aExitCode, aHelpFeatureSupported, aSimSCsOnly );
+ CleanupStack::PushL( self );
+ self->ConstructL( aMenuTitleResourceId );
+ CleanupStack::Pop(); // self
+ SMUMLOGGER_LEAVEFN(" CSmumServiceCentresDialog::NewL");
+ return self;
+ }
+
+// ----------------------------------------------------
+// CSmumServiceCentresDialog::ConstructL
+//
+// ----------------------------------------------------
+void CSmumServiceCentresDialog::ConstructL( TInt aMenuTitleResourceId )
+ {
+ SMUMLOGGER_ENTERFN(" CSmumServiceCentresDialog::ConstructL");
+ // Creating the listbox-list for service centres
+ iSCAddressesList = CSmumSCArray::NewL( KNameListGranularity );
+ TInt serviceCentres = 0;
+ // read Service centres from SmsSettings
+ serviceCentres = iSettings.ServiceCenterCount();
+ for ( TInt loop=0; loop < serviceCentres; loop++ )
+ {
+ TSmumSCNameInfo scAddress(iSettings.GetServiceCenter( loop ).Name(),
+ iSettings.GetServiceCenter( loop ).Address());
+ iSCAddressesList->AppendL( scAddress );
+ }
+ CAknDialog::ConstructL( aMenuTitleResourceId );
+ CRepository* cenRep = NULL;
+ TRAPD(err, cenRep = CRepository::NewL( KCRUidAvkon ));
+ if (!err)
+ {
+ err = cenRep->Get( KAknMiddleSoftkeyEnabled, iMSKEnabledInPlatform );
+ delete cenRep;
+ }
+ SMUMLOGGER_LEAVEFN(" CSmumServiceCentresDialog::ConstructL");
+ }
+
+// ----------------------------------------------------
+// CSmumServiceCentresDialog::OkToExitL
+//
+// ----------------------------------------------------
+TInt CSmumServiceCentresDialog::OkToExitL( TInt aButtonId )
+ {
+ SMUMLOGGER_ENTERFN(" CSmumServiceCentresDialog::OkToExitL");
+ TInt returnValue;
+
+ switch( aButtonId )
+ {
+ case ESmsSettingsChoiceMenuOpen:
+ {
+ ProcessCommandL( aButtonId );
+ returnValue = EFalse; // Cannot exit, since MSK was pressed
+ }
+ break;
+ // system / menu exit
+ case EAknSoftkeyCancel:
+ {
+ if ( iExitCode != ESmumSmsSettingsMenuExit &&
+ iExitCode != ESmumSmsSettingsSystemExit )
+ {
+ // system exit
+ iExitCode = ESmumSmsSettingsSystemExit;
+ }
+ TRAP_IGNORE( ClosingServiceCentresDialogL() );// to be sure of not leaving and exiting
+ returnValue = ETrue;
+ }
+ break;
+ case EAknSoftkeyBack:
+ {
+ iExitCode = ESmumSmsSettingsBack;
+ ClosingServiceCentresDialogL();
+ returnValue = ETrue;
+ }
+ break;
+ default :
+ returnValue = CAknDialog::OkToExitL( aButtonId );
+ break;
+ }
+ SMUMLOGGER_LEAVEFN(" CSmumServiceCentresDialog::OkToExitL");
+ return returnValue;
+ }
+
+// ----------------------------------------------------
+// CSmumServiceCentresDialog::HandleListBoxEventL
+//
+// ----------------------------------------------------
+void CSmumServiceCentresDialog::HandleListBoxEventL(
+ CEikListBox* /*aListBox*/,
+ TListBoxEvent aEventType )
+ {
+ SMUMLOGGER_ENTERFN(" CSmumServiceCentresDialog::HandleListBoxEventL");
+ switch ( aEventType )
+ {
+ case EEventEnterKeyPressed:
+ case EEventItemSingleClicked:
+ //for touch input
+ if ( iSCAddressesList->Count())
+ {
+ EditServiceCentreL();
+ }
+ else
+ {
+ AddServiceCentreL();
+ }
+ break;
+ default :
+ // panic?
+ break;
+ }
+ SMUMLOGGER_LEAVEFN(" CSmumServiceCentresDialog::HandleListBoxEventL");
+ }
+
+// ----------------------------------------------------
+// CSmumServiceCentresDialog::ProcessCommandL
+//
+// ----------------------------------------------------
+void CSmumServiceCentresDialog::ProcessCommandL( TInt aCommandId )
+ {
+ SMUMLOGGER_ENTERFN(" CSmumServiceCentresDialog::ProcessCommandL");
+ CAknDialog::ProcessCommandL( aCommandId ) ;
+ switch ( aCommandId )
+ {
+ case ESmsSettingsChoiceMenuEdit:
+ case ESmsSettingsChoiceMenuOpen:
+ if ( iSCAddressesList->Count())
+ {
+ EditServiceCentreL();
+ }
+ else
+ {
+ AddServiceCentreL();
+ }
+ break;
+ case ESmsSettingsChoiceMenuNew:
+ AddServiceCentreL();
+ break;
+ case ESmsSettingsChoiceMenuDelete:
+ DeleteServiceCentreL();
+ break;
+ case EAknCmdHelp:
+ LaunchHelpL();
+ break;
+ case ESmsSettingsChoiceMenuExit:
+ {
+ iExitCode = ESmumSmsSettingsMenuExit;
+ TryExitL( EAknSoftkeyCancel );
+ }
+ break;
+ default :
+ // panic
+ break ;
+ }
+ SMUMLOGGER_LEAVEFN(" CSmumServiceCentresDialog::ProcessCommandL");
+ }
+
+// ----------------------------------------------------
+// CSmumServiceCentresDialog::OfferKeyEventL
+//
+// ----------------------------------------------------
+TKeyResponse CSmumServiceCentresDialog::OfferKeyEventL(
+ const TKeyEvent& aKeyEvent,
+ TEventCode aType )
+ {
+
+ TKeyResponse returnValue = CAknDialog::OfferKeyEventL( aKeyEvent, aType );
+ if( aType == EEventKeyUp )
+ {
+ UpdateButtonVisibility();
+ }
+ if ( aType == EEventKey )
+ {
+ if ( aKeyEvent.iCode == EKeyBackspace
+ && iListBox->CurrentItemIndex() != KErrNotFound )
+ {
+ ProcessCommandL( ESmsSettingsChoiceMenuDelete );
+ returnValue = EKeyWasConsumed;
+ }
+ }
+
+ return returnValue;
+ }
+
+// ----------------------------------------------------
+// CSmumServiceCentresDialog::PreLayoutDynInitL
+//
+// ----------------------------------------------------
+void CSmumServiceCentresDialog::PreLayoutDynInitL()
+ {
+ SMUMLOGGER_ENTERFN(" CSmumServiceCentresDialog::PreLayoutDynInitL");
+ // Initialising listbox
+ iListBox = STATIC_CAST( CEikTextListBox*, Control( ESmsSCListId ));
+ iListBox->SetListBoxObserver( this );
+ CTextListBoxModel* model=iListBox->Model();
+ model->SetItemTextArray( iSCAddressesList );
+ model->SetOwnershipType( ELbmDoesNotOwnItemArray );
+
+ // Get "no centres"-text from resources and save it to listbox-model
+ HBufC* string = StringLoader::LoadLC( R_QTN_MCE_SETTINGS_SMS_NO_SC, iCoeEnv );
+ iListBox->View()->SetListEmptyTextL( *string );
+
+ // Setting scrollbar-indicators on
+ iListBox->CreateScrollBarFrameL( ETrue );
+ iListBox->ScrollBarFrame()->SetScrollBarVisibilityL(
+ CEikScrollBarFrame::EOff, CEikScrollBarFrame::EAuto );
+
+ // 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();
+
+ // Read new titletext and set it
+ HBufC* text = StringLoader::LoadLC( R_QTN_MCE_SETTINGS_SMS_TITLE_SC, iCoeEnv );
+ iTitlePane->SetTextL( *text );
+ CleanupStack::PopAndDestroy(2); // text, string
+
+ //Check need for MSK visibility
+ UpdateButtonVisibility();
+ SMUMLOGGER_LEAVEFN(" CSmumServiceCentresDialog::PreLayoutDynInitL");
+ }
+
+// ----------------------------------------------------
+// CSmumServiceCentresDialog::ClosingServiceCentresDialogL
+//
+// ----------------------------------------------------
+void CSmumServiceCentresDialog::ClosingServiceCentresDialogL() const
+ {
+ SMUMLOGGER_ENTERFN(" CSmumServiceCentresDialog::ClosingServiceCentresDialogL");
+ // Replace title with old title text
+ if ( iExitCode == ESmumSmsSettingsBack )
+ {
+ // Replace title with old title text
+ iTitlePane->SetTextL( *iPreviousTitleText );
+ }
+
+ // Create sc list
+ TInt loop = 0;
+ TInt serviceCentres = 0;
+ TInt scInUse = 0;
+ serviceCentres = iSettings.ServiceCenterCount();
+ scInUse = iSettings.DefaultServiceCenter();
+ for ( loop = 0; loop < serviceCentres; loop++ )
+ {
+ iSettings.RemoveServiceCenter(0);
+ }
+
+ // Then add centres from the list to SmsSettings
+ TInt count = iSCAddressesList->Count();
+ for ( loop = 0; loop < count; loop++ )
+ {
+ iSettings.AddServiceCenterL(
+ iSCAddressesList->SCNameInfo(loop).Name(),
+ iSCAddressesList->SCNameInfo(loop).Address());
+ }
+
+ // Set default SC
+ if ( scInUse >= 0 )
+ {
+ iSettings.SetDefaultServiceCenter( scInUse );
+ }
+ SMUMLOGGER_LEAVEFN(" CSmumServiceCentresDialog::ClosingServiceCentresDialogL");
+ }
+
+// ---------------------------------------------------------
+// CSmumServiceCentresDialog::DynInitMenuPaneL
+//
+// ---------------------------------------------------------
+void CSmumServiceCentresDialog::DynInitMenuPaneL(
+ TInt aMenuId,
+ CEikMenuPane* aMenuPane)
+ {
+ SMUMLOGGER_ENTERFN(" CSmumServiceCentresDialog::DynInitMenuPaneL");
+ switch ( aMenuId )
+ {
+ case R_SMS_SERVICECENTRES_CHOICE_MENUPANE:
+ if ( !iSCAddressesList->Count() )
+ {
+ aMenuPane->SetItemDimmed( ESmsSettingsChoiceMenuDelete, ETrue );
+ aMenuPane->SetItemDimmed( ESmsSettingsChoiceMenuEdit, ETrue );
+ }
+ if( iMSKEnabledInPlatform) //if MSK enabled
+ {
+ aMenuPane->SetItemDimmed( ESmsSettingsChoiceMenuEdit, ETrue );
+ }
+ else
+ {
+ aMenuPane->SetItemDimmed( ESmsSettingsChoiceMenuOpen, ETrue );
+ }
+ if ( iSimSCsOnly ) // Only Sim SC's variation is on
+ {
+ // ESmsSettingsChoiceMenuEdit must be preserved so
+ // that user can check the SMSC number
+ aMenuPane->SetItemDimmed( ESmsSettingsChoiceMenuDelete, ETrue );
+ aMenuPane->SetItemDimmed( ESmsSettingsChoiceMenuNew, ETrue );
+ }
+ // Help handling
+ aMenuPane->SetItemDimmed( EAknCmdHelp, !iHelpFeatureSupported );
+ break;
+ default :
+ // panic
+ break;
+ }
+ SMUMLOGGER_LEAVEFN(" CSmumServiceCentresDialog::DynInitMenuPaneL");
+ }
+
+// ----------------------------------------------------
+// CSmumServiceCentresDialog::AddServiceCentreL
+//
+// ----------------------------------------------------
+void CSmumServiceCentresDialog::AddServiceCentreL()
+ {
+ SMUMLOGGER_ENTERFN(" CSmumServiceCentresDialog::AddServiceCentreL");
+ TBuf<KSmumStringLength> name;
+ TBuf<KSmumStringLength> number;
+
+ TInt originalSCamount = iSCAddressesList->Count();
+
+ // Launch dialog for adding service centre
+ TInt exitCode = ESmumSmsSettingsInitialvalue;
+ CSmumAddEditServiceCentreDialog* scItemDialog =
+ new ( ELeave ) CSmumAddEditServiceCentreDialog(
+ name, number, exitCode, iHelpFeatureSupported, iSCAddressesList );
+ CleanupStack::PushL( scItemDialog );
+ scItemDialog->ConstructL( R_SMS_SERVICECENTRE_ITEM_CHOICE_MENUBAR );
+ CleanupStack::Pop(); // scItemDialog
+ scItemDialog->ExecuteLD( R_ADD_EDIT_SERVICECENTRES );
+
+ // Update Sc array & listbox if values ok (in anycase)
+ if ( name.Size() && number.Size())
+ {
+ TSmumSCNameInfo scAddress( name, number );
+ iSCAddressesList->AppendL( scAddress );
+ iSettings.AddServiceCenterL( name, number );
+ }
+
+ if ( exitCode == ESmumSmsSettingsMenuExit ||
+ exitCode == ESmumSmsSettingsSystemExit )
+ {// Exiting...
+ iExitCode = exitCode;
+ DoDelayedExitL( 0 );
+ }
+ else
+ {// not exiting, let's take care of drawing
+ if ( iSCAddressesList->Count() > originalSCamount )
+ { // added service centres
+ iListBox->HandleItemAdditionL();
+ iListBox->SetCurrentItemIndex( iSCAddressesList->Count() - 1 );
+ }
+ iListBox->DrawNow();
+ }
+ SMUMLOGGER_LEAVEFN(" CSmumServiceCentresDialog::AddServiceCentreL");
+ }
+
+// ----------------------------------------------------
+// CSmumServiceCentresDialog::EditServiceCentreL
+//
+// ----------------------------------------------------
+void CSmumServiceCentresDialog::EditServiceCentreL()
+ {
+ SMUMLOGGER_ENTERFN(" CSmumServiceCentresDialog::EditServiceCentreL");
+ const TInt index = iListBox->CurrentItemIndex();
+ __ASSERT_DEBUG( index >= 0 , Panic( ESmsetdlgInvalidIndex ));
+
+ TSmumSCNameInfo& tempSCName = iSCAddressesList->SCNameInfo( index );
+
+ TBuf<KSmumStringLength> name = tempSCName.Name();
+ TBuf<KSmumStringLength> number = tempSCName.Address();
+
+ // Launch dialog for editing sc values
+ TInt exitCode = ESmumSmsSettingsInitialvalue;
+ CSmumAddEditServiceCentreDialog* scItemDialog =
+ new ( ELeave ) CSmumAddEditServiceCentreDialog(
+ name, number, exitCode, iHelpFeatureSupported, iSCAddressesList, iSimSCsOnly );
+ CleanupStack::PushL( scItemDialog );
+ scItemDialog->ConstructL( R_SMS_SERVICECENTRE_ITEM_CHOICE_MENUBAR );
+ CleanupStack::Pop(); // scItemDialog
+ scItemDialog->ExecuteLD( R_ADD_EDIT_SERVICECENTRES );
+
+ // Update scaddresseslist
+ if ( name.Size() && number.Size())
+ {
+ // A valid entry
+ TSmumSCNameInfo scAddress( name, number );
+ iSCAddressesList->InsertL( index, scAddress );
+ iSCAddressesList->Delete( index + 1 ); // delete old one
+ }
+ else
+ {
+ // An invalid entry, delete
+ iSCAddressesList->Delete( index );
+ iListBox->HandleItemRemovalL();
+ iSettings.RemoveServiceCenter( index );
+ // Handle focus
+ TInt numberOfItems = iListBox->Model()->NumberOfItems();
+ if ( index + 1 > numberOfItems && index )
+ {
+ iListBox->SetCurrentItemIndex( index - 1 );
+ }
+ else if ( index + 1 <= numberOfItems && index )
+ {
+ iListBox->SetCurrentItemIndex( index );
+ }
+ }
+
+ if ( exitCode == ESmumSmsSettingsMenuExit ||
+ exitCode == ESmumSmsSettingsSystemExit )
+ {// Exiting...
+ iExitCode = exitCode;
+ DoDelayedExitL( 0 );
+ }
+ else
+ {// not exiting, let's take care of drawing
+ iListBox->SetCurrentItemIndex(index);
+ iListBox->HandleItemAdditionL();
+ iListBox->DrawNow();
+ }
+ SMUMLOGGER_LEAVEFN(" CSmumServiceCentresDialog::EditServiceCentreL");
+ }
+
+// ----------------------------------------------------
+// CSmumServiceCentresDialog::DeleteServiceCentreL
+//
+// ----------------------------------------------------
+void CSmumServiceCentresDialog::DeleteServiceCentreL()
+ {
+ SMUMLOGGER_ENTERFN(" CSmumServiceCentresDialog::DeleteServiceCentreL");
+ TInt index = iListBox->CurrentItemIndex();
+ __ASSERT_DEBUG( index >= 0 , Panic( ESmsetdlgInvalidIndex ));
+
+ if ( iSimSCsOnly ) // Only Sim SC's variation is on
+ {
+ // No delete/edit operations are allowed
+ SmumUtil::ShowInformationNoteL( R_QTN_SMS_EMAIL_SETT_CANNOT_CHANGE );
+ return;
+ }
+ // Text for deletion queries
+ HBufC* scName = iSCAddressesList->SCNameInfo( index ).Name().AllocLC();
+ TInt scDeletionValue;
+ HBufC* wholeConfTextInQuery = NULL;
+ TInt scInUseIndex = 0;
+ TInt amountOfSCs = 0;
+ scInUseIndex = iSettings.DefaultServiceCenter();
+ amountOfSCs = iSettings.ServiceCenterCount();
+ // Last Service Centre?
+ if ( ESmumScLastOne == amountOfSCs )
+ {
+ wholeConfTextInQuery = StringLoader::LoadLC( R_QTN_MCE_SETTINGS_SMS_QUEST_DEL, iCoeEnv );
+ scDeletionValue = ESmumScLastOne;
+ }
+ // Service Centre in use?
+ else if (scInUseIndex == index)
+ {
+ wholeConfTextInQuery = StringLoader::LoadLC( R_QTN_MCE_SETTINGS_SMS_QUEST_D, iCoeEnv );
+ scDeletionValue = ESmumScInUse;
+ }
+ // Are you sure to delete?
+ else
+ {
+ wholeConfTextInQuery = StringLoader::LoadLC( R_SMUM_DELETE_CONFIRMATION_COMMON, *scName, iCoeEnv );
+ scDeletionValue = ESmumScNormalDelete;
+ }
+
+ CAknQueryDialog* dlg = CAknQueryDialog::NewL();
+ // delete sc?
+ if ( dlg->ExecuteLD( R_DELETE_SC_QUERY, *wholeConfTextInQuery ))
+ { // yes
+ // Delete sc from list & sc array
+ iSCAddressesList->Delete( index );
+ iSettings.RemoveServiceCenter( index );
+ amountOfSCs = amountOfSCs - 1;
+ iListBox->HandleItemRemovalL();
+
+ switch ( scDeletionValue )
+ {
+ case ESmumScNormalDelete :
+ { // Normal deletion, handle Default SC if necessary
+ if ( index < scInUseIndex )
+ {
+ iSettings.SetDefaultServiceCenter( scInUseIndex - 1 );
+ }
+ }
+ break;
+ case ESmumScInUse :
+ { // Sc in use, launch list query for the user to select new one
+ if ( amountOfSCs > 1 )
+ {
+ LaunchScInUseListQueryL();
+ }
+ }
+ break;
+ case ESmumScLastOne :
+ default :
+ break;
+ }
+
+ TInt indexToHighlight = index < iListBox->Model()->NumberOfItems() ?
+ index : iListBox->Model()->NumberOfItems() - 1;
+ // Set focus after deletion if we have Service Centres
+ if ( amountOfSCs >= 1 )
+ {
+ iListBox->SetCurrentItemIndex(
+ indexToHighlight >= 1 ? indexToHighlight : 0 );
+ }
+ }
+ CleanupStack::PopAndDestroy( 2 ); // scName, wholeConfTextInQuery
+ UpdateButtonVisibility();
+ iListBox->DrawNow();
+ SMUMLOGGER_LEAVEFN(" CSmumServiceCentresDialog::DeleteServiceCentreL - LAST");
+ }
+
+// ----------------------------------------------------
+// CSmumServiceCentresDialog::LaunchScInUseListQuery
+//
+// ----------------------------------------------------
+void CSmumServiceCentresDialog::LaunchScInUseListQueryL()
+ {
+ SMUMLOGGER_ENTERFN(" CSmumServiceCentresDialog::LaunchScInUseListQueryL");
+ // Initialise listbox
+ CAknSinglePopupMenuStyleListBox* list =
+ new(ELeave) CAknSinglePopupMenuStyleListBox;
+ CleanupStack::PushL( list );
+ CAknPopupList* popupList = CAknPopupList::NewL(
+ list, R_AVKON_SOFTKEYS_OK_EMPTY );
+ CleanupStack::PushL( popupList );
+ list->ConstructL( popupList, CEikListBox::ELeftDownInViewRect );
+ // Add scroll indicators
+ list->CreateScrollBarFrameL( ETrue );
+ list->ScrollBarFrame()->SetScrollBarVisibilityL(
+ CEikScrollBarFrame::EOff, CEikScrollBarFrame::EAuto );
+
+ // Create array and add recipient's numbers to it
+ CDesCArrayFlat* items = new ( ELeave ) CDesCArrayFlat( KSmumSCArray );
+ CleanupStack::PushL( items );
+
+ TInt amountOfSCs = iSCAddressesList->Count();
+ for ( TInt loop = 0 ; loop < amountOfSCs; loop++ )
+ {
+ items->AppendL( iSCAddressesList->SCNameInfo( loop ).Name());
+ }
+
+ // Give array to listbox model
+ CTextListBoxModel* model = list->Model();
+ model->SetItemTextArray( items );
+ model->SetOwnershipType(ELbmOwnsItemArray);
+ CleanupStack::Pop();// items - listbox model now owns this
+
+ // Load txt to show in title
+ HBufC* text = StringLoader::LoadLC( R_QTN_MCE_SETTINGS_SMS_LIST_SC, iCoeEnv );
+ popupList->SetTitleL( *text );
+ CleanupStack::PopAndDestroy(); // text
+
+ // Launch popuplist and update choice
+ TInt choice = KErrNotFound;
+ CleanupStack::Pop(); //popupList
+ if ( popupList->ExecuteLD() )
+ {
+ choice = list->CurrentItemIndex();
+ }
+
+ CleanupStack::PopAndDestroy(); // list
+
+ // Take user's choice to use
+ if ( choice != KErrNotFound )
+ {
+ iSettings.SetDefaultServiceCenter( choice );
+ }
+ SMUMLOGGER_LEAVEFN(" CSmumServiceCentresDialog::LaunchScInUseListQueryL");
+ }
+
+// ----------------------------------------------------
+// CSmumServiceCentresDialog::LaunchHelpL
+// launch help using context
+//
+// ----------------------------------------------------
+void CSmumServiceCentresDialog::LaunchHelpL()
+ {
+ if ( iHelpFeatureSupported )
+ {
+ CCoeAppUi* editorAppUi = STATIC_CAST(CCoeAppUi*, ControlEnv()->AppUi());
+ CArrayFix<TCoeHelpContext>* helpContext = editorAppUi->AppHelpContextL();
+ HlpLauncher::LaunchHelpApplicationL( iEikonEnv->WsSession(), helpContext );
+ }
+ }
+
+
+// ----------------------------------------------------
+// CSmumServiceCentresDialog::GetHelpContext
+// returns helpcontext as aContext
+//
+// ----------------------------------------------------
+void CSmumServiceCentresDialog::GetHelpContext
+ (TCoeHelpContext& aContext) const
+ {
+ const TUid KUidMce ={0x100058C5};
+ aContext.iMajor = KUidMce;
+ aContext.iContext = KSMS_HLP_SETTINGS_SCENTRES;
+ }
+
+// ---------------------------------------------------------
+// CSmumServiceCentresDialog::UpdateButtonVisibility
+// ---------------------------------------------------------
+//
+void CSmumServiceCentresDialog::UpdateButtonVisibility()
+ {
+ if ( ButtonGroupContainer().ControlOrNull( ESmsSettingsChoiceMenuOpen ) )
+ {
+ //Check need for MSK visibility
+ if( iListBox->CurrentItemIndex() > -1 )
+ {
+ ButtonGroupContainer().MakeCommandVisible( ESmsSettingsChoiceMenuOpen, ETrue );
+ }
+ else
+ {//no need to show
+ ButtonGroupContainer().MakeCommandVisible( ESmsSettingsChoiceMenuOpen, EFalse );
+ }
+ }
+ }
+
+// ---------------------------------------------------------
+// CSmumServiceCentresDialog::DoDelayedExitL
+// ---------------------------------------------------------
+void CSmumServiceCentresDialog::DoDelayedExitL( const TInt aDelay )
+ {
+ SMUMLOGGER_ENTERFN(" CSmumServiceCentresDialog::DoDelayedExitL");
+ delete iIdle;
+ iIdle = 0;
+ iIdle = CPeriodic::NewL( EPriorityNormal - 1 );
+ iIdle->Start( aDelay,
+ aDelay,
+ TCallBack( DelayedExit, this ) );
+ SMUMLOGGER_LEAVEFN(" CSmumServiceCentresDialog::DoDelayedExitL");
+ }
+
+// ---------------------------------------------------------
+// CSmumServiceCentresDialog::DelayedExit
+// ---------------------------------------------------------
+TInt CSmumServiceCentresDialog::DelayedExit( TAny* aThis )
+ {
+ SMUMLOGGER_ENTERFN(" CSmumServiceCentresDialog::DelayedExit");
+ CSmumServiceCentresDialog* settings = static_cast<CSmumServiceCentresDialog*>( aThis );
+ TRAP_IGNORE( settings->ClosingServiceCentresDialogL() ); // to be sure of not leaving and exiting
+ CAknEnv::RunAppShutter( );
+ SMUMLOGGER_LEAVEFN(" CSmumServiceCentresDialog::DelayedExit");
+ return KErrNone;
+ }
+
+
+// End of File
+