contacts_plat/phonebook_internal_ui_utilities_api/inc/Phonebook/CPbkContactViewListControl.h
changeset 0 e686773b3f54
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/contacts_plat/phonebook_internal_ui_utilities_api/inc/Phonebook/CPbkContactViewListControl.h	Tue Feb 02 10:12:17 2010 +0200
@@ -0,0 +1,432 @@
+/*
+* 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: 
+*    Phonebook contact view list control.
+*
+*/
+
+
+#ifndef __CPbkContactViewListControl_H__
+#define __CPbkContactViewListControl_H__
+
+
+//  INCLUDES
+#include <cntviewbase.h>    // MContactViewObserver
+#include <coecobs.h>        // MCoeControlObserver
+#include <babitflags.h>     // TBitFlags
+
+#include <PbkIconId.hrh>    // TPbkIconId
+#include <MPbkContactDbObserver.h>
+#include <CPbkContactListControlBase.h>
+
+//  FORWARD DECLARATIONS
+class CPbkContactFindView;
+class CEikColumnListBox;
+class CEikMenuPane;
+class CAknSearchField;
+class CPbkThumbnailPopup;
+class CPbkViewState;
+class MPbkContactEntryLoader;
+class MPbkContactViewListControlObserver;
+class MPbkContactViewListModel;
+class TPbkContactViewListControlEvent;
+class MPbkFindPrimitives;
+class MPbkContactUiControlExtension;
+class MPbkFetchDlgSelection;
+/// Use for testing only!!!
+class CPbkContactViewListControl_TestAccess;
+
+
+// CLASS DECLARATION
+
+/**
+ * @internal Only Phonebook internal use supported!
+ *
+ * Phonebook contact view list control. Used in all views and dialogs which
+ * display contacts in a list box.
+ */
+class CPbkContactViewListControl :
+		public CPbkContactListControlBase,
+		private MCoeControlObserver,
+		private MContactViewObserver
+    {
+    public:  // Constructors and destructor
+        /**
+         * Creates a new instance of this class.
+         * @param aEngine phonebook engine instance.
+         * @param aView the contact view this list control displays.
+         * @param aResourceId if of a PBK_CONTACTVIEWLISTCONTROL resource to
+         *        use for intialisation.
+         * @param aParent container for this control. If NULL this control
+         *        creates its own window.         
+         */
+        IMPORT_C static CPbkContactViewListControl* NewL
+            (CPbkContactEngine& aEngine,
+            CContactViewBase& aView,
+            TInt aResourceId,
+            const CCoeControl* aParent);
+
+        /**
+         * C++ default constructor.
+         */
+        IMPORT_C CPbkContactViewListControl();
+
+        /**
+         * Second phase constructor, from CCoeControl. Initialises this object
+         * from a PBK_ENTRYLIST_CONTROL resource struct using aReader.
+		 * Should be called before ConstructL().
+         */
+	    void ConstructFromResourceL(TResourceReader& aReader);
+
+        /**
+         * "Third phase" constructor. Should be called after 
+         * ConstructFromResourceL().
+         * @param aEngine   Phonebook engine instance.
+         * @param aView     the contact view this list control displays.
+         */
+        IMPORT_C void ConstructL
+            (CPbkContactEngine& aEngine, CContactViewBase& aView);
+
+		/**
+         * Destructor.
+         */ 
+        ~CPbkContactViewListControl();
+
+    public:  // New functions
+
+        /**
+         * Returns the Contact id at listbox index aIndex.
+         */
+        IMPORT_C TContactItemId ContactIdAtL(TInt aIndex) const;
+
+        /**
+         * Returns the listbox index of entry having contact id aId, 
+         * -1 if not found.
+         */
+        IMPORT_C TInt FindContactIdL(TContactItemId aId) const; 
+
+        /**
+         * Returns the currently focused item's index.         
+         */
+        IMPORT_C TInt CurrentItemIndex() const;
+
+        /**
+         * Sets the currently focused item's index to aIndex.
+         */
+        IMPORT_C void SetCurrentItemIndex(TInt aIndex);
+
+        /**
+         * Sets the currently focused item's index to aIndex and updates
+         * the control on the display.
+         */
+        IMPORT_C void SetCurrentItemIndexAndDraw(TInt aIndex);
+
+        /**
+         * Handles aCommandId if it is a markable list box command.
+         * @see AknSelectionService::HandleMarkableListProcessCommandL.
+         */
+        IMPORT_C void HandleMarkableListProcessCommandL(TInt aCommandId);
+
+        /**
+         * Updates a menu pane containing markable list commands.
+         * @see AknSelectionService::HandleMarkableListDynInitMenuPane
+         */
+        IMPORT_C void HandleMarkableListDynInitMenuPane
+            (TInt aResourceId, CEikMenuPane* aMenu);
+
+		/**
+         * Updates listbox state after command execution.
+         * @see AknSelectionService::HandleMarkableListUpdateAfterCommandExecution.
+         */
+        IMPORT_C void HandleMarkableListUpdateAfterCommandExecution();
+
+        /**
+         * Returns the text currenlty in find box. KNullDesC if the find box
+         * is not visible.
+         */
+        IMPORT_C const TDesC& FindTextL() const;
+
+        /**
+         * Resets any string in the find box.
+         */
+        IMPORT_C void ResetFindL();
+
+        /**
+         * Returns ETrue if item at aIndex is currently marked.
+         */
+        IMPORT_C TBool ItemMarked(TInt aIndex) const;
+
+        /**
+         * Returns index of next unmarked item starting from focused item.
+         */
+        IMPORT_C TInt NextUnmarkedIndexFromFocus() const;
+
+        /**
+         * Marks or unmarks a contact item in the list.
+         *
+         * @param aContactId Id of Contact item to mark or unmark.
+         * @param aMark ETrue: set the mark, EFalse: remove the mark.
+         */
+        IMPORT_C void MarkItemL(TContactItemId aContactId, TBool aMark);
+
+        /**
+         * Umarks all marked items.
+         */
+        IMPORT_C void ClearMarks();
+
+        /**
+         * Creates a new CPbkViewState and stores this control's 
+         * state to it.
+         * @param aSaveMarks if true saves also marked entries to returned
+         *        view state object.
+         * @return this control's saved state. Caller is responsible for
+         *         deleting the returned object.
+         * @see RestoreState
+         */
+        IMPORT_C CPbkViewState* GetStateL(TBool aSaveMarks=ETrue) const;
+
+        /**
+         * Same as GetStateL, but leaves the object on the cleanup stack.
+         * @see GetStateL
+         */
+        IMPORT_C CPbkViewState* GetStateLC(TBool aSaveMarks=ETrue) const;
+
+        /**
+         * Restores this control to a previously saved state.
+         * @param aState the state where to restore this control. 
+         *        If NULL the function does nothing.
+         * @see GetState
+         */
+        IMPORT_C void RestoreStateL(const CPbkViewState* aState);
+        
+		/**
+         * Shows the thumbnail image if the currently focused contact has
+         * one.
+         */
+        IMPORT_C void ShowThumbnailL();
+
+        /**
+         * Hides thumbnail window if visible. Call UpdateL() to restore
+         * thumbnail.
+         */
+        IMPORT_C void HideThumbnail();
+
+        /**
+         * Adds an observer aObserver to this control.
+         */
+        IMPORT_C void AddObserverL
+            (MPbkContactViewListControlObserver& aObserver);
+
+		/**
+         * Removes an observer aObserver from this control.
+         */
+        IMPORT_C void RemoveObserver
+            (MPbkContactViewListControlObserver& aObserver);
+
+		/**
+         * Returns ETrue when this control is ready to use.
+         */
+        IMPORT_C TBool IsReady() const;
+
+        /**
+         * Disables/enables listbox control redrawing.
+         * @see CListBoxView::SetDisableRedraw(TBool)
+         */
+	    void SetDisableRedraw(TBool aDisableRedraw);
+
+        /**
+         * Disables listbox redrawing and pushes a cleanup item on the cleanup 
+         * stack which enables redrawing again when PopAndDestroy()'ed.
+         * @see SetDisableRedraw(TBool)
+         */
+	    void DisableRedrawEnablePushL();
+
+        /**
+         * Blanks/unblanks this control. Use when there are massive updates
+         * to the database to avoid flickering.
+		 * @param aBlank ETrue blanks the control, EFalse unblanks it
+         */
+        IMPORT_C void SetBlank(TBool aBlank);
+
+        /**
+         * Set contact entry loader to aContactEntryLoader.
+         */
+        IMPORT_C void SetEntryLoader
+            (MPbkContactEntryLoader& aContactEntryLoader);
+        
+        /**
+         * Set selection accepter. If accepter is set, all item selections
+         * are first checked from accepter. It can then prevent the
+         * selection from happening.
+         * @param aAccepter Pointer to the accepter
+         */
+        void SetSelectionAccepter(MPbkFetchDlgSelection* aAccepter);
+
+        /**
+        * Deletes this control thumbnail
+        */
+        IMPORT_C void DeleteThumbnail();
+        
+        /**
+        * Calls Listbox's corresponding method. 
+        * @param aEnable If EFalse, removes the listbox's own observer        
+        */
+        void EnableMSKObserver( TBool aEnable );
+        
+        /**
+        * Returns the count of items on a list.
+        * @return item count
+        */
+        TInt ItemCount();
+        
+	public: // From MPbkContactUiControl
+        /**
+         * Returns the number of entries in the list box.
+         * NOTE: if find is active (there is text in the find box) this
+         * function returns number of currently visible items only!
+         */
+        TInt NumberOfItems() const;
+        TBool ItemsMarked() const;
+        const CContactIdArray& MarkedItemsL() const;
+        TContactItemId FocusedContactIdL() const;
+        const TPbkContactItemField* FocusedField() const;
+        MObjectProvider* ObjectProvider();
+
+    public:  // from CCoeControl
+        TKeyResponse OfferKeyEventL
+            (const TKeyEvent& aKeyEvent,TEventCode aType);
+        void HandlePointerEventL(const TPointerEvent& aPointerEvent);            
+	    void MakeVisible(TBool aVisible);
+
+    public: // from MPbkContactUiControlUpdate
+        void UpdateContact(TContactItemId aContactId);
+
+    private:  // from CCoeControl
+	    void ConstructFromResourceL(TInt aResourceId);
+        TInt CountComponentControls() const;
+        CCoeControl* ComponentControl(TInt aIndex) const;
+	    void FocusChanged(TDrawNow aDrawNow);
+        void SizeChanged();
+        void Draw(const TRect& aRect) const;
+        void HandleResourceChange(TInt aType);
+        void DoHandleResourceChangeL(TInt aType);        
+
+    private:  // from MCoeControlObserver
+        void HandleControlEventL(CCoeControl* aControl, TCoeEvent aEventType);
+
+    private:  // from MContactViewObserver
+	    void HandleContactViewEvent
+            (const CContactViewBase& aView, const TContactViewEvent& aEvent);
+            
+    private:  // Implementation
+        void ConstructL
+            (CPbkContactEngine& aEngine, CContactViewBase& aView,
+            TInt aResourceId, const CCoeControl* aParent);
+        CEikColumnListBox& ListBox() const;
+        MPbkContactViewListModel& Model() const;
+        void FixTopItemIndex();
+        void Redraw();
+        void MakeComponentsVisible(TBool aVisible); 
+        void HandleItemAdditionL(TInt aIndex);
+        void HandleItemRemovalL(TInt aIndex);
+        void UpdateFindBoxL();
+        void EnableFindBoxL();
+        void DisableFindBoxL();
+        TBool UpdateFindResultL();
+        void SetFindEmptyTextL();
+        void RemoveFindEmptyTextL();
+	    void DoHandleContactViewEventL
+            (const CContactViewBase& aView, const TContactViewEvent& aEvent);
+        static TInt NoEventsInLastPeriod(TAny* aPtr);
+        void SendEventToObserversL
+            (const TPbkContactViewListControlEvent& aEvent);
+        void ShowThumbnail(TContactItemId aContactId);
+        void HandleFocusChange();
+        void HandleFocusChangeL();
+        TBool RestoreMarkedItemsL(const CContactIdArray* aMarkedContactIds);
+        TBool PostCond_Constructor();
+        TBool PostCond_ConstructFromResource();
+        void CreateControlExtensionL(CPbkContactEngine& aEngine);
+        void RefreshIconArrayL();
+
+        /// State flags
+        enum TStateFlags
+            {
+            /// Set when this control is ready to use
+            EReady,
+            /// Set when this control should draw only blank
+            EBlank,
+            };
+
+        /// Data loaded from resources
+        struct TResourceData
+            {
+            /// Own: flags
+            TUint iFlags;
+            /// Own: text to use for unnamed entries
+            HBufC* iUnnamedText;
+            /// Own: empty icon id
+            TPbkIconId iEmptyIconId;
+            /// Own: default icon id
+            TPbkIconId iDefaultIconId;
+            /// Own: listbox empty text in find state
+            HBufC* iFindEmptyText;
+            };
+
+        /// Use for testing only!!!
+        friend class CPbkContactViewListControl_TestAccess;
+
+    private:  // data
+        /// Own: Listbox control
+        CEikColumnListBox* iListBox;
+        /// Own: find box control
+        CAknSearchField* iFindBox;
+        /// Own: Thumbnail popup
+        CPbkThumbnailPopup* iThumbnailPopup;
+        /// Own: state flags
+        TBitFlags iStateFlags;
+        /// Own: the contact view this list control is displaying
+        CContactViewBase* iBaseView;
+        /// Own: wrapper view over iBaseView implementing find functionality
+        CPbkContactFindView* iView;
+        /// Own: find primitives implementation for iView
+        MPbkFindPrimitives* iFindPrimitives;
+        /// Own: Buffer for text retrieved from iFindBox
+        mutable HBufC* iFindTextBuf;
+        /// Own: marked items array returned from MarkedItemsL()
+        mutable CContactIdArray* iMarkedItemsArray;
+        /// Own: contact item id where focus was the last time
+        TContactItemId iLastFocusId;
+        /// Own: observers of this object
+        RPointerArray<MPbkContactViewListControlObserver> iObservers;
+        /// Own: standard listbox empty text
+        HBufC* iOriginalEmptyText;
+        /// Own: data loaded from resources
+        TResourceData iResourceData;
+        /// Own: indexes of the changed list items
+        CArrayFixFlat<TInt> iChangedIndexes;
+        /// Own: for setting and releasing contact ui control
+        MPbkContactUiControlExtension* iControlExtension;
+        /// Not own: for asking wheter a contact item can be selected 
+        MPbkFetchDlgSelection* iSelectionAccepter;
+        /// Ref: Contact Engine
+        CPbkContactEngine* iEngine;
+        /// Own: Contact item index preceding the latest stylus tap
+        TInt iPrevIndex;        
+    };
+
+
+#endif // __CPbkContactViewListControl_H__
+            
+// End of File