--- /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 <e32base.h>
+#include <avkon.hrh>
+#include <muiuflagger.h>
+#include <e32base.h>
+#include <hlplch.h> // HlpLauncher
+#include <coeaui.h> // 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 <cmapplicationsettingsui.h>
+
+// 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<CIMSSettingsAccessPointItem*>( 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<CMuiuSettingsLinkExtended*>( 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<CIMSSettingsAccessPointItem*>( &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<CIMSSettingsAccessPointItem*>( &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