contacts_plat/phonebook_internal_ui_utilities_api/inc/Phonebook/CPbkContactViewListControl.h
--- /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