diff -r 000000000000 -r 72b543305e3a messagingappbase/mcesettings/src/MceSettingsMtmServicesDialog.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/messagingappbase/mcesettings/src/MceSettingsMtmServicesDialog.cpp Thu Dec 17 08:44:11 2009 +0200 @@ -0,0 +1,479 @@ +/* +* 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: +* Dialog for handling services of certain mtm (if possible to create services). +* +*/ + + + +// INCLUDE FILES + +#include +#include // CUidNameArray +#include // CEikMenuPane, CEikMenuPaneItem +#include // StringLoader +#include + +#include // CAknPopupSingle1StyleListBox +#include +#include "MceSettingsMtmServicesDialog.h" +#include "MceSettingsIds.hrh" +#include "MceSettingsAccountManager.h" +#include "MceSettingsArrays.h" + +#include "MceSettingsMultipleServicesDialog.h" + +#include +#include // For HlpLauncher +#include + +#include +#include + +#include +#include +#include + +#include "MceSettingsUtils.h" +#include + +// CONSTANTS + +#define KMceApplicationUidValue 0x100058C5 +const TUid KMceApplicationUid = {KMceApplicationUidValue}; + + +const TInt KMceVisibleTextLength = KHumanReadableNameLength; + +// The position of the middle soft key +const TInt KMSKPosition = 3; + + +// ================= MEMBER FUNCTIONS ======================= + +// C++ default constructor can NOT contain any code that +// might leave. +// +// ---------------------------------------------------- +// CMceSettingsMtmServicesDialog::Constructor +// ---------------------------------------------------- +CMceSettingsMtmServicesDialog::CMceSettingsMtmServicesDialog( + TUid aMtmType, + MMceSettingsAccountManager& aManager, + CMsvSession* aSession, + CMceSettingsMultipleServicesDialog& aParent ) + : + CMceSettingsTitlePaneHandlerDialog(), + iMtmType( aMtmType ), + iAccountManager( aManager ), + iSession( aSession ), + iParentDialog( aParent ), + iCurrentMailAccountId( KErrNotFound ) + { + } + +// ---------------------------------------------------- +// CMceSettingsMtmServicesDialog::Destructor +// ---------------------------------------------------- +CMceSettingsMtmServicesDialog::~CMceSettingsMtmServicesDialog() + { + if ( iSessionObserverAdded ) + { + iAccountManager.Session().RemoveObserver( *this ); + } + delete iAccountArray; + delete iEmailApi; + iEmailApi = NULL; + iMailboxArray.Reset(); + } + + +// ---------------------------------------------------- +// CMceSettingsMtmServicesDialog::OkToExitL +// ---------------------------------------------------- +TBool CMceSettingsMtmServicesDialog::OkToExitL( TInt aButtonId ) + { + TBool okToExit = CAknDialog::OkToExitL( aButtonId ); + if ( aButtonId == EMceSettingsCmdSettingsDialogOpen || + aButtonId == EMceSettingsCmdSettingsDialogCreateNewEmpty ) + { + ProcessCommandL( aButtonId ); + okToExit = EFalse; // Cannot exit, since MSK was pressed + } + else if ( aButtonId != EEikBidCancel && okToExit ) + { + RestoreTitleTextL(); + } + + if ( okToExit && aButtonId == EEikBidCancel ) + { + // Let's inform parent that we are closed + iParentDialog.SubdialogClosed(); + } + + return okToExit; + } + +// ---------------------------------------------------- +// CMceSettingsMtmServicesDialog::HandleListBoxEventL +// ---------------------------------------------------- +void CMceSettingsMtmServicesDialog::HandleListBoxEventL( + CEikListBox* /*aListBox*/, + TListBoxEvent aEventType ) + { + switch(aEventType) + { + case EEventEnterKeyPressed: + case EEventItemSingleClicked: + ProcessCommandL( EMceSettingsCmdSettingsDialogOpen ); + break; + default: + break; + } + } + +// ---------------------------------------------------- +// CMceSettingsMtmServicesDialog::ProcessCommandL +// ---------------------------------------------------- +void CMceSettingsMtmServicesDialog::ProcessCommandL( TInt aCommandId ) + { + CAknDialog::ProcessCommandL( aCommandId ); // hides menu + if ( aCommandId == EMceSettingsCmdSettingsDialogExit ) + { + if (iAvkonViewAppUi->ExitHidesInBackground()) + { + iAvkonViewAppUi->ProcessCommandL( EAknCmdHideInBackground ); + } + else + { + iAvkonViewAppUi->ProcessCommandL( EAknCmdExit ); + } + return; + } + + + CEikTextListBox* list=STATIC_CAST( CEikTextListBox*, + Control( EMceSettingsMtmServicesDialogChoiceList ) ); + const TInt choice = list->CurrentItemIndex(); + TInt count = iAccountArray->Count(); + + switch ( aCommandId ) + { + case EMceSettingsCmdSettingsDialogOpen: + if ( choice >= 0 && choice < count ) + { + iCurrentMailAccountId = (*iAccountArray)[choice].iUid.iUid; + iAccountManager.EditAccountL( iCurrentMailAccountId ); + } + break; + + case EMceSettingsCmdSettingsDialogCreateNewEmpty: + iMailboxCreationOn = ETrue; + iAccountManager.CreateNewAccountL( iMtmType, KMsvNullIndexEntryId ); + iMailboxCreationOn = EFalse; + break; + + case EMceSettingsCmdSettingsDialogDelete: + if ( choice >= 0 && choice < count ) + { + iAccountManager.DeleteAccountL( (*iAccountArray)[choice].iUid.iUid ); + } + break; + + case EAknCmdHelp: + { + LaunchHelpL(); + } + break; + + default : + break; + } + } + +// ---------------------------------------------------- +// CMceSettingsMtmServicesDialog::DynInitMenuPaneL +// ---------------------------------------------------- +void CMceSettingsMtmServicesDialog::DynInitMenuPaneL( TInt aResourceId, + CEikMenuPane* aMenuPane ) + { + if ( aResourceId == R_MCE_SETTINGS_MTM_SERVICES_DIALOG_MENUPANE ) + { + aMenuPane->SetItemDimmed( EMceSettingsCmdSettingsDialogHelp, + !FeatureManager::FeatureSupported( KFeatureIdHelp ) ); + + if ( iAccountArray->Count() == 0 ) + { + aMenuPane->DeleteMenuItem( EMceSettingsCmdSettingsDialogOpen ); + aMenuPane->DeleteMenuItem( EMceSettingsCmdSettingsDialogDelete ); + if ( iSelectionKeyPressedToOpenOptionMenu ) + { + aMenuPane->DeleteMenuItem( EMceSettingsCmdSettingsDialogExit ); + aMenuPane->DeleteMenuItem( EAknCmdHelp ); + iSelectionKeyPressedToOpenOptionMenu = EFalse; + } + } + if ( iNumberOfMailboxes >= KMceMaxNumberOfMailboxes ) + { + aMenuPane->DeleteMenuItem( EMceSettingsCmdSettingsDialogCreateNewEmpty ); + } + else + { + // no action + } + + } + } + +// --------------------------------------------------------------------------- +// CMceSettingsMtmServicesDialog::UpdateMailboxDataL() +// --------------------------------------------------------------------------- +// +void CMceSettingsMtmServicesDialog::UpdateMailboxDataL() + { + const MImumInHealthServices* healthApi = &iEmailApi->HealthServicesL(); + + // Get the array of the mailboxes for the current view + MceSettingsUtils::GetHealthyMailboxListL( + *healthApi, + iMailboxArray, + iMtmType != KSenduiMtmSyncMLEmailUid, + iMtmType != KSenduiMtmSyncMLEmailUid, + iMtmType == KSenduiMtmSyncMLEmailUid, + EFalse ); + iNumberOfMailboxes = iMailboxArray.Count(); + } + +// ---------------------------------------------------- +// CMceSettingsMtmServicesDialog::UpdateForArrayChangeL +// ---------------------------------------------------- +void CMceSettingsMtmServicesDialog::UpdateServicesArrayL() + { + CEikTextListBox* list=STATIC_CAST( CEikTextListBox*, + Control( EMceSettingsMtmServicesDialogChoiceList ) ); + TInt selectedIndex = list->CurrentItemIndex(); + const TInt count = iAccountArray->Count(); + + iAccountArray->Reset(); + + UpdateMailboxDataL(); + for ( TInt loop=0; loopMailboxUtilitiesL().GetMailboxEntryL( + iMailboxArray[loop], + MImumInMailboxUtilities::ERequestSending ); + + TUid tmpUid = {iMailboxArray[loop]}; + TUidNameInfo info( + tmpUid, + tentry.iDetails.Left( KMceVisibleTextLength ) ); + iAccountArray->AppendL( info ); + if ( iCurrentMailAccountId == tmpUid.iUid ) + { + selectedIndex = loop; + iCurrentMailAccountId = KErrNotFound; + } + } + + TInt newCount = iAccountArray->Count(); + if ( newCount > count ) + { + list->HandleItemAdditionL(); + } + else if ( newCount < count ) + { + list->HandleItemRemovalL(); + } + else + { + // no action + } + + if ( newCount > 0 ) + { + if ( selectedIndex >= 0 && selectedIndex < newCount ) + { + list->SetCurrentItemIndex( selectedIndex ); + } + else if ( selectedIndex >= newCount ) + { + list->SetCurrentItemIndex( newCount - 1 ); + } + else + { + list->SetCurrentItemIndex( 0 ); + } + } + if ( newCount == 0 ) + { + SetSpecialMSKButtonL(R_MCE_MSK_BUTTON_CREATE_NEW_EMPTY); + } + else + { + SetSpecialMSKButtonL( R_MCE_MSK_BUTTON_OPEN ); + } + list->DrawNow(); + } + +// ---------------------------------------------------- +// CMceSettingsMtmServicesDialog::PreLayoutDynInitL +// ---------------------------------------------------- +void CMceSettingsMtmServicesDialog::PreLayoutDynInitL() + { + CEikTextListBox* list=STATIC_CAST( CEikTextListBox*, + Control( EMceSettingsMtmServicesDialogChoiceList ) ); + + // Setting scrollbar-indicators on + list->CreateScrollBarFrameL( ETrue ); + list->ScrollBarFrame()->SetScrollBarVisibilityL( + CEikScrollBarFrame::EOff, CEikScrollBarFrame::EAuto ); + + if ( !iAccountArray ) + { + iAccountArray = CMceUidNameArray::NewL( CMceUidNameArray::EServicesList ); + } + + if ( !iEmailApi ) + { + iEmailApi = CreateEmailApiL( iSession ); + } + + CTextListBoxModel* model= list->Model(); + model->SetItemTextArray( iAccountArray ); + model->SetOwnershipType( ELbmDoesNotOwnItemArray ); + list->SetListBoxObserver(this); + + THumanReadableName mtmName = iAccountManager.MtmName( iMtmType ); + if ( iMtmType == KSenduiMtmSmtpUid ) + { + // email + HBufC* text = StringLoader::LoadL( R_MCE_SETTINGS_NO_MAILBOXES, iEikonEnv ); + CleanupStack::PushL( text ); + list->View()->SetListEmptyTextL( *text ); + CleanupStack::PopAndDestroy( text ); // text + HBufC* title = StringLoader::LoadLC( R_MCE_SETTINGS_MTM_SERVICES_DIALOG_TITLE, + iEikonEnv ); + StoreTitleTextAndSetNewL( *title ); + CleanupStack::PopAndDestroy( title ); // title + } + else if ( iMtmType == KSenduiMtmSyncMLEmailUid ) + { + // syncML + HBufC* text = StringLoader::LoadL( R_MCE_SETTINGS_NO_SYNCBOX, iEikonEnv ); + CleanupStack::PushL( text ); + list->View()->SetListEmptyTextL( *text ); + CleanupStack::PopAndDestroy( text ); // text + HBufC* title = StringLoader::LoadLC( R_MCE_SETTINGS_SYNCMAIL_TITLE, iEikonEnv ); + StoreTitleTextAndSetNewL( *title ); + CleanupStack::PopAndDestroy( title ); // title + } + else + { + // not email/syncML + HBufC* text = StringLoader::LoadLC( + R_MCE_MTM_NOT_DEFINED, mtmName, iEikonEnv ); + list->View()->SetListEmptyTextL( *text ); + CleanupStack::PopAndDestroy( text ); // text + StoreTitleTextAndSetNewL( mtmName ); + } + + iAccountManager.Session().AddObserverL( *this ); + iSessionObserverAdded = ETrue; + + UpdateServicesArrayL(); + } + +// ---------------------------------------------------- +// CMceSettingsMtmServicesDialog::OfferKeyEventL +// ---------------------------------------------------- +TKeyResponse CMceSettingsMtmServicesDialog::OfferKeyEventL(const TKeyEvent& aKeyEvent, + TEventCode aType) + { + if ( aType == EEventKey && aKeyEvent.iCode == EKeyBackspace ) + { + if( !iEmailApi->IsEmailFeatureSupportedL( + CImumInternalApi::EMailLockedSettings ) ) + { + ProcessCommandL( EMceSettingsCmdSettingsDialogDelete ); + } + return EKeyWasConsumed; + } + return CAknDialog::OfferKeyEventL( aKeyEvent, aType ); + } + +// ---------------------------------------------------- +// CMceSettingsMtmServicesDialog::HandleSessionEventL +// ---------------------------------------------------- +void CMceSettingsMtmServicesDialog::HandleSessionEventL( + TMsvSessionEvent aEvent, TAny* /*aArg1*/, TAny* /*aArg2*/, TAny* /*aArg3*/) + { + switch ( aEvent ) + { + case EMsvEntriesCreated: + case EMsvEntriesChanged: + case EMsvEntriesDeleted: + if ( !iMailboxCreationOn ) + { + UpdateServicesArrayL(); + } + break; + default: + // just ignore + break; + } + } + +// ---------------------------------------------------- +// CMceSettingsMtmServicesDialog::GetHelpContext +// returns helpcontext as aContext +// +// ---------------------------------------------------- +void CMceSettingsMtmServicesDialog::GetHelpContext + (TCoeHelpContext& aContext) const + { + aContext.iMajor = KMceApplicationUid; + if ( iMtmType != KSenduiMtmSyncMLEmailUid ) + { + /*aContext.iContext = KMCE_HLP_SETT_SMAILBLIST; + } + else + {*/ + aContext.iContext = KMCE_HLP_SETT_MAILBLIST; + } + } + +// ---------------------------------------------------- +// CMceSettingsMtmServicesDialog::LaunchHelpL +// Launch help using context +// +// ---------------------------------------------------- +void CMceSettingsMtmServicesDialog::LaunchHelpL() const + { + CCoeAppUi* appUi = STATIC_CAST(CCoeAppUi*, ControlEnv()->AppUi()); + CArrayFix* helpContext = appUi->AppHelpContextL(); + HlpLauncher::LaunchHelpApplicationL( iEikonEnv->WsSession(), helpContext ); + } + +// ---------------------------------------------------- +// CMceSettingsMtmServicesDialog::SetSpecialMSKButtonL +// ---------------------------------------------------- +void CMceSettingsMtmServicesDialog::SetSpecialMSKButtonL( TInt aResourceId ) + { + CEikButtonGroupContainer& cba = ButtonGroupContainer(); + cba.SetCommandL( KMSKPosition, aResourceId ); + cba.DrawNow(); + } + +// End of File