diff -r 000000000000 -r 72b543305e3a email/imum/Utils/Src/IMSSettingsBaseUi.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/email/imum/Utils/Src/IMSSettingsBaseUi.cpp Thu Dec 17 08:44:11 2009 +0200 @@ -0,0 +1,546 @@ +/* +* Copyright (c) 2006 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: Base class for mail settings and wizard +* +*/ + + + +// INCLUDE FILES +#include +#include +#include +#include +#include // HlpLauncher +#include // CCoeAppUi + +#include "IMSSettingsBaseUi.h" +#include "ImumInSettingsData.h" +#include "IMSSettingsItemApprover.h" // CIMSSettingsItemApprover +#include "IMSSettingsItemAccessPoint.h" // CIMSSettingsAccessPointItem +#include "ImumMboxDefaultData.h" // CImumMboxDefaultData +#include "ImumMboxSettingsCtrl.h" // CImumMboxSettingsCtrl +#include "ImumInternalApiImpl.h" // CImumInternalApiImpl +#include "ImumUtilsLogging.h" +#include "EmailFeatureUtils.h" + +#include + +// EXTERNAL DATA STRUCTURES +// EXTERNAL FUNCTION PROTOTYPES +// CONSTANTS +// MACROS +// LOCAL CONSTANTS AND MACROS +// MODULE DATA STRUCTURES +// LOCAL FUNCTION PROTOTYPES +// FORWARD DECLARATIONS + +// ============================ MEMBER FUNCTIONS =============================== + +// ---------------------------------------------------------------------------- +// CIMSSettingsBaseUI::CIMSSettingsBaseUI() +// ---------------------------------------------------------------------------- +// +CIMSSettingsBaseUI::CIMSSettingsBaseUI( + CIMSSettingsUi& aDialog, + CImumInternalApiImpl& aMailboxApi, + CEikFormattedCellListBox& aListBox, + CAknTitlePane& aTitlePane, + CMuiuFlags& aFlags ) + : + CMuiuDynamicSettingsDialog( aListBox, aTitlePane ), + iBaseUiFlags( aFlags ), + iDialog( aDialog ), + iMailboxApi( aMailboxApi ), + iItemApprover( NULL ), + iNoteUi( NULL ), + iDefaultData( NULL ) + { + IMUM_CONTEXT( CIMSSettingsBaseUI::CIMSSettingsBaseUI, 0, KLogUi ); + + } + +// ---------------------------------------------------------------------------- +// CIMSSettingsBaseUI::~CIMSSettingsBaseUI() +// ---------------------------------------------------------------------------- +// +CIMSSettingsBaseUI::~CIMSSettingsBaseUI() + { + IMUM_CONTEXT( CIMSSettingsBaseUI::~CIMSSettingsBaseUI, 0, KLogUi ); + + delete iNoteUi; + delete iItemApprover; + delete iDefaultData; + } + +// ---------------------------------------------------------------------------- +// CIMSSettingsBaseUI::BaseUiConstructL() +// ---------------------------------------------------------------------------- +// +void CIMSSettingsBaseUI::BaseUiConstructL( + CEikButtonGroupContainer& aSoftkeys, + const TInt aSettingResourceId, + const TBool aUpdateMSK ) + { + IMUM_CONTEXT( CIMSSettingsBaseUI::BaseUiConstructL, 0, KLogUi ); + + // Add the complete menu tree to settings + SettingsConstructL( + aSoftkeys, aSettingResourceId, aUpdateMSK, + iBaseUiFlags.GF( EMailFeatureIdSapPolicyManagement ) ); + + iNoteUi = CIMSSettingsNoteUi::NewL( iMailboxApi, *this ); + + iItemApprover = + ( CIMSSettingsItemApprover::NewL( + iMailboxApi, iMailboxApi.CommDbUtilsL(), + *iNoteUi, *this ) ); + + // Define default data + iDefaultData = RestoreDefaultSettingsDataL(); + } + +/****************************************************************************** + + Event Handling + +******************************************************************************/ + +// ---------------------------------------------------------------------------- +// CIMSSettingsBaseUI::HandleSettingPageEventL() +// ---------------------------------------------------------------------------- +// +void CIMSSettingsBaseUI::HandleSettingPageEventL( + CAknSettingPage* /* aSettingPage */, + TAknSettingPageEvent /* aEventType */ ) + { + IMUM_CONTEXT( CIMSSettingsBaseUI::HandleSettingPageEventL, 0, KLogUi ); + + } + +// ---------------------------------------------------------------------------- +// CIMSSettingsBaseUI::EventHandlerL() +// ---------------------------------------------------------------------------- +// +TBool CIMSSettingsBaseUI::EventHandlerL( const TInt aCommandId ) + { + IMUM_CONTEXT( CIMSSettingsBaseUI::EventHandlerL, 0, KLogUi ); + IMUM_IN(); + + TBool ok = ETrue; + + switch ( aCommandId ) + { + // Show help dialog + case EAknCmdHelp: + iDialog.LaunchHelp(); + break; + + // User has pressed ok key + case EAknSoftkeyOpen: + case EAknSoftkeySelect: + case EAknSoftkeyOk: + KeyPressOKButtonL( aCommandId ); + break; + + case EAknSoftkeyOptions: + SetFlag( EImumSettingOpenOptionsMenu ); + break; + + case EAknSoftkeyShow: + case EAknSoftkeyDone: + case EAknSoftkeyBack: + KeyPressSoftkey( aCommandId ); + break; + + // Emergency exit + case EAknSoftkeyCancel: + case EAknCmdExit: + SetFlag( EImumSettingShouldExit ); + break; + + default: + ok = EFalse; + break; + } + + IMUM_OUT(); + return ok; + } + +// ---------------------------------------------------------------------------- +// CIMSSettingsBaseUI::DoQuitL() +// ---------------------------------------------------------------------------- +// +void CIMSSettingsBaseUI::DoQuitL() + { + IMUM_CONTEXT( CIMSSettingsBaseUI::DoQuitL, 0, KLogUi ); + + ChangeFlag( EImumSettingQueryClose, !Flag( EImumSettingShouldExit ) ); + iDialog.DoQuitL(); + } + +// ---------------------------------------------------------------------------- +// CIMSSettingsBaseUI::OfferKeyEventL +// ---------------------------------------------------------------------------- +// +TKeyResponse CIMSSettingsBaseUI::OfferKeyEventL( + const TKeyEvent& aKeyEvent, + TEventCode aType ) + { + IMUM_CONTEXT( CIMSSettingsBaseUI::OfferKeyEventL, 0, KLogUi ); + IMUM_IN(); + + TBool ok = EFalse; + + // Handle the key events for wizard + if ( aType == EEventKey ) + { + switch ( aKeyEvent.iCode ) + { + // Ignore left and right keys + case EKeyLeftArrow: + case EKeyRightArrow: + ok = ETrue; + break; + + // Selection key + case EKeyOK: + case EKeyEnter: + ok = EventHandlerL( EAknSoftkeyOk ); + break; + + // Red button + case EKeyPhoneEnd: + ok = EventHandlerL( EAknSoftkeyCancel ); + break; + + default: + break; + } + } + + TKeyResponse ret = ok ? EKeyWasConsumed : EKeyWasNotConsumed; + + if ( ret == EKeyWasNotConsumed ) + { + ret = CMuiuDynamicSettingsDialog::OfferKeyEventL( aKeyEvent, aType ); + } + + IMUM_OUT(); + return ret; + } + + +// ---------------------------------------------------------------------------- +// CIMSSettingsBaseUI::ProcessCommandL +// ---------------------------------------------------------------------------- +// +void CIMSSettingsBaseUI::ProcessCommandL( TInt aCommandId ) + { + IMUM_CONTEXT( CIMSSettingsBaseUI::ProcessCommandL, 0, KLogUi ); + + EventHandlerL( aCommandId ); + // There are no key events if touch UI is used. Therefore requested commands + // are executed here. + iDialog.ExecFlags(); + } + +/****************************************************************************** + + Private tools + +******************************************************************************/ + +// ---------------------------------------------------------------------------- +// CIMSSettingsBaseUI::RestoreDefaultSettingsDataL() +// ---------------------------------------------------------------------------- +// +CImumMboxDefaultData* CIMSSettingsBaseUI::RestoreDefaultSettingsDataL() + { + return CImumMboxDefaultData::NewL( iMailboxApi ); + } + +/****************************************************************************** + + Public tools + +******************************************************************************/ + +// ---------------------------------------------------------------------------- +// CIMSSettingsBaseUI::HidePermanently() +// ---------------------------------------------------------------------------- +// +void CIMSSettingsBaseUI::HidePermanently( + const TUid& aId, + const TBool aNewState ) + { + IMUM_CONTEXT( CIMSSettingsBaseUI::HidePermanently, 0, KLogUi ); + + // Set next item + HidePermanently( *GetItem( aId ), aNewState ); + } + +// ---------------------------------------------------------------------------- +// CIMSSettingsBaseUI::HidePermanently() +// ---------------------------------------------------------------------------- +// +void CIMSSettingsBaseUI::HidePermanently( + CMuiuSettingBase& aBaseItem, + const TBool aNewState ) + { + IMUM_CONTEXT( CIMSSettingsBaseUI::HidePermanently, 0, KLogUi ); + + // Set next item + aBaseItem.iItemFlags.ChangeFlag( + EMuiuDynItemPermanentlyHidden, aNewState ); + Refresh(); + } + +// ---------------------------------------------------------------------------- +// CIMSSettingsBaseUI::CreateCustomItemToArrayLC() +// ---------------------------------------------------------------------------- +// +CMuiuSettingBase* CIMSSettingsBaseUI::CreateCustomItemToArrayLC( + const TUid& aId ) + { + IMUM_CONTEXT( CIMSSettingsBaseUI::CreateCustomItemToArrayLC, 0, KLogUi ); + + CMuiuSettingBase* base = NULL; + + switch ( aId.iUid ) + { + // Access point editors require special items + case EIMAWIap: + case EIMASIncomingIap: + case EIMASOutgoingIap: + base = CIMSSettingsAccessPointItem::NewLC(); + break; + + case EIMASUserFolderSubscription: + base = CMuiuSettingsLinkExtended::NewLC(); + break; + + default: + break; + } + + return base; + } + + +// ---------------------------------------------------------------------------- +// CIMSSettingsBaseUI::SetItemIapItem() +// ---------------------------------------------------------------------------- +// +void CIMSSettingsBaseUI::SetItemIapItemL( CIMSSettingsAccessPointItem& aIapItem ) + { + IMUM_CONTEXT( CIMSSettingsBaseUI::SetItemIapItemL, 0, KLogUi ); + + CMsvCommDbUtilities& commdbUtils= iMailboxApi.CommDbUtilsL(); + commdbUtils.GetWizardRadioButton( aIapItem ); + } + +// ---------------------------------------------------------------------------- +// CIMSSettingsBaseUI::Flag() +// ---------------------------------------------------------------------------- +// +TBool CIMSSettingsBaseUI::Flag( TUint aFlag ) + { + return iBaseUiFlags.Flag( aFlag ); + } + +// ---------------------------------------------------------------------------- +// CIMSSettingsBaseUI::SetFlag() +// ---------------------------------------------------------------------------- +// +void CIMSSettingsBaseUI::SetFlag( TUint aFlag ) + { + IMUM_CONTEXT( CIMSSettingsBaseUI::SetFlag, 0, KLogUi ); + + iBaseUiFlags.SetFlag( aFlag ); + } + +// ---------------------------------------------------------------------------- +// CIMSSettingsBaseUI::ClearFlag() +// ---------------------------------------------------------------------------- +// +void CIMSSettingsBaseUI::ClearFlag( TUint aFlag ) + { + IMUM_CONTEXT( CIMSSettingsBaseUI::ClearFlag, 0, KLogUi ); + + iBaseUiFlags.ClearFlag( aFlag ); + } + +// ---------------------------------------------------------------------------- +// CIMSSettingsBaseUI::ChangeFlag() +// ---------------------------------------------------------------------------- +// +void CIMSSettingsBaseUI::ChangeFlag( + TUint aFlag, + TBool aNewState ) + { + IMUM_CONTEXT( CIMSSettingsBaseUI::ChangeFlag, 0, KLogUi ); + + iBaseUiFlags.ChangeFlag( aFlag, aNewState ); + } + +// ---------------------------------------------------------------------------- +// CIMSSettingsBaseUI::Flags() +// ---------------------------------------------------------------------------- +// +const CMuiuFlags& CIMSSettingsBaseUI::Flags() + { + IMUM_CONTEXT( CIMSSettingsBaseUI::Flags, 0, KLogUi ); + + return iBaseUiFlags; + } + +// ---------------------------------------------------------------------------- +// CIMSSettingsBaseUI::FindItem() +// ---------------------------------------------------------------------------- +// +TInt CIMSSettingsBaseUI::FindItem( + CIMSSettingsAccessPointItem*& aItem, + const TUid& aId ) + { + IMUM_CONTEXT( CIMSSettingsBaseUI::FindItem, 0, KLogUi ); + + CMuiuSettingBase* base = GetUninitializedItem( aId ); + + if ( base != NULL ) + { + aItem = static_cast( base ); + return KErrNone; + } + + return KErrNotFound; + } + + +// ---------------------------------------------------------------------------- +// CIMSSettingsBaseUI::FindItem() +// ---------------------------------------------------------------------------- +// +TInt CIMSSettingsBaseUI::FindItem( + CMuiuSettingsLinkExtended*& aItem, + const TUid& aId ) + { + IMUM_CONTEXT( CIMSSettingsBaseUI::FindItem, 0, KLogUi ); + + CMuiuSettingBase* base = GetUninitializedItem( aId ); + + if ( base != NULL ) + { + aItem = static_cast( base ); + return KErrNone; + } + + return KErrNotFound; + } + +// ---------------------------------------------------------------------------- +// CIMSSettingsBaseUI::GetUninitializedItem() +// ---------------------------------------------------------------------------- +// +CMuiuSettingBase* CIMSSettingsBaseUI::GetUninitializedItem( + const TUid& aId ) + { + IMUM_CONTEXT( CIMSSettingsBaseUI::GetUninitializedItem, 0, KLogUi ); + + return GetItem( aId ); + } + +// ---------------------------------------------------------------------------- +// CIMSSettingsBaseUI::BackupItemCreateUndefinedL() +// ---------------------------------------------------------------------------- +// +CMuiuSettingBase* CIMSSettingsBaseUI::CreateItemForBackupL( + CMuiuSettingBase& aBaseItem ) + { + IMUM_CONTEXT( CIMSSettingsBaseUI::CreateItemForBackupL, 0, KLogUi ); + + CIMSSettingsAccessPointItem* iapBackup = NULL; + + if ( aBaseItem.iItemId.iUid == EIMAWIap ) + { + iapBackup = + CIMSSettingsAccessPointItem::NewL(); + + CIMSSettingsAccessPointItem* iapItem = + static_cast( &aBaseItem ); + + *iapBackup = *iapItem; + } + + return iapBackup; + } + +// ---------------------------------------------------------------------------- +// CIMSSettingsBaseUI::UpdateAccessPointItem() +// ---------------------------------------------------------------------------- +// +void CIMSSettingsBaseUI::UpdateAccessPointItem( + CMuiuSettingBase& aBaseItem ) + { + IMUM_CONTEXT( CIMSSettingsBaseUI::UpdateAccessPointItem, 0, KLogUi ); + + // Preprocessing for item is only need for iap accesspoint setting + CIMSSettingsAccessPointItem* iapItem = + static_cast( &aBaseItem ); + + // Copy the text to the item, ignore any errors on copy + TRAP_IGNORE( + iMailboxApi.CommDbUtilsL().SettingsItemIapStringL( *iapItem ) ); + } + +// ---------------------------------------------------------------------------- +// CIMSSettingsBaseUI::SetReadOnly() +// ---------------------------------------------------------------------------- +// +void CIMSSettingsBaseUI::SetReadOnly( + const TUid& aId, + const TBool aNewState ) + { + IMUM_CONTEXT( CIMSSettingsBaseUI::SetReadOnly, 0, KLogUi ); + + GetItem( aId )->iItemFlags.ChangeFlag( EMuiuDynItemReadOnly, aNewState ); + } + + +// ---------------------------------------------------------------------------- +// CIMSSettingsBaseUI::GetHelpContext() +// ---------------------------------------------------------------------------- +// +void CIMSSettingsBaseUI::GetHelpContext( + TCoeHelpContext& /* aContext */ ) const + { + IMUM_CONTEXT( CIMSSettingsBaseUI::GetHelpContext, 0, KLogUi ); + + // Empty + } + +// --------------------------------------------------------------------------- +// CIMSSettingsBaseUI::CurrentMailboxId() +// --------------------------------------------------------------------------- +// +TMsvId CIMSSettingsBaseUI::CurrentMailboxId() + { + IMUM_CONTEXT( CIMSSettingsBaseUI::CurrentMailboxId, 0, KLogUi ); + + return KErrNotFound; + } + + +// End of File