email/imum/Utils/Src/IMSSettingsBaseUi.cpp
changeset 0 72b543305e3a
--- /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