wvuing/wvuiprocess/Inc/CCASearchInterfacePC.h
changeset 0 094583676ce7
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/wvuing/wvuiprocess/Inc/CCASearchInterfacePC.h	Thu Dec 17 08:41:52 2009 +0200
@@ -0,0 +1,387 @@
+/*
+* 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:  Implementation for PC Search Interface
+*
+*/
+
+
+#ifndef CCASEARCHINTERFACEPC_H
+#define CCASEARCHINTERFACEPC_H
+
+
+// INCLUDES
+#include	"MCASearchInterfacePC.h"
+#include    "MCABackgroundObserver.h"
+
+
+// FORWARD DECLARATIONS
+class MCASearchBackgroundObserverPC;
+class MCASearchInterface;
+class MCASearchObserverInterfacePC;
+class MCAGroupManagerInterface;
+class MCAStoredGroups;
+
+
+//class declaration
+/**
+ *  Implementation class for Search Interface for the UI.
+ *
+ *  @lib wvuiprocessng.lib
+ *  @since 3.2
+ */
+class CCASearchInterfacePC: public CBase,
+            public MCASearchInterfacePC,
+            public MCABackgroundObserver
+
+    {
+
+    public:
+
+        /**
+        * Symbian Two Phase Constructor
+        * @param aSearchInterface : a reference to search interface in the chat engine
+        * @param aBackgroundInterface : a ref. to background interface in the chat engine
+        * @param groupMgrInterface : a ref. to group manager interface in the chat engine
+        */
+        static CCASearchInterfacePC* NewL( MCASearchInterface* aSearchInterface ,
+                                           MCABackgroundInterface& aBackgroundInterface,
+                                           MCAGroupManagerInterface& groupMgrInterface );
+
+
+        /**
+         * virtual destructor
+         */
+        virtual ~CCASearchInterfacePC();
+
+    private:
+        /**
+        * default constructor
+        * @param aSearchInterface : a reference to search interface in the chat engine
+        * @param aBackgroundInterface : a ref. to background interface in the chat engine
+        */
+
+
+        CCASearchInterfacePC( MCASearchInterface* aSearchInterface,
+                              MCABackgroundInterface& aBackgroundInterface,
+                              MCAGroupManagerInterface& groupMgrInterface );
+
+        /**
+        * constructor
+        * @since 3.2
+        */
+        void ConstructL();
+
+    public:
+
+        /**
+         * Find any contact which id is aContactId
+         * @param aContactId Contactid to recognize contact.
+         * @return ETrue if contact found else EFalse
+         */
+        TBool FindAnyContactL( const TDesC& aContactId );
+
+        /**
+        * To convert the engine side TCABackgroundTasks enum to PC side TEnumsPC
+        * @param aEventSource: enum type in engine MCABackgroundInterface::TCABackgroundTasks
+        * @return TEnumsPC::TCABackgroundTasks
+        */
+        TEnumsPC::TCABackgroundTasks ConvertTCABackgroundTasksToTEnumsPC
+        ( MCABackgroundInterface::TCABackgroundTasks aEventSource );
+
+        /**
+        * To convert the engine side TCABackgroundStatus enum to PC side TEnumsPC
+        * @param aEventSource: enum type in engine MCABackgroundInterface::TCABackgroundStatus
+        * @return TEnumsPC::TCABackgroundStatus
+        */
+        TEnumsPC::TCABackgroundStatus ConvertTCABackgroundStatus
+        ( MCABackgroundInterface::TCABackgroundStatus aStatus );
+
+        /**
+        * To convert the PC Side TEnumsPC::TCABackgroundTasks enum to Engine side TCABackgroundStatus
+        * @param aSource: enum type in process TEnumsPC::TCABackgroundStatus
+        * @return enum type in engine MCABackgroundInterface::TCABackgroundStatus
+        */
+        MCABackgroundInterface::TCABackgroundTasks ConvertToTCABackgroundTasks
+        ( TEnumsPC::TCABackgroundTasks aSource );
+
+        /**
+        * To convert the PC Side TSearchCriteria enum to IMEngine side TImpsSearchElement
+        * @param aElement: enum type in process TEnumsPC::TSearchCriteria
+        * @return enum type in IMEngine TImpsSearchElement
+        */
+        TImpsSearchElement CCASearchInterfacePC::
+        ConvertToTImpsSearchElement( TEnumsPC::TSearchCriteria aElement );
+
+        /**
+         * @return a CSearchPairs pointer
+         */
+        CSearchPairs* SearchPairs();
+
+        /**
+         * set search pairs
+         * @param aCount: specifies the number of elements
+         * in the array iSearchPairs that has to be constructed
+         */
+        void SetSearchPairsL( TInt aCount );
+
+        /**
+         * @return ETrue if iSearchPairs is not null
+         */
+        TBool IsSearchPairsSet();
+
+        /**
+         * @return SearchString -string to be searched
+         */
+        HBufC*  GetSearchStringLC();
+
+        /**
+        * Builds the search pairs and sets the search requestSet values.
+        * This allocates memory and copies aValue to its internal data storage.
+        * @param aSearchCriteriaArray specifies list of search criterias (search keys)
+        * @param aSearchStringArray specifies array of strings to be searched(search values)
+        */
+
+        void SetRequestL(  RArray<TEnumsPC::TSearchCriteria>&  aSearchCriteriaArray,
+                           CDesCArray& aSearchStringArray );
+    public://From MCABackgroundObserver
+
+        /**
+        * Call if an event happend that match registered task and event mask.
+        * @param aEventSource is the source of event
+        * @param aStatus is the status of the background task
+        * @param aSubTaskNumber is the number of subtask
+        * @param aLeaveCode is the leave code of the task/subtask
+        */
+        void HandleBackgroundEvent(
+            MCABackgroundInterface::TCABackgroundTasks aEventSource,
+            MCABackgroundInterface::TCABackgroundStatus aStatus,
+            TInt aSubTaskNumber,
+            TInt aLeaveCode
+        );
+
+    public://From MCASearchInterfacePC
+
+        /**
+        * @see MCASearchInterfacePC
+        * To add the UI side observer for MCASearchObserverInterfacePC
+        * events from the engine.
+        */
+        void AddObserver( MCASearchObserverInterfacePC* aObserver );
+
+        /**
+        * @see MCASearchInterfacePC
+        * To remove the UI side observer for MCASearchObserverInterfacePC
+        * events from the engine.
+        */
+        void RemoveObserver();
+
+        /**
+        * Registers observer for background task
+        * @param aBackgaBackgroundObserver pointer of instance of UI component
+        * @param aTaskMask is an AND mask for task requested,
+        * @param aEventMask is an AND mask for events requested,
+        * @return KErrNone on success, system wide error code otherwise
+        */
+        TInt RegisterBackgroundObserver(
+            MCASearchBackgroundObserverPC* aBackgroundObserver,
+            TInt aTaskMask,
+            TInt aEventMask );
+
+        /**
+        * Removes observer from the queue
+        * @param aBackgroundObserver pointer of instance to remove
+        */
+        void UnRegisterBackgroundObserver(
+            MCASearchBackgroundObserverPC* aBackgroundObserver );
+
+        /**
+        * @param aTaskID is an id of a background task
+        * @retrun status of the background task or KErrNotFound
+        */
+        TInt BackgroundTaskStatus( TEnumsPC::TCABackgroundTasks aTaskID );
+
+    public:
+
+        /**
+        * @see MCASearchObserverInterface::HandleSearchError
+        */
+        void HandleSearchError( TInt aErrorCode );
+        /**
+        * @see MCASearchObserverInterface::HandleSearchFinished
+        */
+        void HandleSearchFinished( );
+
+
+    public:
+
+        /**
+         * @see MCASearchInterfacePC
+         * Start the search.
+         * @param aSearchLimit defines how many results you want.
+         * @param aObserver The observer for this search operation
+         * @param aSearchPairs Pairs to be searched
+         * @return Error code.
+         * Leaves
+         *   ESearchNotSupported
+         */
+        TInt StartSearchL( TInt aSearchLimit,
+                           MCASearchObserverInterfacePC* aObserver,
+                           CSearchPairs* aSearchPairs = NULL ) ;
+
+        /**
+          * @see MCASearchInterfacePC
+          * Stops the current search. Must be called before starting new search.
+         * @return Error code.
+         * Leaves
+         *   ESearchNotSupported
+         */
+        TInt EndSearchL() ;
+
+        /**
+         * @see MCASearchInterfacePC
+         * Continues search. This function must only be called when more results
+         * are wanted.
+         * @param aIndex specifies the next index where to start search.
+         * @param aObserver The observer for this search operation
+         * @return Error code.
+         * Leaves
+         *   ERequestedResultsButNotAvailable
+         *   ESearchNotSupported
+         */
+        TInt SearchNextL( TInt aIndex, MCASearchObserverInterfacePC* aObserver ) ;
+
+        /**
+         * Gets the properties of group
+         * @param The group id
+         * @param aCommonProps Common group properties
+         * @param aPrivateProps Private group properties
+         * @return CSP error code
+         */
+        virtual TEnumsPC::TImpsCSPAllErrors GetPropertiesL( const TDesC& aGroupId,
+                                                            CImpsCommonGroupProps*& aCommonProps,
+                                                            CImpsPrivateGroupProps*& aPrivateProps
+                                                          );
+
+        /**
+        * To set the groupname of the group whose id is aGroupId
+        * @param aGroupId: id of the group whose name has to be set
+        * @param aGroupName: name of the group to be set
+        */
+        virtual void SetGroupNameL( const TDesC& aGroupId, const TDesC& aGroupName );
+
+        /**
+        * To create a group with group id aGroupId
+        * @param aGroupId: id of the group to be created
+        */
+        virtual void CreateGroupL( const TDesC& aGroupId );
+
+        /**
+        * To save the changes made to a groups properties and make it persistent. Once this is done
+        * the isFavorite property of the group will always return true.
+        * @param aGroupId: id of the group which has to be saved
+        */
+        virtual void SaveChangesL( const TDesC& aGroupId );
+
+        /**
+        * To populate the two arrays of group names and goup ids
+        * @param aGroupNames: array of the current group names
+        * @param aGroupIds: array of the current group IDs
+        */
+        virtual MCAServerContactsArrayPC* GetPairArrayForServerContactsArrayLC() ;
+
+        /**
+        * To set the groupname of the group whose id is aGroupId
+        * @param aGroupId: id of the group which has to be searched for
+        * @param bool : returns true if the group with aGroupId is found else returns false
+        */
+        virtual TBool FindGroup( const TDesC& aGroupId );
+
+        /**
+         * Delete the given group
+         * @param aGroupId The group id of the group to delete
+         * @param aDeleteFromNetwork Defines whether the group should
+         *        be deleted also from network server or not
+         * @return The errorcode
+         */
+        virtual TInt DeleteGroupL( const TDesC& aGroupId, TBool aDeleteFromNetwork );
+
+        /**
+        * To get the groupname of the group whose id is aGroupId
+        * @param aGroupId: of the group whose name has to be set
+        * @param aHasCommonProps: Returned by reference. True if the group has common group properties
+        * else return false
+        * @param aImpsError: return by reference. Return the error code if any.
+        */
+        virtual TPtrC GetGroupNameL( const TDesC& aGroupId, TBool& aHasCommonProps,
+                                     TEnumsPC::TImpsCSPAllErrors& aImpsError );
+        /*
+         * Get the storage type of this group and check if it is a persistent grp.
+         * If the group is marked as favourite, then it will be persistent
+         * @return ETrue if favourite else EFalse
+         */
+        virtual TBool IsFavouriteChatGroup( const TDesC& aGroupId ) const;
+
+
+        /*
+         * Get the total no. of groups the user has joined too'.
+         */
+        virtual TInt JoinedGroups();
+
+    private:
+
+        /*
+         * To convert the imps error code to the TEnumsPC type to pass in to the UI.
+         * @param integer imps error code
+         * @return TImpsCSPAllErrors specified in TEnumsPC
+         */
+        TEnumsPC::TImpsCSPAllErrors ConvertImpsErrorToUiEnums( TInt aImpsError );
+
+    private:
+
+        /**
+        * iDataInterface: a reference to searchdata interface in the chat engine
+        */
+        MCASearchInterface* iSearchInterface;
+
+        /**
+        * Does not own, do not delete
+        * iSearchObserverPC: a reference to the observer for events
+        * from MCASearchInterfacePC. MCASearchInterfacePC inturn receives
+        * the actual engine events from MCASearchObserverInterface.
+        */
+        MCASearchObserverInterfacePC* iSearchObserverPC;
+
+        /**
+        * Pointer to BackgroundObserverPC that has to be given to UI
+        */
+        MCASearchBackgroundObserverPC* iBackgroundObserver;
+
+        /**
+        * Reference to the engine's contactlist model
+        */
+        MCABackgroundInterface& iBackgroundInterface;
+
+        // SearchPairs, Owns.
+        CSearchPairs* iSearchPairs;
+
+        //Reference to the group manager interface in the engine component. Doesnt own
+        MCAGroupManagerInterface& iGroupMgrInterface;
+
+        //Pointer to stored groups interface in the storage component. Doesnt own
+        MCAStoredGroups* iStoredGroupsInterface;
+    };
+
+#endif      // CCASEARCHINTERFACEPC_H
+
+// End of File