meetingrequest/mrgui/mrfieldbuilderpluginextension/inc/cesmrclslistshandler.h
changeset 0 8466d47a6819
child 16 4ce476e64c59
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/meetingrequest/mrgui/mrfieldbuilderpluginextension/inc/cesmrclslistshandler.h	Thu Dec 17 08:39:21 2009 +0200
@@ -0,0 +1,242 @@
+/*
+* Copyright (c) 2007-2009 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:  CLS lists handler class definition
+ *
+*/
+
+#ifndef CESMRCLSLISTSHANDLER_H
+#define CESMRCLSLISTSHANDLER_H
+
+//  INCLUDES
+#include <e32base.h>
+#include <cntdef.h>                     // TContactItemId
+#include <bamdesca.h>                   // MDesCArray
+#include <CPbkContactItem.h>
+#include <CPcsDefs.h>
+
+#include "cesmrclsitem.h"
+#include "resmrstatic.h"
+
+// FORWARD DECLARATIONS
+class CPSRequestHandler;
+class CRepository;
+class CESMRClsMatchObserver;
+class CESMRInputModeObserver;
+class MESMRClsListsObserver;
+class CFSMailBox;
+class RFs;
+class CPsQuery;
+class CVPbkContactManager;
+
+// CLASS DECLARATION
+/**
+ * Handler for cls lists. Heavy array operations are wrapped here.
+ */
+NONSHARABLE_CLASS( CESMRClsListsHandler ) : public CBase
+    {
+public:
+    /**
+     * Two-phased constructor.
+     * Creates a new instance of class
+     *
+     * @param aClsListObserver reference to lists observer object.
+     * @param aMailBox reference to current mailbox item
+     * @param aFs reference to file server session
+     *
+     * @return CESMRClsListsHandler instance
+     */
+    static CESMRClsListsHandler* NewL( RFs& aFs, CVPbkContactManager* aContactManager );
+
+    /**
+     * Two-phased constructor.
+     * Creates a new instance of class and leaves it on the cleanupstack
+     *
+     * @param aClsListObserver reference to lists observer object.
+     * @param aMailBox reference to current mailbox item
+     * @param aFs reference to file server session
+     *
+     * @return CESMRClsListsHandler instance
+     */
+    static CESMRClsListsHandler* NewLC( RFs& aFs, CVPbkContactManager* aContactManager  );
+
+    /**
+     * Destructor.
+     */
+    virtual ~CESMRClsListsHandler();
+
+public: // new methods
+    /**
+     * Updates all the matching contact lists and informs the observer to update the view
+     * This method is for cls contact match observer to call.
+     *
+     * @param aMatches ids of all the matches so far.
+     */
+    void UpdateContactMatchListsL( const RPointerArray<CESMRClsItem>& aMatches );
+
+    /**
+     * This method is for input mode observer to call. Set new input mode to both matchers
+     *
+     * @param aInputMode EItut if new input mode is predictive. EQwerty if multitap
+     */
+    void InputModeChangedL( TKeyboardModes aNewInputMode );
+
+    /**
+     * Returns the text we are currently matching
+     *
+     * @return TDesC& reference to current search string
+     */
+    const TDesC& CurrentSearchText();
+
+    /**
+     * Sets new search text and either starts a search or buffers the search
+     * request.
+     *
+     * @param aText new search text.
+     */
+    void SearchMatchesL( const TDesC& aText );
+
+    /**
+     * Check if the input language is supported by search engine
+     */
+    TBool IsLanguageSupportedL();
+
+    /**
+     * Sets a MESMRClsListsObserver
+     */
+    void SetObserver( MESMRClsListsObserver* aClsListObserver );
+    
+    /**
+     * Sets mailbox to be used
+     */
+    void SetCurrentMailboxL( CFSMailBox* aMailBox );
+    
+    /**
+     * handle operation errors
+     */
+    void OperationErrorL( TInt aErrorCode );
+    
+protected:
+    /**
+     * C++ default constructor.
+     *
+     * @param aClsListObserver reference to lists observer object.
+     * @param aMailBox reference to current mailbox item
+     * @param aFs reference to file server session
+     */
+    CESMRClsListsHandler( RFs& aFs, CVPbkContactManager* aContactManager );
+
+private:
+    /**
+     * ConstructL
+     */
+    void ConstructL();
+
+    /**
+     * Reads display name & email address from current match item index from the aTextArray
+     * and writes those informations to given clsitem
+     *
+     * @param aTextArray MRU list of display names and email addresses
+     * @param aClsItem new clsitem where the information is written
+     * @param aCurrentMatchIndex index of the display name or email address that matched the search
+     * @param aPreviousMatchIndex index of the previous match. This is for checking that the item
+     *                            has not been added to the match list yet
+     *
+     * @return TBool ETrue if current item was new match. EFalse if matched item was the same as previous match
+     */
+    TBool ReadCLSInfoFromMRUListIndexL( MDesCArray& aTextArray,
+            CESMRClsItem& aClsItem,
+            const TInt aCurrentMatchIndex,
+            const TInt aPreviousMatchIndex );
+
+    /**
+     * Searches given cls item from the given list. If duplicate is found, it is returned.
+     *
+     * @param aClsItem cls item to be found from the list
+     * @param aContacts list of contacts
+     *
+     * @return index of the item, KErrNotFound if it doesn't exist
+     */
+    TInt FindDuplicate( const CESMRClsItem& aClsItem,
+                                  RPointerArray<CESMRClsItem>& aContacts );
+
+    /**
+     * Appends all the matches item from contact db and mru list to one list, which is given to ui to draw.
+     *
+     * @param aContactMatchesWithEmail list of so far matched contacts with email address
+     * @param aMRUMatches list of so far matched MRU items
+     * @param aContactMatchesWithoutEmail list of so far matched contacts without email address
+     */
+    RPointerArray<CESMRClsItem> ConstructOneListL(
+            const RPointerArray<CESMRClsItem>& aContactMatchesWithEmail,
+            const RPointerArray<CESMRClsItem>& aMRUMatches,
+            const RPointerArray<CESMRClsItem>& aContactMatchesWithoutEmail );
+
+    /**
+     * Creates new cls item and copies all the data from given cls item to the new item.
+     *
+     * @param aClsItem old cls item where the data is been copied.
+     *
+     * @return CESMRClsItem* pointer to the newly created cls item. Pointer is leaved to the
+     *                       cleanupstack as well.
+     */
+    CESMRClsItem* CopyClsItemLC( const CESMRClsItem& aClsItem );
+
+    /**
+     * Constructs MRU datastore Uri for Mailbox
+     **/
+    void GetMruDatastoreUriFromMailbox( CFSMailBox& aMailbox, HBufC& aUri );
+
+private: // Implementation
+    void SetSearchSettingsForPcsMatchObserverL();
+
+private: // data
+    // Three pointer array's for different lists
+    RPointerArray<CESMRClsItem>         iMatchingCompleteContacts;
+    RPointerArray<CESMRClsItem>         iMatchingMRUContacts;
+    RPointerArray<CESMRClsItem>         iMatchingMissingEmailContacts;
+
+    // owned
+    MDesCArray*                         iAllMRUContacts;    
+
+    // Pointer to the service instance, owned
+    CPSRequestHandler*                  iRequestHandler; 
+
+    // Pointer AknFep Central repository,  owned
+    CRepository*                        iAknFepCenRep; 
+
+    //not owned
+    CVPbkContactManager*                iContactManager;
+    
+    // Pointer to input observer,  owned
+    CESMRInputModeObserver*             iInputObserver; 
+
+    MESMRClsListsObserver*              iClsListObserver;
+    //owned
+    CESMRClsMatchObserver*              iPcsMatchObserver;
+
+    // owned
+    HBufC*                              iSearchedText; 
+
+    // Pointer to actual contact database.
+    RFs&                                iFs;
+
+    // Reference to current mailbox
+    CFSMailBox*                         iMailBox; 
+
+    TBool                               iRemoteLookupSupported;
+    };
+
+#endif  // CESMRCLSLISTSHANDLER_H
+
+// End of File