locationdataharvester/maptileservice/inc/maptileservice.h
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Tue, 31 Aug 2010 15:09:25 +0300
branchRCL_3
changeset 17 1fc85118c3ae
permissions -rw-r--r--
Revision: 201033 Kit: 201035

/*
* Copyright (c) 2010 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: 
*     maptile service interface
*
*/

#ifndef _MAPTILESERVICE_H_
#define _MAPTILESERVICE_H_


#include <QString>
#include <QtGlobal>
#include <QObject>
#include <qmobilityglobal.h>

QTM_BEGIN_NAMESPACE
class QValueSpacePublisher;
class QValueSpaceSubscriber;
QTM_END_NAMESPACE

QTM_USE_NAMESPACE

#ifdef  MAPTILESERVICEDLL
#define MAPTILESERVICE_EXPORT Q_DECL_EXPORT
#else
#define MAPTILESERVICE_EXPORT Q_DECL_IMPORT
#endif

class TLookupItem;

// CLASS DECLARATION

/**
*  Maptile service class,  provides interface to get map tile image associated with 
*  contact. Also provides interface to check whether location feature is enabled or disabled.
*
*  Note: Location feature can be enabled or disabled by modifying conf\cntmaptileservice.confml file.
*/
class MAPTILESERVICE_EXPORT MapTileService : public QObject
{
    Q_OBJECT
public:

    /** 
     * Maptile fetching status
     */
    enum MapTileStatus
    {
        /** Map tile fetching completed */
        MapTileFetchingCompleted = 0,
        /** Map tile fetching in progress */
        MapTileFetchingInProgress,
        /** Map  tile fetching n/w error */
        MapTileFetchingNetworkError,
        /** Map tile fetching invalid address */
        MapTileFetchingInvalidAddress,
        /** Map tile fetching unknown erro */
        MapTileFetchingUnknownError
    };

    /**
     * Application types      
     */
    enum AppType
    {
        /** Contacts application */
        AppTypeContacts,
        /** Calendar application */
        AppTypeCalendar
    };
	
    /** 
     * Address types
     */
    enum AddressType      
    {
        /** Plain Address Type */
        AddressPlain,
        /** Address Type Pref */
        AddressPreference,
        /** Address type Work */
        AddressWork,
        /** Address type Home */
        AddressHome,
        /** Address type Unknown */
        AddressUnknown
    };
        
    MapTileService();
    
    ~MapTileService();
    
   /**
    * Checks whether location feature enabled or disabled for specific application.
    * 
    * @return Returns true or false based on location feature setting.
    */
    bool isLocationFeatureEnabled(AppType appType);
            
   /**
    * Gets a maptile image associated with a id(contact id/calendar id). 
    * Returns a maptile image path if it is available otherwise returns NULL.
    * 
    * @param contactId  app id     
    * @param sourceType Source address type( Preferred, Home , Work address )
    * @param imagePath  Maptile image path associated with the app id
    * @param orientation Application current orientation.   
    *      
    * @return Returns the maptile fetching status.
    */
    int getMapTileImage( int Id, AddressType sourceType, 
             QString& imagePath, Qt::Orientations orientation = Qt::Vertical  );  
    
public slots: 
    /**
     * Receives maptile status information and emits the maptilFetchingStatusUpdate
     * signal.
     */
    void setMaptileStatus();

signals:
    /**
     * Signal to update the maptile fetchings status to contact/calendar application.
     * @param id  app id     
     * @param addressType Source address type( Preferred, Home , Work address )
     * @param status Maptile status for the associated address
     */
     void maptileFetchingStatusUpdate( int id, int addressType, int status );
    

private:

    /**
     * Publish the contact entry id , AddressType and number of address
     * @param id, Contact id .
     * @param sourceType, address type( Preferred, Home , Work address )
     * @param addressCount ,number of address to be published. 
     */
    void publishValue(int id, AddressType sourceType, int addressCount );
    /**
    * Publish the calendar entry id , AddressType and number of address
    * @param id, calendar entry id .
    * @param sourceType, address type( plain) 
    * @param addressCount ,number of address to be published. 
    */
    void publishCalEntry(int id);
    
    /**
    * Read entry from database
    * @param id, Contact/calendar id .
    * @param sourceType, address type( plain ,Preferred, Home , Work address )
    * @param aLookupItem ,entry information
    * @param aNoOfAddress ,number of address read from databse 
    */
    int readEntryFromMaptileDataBase( int id, AddressType sourceType,
                TLookupItem& aLookupItem, int& aNoOfAddress  );

private:
    
    //The contact/calendar id for which maptile requested
    int mLastViewedEntryId;
	
    //Maptile request publisher
    QValueSpacePublisher *mPublisher;
    //Maptile status request subscriber
    QValueSpaceSubscriber *mSubscriber;
	//Calendar Maptile request publisher
    QValueSpacePublisher *mCalPublisher;
};

#endif //MAPTILESERVICE_H_