phonebookui/Phonebook2/UIControls/inc/CPbk2ContactInfoListBox.h
changeset 0 e686773b3f54
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phonebookui/Phonebook2/UIControls/inc/CPbk2ContactInfoListBox.h	Tue Feb 02 10:12:17 2010 +0200
@@ -0,0 +1,222 @@
+/*
+* Copyright (c) 2005-2007 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 2 contact info list box.
+*
+*/
+
+
+#ifndef CPBK2CONTACTINFOLISTBOX_H
+#define CPBK2CONTACTINFOLISTBOX_H
+
+//  INCLUDES
+#include "MPbk2ClipListBoxText.h"
+#include "CPbk2FieldAnalyzer.h"
+#include <TPbk2IconId.h>
+#include <aknlists.h>
+#include <MPbk2PointerEventInspector.h>
+#include <MVPbkContactAttributeManager.h>
+
+
+// FORWARD DECLARATIONS
+class CVPbkContactManager;
+class CPbk2PresentationContactFieldCollection;
+class CItemDrawer;
+class CPbk2FieldListBoxModel;
+class CPbk2ContactInfoDataSwapper;
+class MPbk2FieldPropertyArray;
+class CPbk2ContactFieldDynamicProperties;
+class MVPbkContactOperationBase;
+
+/**
+ * Phonebook 2 contact info list box.
+ */
+NONSHARABLE_CLASS(CPbk2ContactInfoListBox) :
+        public CAknFormDoubleGraphicStyleListBox,
+        public MPbk2ClipListBoxText,
+        public MPbk2PointerEventInspector,
+        public MVPbkMultiAttributePresenceObserver
+    {
+    public: // Constructors and destructor
+
+        /**
+         * Creates a new instance of this class.
+         *
+         * @param aContainer    The control container for this control.
+         * @param aResourceId   The resource id from where to construct
+         *                      this object from.
+         * @param aManager      Virtual phonebook contact manager.
+         * @return  A new instance of this class.
+         */
+        static CPbk2ContactInfoListBox* NewL(
+                CCoeControl& aContainer,
+                TInt aResourceId,
+                CVPbkContactManager& aManager );
+
+        /**
+         * Destructor.
+         */
+        ~CPbk2ContactInfoListBox();
+
+    public: // Interface
+
+        /**
+         * Prepares the data for updating, i.e. replacing the shown
+         * contact with a new one.
+         *
+         * @param aDataSwapper          Utility class for data
+         *                              storage and swapping.
+         * @param aFieldCollection      Contact's fields.
+         * @param aFieldProperties      Field properties.
+         * @param aDynamicProperties    Dynamic field properties.
+         */
+        void PrepareForUpdateL(
+                CPbk2ContactInfoDataSwapper& aDataSwapper,
+                const CPbk2PresentationContactFieldCollection& aFieldCollection,
+                MPbk2FieldPropertyArray& aFieldProperties,
+                const CPbk2ContactFieldDynamicProperties* aDynamicProperties );
+
+        /**
+         * Updates list box content with the data got from the data swapper.
+         *
+         * @param aDataSwapper  Utility class for data storage and swapping.
+         * @param aContact      Store contact.
+         */
+        void DoUpdateL(
+                CPbk2ContactInfoDataSwapper& aDataSwapper,
+                MVPbkStoreContact& aContact );
+
+        /**
+         * Returns the number of items in the list box currently.
+         *
+         * @return  Number of items in the listbox.
+         */
+        TInt NumberOfItems() const;
+
+        /**
+         * Returns list box selection status.
+         *
+         * @return  ETrue if there are items marked, EFalse otherwise.
+         */
+        TBool ContactsMarked() const;
+
+        /**
+         * Returns current item index.
+         *
+         * @return  Current item index.
+         */
+        TInt CurrentItemIndex() const;
+
+        /**
+         * Handles resource change events.
+         * @see CCoeControl::HandleResourceChange
+         *
+         * @param aType Resource change type.
+         */
+        void DoHandleResourceChangeL(
+                const TInt aType ) const;
+
+        /**
+         * Returns flags read from the resource file.
+         *
+         * @return  Flags from resource file (TResourceData.iFlags).
+         */
+        TUint Flags() const;
+
+        /**
+         * Sets the scroll event observer.
+         */
+        void SetScrollEventObserver(MEikScrollBarObserver* aObserver);
+
+    public: // From CEikColumnListBox
+        class CItemDrawer;
+        CItemDrawer* ItemDrawer() const;
+        void CreateItemDrawerL();
+        void HandlePointerEventL(
+                const TPointerEvent& aPointerEvent );
+        void HandleScrollEventL( CEikScrollBar* aScrollBar, 
+                                 TEikScrollEvent aEventType );
+
+    private: // From MPbk2ClipListBoxText
+        TBool ClipFromBeginning(
+                TDes& aBuffer,
+                TInt aItemIndex,
+                TInt aSubCellNumber );
+
+    public: // From MPbk2PointerEventInspector
+        TBool FocusedItemPointed();
+        TBool FocusableItemPointed();
+        TBool SearchFieldPointed();
+
+    private: // from MVPbkMultiAttributePresenceObserver
+        void AttributePresenceOperationComplete(
+            MVPbkContactOperationBase& aOperation, 
+            MVPbkStoreContactFieldCollection* aResult);
+        void AttributePresenceOperationFailed(
+            MVPbkContactOperationBase& aOperation, TInt aError);
+
+    private: // Implementation
+        CPbk2ContactInfoListBox(
+                CVPbkContactManager& aManager );
+        void ConstructL(
+                CCoeControl& aContainer,
+                TInt aResourceId );
+        CPbk2FieldListBoxModel* CreateListBoxModelL(
+                const CVPbkContactManager& aContactManager,
+                const CPbk2PresentationContactFieldCollection& aFieldCollection,
+                MPbk2FieldPropertyArray& aFieldProperties,
+                const CPbk2ContactFieldDynamicProperties* aDynamicProperties );
+        void DoCreateVoiceTagRetrieverL(MVPbkStoreContact& aContact);
+        void DoRefreshListBoxContentL(
+            MVPbkStoreContactFieldCollection* aResult);
+
+    private: // Data loaded from resources
+        struct TResourceData
+            {
+            /// Own: Flags
+            TUint iFlags;
+            /// Own: Text to use for unnamed entries
+            HBufC* iUnnamedText;
+            /// Own: Empty icon id
+            TPbk2IconId iEmptyIconId;
+            /// Own: Default icon id
+            TPbk2IconId iDefaultIconId;
+            /// Own: Listbox empty text in find state
+            HBufC* iFindEmptyText;
+            };
+
+    private: // Data
+        /// Own: Data loaded from resources
+        TResourceData iResourceData;
+        /// Own: List box model
+        MDesC16Array* iModel;
+        /// Own: Field analyzer
+        CPbk2FieldAnalyzer* iFieldAnalyzer;
+        /// Ref: Field collection
+        const CPbk2PresentationContactFieldCollection* iFieldCollection;
+        /// Ref: Virtual Phonebook contact manager
+        CVPbkContactManager& iManager;
+        /// Own: ETrue, if user tapped a focusable item in the list
+        TBool iFocusableItemPointed;
+        /// Own: ETrue, if user tapped a previously focused item in the list
+        TBool iFocusedItemPointed;
+        /// Own: Voice tag retrieval operation
+        MVPbkContactOperationBase* iVoiceTagFindOperation;
+        /// Ref: scroll event observer
+        MEikScrollBarObserver* iScrollEventObserver;
+
+    };
+
+#endif // CPBK2CONTACTINFOLISTBOX_H
+
+// End of File