email/imum/Utils/Inc/MuiuDynamicSettingsArray.h
changeset 0 72b543305e3a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/email/imum/Utils/Inc/MuiuDynamicSettingsArray.h	Thu Dec 17 08:44:11 2009 +0200
@@ -0,0 +1,559 @@
+/*
+* 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:  This file contains declearation of settings array handler
+*
+*/
+
+
+
+#ifndef MUIUDYNAMICSETTINGSARRAY_H
+#define MUIUDYNAMICSETTINGSARRAY_H
+
+// INCLUDES
+#include <e32base.h>                // Base symbian include
+#include <e32debug.h>               // RDebug
+#include <bamdesca.h>                // MDesCArray
+#include <eikenv.h>                 // CEikonEnv
+#include "MuiuDynamicSettingsArray.hrh" // CMuiuSettingsType
+#include "MuiuDynamicSettingItemBase.h"      // CMuiuSettingBase
+#include "MuiuDynamicSettingItemEditValue.h" // CMuiuSettingEditValue
+#include "MuiuDynamicSettingItemEditText.h"  // CMuiuSettingEditText
+#include "MuiuDynamicSettingItemLink.h"      // CMuiuSettingLink
+#include "MuiuDynamicSettingItemExtLink.h"   // CMuiuSettingExtLink
+#include <ConeResLoader.h>              // RConeResourceLoader
+#include <muiuflags.h>
+#include "MuiuDynamicSettingsItemFinderInterface.h"
+
+// CONSTANTS
+enum TMuiuStackResult
+    {
+    EMuiuStackResultOk,
+    EMuiuStackResultSubMenuOpen,
+    EMuiuStackResultInvalid
+    };
+
+// MACROS
+// DATA TYPES
+typedef RArray<TInt> RResourceStack;
+
+// FUNCTION PROTOTYPES
+// FORWARD DECLARATIONS
+class TResourceReader;
+class CMuiuSettingBase;
+class CMuiuDynamicSettingsItemFinder;
+class TMuiuFinderItem;
+
+// CLASS DECLARATION
+
+/**
+*  ?one_line_short_description.
+*  ?other_description_lines
+*
+*  @lib ?library
+*  @since S60 3.0
+*/
+class CMuiuDynamicSettingsArray :
+    public CBase, public MDesCArray,
+    public MMuiuDynamicSettingsItemFinderInterface
+    {
+    public: // Constructors and destructor
+
+        virtual ~CMuiuDynamicSettingsArray();
+
+    public: // New functions
+
+        /**
+        * Forces the redraw
+        * @since S60 3.0
+        */
+        void Refresh();
+
+        /**
+        * ?member_description
+        * @since S60 3.0
+        * @param aResource Resource to be used to add the objects to the array
+        * @return Result of the operation
+        */
+        TInt AddItemsL(
+            const TInt aResource );
+
+        TInt AddItemsL(
+            const TInt aResource,
+            const TInt aIndex );
+
+        TInt AddItemL(
+            const CMuiuSettingBase& aBaseItem,
+            const TInt aIndex = KErrNotFound );
+
+        TInt DelItems( const TInt aResource );
+        TInt DelItem( const TInt aIndex );
+        TInt DelItem( const TUid& aId );
+
+        void SetItemValue(
+            const TUid& aId,
+            const TInt aValue,
+            const TBool aUpdate = EFalse );
+
+        void SetItemValue(
+            const TInt aIndex,
+            const TInt aValue,
+            const TBool aUpdate = EFalse );
+
+        void SetItemValue(
+            CMuiuSettingBase& aBaseItem,
+            const TInt aValue,
+            const TBool aUpdate = EFalse );
+
+        void SetItemText(
+            const TUid& aId,
+            const TMuiuSettingsText& aText,
+            const TBool aUpdate = EFalse );
+
+        void SetItemText(
+            const TInt aIndex,
+            const TMuiuSettingsText& aText,
+            const TBool aUpdate = EFalse );
+
+        void SetItemText(
+            CMuiuSettingBase& aBaseItem,
+            const TMuiuSettingsText& aText,
+            const TBool aUpdate = EFalse );
+
+        const TMuiuSettingsText* ItemText(
+            CMuiuSettingBase& aBaseItem );
+
+        /**
+        *
+        * @since S60
+        * @return
+        */
+        TMuiuStackResult HandleStackForwardL(
+            const TInt aIndex = KErrNotFound );
+        TMuiuStackResult HandleStackForwardL( const TUid& aId );
+        TMuiuStackResult HandleStackForwardL( const CMuiuSettingBase& aBase );
+        TMuiuStackResult HandleStackBackwardL( TInt aCount = 1 );
+        TMuiuStackResult HandleStackChangeL(
+            const TInt aForward,
+            const TInt aResourceId = KErrNotFound );
+
+        /**
+        * Checks if item is hidden
+        * @since S60
+        * @param aIndex, index of the item
+        * @param aId, id of the item
+        * @param aItem, the item
+        * @return KErrNone, if item is visible
+        * @return KErrNotFound, if item is hidden
+        * @return KErrNotSupported, if item is permanently hidden
+        */
+        TInt IsHidden( const TInt aIndex ) const;
+        TInt IsHidden( const TUid& iId ) const;
+        TInt IsHidden( const CMuiuSettingBase& aItem ) const;
+
+        /**
+        * Item hide functions
+        */
+        void SetHideAll(
+            const TBool aHide,
+            const TBool aUpdate = EFalse );
+        void SetHideItem(
+            const TBool aHide,
+            const TInt aIndex,
+            const TBool aUpdate = EFalse );
+        void SetHideItem(
+            const TBool aHide,
+            const TUid& aId,
+            const TBool aUpdate = EFalse );
+        void SetHideItem(
+            const TBool aHide,
+            const CMuiuSettingBase& aItem,
+            const TBool aUpdate = EFalse );
+        void SetHideItems(
+            const TBool aHide,
+            const TInt aResource,
+            const TBool aUpdate = EFalse );
+        void SetHideItemsExcept(
+            const TBool aHide,
+            const TInt aIndex,
+            const TBool aUpdate = EFalse );
+        void SetHideItemsExcept(
+            const TBool aHide,
+            const TUid& aId,
+            const TBool aUpdate = EFalse );
+        void SetHideItemsExcept(
+            const TBool aHide,
+            const CMuiuSettingBase& aItem,
+            const TBool aUpdate = EFalse );
+        void SetHideItemsExceptIn(
+            const TBool aHide,
+            const TInt aResource,
+            const TBool aUpdate = EFalse );
+
+        CMuiuSettingBase* GetItem(
+            const TUid& aId,
+            const TBool aExcludeHidden = ETrue ) const;
+
+        CMuiuSettingBase* GetItem(
+            const TInt aIndex,
+            const TBool aExcludeHidden = ETrue ) const;
+
+    public: // Functions from base classes
+    protected:  // Constructors
+
+        CMuiuDynamicSettingsArray();
+        void BaseConstructL( const TBool aLockedSettings );
+        void BaseConstructL( 
+            const TInt aResourceId, 
+            const TBool aLockedSettings );
+
+    protected:  // Data
+
+        enum TMuiuArrayEvents
+            {
+            EMuiuDynArrayAdded = 0,
+            EMuiuDynArrayRemoved,
+            EMuiuDynArrayChanged,
+            EMuiuDynArrayStackForward,
+            EMuiuDynArrayStackBackward
+            };
+
+    protected:  // New virtual functions
+
+        virtual TInt EventArrayChangedL(
+            const TMuiuArrayEvents aEvent ) = 0;
+
+        virtual TBool EventCustomMdcaPoint(
+            const TUid& aId,
+            TPtr& aString ) const = 0;
+
+        /**
+        *
+        * @since S60 3.0
+        */
+        virtual CMuiuSettingBase* CreateCustomItemToArrayLC(
+            const TUid& aId );
+
+        /**
+        *
+        * @since S60 3.0
+        */
+        virtual void ListboxItemFillMultiLineLabel(
+            const CMuiuSettingBase& aBaseItem,
+            TMuiuSettingsText& aText ) const;
+
+        /**
+        *
+        * @since S60 3.0
+        */
+        virtual void ListboxItemFillEditTextLabel(
+            const CMuiuSettingBase& aBaseItem,
+            TMuiuSettingsText& aText ) const;
+
+        /**
+        *
+        * @since S60 3.0
+        */
+        virtual void ListboxItemFillEditValueLabel(
+            const CMuiuSettingBase& aBaseItem,
+            TMuiuSettingsText& aText ) const;
+
+        /**
+        *
+        * @since S60 3.0
+        */
+        virtual void ListboxItemFillEditTimeLabel(
+            const CMuiuSettingBase& aBaseItem,
+            TMuiuSettingsText& aText ) const;
+
+        /**
+        *
+        * @since S60 3.0
+        */
+        virtual void ListboxUndefinedFillLabel(
+            const CMuiuSettingBase& aBaseItem,
+            TMuiuSettingsText& aText ) const;
+
+        /**
+        *
+        * @since S60 3.0
+        */
+        virtual void ListboxRadioButtonFillArrayLabel(
+            const CMuiuSettingBase& aBaseItem,
+            TMuiuSettingsText& aText ) const;
+
+        /**
+        *
+        * @since S60 3.0
+        */
+        virtual void ListboxCheckboxFillArrayLabel(
+            const CMuiuSettingBase& aBaseItem,
+            TMuiuSettingsText& aText ) const;
+
+    protected:  // New functions
+
+        /**
+        *
+        * @since S60 3.0
+        */
+        CMuiuSettingBase* GetSubItem(
+            const CMuiuSettingBase& aBaseItem,
+            const TUid& aId,
+            const TBool aExcludeHidden = ETrue ) const;
+
+        /**
+        *
+        * @since S60 3.0
+        */
+        CMuiuSettingBase* GetSubItem(
+            const CMuiuSettingBase& aBaseItem,
+            const TInt aIndex,
+            const TBool aExcludeHidden = ETrue ) const;
+
+        /**
+        *
+        * @since S60 3.0
+        */
+        TInt GetSubItemIndex(
+            const CMuiuSettingsLink& aLinkItem,
+            const TUid& aId,
+            const TBool aExcludeHidden = ETrue ) const;
+
+        /**
+        *
+        * @since S60 3.0
+        * @param aActualIndex
+        *    ETrue  : aIndex is from visible list and index
+        *             from the actual resource is required
+        *    EFalse : aIndex is from resource and visible
+        *             index is required
+        */
+        TInt GetSubItemIndex(
+            const CMuiuSettingsLink& aLinkItem,
+            const TInt aIndex,
+            const TBool aActualIndex ) const;
+
+        CMuiuDynFinderItemArray* GetResource(
+            const TInt aResourceId,
+            const TBool aExcludeHidden = ETrue ) const;
+        CMuiuDynFinderItemArray* GetResourceLC(
+            const TInt aResourceId,
+            const TInt aExcludeHidden = ETrue ) const;
+
+        TInt ItemIndex(
+            const TUid& aId,
+            const TBool aExcludeHidden = ETrue ) const;
+
+        void SetBetweenValues(
+            TInt& aValue,
+            TInt aMin,
+            TInt aMax ) const;
+
+        TBool ItemSubArrayCheck(
+            const CMuiuSettingBase& aBaseItem ) const;
+
+        TBool ItemSubItemCheck(
+            const CMuiuSettingBase& aBaseItem ) const;
+
+        TInt StackActiveResource() const;
+
+        /**
+        *
+        * @since S60 3.0
+        */
+        TBool IsVisibleCheck(
+            const CMuiuSettingBase& aBaseItem,
+            const TBool aExcludeHidden ) const;
+
+    protected:  // Functions from base classes
+
+        TInt MdcaCount() const;
+
+        // From MMuiuDynamicSettingsItemFinderInterface
+        virtual TBool SearchDoError();
+
+        virtual TBool SearchDoContinuationCheck(
+            const CMuiuSettingBase& aItem,
+            const TInt aIndex );
+
+        virtual TBool SearchDoItemCheck(
+            CMuiuSettingBase& aItem );
+
+    private:  // New virtual functions
+    private:  // New functions
+
+        /**
+        *
+        * @since S60 3.0
+        */
+        void CleanArrayItems();
+
+        /**
+        *
+        * @since S60 3.0
+        */
+        void LoadSettingArrayFromResourceL( const TInt aResourceId );
+
+        /**
+        *
+        * @since S60 3.0
+        */
+        TInt LoadSettingItemsToArrayL(
+            const TInt aResourceId,
+            CMuiuDynSetItemArray& aItemArray );
+
+
+        void UpdateActiveItemsCount( const TInt aNewCount = KErrNotFound );
+
+        /**
+        *
+        * @since S60
+        */
+        void HandleDynamicSettingsItemL(
+            CMuiuSettingBase& aBaseItem,
+            const TInt aMaxLength,
+            const TMuiuDynSettingsType aSubType,
+            const TInt aLinkResourceId,
+            const TDesC* aEmptyText );
+
+        /**
+        *
+        * @since S60
+        */
+        void LoadDynamicSettingItemL(
+            TResourceReader& aReader,
+            CMuiuSettingBase& aBaseItem );
+
+        /**
+        *
+        * @since S60 3.0
+        */
+        TPtrC16 ListboxItemLabelFillL(
+            CMuiuSettingBase& aBaseItem ) const;
+
+        /**
+        *
+        * @since S60 3.0
+        */
+        CMuiuSettingBase* CreateItemToArrayL(
+            const TMuiuDynSettingsType aType,
+            const TUid& aId,
+            CMuiuDynSetItemArray& aItemArray );
+
+        /**
+        * Functions to load special item settings
+        * @since S60 3.0
+        * @param aReader, Reader to be used to read the resource
+        * @param aBaseItem, Item to be used as base to settings
+        * @param aItemArray, Array that item should be stored
+        */
+        void LoadDynamicSettingsItemLinkItemL(
+            CMuiuSettingBase& aBaseItem,
+            const TMuiuDynSettingsType aSubType,
+            const TInt aLinkResourceId );
+
+        void LoadDynamicSettingsItemRadioButtonArrayL(
+            CMuiuSettingBase& aBaseItem,
+            CMuiuDynSetItemArray& aItemArray );
+
+        void LoadDynamicSettingsItemCheckBoxArrayL(
+            CMuiuSettingBase& aBaseItem,
+            CMuiuDynSetItemArray& aItemArray );
+
+        void UpdateItemEditTextL(
+            CMuiuSettingBase& aBaseItem,
+            const TInt aMaxLength,
+            const TDesC* aEmptyText );
+
+        void UpdateItemEditValueL(
+            CMuiuSettingBase& aBaseItem,
+            const TInt aMaxLength );
+
+        void LoadDynamicSettingItemFlags(
+            const TUint32 aFlags );
+
+        // SEARCHING
+
+        /**
+        *
+        * @since S60 3.0
+        */
+        void SearchResourceL(
+            const TInt aResourceId,
+            const TBool aExcludeHidden ) const;
+
+        /**
+        *
+        * @since S60 3.0
+        */
+        void DoHideItems( const TBool aHide );
+        void InitDefaultSearch(
+            const TBool aExcludeHidden = ETrue ) const;
+
+        /**
+        *
+        * @since S60 3.0
+        */
+        TInt StackCountItems(
+            const TBool aExcludeHidden = ETrue ) const;
+
+    private:  // Functions from base classes
+
+        // from MDesCArray
+        TPtrC16 MdcaPoint( TInt aIndex ) const;
+
+    public:     // Data
+    protected:  // Data
+
+        // Flags to control the array behaviour
+        enum TMuiuDynArrayFlags
+            {
+            // Allows updating of the array items
+            EMuiuDynArrayAllowRefresh = 0,
+            // Indicates if email settings are locked
+            EMuiuEMailLockedSettings
+            };
+            
+        // Text array for temporary usage, should be
+        // deleted after the use
+        HBufC*                  iTempText;
+        // Flags for array handling
+        TMuiuFlags              iArrayFlags;
+        // String containing text from resource file
+        HBufC*                  iResourceText;
+
+    private:    // Data
+
+        // Object to load resources
+        RConeResourceLoader     iResourceLoader;
+        // Item finder object
+        CMuiuDynamicSettingsItemFinder* iFinder;
+        // Stack to track the active resources
+        RResourceStack*         iResourceStack;
+        // Array of items to be shown
+        CMuiuDynSetItemArray*   iItemArray;
+        // String to fill empty compulsary fields
+        HBufC*                  iCompulsoryText;
+        // Char to replace character in password fields
+        TUint16                 iPasswordFill;
+        // Count of active items in array
+        TInt                    iActiveCount;
+        // Error state
+        TInt                    iError;
+        // Not own:
+        CEikonEnv*              iEnv;
+    };
+
+#endif      // MUIUDYNAMICSETTINGSARRAY_H
+
+// End of File