phonebookui/Phonebook2/UIControls/inc/cpbk2filteredviewstackelement.h
branchRCL_3
changeset 20 f4a778e096c2
parent 0 e686773b3f54
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phonebookui/Phonebook2/UIControls/inc/cpbk2filteredviewstackelement.h	Wed Sep 01 12:29:52 2010 +0100
@@ -0,0 +1,283 @@
+/*
+* Copyright (c) 2006-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 view stack element.
+*
+*/
+
+
+#ifndef CPBK2FILTEREDVIEWSTACKELEMENT_H
+#define CPBK2FILTEREDVIEWSTACKELEMENT_H
+
+//  INCLUDES
+#include <e32base.h>
+#include <badesca.h>
+
+// FORWARD DECLARATIONS
+class MVPbkContactViewBase;
+class MVPbkContactViewObserver;
+class MVPbkContactFindPolicy;
+class MVPbkContactBookmarkCollection;
+
+// CLASS DECLARATION
+
+/**
+ * An interface for an element in CPbk2FilteredViewStack.
+ * Responsible for:
+ * -representing one element of filtered view stack
+ * -owning the appropriate contact view if not the base element
+ * -owning the find strings with which the view is filtered
+ */
+NONSHARABLE_CLASS(MPbk2FilteredViewStackElement)
+    {
+    public: // Types
+        /**
+         * Virtual Phonebook View States
+         */
+        enum TViewState
+            {
+            // View hasn't responded anything yet.
+            EUndefined,
+            // UpdateFilterL has been called for the view
+            EUpdating,
+            // View has send an unavailable event
+            EUnavailable,
+            // View has send a ready event
+            EReady,
+            // View has send an error event
+            EError
+            };
+            
+    public:
+        virtual ~MPbk2FilteredViewStackElement() {}
+        
+        /**
+         * Creates a new filtered view from aParentView using the find text
+         * and always included contact information that has been set to this
+         * element. Note that if we are making a find view with diraphic
+         * characters we need to use the base view as a parent to prevent
+         * accidentally filtering out contacts that include digprahic
+         * characters.
+         *
+         * @param aBaseView The base view.
+         * @param aParentView The parent view whose 
+         *                    CreateFilteredViewLC is called.
+         * @param aObserver The observer that will be notified when the view
+         *                  is ready.
+         */
+        virtual void CreateViewL(
+                MVPbkContactViewBase& aBaseView,
+                MVPbkContactViewBase& aParentView,
+                MVPbkContactViewObserver& aObserver ) = 0;
+                
+        /**
+         * Returns the view of this element. Can be NULL if CreateViewL 
+         * has not been called to CPbk2FilteredViewStackElement yet.
+         * 
+         * @return the view of this element or NULL.
+         */
+        virtual MVPbkContactViewBase* View() const = 0;
+        
+        /**
+         * @return the find text for the filtered view.
+         */
+        virtual const MDesCArray& FindArray() const = 0;
+        
+        /** 
+         * @return the filter level of this view. The level is 0
+         * for the base view, 1 for the first filtered view etc.
+         */
+        virtual TInt Level() const = 0;
+        
+        /**
+         * @return a reference to the always included contact collection
+         *         that has been given to this element.
+         */
+        virtual const MVPbkContactBookmarkCollection* 
+                AlwaysIncluded() const = 0;
+        
+        /** 
+         * @return ETrue if levels are same, always included contacts
+         *               are NULL and find texts match.
+         */
+        virtual TBool IsSame( 
+                const MPbk2FilteredViewStackElement& aOther ) const = 0;
+        
+        /**
+         * Updates the data in this element and calls UpdateFilterL 
+         * for the view. If the find string is digraphic, the current view is
+         * re-created instead of updating.
+         */
+        virtual void UpdateFilterL(
+                MVPbkContactViewBase& aBaseView,
+                MVPbkContactViewObserver& aObserver,
+                const MDesCArray& aSearchLevelArray,
+                const MVPbkContactBookmarkCollection* aAlwaysIncluded ) = 0;
+        
+        /**
+         * @return the state of this element
+         */
+        virtual TViewState ViewState() const = 0;
+        
+        /**
+         * @param aState the new state of this element
+         */
+        virtual void SetViewState( TViewState aState ) = 0;
+        
+        /**
+         * @return ETrue if this element is under destruction and unusable.
+         */
+        virtual TBool UnderDestruction() const = 0;
+        
+        /**
+         * Sets this element under destruction.
+         */
+        virtual void SetUnderDestruction() = 0;
+    };
+
+/**
+ * A filtered view stack element for the base view. CreateViewL is
+ * not suitable to call for this element because it already has a view.
+ * UpdateFilterL is not usable because the base element is not itself
+ * a filtered view.
+ */
+NONSHARABLE_CLASS(CPbk2FilteredViewStackBaseElement) 
+    :   public CBase,
+        public MPbk2FilteredViewStackElement
+    {
+    public: // Constructors and destructor
+
+        /**
+         * Creates a new instance of this clas.
+         *
+         * @param aBaseView the base view that is not a filtered view itself
+         * @return  A new instance of this class.
+         */
+        static CPbk2FilteredViewStackBaseElement* NewL( 
+                MVPbkContactViewBase& aBaseView );
+
+    public: // From MPbk2ViewStackElement
+        
+        void CreateViewL(
+                MVPbkContactViewBase& aBaseView,
+                MVPbkContactViewBase& aParentView,
+                MVPbkContactViewObserver& aObserver );
+        MVPbkContactViewBase* View() const;
+        const MDesCArray& FindArray() const;
+        TInt Level() const;
+        const MVPbkContactBookmarkCollection* AlwaysIncluded() const;
+        TBool IsSame( const MPbk2FilteredViewStackElement& aOther ) const;
+        void UpdateFilterL(
+                MVPbkContactViewBase& aBaseView,
+                MVPbkContactViewObserver& aObserver,
+                const MDesCArray& aSearchLevelArray,
+                const MVPbkContactBookmarkCollection* aAlwaysIncluded );
+        TViewState ViewState() const;
+        void SetViewState( TViewState aState );
+        TBool UnderDestruction() const;
+        void SetUnderDestruction();
+        
+    private: // Implementation
+        CPbk2FilteredViewStackBaseElement( MVPbkContactViewBase& aBaseView );
+
+    private: // Data
+        /// Own: All Contacts view
+        MVPbkContactViewBase& iBaseView;
+        TViewState iState;
+    };
+    
+/**
+ * A filtered view stack element for the filtered views.
+ */
+NONSHARABLE_CLASS(CPbk2FilteredViewStackElement) 
+    :   public CBase,
+        public MPbk2FilteredViewStackElement
+    {
+    public: // Constructors and destructor
+
+        /**
+         * Creates a new instance of this clas.
+         *
+         * @param aFindPolicy a reference to find policy that can be use
+         *                    to compare find texts.
+         * @param aSearchLevelArray the array that contains search strings.
+         * @param aAlwaysIncluded a reference to the always included contact
+         *                        collection that must be alive while
+         *                        this element is alive.
+         * @return  A new instance of this class.
+         */
+        static CPbk2FilteredViewStackElement* NewL(
+                MVPbkContactFindPolicy& aFindPolicy,
+                const MDesCArray* aSearchLevelArray,
+                const MVPbkContactBookmarkCollection* aAlwaysIncluded );
+
+        /**
+         * Destructor.
+         */
+        ~CPbk2FilteredViewStackElement();
+
+    public: // From MPbk2ViewStackElement
+        
+        void CreateViewL(
+                MVPbkContactViewBase& aBaseView,
+                MVPbkContactViewBase& aParentView,
+                MVPbkContactViewObserver& aObserver );
+        MVPbkContactViewBase* View() const;
+        const MDesCArray& FindArray() const;
+        TInt Level() const;
+        const MVPbkContactBookmarkCollection* AlwaysIncluded() const;
+        TBool IsSame( const MPbk2FilteredViewStackElement& aOther ) const;
+        void UpdateFilterL(
+                MVPbkContactViewBase& aBaseView,
+                MVPbkContactViewObserver& aObserver,
+                const MDesCArray& aSearchLevelArray,
+                const MVPbkContactBookmarkCollection* aAlwaysIncluded );
+        TViewState ViewState() const;
+        void SetViewState( TViewState aState );
+        TBool UnderDestruction() const;
+        void SetUnderDestruction();
+                
+    private: // Implementation
+        CPbk2FilteredViewStackElement(
+                MVPbkContactFindPolicy& aFindPolicy,
+                const MVPbkContactBookmarkCollection* aAlwaysIncluded,
+                const MDesCArray* aSearchLevelArray );
+        void ConstructL();
+        TBool Match( const MDesCArray& aArray1, 
+                     const MDesCArray& aArray2 ) const;
+        TInt CountLengthOfStrings( const MDesCArray& 
+            aStringArray ) const;
+        /**
+         * @return ETrue if the find filtering must take digraphic characters
+         * into account (digraph is a single character consisting of two
+         * letters run together and representing a single sound). This affects
+         * to the filtered find views optimization in Pbk2.
+         */
+        TBool FindMustBeDigraphicL() const;
+
+    private: // Data
+        /// Ref: Find policy
+        MVPbkContactFindPolicy& iFindPolicy;
+        /// Ref: the optional always included contacts
+        const MVPbkContactBookmarkCollection* iAlwaysIncluded;
+        /// Own: Contact view
+        MVPbkContactViewBase* iView;
+        TViewState iState;
+        TBool iUnderDestruction;
+        const MDesCArray* iSearchLevelArray;
+        TInt iLengthOfSearchArray;
+    };
+
+#endif // CPBK2FILTEREDVIEWSTACKELEMENT_H
+
+// End of File