/*
* 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 the License "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:  Header file for location SAPI core implementation.
*
*/


#ifndef C_LOCATIONCOREIMP_H
#define C_LOCATIONCOREIMP_H

#include <lbs.h>
#include <lbssatellite.h>
#include "locationservice.h"


/**
 * Consts to identify the type of location request (trace, getlocation
 */

const TInt KTraceRequest = 1 ;
const TInt KGetLocationRequest = 2 ;





/**
 * This class implements Location SAPI core logic.It has  methods
 * for retreving information location asynchronusly .  
 */

class CGetLoc : public CActive
    {
    public: 

    
    
	    /**
	     * Creates a new instance of a @ref CGetLoc
	     *
	     * @param aPositionServer subsession to location server
	     * @param aRequestorInfoStack requestor indenty
	     * @param aList List of position fields that should be retrived
	     * @param aLocationInfoCategory information type required(Basic, Generic)
	     * @param aModuleId the unique id of the module which should be used to 
	     *         open the subsession with location server
	     */
	    								
		IMPORT_C static CGetLoc* NewL( RPositionServer &aPositionServer , 
									   TPositionFieldIdList aList ,
									   TInt aRequestType,
            TInt aLocationInfoCategory,
            TPositionModuleId aModuleId) ;		

	    /**
	     * Destructor.
	     */
	    virtual ~CGetLoc() ; 



    /**
     * Gets users current location Asynchronously calls the users callback 
     * function when updates are recived from location server
     * @param aLocationService pointer to the CLocationService class used in RunL
     * @param aCallBackObj callback object for updates notification
     * @param aUpdatesOptions update options for asynchronous calls
     *
     * @see TPositionUpdateOptions in LbsCommon.h for details
     */ 
    TInt GetLocationUpdates( CLocationService* aLocationService, MLocationCallBack* aCallBackObj ,
            const TPositionUpdateOptions* aUpdateOptions = NULL );

		
		void SetStatusComplete()
	    {
	    	iRequestStatus = 1;
	    }
	    TBool IsStatusComplete()
	    {
	    	if(iRequestStatus == 0)
	    		return false;
	    	else
	    		return true;
	    }	    						 
    /*
     * Returns the MLocationCallBack object pointer stored by this class
     */

    MLocationCallBack* GetCallBackobj() const
    {
    return iCallBack;  
    }					 
    				 
    protected:  

	    /**
	     * From CActive
	     */
	    void DoCancel();
	    void RunL();


	    private:  

    /**
     * By default Symbian 2nd phase constructor is private.
     * @param aPositionServer subsession to location server
     * @param aList List of position fields that should be retrived
     * @param aRequestType The type of request serviced by this Active object(GetLocation,Trace)          
     * @param aModuleId aModuleId the unique id of the module which should be used to 
	   *         open the subsession with location server
     */

    void ConstructL(RPositionServer &aPositionServer ,
            TPositionFieldIdList aList ,
            TInt aRequestType,	            
            TPositionModuleId aModuleId);
	    /**
	     * Default constructor
	     */
	     
	    CGetLoc(); 
	    TInt DoInitialiseL();

	    private:    




	    /**
	     * Class Member which holds location server subsession 
	     */
	    RPositioner iPositioner;

	    /**
	     * Basic info
	     */
	    TPositionInfo iPositionInfo;  
	           

	    /**
	     * Basic info base
	     */
	    TPositionInfoBase* iPosInfoBase;
	    /**
	     * Generic info 
	     */
	    HPositionGenericInfo *iGenericPosInfo ;
	    /**
	     * callback object
	     */
	    MLocationCallBack *iCallBack ; 
	    
	    /**
	     * Request type (Getlocation or Trace)
	     */
	    TInt iRequestType ; 
	    
	    TInt iRequestStatus;      

    /**
     * Pointer to CLocationService used in RunL()
     */
    CLocationService* iLocationService;

    };



#endif //C_LOCATIONCOREIMP_H

  			