landmarks/locationlandmarks/multidbsearch/inc/EPos_CPosLmMultiDbSearchOperation.h
changeset 0 667063e416a2
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/multidbsearch/inc/EPos_CPosLmMultiDbSearchOperation.h	Tue Feb 02 01:06:48 2010 +0200
@@ -0,0 +1,197 @@
+/*
+* Copyright (c) 2005 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: Operation to search for landmarks or landmark categories from 
+*							 multiple databases
+*
+*/
+
+
+#ifndef CPOSLMMULTIDBSEARCHOPERATION_H
+#define CPOSLMMULTIDBSEARCHOPERATION_H
+
+//  INCLUDES
+#include <EPos_CPosLmOperation.h>
+#include "EPos_CPosLmMultiDbSortPref.h"
+
+// FORWARD DECLARATION
+class CPosLmMultiDbSearch;
+class CPosLmSearchCriteria;
+class CPosLmActiveOperation;
+
+// CLASS DECLARATION
+
+/**
+* Operation to search for landmarks or landmark categories from multiple
+* databases.
+*/
+NONSHARABLE_CLASS(CPosLmMultiDbSearchOperation) : public CPosLmOperation
+    {
+    public:  // Data types
+
+        enum TPosLmOperationStatus
+        {
+        EOperationNotStarted = 0,
+        EAsyncStarted,
+        ESyncStarted,
+        EOperationCompleted
+        };
+
+    public:  // Constructors and destructor
+
+        /**
+        * Two-phased constructor.
+        * @param aMultiDbSearch A pointer to the multi db search object.
+        * @param aCriteria The search criteria.
+        * @param aSortPref A pointer to the sort preference object. This class
+        *    takes ownership.
+        * @param aSearchOnlyPreviousMatches This flag may be used to perform a
+        *   search within the results of previous search.
+        * @return A new instance of this class.
+        */
+        static CPosLmMultiDbSearchOperation* NewL(
+        /* IN  */       CPosLmMultiDbSearch* aMultiDbSearch,
+        /* IN  */       const CPosLmSearchCriteria& aCriteria,
+        /* IN  */       CPosLmMultiDbSortPref* aSortPref,
+        /* IN  */       TBool aSearchOnlyPreviousMatches
+        );
+
+        /**
+        * Destructor.
+        */
+        virtual ~CPosLmMultiDbSearchOperation();
+
+    public: // New functions
+
+        /**
+        * This function must be called by the CPosLmMultiDbSearch class if it is
+        * deleted before the search operation has completed.
+        */
+        void HandleMultiDbSearchDeleted();
+
+        /*
+        * The callback function that is called from a CPosLmActiveOperation when
+        * an asynchronous step has been executed.
+        *
+        * @param aPtr A pointer to the CPosLmActiveOperation where a step has
+        *   been executed.
+        * @return Always returns 0.
+        */
+        static TInt OperationCallBack(TAny* aPtr);
+
+    public: // From base classes
+
+        /**
+        * From CPosLmOperation.
+        *
+        * Performs one step of the operation asynchronously.
+        *
+        * @param aStatus The request status. Will be completed when the step
+        *   has been performed. The request status will be @p KRequestPending
+        *   if the step has not completed. It will be
+        *   @p KPosLmOperationNotComplete if the step has completed but more
+        *   steps are needed before the operation has finished. The request
+        *   status will be @p KErrNone if the operation has finished
+        *   successfully.
+        * @param aProgress Will be set to the progress of the operation when the
+        *   step has finished.
+        */
+        void NextStep(
+        /* OUT */   TRequestStatus& aStatus,
+        /* OUT */   TReal32& aProgress
+        );
+
+        /**
+        * From CPosLmOperation.
+        *
+        * Synchronous execution of the operation.
+        *
+        * When this function returns, the operation has successfully finished.
+        */
+        void ExecuteL();
+
+    private:
+
+        /**
+        * C++ default constructor.
+        */
+        CPosLmMultiDbSearchOperation(
+        /* IN  */       CPosLmMultiDbSearch* aMultiDbSearch,
+        /* IN  */       TBool aSearchOnlyPreviousMatches
+        );
+
+        /**
+        * Symbian 2nd phase constructor.
+        */
+        void ConstructL(
+        /* IN  */       const CPosLmSearchCriteria& aCriteria,
+        /* IN  */       CPosLmMultiDbSortPref* aSortPref
+        );
+
+        void HandleOperationCompleted();
+        void CompleteClientRequest();
+
+        void IncrementSearchStep();
+        void IncrementIndexAndSearchStatus();
+        void IncrementSearchStatus();
+
+        void ExecuteSyncStep();
+        void ExecuteSyncStepL();
+
+        CPosLmOperation* OpenDbAndCreateInitOpL();
+        CPosLmOperation* CreateSearchOpL();
+        void AppendAsActiveOperationL(CPosLmOperation* aOperation);
+
+        void ExecuteAsyncStep();
+
+        TInt DoOperationCallBack(CPosLmActiveOperation* aActiveOp);
+
+        void CalculateProgress();
+        TReal32 CalculateSyncStepProgress();
+        TReal32 CalculateAsyncStepProgress();
+
+    private:  // Data types
+
+        enum TPosLmMultiAsyncSearchStatus
+        {
+        ESearchNotStarted = 0,
+        EOpenDbs,
+        EInitDbs,
+        ECreateSearchOps,
+        ESearchDbs,
+        ESearchCompleted
+        };
+
+    private:    // Data
+
+        CPosLmMultiDbSearch*                    iMultiDbSearch; // No ownership
+        CPosLmSearchCriteria*                   iCriteria;
+        TBool                                   iSearchOnlyPreviousMatches;
+        CPosLmMultiDbSortPref*                  iSortPref;
+
+        TUint                                   iCurrentDbIndex;
+
+        TPosLmOperationStatus                   iOperationStatus;
+
+        TPosLmMultiAsyncSearchStatus            iSearchStatus;
+        TReal32                                 iProgress;
+
+        TRequestStatus*                         iClientStatus;
+        TReal32*                                iClientProgress;
+
+        RPointerArray<CPosLmActiveOperation>    iActiveOperations;
+    };
+
+#endif      // CPOSLMMULTIDBSEARCHOPERATION_H
+
+// End of File