# HG changeset patch # User Dremov Kirill (Nokia-D-MSW/Tampere) # Date 1273841247 -10800 # Node ID cd10d5b85554939667cff8538445d269d9878115 # Parent 0f22fb80ebba3e9e9ac2e2b5110ed783f0e2ad0a Revision: 201017 Kit: 201019 diff -r 0f22fb80ebba -r cd10d5b85554 location_plat/location_data_harvester_api/inc/locationdatalookupdb.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/location_plat/location_data_harvester_api/inc/locationdatalookupdb.h Fri May 14 15:47:27 2010 +0300 @@ -0,0 +1,231 @@ +/* +* 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: defines api for lookup database. +* +*/ + + +#ifndef LOCATIONDATA_LOOKUPDB_H +#define LOCATIONDATA_LOOKUPDB_H + +// DLL_EXPORT macro definition +#ifdef BUILD_DLL +#define DLL_EXPORT Q_DECL_EXPORT +#else +#define DLL_EXPORT Q_DECL_IMPORT +#endif + + + +// INCLUDES +#include +#include + +class QSqlDatabase; +class QSqlQuery; + +class QLookupItem +{ + +public: + + enum IconType + { + /** Icon type default */ + EIconTypeDefault, + /** Icon type from gallery */ + EIconTypeGallery, + /** Icon type from flicker */ + EIconTypeFlicker, + /** Icon type from contact thumbnail */ + EIconTypeContactThumbnail, + /** Icon type maptile */ + EIconTypeMapTile + }; + +public: + // unique id of the entry + quint32 mId; + + // flag to identify if the entry is a duplicate + quint32 mIsDuplicate; + + // Uid of the source entry + quint32 mSourceUid; + + // Source type + quint32 mSourceType; + + // Dest uid in the landmarks database + quint32 mDestId; + + // name + QString mName; + + // Street + QString mStreet; + + // Postal code + QString mPostalCode; + + // City + QString mCity; + + // State + QString mState; + + // Country + QString mCountry; + + // latitude + double mLatitude; + + // longitude + double mLongitude; + + // icon type + quint32 mIconType; + + // icon path + QString mIconPath; + + // map tile path + QString mMapTilePath; +}; + +/** +* Location data lookup database class. +*/ +class DLL_EXPORT LocationDataLookupDb : public QObject +{ + +public: // Constructor + + /** + * Constructor + */ + LocationDataLookupDb( QObject *parent = 0 ); + + /** + * Destructor + */ + ~LocationDataLookupDb(); + + /** + * Opens the lookup database. + */ + bool open(); + + /** + * Closes the lookup database. + */ + void close(); + + /** + * Creates an entry in the lookup table. + * @param[in] aLookupItem The lookup item to be created in the database. + */ + void createEntry( const QLookupItem& aLookupItem ); + + /** + * Updates an entry in the lookup table. + * The source id and type is used to find the entry in db + * @param[in] aLookupItem The lookup item to be updated in the database. + */ + void updateEntryBySourceIdAndType( const QLookupItem& aLookupItem ); + + /** + * Updates an entry in the lookup table. + * The source id and type is used to find the entry in db + * @param[in] aLookupItem The lookup item to be updated in the database. + */ + void updateMaptileBySourceIdAndType( quint32 aSourceId, quint32 aSourceType, QString aImagePath ); + + /** + * Updates an entry in the lookup table. + * The id is used to find the entry in db + * @param[in] aLookupItem The lookup item to be updated in the database. + */ + void updateEntryById( const QLookupItem& aLookupItem ); + + /** + * Deletes an entry from the lookup table. + * The source id and type is used to find the entry in db + * @param[in] aLookupItem The lookup item to be deleted from the database. + */ + void deleteEntryBySourceIdAndType( const QLookupItem& aLookupItem ); + + /** + * Deletes an entry from the lookup table. + * The id is used to find the entry in db + * @param[in] aLookupItem The lookup item to be deleted from the database. + */ + void deleteEntryById( const QLookupItem& aLookupItem ); + + /** + * Finds an entry in the lookup table. + * @param[in/out] aLookupItem The lookup item to be found in the database. The source id and source type + * is passed in the lookup item. If the entry is found, all other fields are updated in the lookup item. + * @return true if found, else false + */ + bool findEntryBySourceIdAndType( QLookupItem& aLookupItem ); + + /** + * Finds an entry in the lookup table. + * @param[in/out] aLookupItem The lookup item to be found in the database. The id is passed + * in the lookup item. If the entry is found, all other fields are updated in the lookup item. + * @return true if found, else false + */ + bool findEntryById( QLookupItem& aLookupItem ); + + /** + * Finds list of lookup items given a landmark id. + * @param[in] aLandmarkId The landmark id to be found in the lookup database. + * @param[out] aLookupItemArray List of lookup entries found. + */ + void findEntriesByLandmarkId( const quint32 aLandmarkId, + QList& aLookupItemArray ); + + /** + * Finds list of lookup items given a source type. + * @param[in] aSourceType The source type to be found in the lookup database. + * @param[out] aLookupItemArray List of lookup entries found. + */ + void findEntriesBySourceType( const quint32 aSourceType, + QList& aLookupItemArray ); + + + /** + * Gets list of lookup items. + * @param[in] aCollectionId The collection id, whose whose corresponding entries needs to be fetched. + * By default all the entries in the lookup db are fetched. + * @param[out] aLookupItemArray List of lookup entries found. + */ + void getEntries( QList& aLookupItemArray, const quint32 aCollectionId = ESourceInvalid ); + + +private: + + // fills the lookup entry + void fillLookupEntry( QSqlQuery &aRecord, QLookupItem &aLookupItem ); + + // Handle to the items database + QSqlDatabase *mDb; +}; +#endif // LOCATIONDATA_LOOKUPDB_H + +// End of file + + + diff -r 0f22fb80ebba -r cd10d5b85554 location_plat/location_data_harvester_api/inc/locationservicedefines.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/location_plat/location_data_harvester_api/inc/locationservicedefines.h Fri May 14 15:47:27 2010 +0300 @@ -0,0 +1,52 @@ +/* +* 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: defines constants and types. +* +*/ + + +#ifndef LOCATIONSERVICEDEFINES_H +#define LOCATIONSERVICEDEFINES_H + +/** Defines uid source type + */ +enum TUidSourceType +{ + /** Uid Source type calendar */ + ESourceCalendar, + /** Uid Source type landmarks */ + ESourceLandmarks, + /** Uid Source type maps history */ + ESourceMapsHistory, + /** Uid Source type contacts default/prefered address */ + ESourceContactsPref, + /** Uid Source type contacts work address */ + ESourceContactsWork, + /** Uid Source type contacts home address */ + ESourceContactsHome, + /** Uid Source type landmarks category */ + ESourceLandmarksCategory, + /** Uid Source type landmarks user created category */ + ESourceLandmarksUserCat, + /** Uid Source type landmarks 'contacts' category */ + ESourceLandmarksContactsCat, + /** Uid Source type landmarks 'calendar' category */ + ESourceLandmarksCalendarCat, + /** Uid Source type maps history' category */ + ESourceLandmarksHistoryCat, + /** Source type invalid */ + ESourceInvalid +}; + +#endif // QLOCATIONPICKERITEM_H diff -r 0f22fb80ebba -r cd10d5b85554 location_plat/location_data_harvester_api/inc/maptilegeocoderplugin.h --- a/location_plat/location_data_harvester_api/inc/maptilegeocoderplugin.h Mon May 03 12:27:22 2010 +0300 +++ b/location_plat/location_data_harvester_api/inc/maptilegeocoderplugin.h Fri May 14 15:47:27 2010 +0300 @@ -22,7 +22,7 @@ // INCLUDES #include -#include +#include #include //Maptile geocoder plugin uid @@ -42,18 +42,74 @@ /** * Gets the latitude information. * - * @param aLatitude latitude value. + * @return aLatitude latitude value. */ - virtual void GetLatitude( TReal& aLatitude ) = 0; + virtual const TReal& GetLatitude( ) = 0; /** * Gets the longitude information. * - * @param aLongitude longitude value. + * @return aLongitude longitude value. */ - virtual void GetLongitude( TReal& aLongitude ) = 0; - + virtual const TReal& GetLongitude( ) = 0; + + /* + * Gets the reference to the country name. Scope of this returned reference is limited to + * this perticular call. User has to store it for their further processing. + * + * @return reference to the String which holds the Country Name. + */ + virtual const TDesC& GetCountryName()= 0; + + /* + * Gets the reference to the State. Scope of this returned reference is limited to + * this perticular call. User has to store it for their further processing. + * + * @return reference to the String which holds the State name. + */ + virtual const TDesC& GetState()= 0; + + /* + * Gets the reference to the City. Scope of this returned reference is limited to + * this perticular call. User has to store it for their further processing. + * + * @return reference to the String which holds the City Name. + */ + virtual const TDesC& GetCity()= 0; + + /* + * Gets the reference to the District name. Scope of this returned reference is limited to + * this perticular call. User has to store it for their further processing. + * + * @return reference to the String which holds the District Name. + */ + virtual const TDesC& GetDistrict()= 0; + + /* + * Gets the reference to the postal code. Scope of this returned reference is limited to + * this perticular call. User has to store it for their further processing. + * + * @return reference to the String which holds the postal code. + */ + virtual const TDesC& GetPincode()= 0; + + /* + * Gets the reference to the thoroughfare name. Scope of this returned reference is limited to + * this perticular call. User has to store it for their further processing. + * + * @return reference to the String which holds the thoroughfare name. + */ + virtual const TDesC& GetThoroughfareName()= 0; + + /* + * Gets the reference to the thoroughfare number. Scope of this returned reference is limited to + * this perticular call. User has to store it for their further processing. + * + * @return reference to the String which holds the thoroughfare number. + */ + virtual const TDesC& GetThoroughfareNumber() = 0; + }; diff -r 0f22fb80ebba -r cd10d5b85554 location_plat/location_data_harvester_api/location_data_harvester_api.pri --- a/location_plat/location_data_harvester_api/location_data_harvester_api.pri Mon May 03 12:27:22 2010 +0300 +++ b/location_plat/location_data_harvester_api/location_data_harvester_api.pri Fri May 14 15:47:27 2010 +0300 @@ -11,8 +11,10 @@ # # Contributors: # -# Description: Location picker service api project file +# Description: Location data harvester api project file # PLATFORM_HEADERS += location_data_harvester_api\inc\maptilegeocoderplugin.h \ - location_data_harvester_api\inc\maptilegeocoderplugin.inl \ No newline at end of file + location_data_harvester_api\inc\maptilegeocoderplugin.inl \ + location_data_harvester_api\inc\locationdatalookupdb.h \ + location_data_harvester_api\inc\locationservicedefines.h \ No newline at end of file diff -r 0f22fb80ebba -r cd10d5b85554 locationdataharvester/bwins/geocodeupdateu.def --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/locationdataharvester/bwins/geocodeupdateu.def Fri May 14 15:47:27 2010 +0300 @@ -0,0 +1,5 @@ +EXPORTS + ?updateGeocodeToContactDB@GeocodeUpdate@@SAXIHNN@Z @ 1 NONAME ; void GeocodeUpdate::updateGeocodeToContactDB(unsigned int, int, double, double) + ?createContactdb@GeocodeUpdate@@SAXXZ @ 2 NONAME ; void GeocodeUpdate::createContactdb(void) + ?updateGeocodeToCalenderDB@GeocodeUpdate@@SAXKNN@Z @ 3 NONAME ; void GeocodeUpdate::updateGeocodeToCalenderDB(unsigned long, double, double) + diff -r 0f22fb80ebba -r cd10d5b85554 locationdataharvester/bwins/locationdatalookupdbu.def --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/locationdataharvester/bwins/locationdatalookupdbu.def Fri May 14 15:47:27 2010 +0300 @@ -0,0 +1,19 @@ +EXPORTS + ?updateMaptileBySourceIdAndType@LocationDataLookupDb@@QAEXIIVQString@@@Z @ 1 NONAME ; void LocationDataLookupDb::updateMaptileBySourceIdAndType(unsigned int, unsigned int, class QString) + ?deleteEntryBySourceIdAndType@LocationDataLookupDb@@QAEXABVQLookupItem@@@Z @ 2 NONAME ; void LocationDataLookupDb::deleteEntryBySourceIdAndType(class QLookupItem const &) + ?deleteEntryById@LocationDataLookupDb@@QAEXABVQLookupItem@@@Z @ 3 NONAME ; void LocationDataLookupDb::deleteEntryById(class QLookupItem const &) + ?updateEntryBySourceIdAndType@LocationDataLookupDb@@QAEXABVQLookupItem@@@Z @ 4 NONAME ; void LocationDataLookupDb::updateEntryBySourceIdAndType(class QLookupItem const &) + ?getEntries@LocationDataLookupDb@@QAEXAAV?$QList@VQLookupItem@@@@I@Z @ 5 NONAME ; void LocationDataLookupDb::getEntries(class QList &, unsigned int) + ?updateEntryById@LocationDataLookupDb@@QAEXABVQLookupItem@@@Z @ 6 NONAME ; void LocationDataLookupDb::updateEntryById(class QLookupItem const &) + ??0LocationDataLookupDb@@QAE@PAVQObject@@@Z @ 7 NONAME ; LocationDataLookupDb::LocationDataLookupDb(class QObject *) + ?findEntryBySourceIdAndType@LocationDataLookupDb@@QAE_NAAVQLookupItem@@@Z @ 8 NONAME ; bool LocationDataLookupDb::findEntryBySourceIdAndType(class QLookupItem &) + ??1LocationDataLookupDb@@UAE@XZ @ 9 NONAME ; LocationDataLookupDb::~LocationDataLookupDb(void) + ?findEntriesByLandmarkId@LocationDataLookupDb@@QAEXIAAV?$QList@VQLookupItem@@@@@Z @ 10 NONAME ; void LocationDataLookupDb::findEntriesByLandmarkId(unsigned int, class QList &) + ?close@LocationDataLookupDb@@QAEXXZ @ 11 NONAME ; void LocationDataLookupDb::close(void) + ?findEntryById@LocationDataLookupDb@@QAE_NAAVQLookupItem@@@Z @ 12 NONAME ; bool LocationDataLookupDb::findEntryById(class QLookupItem &) + ?createEntry@LocationDataLookupDb@@QAEXABVQLookupItem@@@Z @ 13 NONAME ; void LocationDataLookupDb::createEntry(class QLookupItem const &) + ?fillLookupEntry@LocationDataLookupDb@@AAEXAAVQSqlQuery@@AAVQLookupItem@@@Z @ 14 NONAME ; void LocationDataLookupDb::fillLookupEntry(class QSqlQuery &, class QLookupItem &) + ?open@LocationDataLookupDb@@QAE_NXZ @ 15 NONAME ; bool LocationDataLookupDb::open(void) + ??_ELocationDataLookupDb@@UAE@I@Z @ 16 NONAME ; LocationDataLookupDb::~LocationDataLookupDb(unsigned int) + ?findEntriesBySourceType@LocationDataLookupDb@@QAEXIAAV?$QList@VQLookupItem@@@@@Z @ 17 NONAME ; void LocationDataLookupDb::findEntriesBySourceType(unsigned int, class QList &) + diff -r 0f22fb80ebba -r cd10d5b85554 locationdataharvester/eabi/geocodeupdateu.def --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/locationdataharvester/eabi/geocodeupdateu.def Fri May 14 15:47:27 2010 +0300 @@ -0,0 +1,5 @@ +EXPORTS + _ZN13GeocodeUpdate15createContactdbEv @ 1 NONAME + _ZN13GeocodeUpdate24updateGeocodeToContactDBEjidd @ 2 NONAME + _ZN13GeocodeUpdate25updateGeocodeToCalenderDBEmdd @ 3 NONAME + diff -r 0f22fb80ebba -r cd10d5b85554 locationdataharvester/eabi/locationdatalookupdbu.def --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/locationdataharvester/eabi/locationdatalookupdbu.def Fri May 14 15:47:27 2010 +0300 @@ -0,0 +1,23 @@ +EXPORTS + _ZN20LocationDataLookupDb10getEntriesER5QListI11QLookupItemEj @ 1 NONAME + _ZN20LocationDataLookupDb11createEntryERK11QLookupItem @ 2 NONAME + _ZN20LocationDataLookupDb13findEntryByIdER11QLookupItem @ 3 NONAME + _ZN20LocationDataLookupDb15deleteEntryByIdERK11QLookupItem @ 4 NONAME + _ZN20LocationDataLookupDb15fillLookupEntryER9QSqlQueryR11QLookupItem @ 5 NONAME + _ZN20LocationDataLookupDb15updateEntryByIdERK11QLookupItem @ 6 NONAME + _ZN20LocationDataLookupDb23findEntriesByLandmarkIdEjR5QListI11QLookupItemE @ 7 NONAME + _ZN20LocationDataLookupDb23findEntriesBySourceTypeEjR5QListI11QLookupItemE @ 8 NONAME + _ZN20LocationDataLookupDb26findEntryBySourceIdAndTypeER11QLookupItem @ 9 NONAME + _ZN20LocationDataLookupDb28deleteEntryBySourceIdAndTypeERK11QLookupItem @ 10 NONAME + _ZN20LocationDataLookupDb28updateEntryBySourceIdAndTypeERK11QLookupItem @ 11 NONAME + _ZN20LocationDataLookupDb30updateMaptileBySourceIdAndTypeEjj7QString @ 12 NONAME + _ZN20LocationDataLookupDb4openEv @ 13 NONAME + _ZN20LocationDataLookupDb5closeEv @ 14 NONAME + _ZN20LocationDataLookupDbC1EP7QObject @ 15 NONAME + _ZN20LocationDataLookupDbC2EP7QObject @ 16 NONAME + _ZN20LocationDataLookupDbD0Ev @ 17 NONAME + _ZN20LocationDataLookupDbD1Ev @ 18 NONAME + _ZN20LocationDataLookupDbD2Ev @ 19 NONAME + _ZTI20LocationDataLookupDb @ 20 NONAME + _ZTV20LocationDataLookupDb @ 21 NONAME + diff -r 0f22fb80ebba -r cd10d5b85554 locationdataharvester/geocodeupdate/bwins/geocodeupdate.def --- a/locationdataharvester/geocodeupdate/bwins/geocodeupdate.def Mon May 03 12:27:22 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,4 +0,0 @@ -EXPORTS - ?UpDate@GeocodeUpdate@@SAXJJNN@Z @ 1 NONAME ; void GeocodeUpdate::UpDate(long, long, double, double) - ?CreateContactdb@GeocodeUpdate@@SAXXZ @ 2 NONAME ; void GeocodeUpdate::CreateContactdb(void) - diff -r 0f22fb80ebba -r cd10d5b85554 locationdataharvester/geocodeupdate/eabi/geocodeupdate.def --- a/locationdataharvester/geocodeupdate/eabi/geocodeupdate.def Mon May 03 12:27:22 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,4 +0,0 @@ -EXPORTS - _ZN13GeocodeUpdate15CreateContactdbEv @ 1 NONAME - _ZN13GeocodeUpdate6UpDateElldd @ 2 NONAME - diff -r 0f22fb80ebba -r cd10d5b85554 locationdataharvester/geocodeupdate/geocodeupdate.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/locationdataharvester/geocodeupdate/geocodeupdate.pro Fri May 14 15:47:27 2010 +0300 @@ -0,0 +1,56 @@ +# +# 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: +# +# + +TEMPLATE = lib +TARGET = geocodeupdate + +CONFIG += dll +CONFIG += Qt + +DEPENDPATH += . +INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE + +# Input +# Input +HEADERS += ./inc/geocodeupdate.h \ + ../mylocationlogger/inc \ + ../inc +SOURCES +=./src/geocodeupdate.cpp + +symbian: +{ + TARGET.EPOCALLOWDLLDATA = 1 + TARGET.CAPABILITY = All -Tcb + TARGET.UID3 = 0x2002C3A9 + deploy.path = $$EPOCROOT + exportheaders.sources = $$PUBLIC_HEADERS + exportheaders.path = epoc32/include + DEPLOYMENT += exportheaders + + qtAddLibrary(QtContacts) + LIBS += -lcntmodel \ + -lagendainterface \ + -leuser \ + -lestor \ + -lflogger + + +} +# End of file --Don't remove this. \ No newline at end of file diff -r 0f22fb80ebba -r cd10d5b85554 locationdataharvester/geocodeupdate/group/bld.inf --- a/locationdataharvester/geocodeupdate/group/bld.inf Mon May 03 12:27:22 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,26 +0,0 @@ -/* -* 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: -* -*/ - -PRJ_PLATFORMS -DEFAULT - -PRJ_EXPORTS - -PRJ_MMPFILES -geocodeupdate.mmp - - diff -r 0f22fb80ebba -r cd10d5b85554 locationdataharvester/geocodeupdate/group/geocodeupdate.mmp --- a/locationdataharvester/geocodeupdate/group/geocodeupdate.mmp Mon May 03 12:27:22 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,111 +0,0 @@ -/* -* 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: -* -*/ - -TARGET geocodeupdate.dll -TARGETTYPE dll -UID 0x1000008d 0x2002C3A9 -SECUREID 0x2002C3A9 - - - -EPOCALLOWDLLDATA -USERINCLUDE ../inc -USERINCLUDE ../../inc -USERINCLUDE ../../mylocationlogger/inc - - - -// Qt Macros -MACRO UNICODE -MACRO QT_KEYPAD_NAVIGATION -MACRO QT_SOFTKEYS_ENABLED -MACRO QT_USE_MATH_H_FLOATS -MACRO QT_NO_DEBUG -MACRO QT_GUI_LIB -MACRO QT_CORE_LIB - -SYSTEMINCLUDE /epoc32/include/mw/QtCore -SYSTEMINCLUDE /epoc32/include/mw/QtNetwork -SYSTEMINCLUDE /epoc32/include/mw/QtGui -SYSTEMINCLUDE /epoc32/include/mw -SYSTEMINCLUDE /epoc32/include -SYSTEMINCLUDE /epoc32/include/stdapis -SYSTEMINCLUDE /epoc32/include/stdapis/sys -SYSTEMINCLUDE /epoc32/include/platform/mw -SYSTEMINCLUDE /epoc32/include/platform -SYSTEMINCLUDE /epoc32/include/app -SYSTEMINCLUDE /epoc32/include/platform/app -SYSTEMINCLUDE /epoc32/include/platform/loc -SYSTEMINCLUDE /epoc32/include/platform/mw/loc -SYSTEMINCLUDE /epoc32/include/platform/app/loc -SYSTEMINCLUDE /epoc32/include/platform/loc/sc -SYSTEMINCLUDE /epoc32/include/platform/mw/loc/sc -SYSTEMINCLUDE /epoc32/include/platform/app/loc/sc -SYSTEMINCLUDE /epoc32/include/stdapis/stlportv5 - -SOURCEPATH ../src -SOURCE geocodeupdate.cpp - -LIBRARY QtContacts.lib -LIBRARY cntmodel.lib -LIBRARY euser.lib -LIBRARY efsrv.lib -LIBRARY edbms.lib -LIBRARY bafl.lib - - - -LIBRARY QtCore.lib -LIBRARY libstdcppv5.lib -LIBRARY libc.lib -LIBRARY libm.lib -LIBRARY libdl.lib -LIBRARY cone.lib -LIBRARY eikcore.lib -LIBRARY mediaclientaudio.lib -LIBRARY eikcoctl.lib -LIBRARY eiksrv.lib -LIBRARY apparc.lib -LIBRARY avkon.lib -LIBRARY charconv.lib -LIBRARY ws32.lib -LIBRARY hal.lib -LIBRARY gdi.lib -LIBRARY apgrfx.lib -LIBRARY flogger.lib - -nostrictdef - -CAPABILITY All -Tcb - -OPTION CW -wchar_t on -OPTION ARMCC --visibility_inlines_hidden - -VERSION 10.0 - -PAGED - -OPTION_REPLACE ARMCC --export_all_vtbl //-D__QT_NOEFFECTMACRO_DONOTUSE - -#if defined(ARMCC) && !defined(ARMCC_2_2) && !defined(ARMCC_3_1) -OPTION ARMCC --import_all_vtbl -#endif - -STDCPP - -DEFFILE geocodeupdate.def - diff -r 0f22fb80ebba -r cd10d5b85554 locationdataharvester/geocodeupdate/inc/geocodeupdate.h --- a/locationdataharvester/geocodeupdate/inc/geocodeupdate.h Mon May 03 12:27:22 2010 +0300 +++ b/locationdataharvester/geocodeupdate/inc/geocodeupdate.h Fri May 14 15:47:27 2010 +0300 @@ -19,33 +19,41 @@ #define __GEOCODEUPDATE_H__ #include +#include // CLASS DECLARATION /** - * CntGeocodeUpdate, a class to update latitude and longtude into contact database - * for a perticular contact. + * GeocodeUpdate, a class to update latitude and longtude into contact and calender database */ class GeocodeUpdate { public: /** - * Request to create contactmanager , - * contactmanager will create contact db. + Create contact database */ - IMPORT_C static void CreateContactdb(); + IMPORT_C static void createContactdb(); /** - * Request to update latitude and longitude. * - * @param aCntId contact unique id - * @param aLatitude Latitude to be saved - * @param aLongitude longitude to be saved - * @return Status code (0 is failure,1 success) + * Request to update latitude and longitude into contact db. + * @param contactId contact unique id. + * @param addressType contact address type. + * @param latitude Latitude to be updated. + * @param longitude longitude to be updated. */ - IMPORT_C static void UpDate(const TInt32 aCntId, - const TInt32 aCntAddressType, const TReal aLatitude, - const TReal aLongitude); + IMPORT_C static void updateGeocodeToContactDB(const quint32 contactId, + const int addressType, const double latitude, + const double longitude); + /** + * Request to update latitude and longitude into calender db. + * @param calEntryId calender entry unique id + * @param latitude Latitude to be updated. + * @param longitude longitude to be updated. + */ + + IMPORT_C static void updateGeocodeToCalenderDB(const ulong calEntryId, + const double latitude, const double longitude); }; #endif // __GEOCODEUPDATE_H__ diff -r 0f22fb80ebba -r cd10d5b85554 locationdataharvester/geocodeupdate/src/geocodeupdate.cpp --- a/locationdataharvester/geocodeupdate/src/geocodeupdate.cpp Mon May 03 12:27:22 2010 +0300 +++ b/locationdataharvester/geocodeupdate/src/geocodeupdate.cpp Fri May 14 15:47:27 2010 +0300 @@ -19,7 +19,10 @@ #include #include #include -#include +#include +#include +#include +#include #include "geocodeupdate.h" #include "mylocationsdefines.h" @@ -27,9 +30,9 @@ using namespace QTM_NAMESPACE; // ---------------------------------------------------------------------------- -// CGeocodeUpdate::CreateContactdb() +// GeocodeUpdate::createContactdb() // ---------------------------------------------------------------------------- -EXPORT_C void GeocodeUpdate::CreateContactdb() +EXPORT_C void GeocodeUpdate::createContactdb() { QContactManager* contactManger = NULL; MYLOCLOGSTRING("call to create contactManger object and contactdb as well."); @@ -38,12 +41,12 @@ } // ---------------------------------------------------------------------------- -// CGeocodeUpdate::UpDateL() -// To update contact db with this latitude and longitude value +// CGeocodeUpdate::updateGeocodeToContactDB() +// Geo-cordinate updation to contact db // ---------------------------------------------------------------------------- -EXPORT_C void GeocodeUpdate::UpDate(const TInt32 aCntId, - const TInt32 aCntAddressType, const TReal aLatitude, - const TReal aLongitude) +EXPORT_C void GeocodeUpdate::updateGeocodeToContactDB(const quint32 contactId, + const int addressType, const double latitude, + const double longitude) { __TRACE_CALLSTACK; @@ -54,10 +57,10 @@ MYLOCLOGSTRING("contactManger object is not null ."); QStringList definitionRestrictions; - QContact contact = contactManger->contact(aCntId ,definitionRestrictions); + QContact contact = contactManger->contact(contactId ,definitionRestrictions); QContactGeoLocation location; - switch (aCntAddressType) + switch (addressType) { case ESourceContactsPref: { @@ -78,12 +81,30 @@ break; } } - location.setLongitude(aLongitude); - location.setLatitude(aLatitude); + location.setLongitude(longitude); + location.setLatitude(latitude); contact.saveDetail(&location); contactManger->saveContact(&contact); delete contactManger; } +// ---------------------------------------------------------------------------- +// CGeocodeUpdate::updateGeocodeToCalenderDB() +// Geo-cordinate updation to contact db +// ---------------------------------------------------------------------------- +EXPORT_C void GeocodeUpdate::updateGeocodeToCalenderDB(const ulong calEntryId, + const double latitude, const double longitude) + +{ + __TRACE_CALLSTACK; + AgendaUtil agendaUtil; + AgendaEntry agendaEntry (agendaUtil.fetchById(calEntryId)); + MYLOCLOGSTRING("agenda entry created from calender id ."); + AgendaGeoValue geoValue; + geoValue.setLatLong(latitude,longitude); + MYLOCLOGSTRING("latitude and longitude set to AgendaGeoValue object."); + agendaEntry.setGeoValue(geoValue); + agendaUtil.updateEntry(agendaEntry); +} //end of line diff -r 0f22fb80ebba -r cd10d5b85554 locationdataharvester/inc/mylocationsdefines.h --- a/locationdataharvester/inc/mylocationsdefines.h Mon May 03 12:27:22 2010 +0300 +++ b/locationdataharvester/inc/mylocationsdefines.h Fri May 14 15:47:27 2010 +0300 @@ -40,33 +40,12 @@ TFileName iFilePath; }; -/** Defines uid source type - */ -enum TUidSourceType -{ - /** Uid Source type calendar */ - ESourceCalendar=0, - /** Uid Source type landmarks */ - ESourceLandmarks, - /** Uid Source type maps history */ - ESourceMapsHistory, - /** Uid Source type contacts default/prefered address */ - ESourceContactsPref, - /** Uid Source type contacts work address */ - ESourceContactsWork, - /** Uid Source type contacts home address */ - ESourceContactsHome, - /** Uid Source type landmarks category */ - ESourceLandmarksCategory, - /** Uid Source type landmarks user created category */ - ESourceLandmarksUserCat, - /** Uid Source type landmarks 'contacts' category */ - ESourceLandmarksContactsCat, - /** Uid Source type landmarks 'calendar' category */ - ESourceLandmarksCalendarCat, - /** Uid Source type maps history' category */ - ESourceLandmarksHistoryCat -}; + +// contacts category in landmarks db +_LIT( KContactsCategory, "Contacts" ); + +// calendar category in landmarks db +_LIT( KCalendarCategory, "Calendar" ); // lookup database folder path _LIT( KLookupDbPath, "c:\\mylocations\\" ); @@ -119,6 +98,8 @@ // source type column number const TInt KColumnFilePath = 3; +const TInt KBufSize=256; + #endif // __MYLOCATIONSDEFINES_H__ // End of file diff -r 0f22fb80ebba -r cd10d5b85554 locationdataharvester/locationdataharvester.pro --- a/locationdataharvester/locationdataharvester.pro Mon May 03 12:27:22 2010 +0300 +++ b/locationdataharvester/locationdataharvester.pro Fri May 14 15:47:27 2010 +0300 @@ -20,13 +20,9 @@ TEMPLATE = subdirs -SUBDIRS = maptileservice +SUBDIRS = locationdatalookupdb maptileservice geocodeupdate mylocationsengine -# Build.inf rules -BLD_INF_RULES.prj_exports += "./mylocationsengine/loc/mylocations.loc APP_LAYER_LOC_EXPORT_PATH(mylocations.loc)" -BLD_INF_RULES.prj_mmpfiles = "./geocodeupdate/group/geocodeupdate.mmp" \ - "./mylocationsengine/group/mylocationsengine.mmp" # Exports deploy.path = / diff -r 0f22fb80ebba -r cd10d5b85554 locationdataharvester/locationdatalookupdb/locationdatalookupdb.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/locationdataharvester/locationdatalookupdb/locationdatalookupdb.cpp Fri May 14 15:47:27 2010 +0300 @@ -0,0 +1,485 @@ +/* +* 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: Location data lookup db implementation +* +*/ + +// INCLUDE FILES +#include "locationdatalookupdb.h" +#include +#include +#include +#include +#include +#include + +// database name +const QString KLocationDataLookupDbName = "c:\\locationdatalookupdb.db"; + +// ================= MEMBER FUNCTIONS ======================= +// +// --------------------------------------------------------- +// LocationDataLookupDb::LocationDataLookupDb() +// Constructor +// --------------------------------------------------------- +// +LocationDataLookupDb::LocationDataLookupDb( QObject *parent) : QObject(parent) +{ + mDb = new QSqlDatabase(); + *mDb = QSqlDatabase::addDatabase( "QSQLITE" ); + mDb->setDatabaseName( KLocationDataLookupDbName ); + if (!mDb->open()) + { + delete mDb; + mDb = NULL; + return; + } + + // create lookup table if doesnot exist + QSqlQuery query(*mDb); + query.exec("create table if not exists lplookup (id INTEGER PRIMARY KEY AUTOINCREMENT," + "duplicate int," + "sourceid int," + "sourcetype int," + "destid int," + "name varchar(255)," + "street varchar(255)," + "postal varchar(50)," + "city varchar(50)," + "state varchar(50)," + "country varchar(50)," + "latitude double," + "longitude double," + "icontype int," + "iconpath varchar(255)," + "maptile varchar(255))"); + + mDb->close(); +} + +// --------------------------------------------------------- +// LocationDataLookupDb::~LocationDataLookupDb() +// destructor +// --------------------------------------------------------- +LocationDataLookupDb::~LocationDataLookupDb() +{ + if( mDb ) + delete mDb; +} + +// --------------------------------------------------------- +// LocationDataLookupDb::open() +// --------------------------------------------------------- +bool LocationDataLookupDb::open() +{ + return mDb->open(); +} + +// --------------------------------------------------------- +// LocationDataLookupDb::close() +// --------------------------------------------------------- +void LocationDataLookupDb::close() +{ + if( mDb ) + mDb->close(); +} + +// --------------------------------------------------------- +// LocationDataLookupDb::createEntry() +// --------------------------------------------------------- +void LocationDataLookupDb::createEntry( const QLookupItem& aLookupItem ) +{ + if( mDb ) + { + QSqlQuery query(*mDb); + query.prepare("INSERT INTO lplookup (" + "id, " + "duplicate, " + "sourceid, " + "sourcetype, " + "destid, " + "name, " + "street, " + "postal, " + "city, " + "state, " + "country, " + "latitude, " + "longitude, " + "icontype, " + "iconpath, " + "maptile) " + "VALUES (" + "NULL, " + ":duplicate, " + ":sourceid, " + ":sourcetype, " + ":destid, " + ":name, " + ":street, " + ":postal, " + ":city, " + ":state, " + ":country, " + ":latitude, " + ":longitude, " + ":icontype, " + ":iconpath, " + ":maptile)" ); + query.bindValue(":duplicate", aLookupItem.mIsDuplicate); + query.bindValue(":sourceid", aLookupItem.mSourceUid); + query.bindValue(":sourcetype", aLookupItem.mSourceType); + query.bindValue(":destid", aLookupItem.mDestId); + query.bindValue(":name", aLookupItem.mName); + query.bindValue(":street", aLookupItem.mStreet); + query.bindValue(":postal", aLookupItem.mPostalCode); + query.bindValue(":city", aLookupItem.mCity); + query.bindValue(":state", aLookupItem.mState); + query.bindValue(":country", aLookupItem.mCountry); + query.bindValue(":latitude", aLookupItem.mLatitude); + query.bindValue(":longitude", aLookupItem.mLongitude); + query.bindValue(":icontype", aLookupItem.mIconType); + query.bindValue(":iconpath", aLookupItem.mIconPath); + query.bindValue(":maptile", aLookupItem.mMapTilePath); + query.exec(); + } +} + +// --------------------------------------------------------- +// LocationDataLookupDb::updateEntryBySourceIdAndType() +// --------------------------------------------------------- +void LocationDataLookupDb::updateEntryBySourceIdAndType( const QLookupItem& aLookupItem ) +{ + if( mDb ) + { + QSqlQuery query(*mDb); + query.prepare("UPDATE lplookup SET " + "id = ?, " + "duplicate = ?, " + "sourceid = ?, " + "sourcetype = ?, " + "destid = ?, " + "name = ?, " + "street = ?, " + "postal = ?, " + "city = ?, " + "state = ?, " + "country = ?, " + "latitude = ?, " + "longitude = ?, " + "icontype = ?, " + "iconpath = ?, " + "maptile = ? " + "WHERE sourceid = ? AND sourcetype = ?"); + + query.addBindValue( aLookupItem.mId ); + query.addBindValue( aLookupItem.mIsDuplicate ); + query.addBindValue( aLookupItem.mSourceUid ); + query.addBindValue( aLookupItem.mSourceType ); + query.addBindValue( aLookupItem.mDestId ); + query.addBindValue( aLookupItem.mName ); + query.addBindValue( aLookupItem.mStreet ); + query.addBindValue( aLookupItem.mPostalCode ); + query.addBindValue( aLookupItem.mCity ); + query.addBindValue( aLookupItem.mState ); + query.addBindValue( aLookupItem.mCountry ); + query.addBindValue( aLookupItem.mLatitude ); + query.addBindValue( aLookupItem.mLongitude ); + query.addBindValue( aLookupItem.mIconType ); + query.addBindValue( aLookupItem.mIconPath ); + query.addBindValue( aLookupItem.mMapTilePath ); + + query.addBindValue( aLookupItem.mSourceUid ); + query.addBindValue( aLookupItem.mSourceType ); + + query.exec(); + } +} + +// --------------------------------------------------------- +// LocationDataLookupDb::updateMaptileBySourceIdAndType() +// --------------------------------------------------------- +void LocationDataLookupDb::updateMaptileBySourceIdAndType( quint32 aSourceId, + quint32 aSourceType, QString aImagePath ) +{ + if( mDb ) + { + QSqlQuery query(*mDb); + query.prepare("UPDATE lplookup SET " + "maptile = ? " + "WHERE sourceid = ? AND sourcetype = ?"); + + query.addBindValue( aImagePath ); + query.addBindValue( aSourceId ); + query.addBindValue( aSourceType ); + + query.exec(); + } +} + +// --------------------------------------------------------- +// LocationDataLookupDb::updateEntryById() +// --------------------------------------------------------- +void LocationDataLookupDb::updateEntryById( const QLookupItem& aLookupItem ) +{ + if( mDb ) + { + QSqlQuery query(*mDb); + query.prepare("UPDATE lplookup SET " + "id = ?, " + "duplicate = ?, " + "sourceid = ?, " + "sourcetype = ?, " + "destid = ?, " + "name = ?, " + "street = ?, " + "postal = ?, " + "city = ?, " + "state = ?, " + "country = ?, " + "latitude = ?, " + "longitude = ?, " + "icontype = ?, " + "iconpath = ?, " + "maptile = ? " + "WHERE id = ?"); + + query.addBindValue( aLookupItem.mId ); + query.addBindValue( aLookupItem.mIsDuplicate ); + query.addBindValue( aLookupItem.mSourceUid ); + query.addBindValue( aLookupItem.mSourceType ); + query.addBindValue( aLookupItem.mDestId ); + query.addBindValue( aLookupItem.mName ); + query.addBindValue( aLookupItem.mStreet ); + query.addBindValue( aLookupItem.mPostalCode ); + query.addBindValue( aLookupItem.mCity ); + query.addBindValue( aLookupItem.mState ); + query.addBindValue( aLookupItem.mCountry ); + query.addBindValue( aLookupItem.mLatitude ); + query.addBindValue( aLookupItem.mLongitude ); + query.addBindValue( aLookupItem.mIconType ); + query.addBindValue( aLookupItem.mIconPath ); + query.addBindValue( aLookupItem.mMapTilePath ); + + query.addBindValue( aLookupItem.mId ); + + query.exec(); + } +} + +// --------------------------------------------------------- +// LocationDataLookupDb::deleteEntryBySourceIdAndType() +// --------------------------------------------------------- +void LocationDataLookupDb::deleteEntryBySourceIdAndType( const QLookupItem& aLookupItem ) +{ + if( mDb ) + { + QSqlQuery query(*mDb); + query.prepare( "DELETE FROM lplookup " + "WHERE sourceid = ? AND sourcetype = ?" ); + + query.addBindValue( aLookupItem.mSourceUid ); + query.addBindValue( aLookupItem.mSourceType ); + + query.exec(); + } +} + +// --------------------------------------------------------- +// LocationDataLookupDb::deleteEntryById() +// --------------------------------------------------------- +void LocationDataLookupDb::deleteEntryById( const QLookupItem& aLookupItem ) +{ + if( mDb ) + { + QSqlQuery query(*mDb); + query.prepare( "DELETE FROM lplookup " + "WHERE id = ?" ); + + query.addBindValue( aLookupItem.mId ); + query.exec(); + } +} + +// --------------------------------------------------------- +// LocationDataLookupDb::findEntryBySourceIdAndType() +// --------------------------------------------------------- +bool LocationDataLookupDb::findEntryBySourceIdAndType( QLookupItem& aLookupItem ) +{ + if( mDb ) + { + QSqlQuery query(*mDb); + query.prepare( "SELECT * FROM lplookup " + "WHERE sourceid = ? AND sourcetype = ?" ); + query.addBindValue( aLookupItem.mSourceUid ); + query.addBindValue( aLookupItem.mSourceType ); + + query.exec(); + + if( !query.first() ) + { + return false; + } + + fillLookupEntry( query, aLookupItem ); + return true; + } + return false; +} + +// --------------------------------------------------------- +// LocationDataLookupDb::findEntryById() +// --------------------------------------------------------- +bool LocationDataLookupDb::findEntryById( QLookupItem& aLookupItem ) +{ + if( mDb ) + { + QSqlQuery query(*mDb); + query.prepare( "SELECT * FROM lplookup " + "WHERE id = ?" ); + query.addBindValue( aLookupItem.mId ); + + query.exec(); + + if( !query.first() ) + { + return false; + } + + fillLookupEntry( query, aLookupItem ); + return true; + } + + return false; +} + + +// --------------------------------------------------------- +// LocationDataLookupDb::findEntriesByLandmarkId() +// --------------------------------------------------------- +void LocationDataLookupDb::findEntriesByLandmarkId( const quint32 aLandmarkId, + QList& aLookupItemArray ) +{ + if( mDb ) + { + + QSqlQuery query(*mDb); + query.prepare( "SELECT * FROM lplookup " + "WHERE destid = ?" ); + + query.addBindValue( aLandmarkId ); + query.exec(); + + while( query.next() ) + { + QLookupItem lookupItem; + fillLookupEntry( query, lookupItem ); + aLookupItemArray.append( lookupItem ); + } + } +} + +// --------------------------------------------------------- +// LocationDataLookupDb::findEntriesBySourceType() +// --------------------------------------------------------- +void LocationDataLookupDb::findEntriesBySourceType( const quint32 aSourceType, + QList& aLookupItemArray ) +{ + if( mDb ) + { + QSqlQuery query(*mDb); + query.prepare( "SELECT * FROM lplookup " + "WHERE sourceType = ?" ); + query.addBindValue( aSourceType ); + query.exec(); + + while( query.next() ) + { + QLookupItem lookupItem; + fillLookupEntry( query, lookupItem ); + aLookupItemArray.append( lookupItem ); + } + } +} + +// --------------------------------------------------------- +// LocationDataLookupDb::getEntries() +// --------------------------------------------------------- +void LocationDataLookupDb::getEntries( QList& aLookupItemArray, const quint32 aCollectionId ) +{ + if( mDb ) + { + QSqlQuery query(*mDb); + if( aCollectionId == ESourceLandmarksContactsCat ) + { + query.prepare( "SELECT * FROM lplookup " + "WHERE sourcetype = ? OR sourcetype = ? OR sourcetype = ?" ); + query.addBindValue( ESourceContactsPref ); + query.addBindValue( ESourceContactsWork ); + query.addBindValue( ESourceContactsHome ); + query.exec(); + } + else if( aCollectionId == ESourceLandmarksCalendarCat ) + { + query.prepare( "SELECT * FROM lplookup " + "WHERE sourcetype = ?" ); + query.addBindValue( ESourceCalendar ); + query.exec(); + + } + else if( aCollectionId == ESourceLandmarks ) + { + query.prepare( "SELECT * FROM lplookup " + "WHERE sourcetype = ?" ); + query.addBindValue( ESourceLandmarks ); + query.exec(); + + } + else // all contents + { + query.prepare( "SELECT * FROM lplookup" ); + query.exec(); + } + while( query.next() ) + { + QLookupItem lookupItem; + fillLookupEntry( query, lookupItem ); + aLookupItemArray.append( lookupItem ); + } + } +} + +void LocationDataLookupDb::fillLookupEntry( QSqlQuery &aQuery, QLookupItem &aLookupItem ) +{ + QSqlRecord rec = aQuery.record(); + aLookupItem.mId = aQuery.value( rec.indexOf("id") ).toUInt(); + aLookupItem.mIsDuplicate = aQuery.value( rec.indexOf("duplicate") ).toUInt(); + aLookupItem.mSourceUid = aQuery.value( rec.indexOf("sourceid") ).toUInt(); + aLookupItem.mSourceType = aQuery.value( rec.indexOf("sourcetype") ).toUInt(); + aLookupItem.mDestId = aQuery.value( rec.indexOf("destid") ).toUInt(); + aLookupItem.mName = aQuery.value( rec.indexOf("name") ).toString(); + aLookupItem.mStreet = aQuery.value( rec.indexOf("street") ).toString(); + aLookupItem.mPostalCode = aQuery.value( rec.indexOf("postal") ).toString(); + aLookupItem.mCity = aQuery.value( rec.indexOf("city") ).toString(); + aLookupItem.mState = aQuery.value( rec.indexOf("state") ).toString(); + aLookupItem.mCountry = aQuery.value( rec.indexOf("country") ).toString(); + aLookupItem.mLatitude = aQuery.value( rec.indexOf("latitude") ).toDouble(); + aLookupItem.mLongitude = aQuery.value( rec.indexOf("longitude") ).toDouble(); + aLookupItem.mIconType = aQuery.value( rec.indexOf("icontype") ).toUInt(); + aLookupItem.mIconPath = aQuery.value( rec.indexOf("iconpath") ).toString(); + aLookupItem.mMapTilePath = aQuery.value( rec.indexOf("maptile") ).toString(); + +} + +// End of file diff -r 0f22fb80ebba -r cd10d5b85554 locationdataharvester/locationdatalookupdb/locationdatalookupdb.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/locationdataharvester/locationdatalookupdb/locationdatalookupdb.pro Fri May 14 15:47:27 2010 +0300 @@ -0,0 +1,37 @@ +# +# 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: Location data lookup db project file + +TEMPLATE = lib +DEPENDPATH += . +INCLUDEPATH += . + +# By default Qt adds dependencies to QtCore and QtGui, +# QtCore is enough for this example +#QT = core +QT += sql + +#BUILD_DLL macro is used to define export macro +DEFINES += BUILD_DLL + + +SOURCES += locationdatalookupdb.cpp + +symbian: { + TARGET.UID3 = 0x2002E714 + TARGET.EPOCALLOWDLLDATA = 1 +TARGET.CAPABILITY = ALL \ + -TCB +} + diff -r 0f22fb80ebba -r cd10d5b85554 locationdataharvester/maptileservice/src/maptileservice.cpp --- a/locationdataharvester/maptileservice/src/maptileservice.cpp Mon May 03 12:27:22 2010 +0300 +++ b/locationdataharvester/maptileservice/src/maptileservice.cpp Fri May 14 15:47:27 2010 +0300 @@ -27,9 +27,6 @@ const TUid KUidMapTileInterface = { 0x2002E6E8 }; // Central Repository Key IDs const TInt KEnableLocationFeature = 0x1; -const TInt KLocationFeatureAppContacts = 0x1; -const TInt KLocationFeatureAppCalendar = 0x2; - // ----------------------------------------------------------------------------- // MapTileService::isLocationFeatureEnabled() diff -r 0f22fb80ebba -r cd10d5b85554 locationdataharvester/maptileservice/tsrc/ut_maptileservice/ut_maptileservice.cpp --- a/locationdataharvester/maptileservice/tsrc/ut_maptileservice/ut_maptileservice.cpp Mon May 03 12:27:22 2010 +0300 +++ b/locationdataharvester/maptileservice/tsrc/ut_maptileservice/ut_maptileservice.cpp Fri May 14 15:47:27 2010 +0300 @@ -1,5 +1,5 @@ /* -* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* 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" @@ -11,9 +11,10 @@ * * Contributors: * -* Description: +* Description: maptile service unit test cases * */ + #include #include #include diff -r 0f22fb80ebba -r cd10d5b85554 locationdataharvester/maptileservice/tsrc/ut_maptileservice/ut_maptileservice.pro --- a/locationdataharvester/maptileservice/tsrc/ut_maptileservice/ut_maptileservice.pro Mon May 03 12:27:22 2010 +0300 +++ b/locationdataharvester/maptileservice/tsrc/ut_maptileservice/ut_maptileservice.pro Fri May 14 15:47:27 2010 +0300 @@ -1,18 +1,19 @@ -# -# Copyright (c) 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: -# +/* +* 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 unit test case pro file +* +*/ TEMPLATE = app QT += testlib diff -r 0f22fb80ebba -r cd10d5b85554 locationdataharvester/mylocationsengine/data/mylocations.rss --- a/locationdataharvester/mylocationsengine/data/mylocations.rss Mon May 03 12:27:22 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,43 +0,0 @@ -/* -* 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: mylocation engine registeration file. -* -*/ - -// INCLUDES -#include -#include - -// RESOURCE SIGNATURE -RESOURCE RSS_SIGNATURE { } - -// RESOURCE DEFINITIONS -RESOURCE LBUF r_locint_list_title_myloc - { - txt=qtn_locint_list_title_myloc; - } -RESOURCE LBUF r_locint_list_category_history - { - txt=qtn_locint_list_category_history; - } -RESOURCE LBUF r_locint_list_category_contacts - { - txt=qtn_locint_list_category_others; - } -RESOURCE LBUF r_locint_list_category_calendar - { - txt=qtn_locint_list_category_others; - } - -//end of file \ No newline at end of file diff -r 0f22fb80ebba -r cd10d5b85554 locationdataharvester/mylocationsengine/group/bld.inf --- a/locationdataharvester/mylocationsengine/group/bld.inf Mon May 03 12:27:22 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,25 +0,0 @@ -/* -* 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: bld.inf for mylocationengine -* -*/ - -PRJ_PLATFORMS -DEFAULT - -PRJ_EXPORTS -../loc/mylocations.loc APP_LAYER_LOC_EXPORT_PATH(mylocations.loc) - -PRJ_MMPFILES -mylocationsengine.mmp diff -r 0f22fb80ebba -r cd10d5b85554 locationdataharvester/mylocationsengine/group/mylocationsengine.mmp --- a/locationdataharvester/mylocationsengine/group/mylocationsengine.mmp Mon May 03 12:27:22 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,93 +0,0 @@ -/* -* 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: mylocation engine mmp file -* -*/ - -#include -#include - -TARGET mylocationsengine.exe -TARGETTYPE exe -UID 0x2002680A -CAPABILITY ALL -TCB - -USERINCLUDE ../inc -USERINCLUDE ../../inc -USERINCLUDE ../../geocodeupdate/inc -USERINCLUDE ../../mylocationlogger/inc - -SYSTEMINCLUDE /epoc32/include -APP_LAYER_SYSTEMINCLUDE -SYSTEMINCLUDE /epoc32/include/platform/mw -SYSTEMINCLUDE /epoc32/include/platform/app -SYSTEMINCLUDE /epoc32/include/mw -SYSTEMINCLUDE /epoc32/include/app - -START RESOURCE ../data/mylocations.rss -TARGETPATH APP_RESOURCE_DIR -HEADER -LANGUAGE_IDS -end - -SOURCEPATH ../src -SOURCE appmain.cpp -SOURCE mylocationsengine.cpp -SOURCE mylocationslookupdb.cpp -SOURCE mylocationsdatabasemanager.cpp -SOURCE maptileinterface.cpp -SOURCE lookupmaptiledb.cpp -SOURCE addresscomparision.cpp -SOURCE calendernotification.cpp - -LIBRARY euser.lib - - // Dependencies to S60 components -LIBRARY lbs.lib -LIBRARY eposlandmarks.lib -LIBRARY eposlmsearchlib.lib -LIBRARY eposlmdbmanlib.lib - -//calender DB dependencies -LIBRARY calinterimapi.lib - -//contacts DB dependencies -LIBRARY cntmodel.lib - - -//Contact db update with lat and lon field -LIBRARY geocodeupdate.lib - - -//RFs -LIBRARY efsrv.lib - -//RDbNamedDatabase,RDbView -LIBRARY edbms.lib - -// bafl utilities -LIBRARY bafl.lib - -// RFileLogger utilities -LIBRARY flogger.lib - -//Ecom library -LIBRARY ecom.lib - - -#ifdef ENABLE_ABIV2_MODE -DEBUGGABLE_UDEBONLY -#endif - -EPOCSTACKSIZE 0x6000 diff -r 0f22fb80ebba -r cd10d5b85554 locationdataharvester/mylocationsengine/inc/addresscomparision.h --- a/locationdataharvester/mylocationsengine/inc/addresscomparision.h Mon May 03 12:27:22 2010 +0300 +++ b/locationdataharvester/mylocationsengine/inc/addresscomparision.h Fri May 14 15:47:27 2010 +0300 @@ -17,7 +17,7 @@ #ifndef ADDRESSCOMPARISION_H_ #define ADDRESSCOMPARISION_H_ -#include +#include #include "mylocationslookupdb.h" class CAddressComparision : public CBase { diff -r 0f22fb80ebba -r cd10d5b85554 locationdataharvester/mylocationsengine/inc/calendernotification.h --- a/locationdataharvester/mylocationsengine/inc/calendernotification.h Mon May 03 12:27:22 2010 +0300 +++ b/locationdataharvester/mylocationsengine/inc/calendernotification.h Fri May 14 15:47:27 2010 +0300 @@ -56,7 +56,7 @@ * ConstructL. * 2nd phase constructor. */ - void ConstructL(MNotifyChange* aNotifyChange); + void ConstructL(); /** * CMyLocationsEngine. * C++ default constructor. @@ -87,3 +87,4 @@ MNotifyChange& iNotifyChange; }; #endif /* CALENDERNOTIFICATION_H_ */ +//End of file diff -r 0f22fb80ebba -r cd10d5b85554 locationdataharvester/mylocationsengine/inc/maptileinterface.h --- a/locationdataharvester/mylocationsengine/inc/maptileinterface.h Mon May 03 12:27:22 2010 +0300 +++ b/locationdataharvester/mylocationsengine/inc/maptileinterface.h Fri May 14 15:47:27 2010 +0300 @@ -20,7 +20,8 @@ #include #include - +// Header for landmarks db +#include #include @@ -89,6 +90,13 @@ const TDesC& aFilePath, MMapTileObserver* aObserver); /** + * Interface for requesting for a landmark object. + * @return CPosLandmark object. + */ + CPosLandmark* GetLandMarkDetails(); + + + /** * Constructor */ CMapTileInterface(); @@ -107,6 +115,12 @@ * @param[in] aLongitude Longitude value */ void GetMapTileL( TReal aLatitude, TReal aLongitude ); + + /** + * Interface for requesting for a landmark object. + * @param[in] aAddressInfo , geo-code address details + */ + void SetLandMarkDetailsL(MAddressInfo& aAddressInfo); protected: @@ -137,6 +151,8 @@ HBufC* iFilePath; //Maptile observer MMapTileObserver* iObserver ; + //pointer to landmark from address information. + CPosLandmark *iLandmark; }; #endif // MAPTILEINTERFACE_H diff -r 0f22fb80ebba -r cd10d5b85554 locationdataharvester/mylocationsengine/inc/mylocationsdatabasemanager.h --- a/locationdataharvester/mylocationsengine/inc/mylocationsdatabasemanager.h Mon May 03 12:27:22 2010 +0300 +++ b/locationdataharvester/mylocationsengine/inc/mylocationsdatabasemanager.h Fri May 14 15:47:27 2010 +0300 @@ -20,10 +20,15 @@ #define __MYLOCATIONSDATABASEMANAGER_H__ // Landmarks -#include +#include #include -// Lookup database +#include + +// lookup database +#include + +// mylocations lookup db #include "mylocationslookupdb.h" // Maximum string length of landmark address. @@ -94,17 +99,25 @@ */ void GetLandmarkFullAddress( TBuf& aLandmarkAddress, const CPosLandmark* aLandmark ); - - + + /** Update the maptile path to mylocation lookup table + * + * @param[in] aSourceId Uid of the changed source entry. + * @param[in] aSourceType Source type of the aSourceId. + * @param[in] aFilePath Maptile file path. + */ + void UpdateMapTilePath( TUint32 aSourceId, TUint32 aSourceType, + TFileName aFilePath ); private: /** * AddMylocationsCategory. - * Adds the category to mylocations and landmarks database. - * Used to add history and others categories. - * @param[in] aCategoryType defines the category type to be added. + * Adds the category to landmarks database. + * Used to add location picker specific categories. + * @param[in] aCategoryName defines the category name to be added. + * @returns The category id. */ - void AddMylocationsCategoryL( const TUint32 aCategoryType ); + TUint32 AddMylocationsCategoryL( const TDesC& aCategoryName ); /** * CheckIfDuplicateExistsL. @@ -156,50 +169,12 @@ void HandleEntryDeletionL( const TUint32 aUid, const TUint32 aSourceType ); /** - * AddToMylocationsDbL. - * Adds entry into mylocations db and also updates the lookup table - * @param[in] aLandmark Landmark object to be added. - * @param[in] aUid Uid of the source entry corresponding to aLandmark.. - * @param[in] aSourceType source type of the aUid passed. - */ - void AddToMylocationsDbL( CPosLandmark* aLandmark, const TUint32 aUid, - const TUint32 aSourceType ); - - /** - * ModifyMylocationsDbL. - * Updates the entry into mylocations db and also updates the lookup table + * HandleLandmarkModificationL. + * Handles a landmark modification * @param[in] aLandmark Landmark object modified. * @param[in] aUid Uid of the source entry corresponding to aLandmark.. - * @param[in] aSourceType source type of the aUid passed. */ - void ModifyMylocationsDbL( CPosLandmark* aLandmark, const TUint32 aUid, - const TUint32 aSourceType ); - - /** - * DeleteFromMylocationsDbL. - * Deletes the entry from mylocations db and also updates the lookup table - * @param[in] aUid Uid of the source entry corresponding to aLandmark.. - * @param[in] aSourceType source type of the aUid passed. - */ - void DeleteFromMylocationsDbL( const TUint32 aUid, const TUint32 aSourceType ); - - /** - * CreateCategoryL. - * Creates a new category in Mylocations Db and adds a corresponding entry in - * mylocations lookup table. - * @param[in] aUid Uid of the source category. - */ - void CreateCategoryL( const TUint32 aUid ); - - /** - * CheckCategoryAvailabilityL. - * Checks whether a category is available in database pointed by category manager. - * @param[in] aCategoryManager handle to the category manager - * @param[in] aCategoryId Id of the category - */ - void CheckCategoryAvailabilityL( CPosLmCategoryManager* aCategoryManager, - const TUint32 aCategoryId ); - + void HandleLandmarkModificationL( CPosLandmark* aLandmark, const TUint32 aUid ); /** * CheckAndReadLandmarkL. * Checks whether a category is available in database pointed by category manager. @@ -207,36 +182,58 @@ * @param[in] aLmId Id of the landmark * @returns landmark object if found else NULL */ - CPosLandmark* CMyLocationsDatabaseManager::CheckAndReadLandmarkL( + CPosLandmark* CheckAndReadLandmarkL( CPosLandmarkDatabase* aDb, const TUint32 aLmId ); + /** + * FillLookupItemAddressDetails. + * Fills address details into QLookupItem from CPosLandmark. + * @param[in] aLandmark a landmark object + * @param[out] aLookupItem, a lookup item in which the address details are filled + */ + void FillLookupItemAddressDetails( CPosLandmark* aLandmark, QLookupItem &aLookupItem ); + + /** + * UnsetDuplicateNextCalEntry. + * Finds a calendar lookup entry whose detination id is aLandmarkId + * and unsets it duplcate flag. + * @param[in] aLandmarkId a landmark id. + */ + void UnsetDuplicateNextCalEntry( quint32 aLandmarkId ); + + /** + * IsDuplicateCalEntry. + * Checks if there is a duplicate entry present whose destination id + * is aLandmarkId + * @param[in] aLandmarkId a landmark id. + */ + bool IsDuplicateEntry( quint32 aLandmarkId ); + + /** + * CreateLandmarkItemLC. + * Creates a landmark from a QLookupItem + * @param[in] aLookupItem a lookup item. + * @returns CPosLandmark a newly created landmark. + */ + CPosLandmark* CreateLandmarkItemLC( const QLookupItem &aLookupItem ); private: - // Handle to the landmark database CPosLandmarkDatabase* iLandmarkDb; - - // Handle to the mylocations landmark database - CPosLandmarkDatabase* iMyLocationsLandmarksDb; - // Contacts category to be created for contacts and calendar - // related location entries in landmark database + // Calendar category to be created for calendar related location entries in landmark database + TPosLmItemId iLmCalendarCatId; + // Contacts category to be created for contacts related location entries in landmark database TPosLmItemId iLmContactsCatId; - // handle to landmarks lookup database. CLookupDatabase* iLandmarksLookupDb; - // handle to mylocations lookup database. - CLookupDatabase* iMylocationsLookupDb; - - // handle to mylocations category manager - CPosLmCategoryManager* iMyLocationsCatManager; + // handle to the location app lookup database. + LocationDataLookupDb* iLocationAppLookupDb; // handle to landmarks category manager CPosLmCategoryManager* iLandmarksCatManager; - + // handle to the file session RFs iFsSession; - }; - #endif // __MYLOCATIONSDATABASEMANAGER_H__ diff -r 0f22fb80ebba -r cd10d5b85554 locationdataharvester/mylocationsengine/inc/mylocationsengine.h --- a/locationdataharvester/mylocationsengine/inc/mylocationsengine.h Mon May 03 12:27:22 2010 +0300 +++ b/locationdataharvester/mylocationsengine/inc/mylocationsengine.h Fri May 14 15:47:27 2010 +0300 @@ -26,10 +26,10 @@ #include // Header for contact DB -#include +#include // Header for landmarks db -#include +#include // mylocations database manager #include "maptileinterface.h" @@ -120,6 +120,8 @@ * */ void StartLandmarksChangeNotifier(); + + /** Maps the source type change type to Mylocations entry change type * @param[in] aSrcType Source type of the change @@ -128,10 +130,6 @@ */ TEntryChangeType MapChangeType( TUidSourceType aSrcType, TUint32 aChangeType ); - /** Gets the handle to mylocations database manager - * - */ - CMyLocationsDatabaseManager& MyLocationsDbManager(); private: @@ -202,6 +200,7 @@ */ void HandleMaptileDatabaseL(TInt aEventType , TLookupItem& aLookupItem ); + /** * Handles active object's request completion event. */ @@ -213,11 +212,6 @@ void DoCancel(); /** - * Implements RunError of active object. - */ - TInt RunError( TInt aError ); - - /** * Requests for map tile image , structure serch. * @param aLandmark Provides information about the address. * @param aAddressType Provides information about address type . @@ -249,7 +243,14 @@ /** * Calender entry added. */ - void CalenderEntryAddedL(TCalChangeEntry aCalChangeEntry); + void CalenderEntryAddedL(TCalChangeEntry aCalChangeEntry); + + /** + * Update the mylocations database. + */ + void UpdateDatabaseL( CPosLandmark* aLandmark, const TUint32 aUid, + const TUint32 aSourceType, const TEntryChangeType aChangeType ); + public: //From MMapTileObserver diff -r 0f22fb80ebba -r cd10d5b85554 locationdataharvester/mylocationsengine/inc/mylocationslookupdb.h --- a/locationdataharvester/mylocationsengine/inc/mylocationslookupdb.h Mon May 03 12:27:22 2010 +0300 +++ b/locationdataharvester/mylocationsengine/inc/mylocationslookupdb.h Fri May 14 15:47:27 2010 +0300 @@ -23,6 +23,7 @@ #include //RDbNamedDatabase,RDbView #include "mylocationsdefines.h" +#include "locationservicedefines.h" /** * CLookupDatabase class. diff -r 0f22fb80ebba -r cd10d5b85554 locationdataharvester/mylocationsengine/loc/mylocations.loc --- a/locationdataharvester/mylocationsengine/loc/mylocations.loc Mon May 03 12:27:22 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,54 +0,0 @@ -/* -* 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: mylocation engine loc file -* -*/ - - -//r: -//v: -//i:LOCALISATION_TARGET = s60,s90 -//i:Default mylocation category names, selector dialog title that can be displayed on UI. - -// LOCALISATION STRINGS - - -// d:Title of My locations -// l:title_pane_t2/opt9 -// r:9.2? -// -#define qtn_locint_list_title_myloc "My locations" - -//b:-1 -//e:-1 -//f:EDialogLabelFont -//s: -//w: -//d:History category created from My location. -//l:list_single_graphic_pane_t1 -// -#define qtn_locint_list_category_history "History" - - -//b:-1 -//e:-1 -//f:EDialogLabelFont -//s: -//w: -//d: Others category created from My location -//l:list_single_graphic_pane_t1 -// -#define qtn_locint_list_category_others "Others" - -// End of File diff -r 0f22fb80ebba -r cd10d5b85554 locationdataharvester/mylocationsengine/mylocationsengine.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/locationdataharvester/mylocationsengine/mylocationsengine.pro Fri May 14 15:47:27 2010 +0300 @@ -0,0 +1,73 @@ +# +# Copyright (c) 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: +# + +TEMPLATE=app +TARGET=mylocationsengine +CONFIG += Qt +DEPENDPATH += . +INCLUDEPATH += . +INCLUDEPATH += ../inc +INCLUDEPATH += ../../inc +INCLUDEPATH += ../geocodeupdate/inc +INCLUDEPATH += ../mylocationlogger/inc + +symbian: { + + TARGET.UID3 = 0x2002680A + isEmpty(TARGET.EPOCSTACKSIZE):TARGET.EPOCSTACKSIZE = 0x6000 + isEmpty(TARGET.EPOCHEAPSIZE):TARGET.EPOCHEAPSIZE = 20480 \ + 16943040 + TARGET.CAPABILITY = ALL -TCB + + LIBS += -llbs \ + -leposlandmarks \ + -leposlmsearchlib \ + -leuser \ + -leposlmdbmanlib \ + -lcntmodel \ + -lefsrv \ + -ledbms \ + -lbafl \ + -lflogger \ + -lQtContacts \ + -lgeocodeupdate \ + -lecom \ + -lcalinterimapi \ + -llocationdatalookupdb + +} + +SOURCES += src/appmain.cpp \ + src/mylocationsengine.cpp \ + src/mylocationsdatabasemanager.cpp \ + src/mylocationslookupdb.cpp \ + src/maptileinterface.cpp \ + src/addresscomparision.cpp \ + src/lookupmaptiledb.cpp \ + src/calendernotification.cpp + +HEADERS += inc/appmain.h \ + inc/mylocationsengine.h \ + inc/mylocationslookupdb.h \ + inc/mylocationsdatabasemanager.h \ + inc/maptileinterface.h \ + inc/addresscomparision.h \ + inc/lookupmaptiledb.h \ + inc/calendernotification.h + + + + diff -r 0f22fb80ebba -r cd10d5b85554 locationdataharvester/mylocationsengine/src/appmain.cpp --- a/locationdataharvester/mylocationsengine/src/appmain.cpp Mon May 03 12:27:22 2010 +0300 +++ b/locationdataharvester/mylocationsengine/src/appmain.cpp Fri May 14 15:47:27 2010 +0300 @@ -40,14 +40,8 @@ // create Mylocations engine object CMyLocationsEngine *myLocationsEngine = CMyLocationsEngine::NewL(); CleanupStack::PushL( myLocationsEngine ); - // Start listening to calendar db changes - //myLocationsEngine->StartCalenderChangeNotifierL(); - - // Start listening to landmarks db changes - //myLocationsEngine->StartLandmarksChangeNotifier(); - - //MYLOCLOGSTRING("Start listening to landmarks db changes."); + MYLOCLOGSTRING("myLocationsEngine created."); RProcess::Rendezvous(KErrNone); // Start handling requests @@ -65,8 +59,7 @@ // ----------------------------------------------------------------------------- // static TInt Execute() -{ - // __UHEAP_MARK; +{ TInt error = KErrNoMemory; // Create the cleanup stack CTrapCleanup* cleanup = CTrapCleanup::New(); @@ -76,7 +69,6 @@ TRAP( error, DoExecuteL() ); delete cleanup; } - // __UHEAP_MARKEND; return error; } diff -r 0f22fb80ebba -r cd10d5b85554 locationdataharvester/mylocationsengine/src/calendernotification.cpp --- a/locationdataharvester/mylocationsengine/src/calendernotification.cpp Mon May 03 12:27:22 2010 +0300 +++ b/locationdataharvester/mylocationsengine/src/calendernotification.cpp Fri May 14 15:47:27 2010 +0300 @@ -42,7 +42,7 @@ CCalenderNotification* self = new (ELeave) CCalenderNotification( aNotifyChange); CleanupStack::PushL(self); - self->ConstructL(aNotifyChange); + self->ConstructL(); return self; } @@ -51,7 +51,7 @@ // Symbian 2nd phase constructor can leave. // ----------------------------------------------------------------------------- // -void CCalenderNotification::ConstructL(MNotifyChange* aNotifyChange) +void CCalenderNotification::ConstructL() { CActiveScheduler::Add(this); User::LeaveIfError(iFsession.Connect()); @@ -118,3 +118,5 @@ { } +//End of file + diff -r 0f22fb80ebba -r cd10d5b85554 locationdataharvester/mylocationsengine/src/lookupmaptiledb.cpp --- a/locationdataharvester/mylocationsengine/src/lookupmaptiledb.cpp Mon May 03 12:27:22 2010 +0300 +++ b/locationdataharvester/mylocationsengine/src/lookupmaptiledb.cpp Fri May 14 15:47:27 2010 +0300 @@ -15,7 +15,7 @@ * */ -#include +#include #include "mylocationlogger.h" #include "lookupmaptiledb.h" diff -r 0f22fb80ebba -r cd10d5b85554 locationdataharvester/mylocationsengine/src/maptileinterface.cpp --- a/locationdataharvester/mylocationsengine/src/maptileinterface.cpp Mon May 03 12:27:22 2010 +0300 +++ b/locationdataharvester/mylocationsengine/src/maptileinterface.cpp Fri May 14 15:47:27 2010 +0300 @@ -57,6 +57,8 @@ delete iFilePath; delete iMaptileGeocoder; + + delete iLandmark; } @@ -66,7 +68,10 @@ // ----------------------------------------------------------------------------- // CMapTileInterface::CMapTileInterface() : - iMaptileGeocoder( NULL ), iFilePath( NULL ),iObserver(NULL) + iMaptileGeocoder( NULL ), + iFilePath( NULL ), + iObserver(NULL), + iLandmark(NULL) { } @@ -97,7 +102,8 @@ iFilePath = NULL; iFilePath = HBufC::NewL(aFilePath.Length()); iFilePath->Des().Copy(aFilePath); - TConnectionOption conn = EInteractive; + iStreetAvailable = EFalse; + TConnectionOption conn = ESilent; iMaptileGeocoder->GetCoordinateByAddressL(aAddressDetails, conn); } // ----------------------------------------------------------------------------- @@ -116,17 +122,13 @@ iFilePath->Des().Copy(aFilePath); TPtrC getStreet; - aLandmark->GetPositionField(EPositionFieldStreet, getStreet); if (getStreet.Length() > 0) { iStreetAvailable = ETrue; } - - TConnectionOption conn = EInteractive; - - + TConnectionOption conn = ESilent; iMaptileGeocoder->GetCoordinateByAddressL(*aLandmark, conn); } @@ -139,18 +141,14 @@ { __TRACE_CALLSTACK;//Notification to observer , to update contact db, iObserver->RestGeoCodeCompleted(aLatitude, aLongitude); - TInt zoom = KCityLevelZoom; TInt size = KMapTileSize; if (iStreetAvailable) { zoom = KStreetLvelZoom; } - iStreetAvailable = EFalse; - TMapTileParam mapTileparam(aLatitude, aLongitude, zoom, size); - iMaptileGeocoder->GetMapTileByGeoCodeL( mapTileparam, *iFilePath ); } @@ -177,8 +175,8 @@ { __TRACE_CALLSTACK; TReal latitude, longitude; - aAddressInfo.GetLatitude( latitude ); - aAddressInfo.GetLongitude( longitude ); + latitude=aAddressInfo.GetLatitude(); + longitude=aAddressInfo.GetLongitude(); MYLOCLOGSTRING1("GeocodeCompleted() status-%d",aErrorcode); MYLOCLOGSTRING1("GeocodeCompleted() latitude-%f",latitude ); @@ -188,7 +186,8 @@ { if ( latitude != KInvalidLatitudeLongitude && longitude != KInvalidLatitudeLongitude) - { + { + TRAP_IGNORE( SetLandMarkDetailsL(aAddressInfo) ); TRAPD( error, GetMapTileL(latitude, longitude) ); if ( error != KErrNone ) { @@ -209,3 +208,55 @@ } } +// ----------------------------------------------------------------------------- +// CMapTileInterface::GetLandMarkDetails() +// return pointer to CPosLandmark +// ----------------------------------------------------------------------------- +// +CPosLandmark* CMapTileInterface::GetLandMarkDetails() +{ + return iLandmark; + +} +// ----------------------------------------------------------------------------- +// CMapTileInterface::SetLandMarkDetails() +// create CPosLandmark details from MAddressInfo +// ----------------------------------------------------------------------------- +// +void CMapTileInterface::SetLandMarkDetailsL(MAddressInfo& aAddressInfo) +{ + if(iLandmark) + { + delete iLandmark; + iLandmark=NULL; + } + TReal latitude,longitude; + latitude=aAddressInfo.GetLatitude(); + longitude=aAddressInfo.GetLongitude(); + TLocality position(TCoordinate(latitude,longitude),0); + iLandmark=CPosLandmark::NewL(); + //latitude and longitude + iLandmark->SetPositionL(position); + + //street + TPtrC tempText=aAddressInfo.GetThoroughfareName(); + if(tempText.Length()>0) + { + iStreetAvailable=ETrue; + } + iLandmark->SetPositionFieldL(EPositionFieldStreet, tempText); + //postal code + tempText.Set(aAddressInfo.GetPincode()); + iLandmark->SetPositionFieldL(EPositionFieldPostalCode, tempText); + //city + tempText.Set(aAddressInfo.GetCity()); + iLandmark->SetPositionFieldL(EPositionFieldCity, tempText); + //state + tempText.Set(aAddressInfo.GetState()); + iLandmark->SetPositionFieldL(EPositionFieldState, tempText); + //country + tempText.Set(aAddressInfo.GetCountryName()); + iLandmark->SetPositionFieldL(EPositionFieldCountry, tempText); + +} +//end of line diff -r 0f22fb80ebba -r cd10d5b85554 locationdataharvester/mylocationsengine/src/mylocationsdatabasemanager.cpp --- a/locationdataharvester/mylocationsengine/src/mylocationsdatabasemanager.cpp Mon May 03 12:27:22 2010 +0300 +++ b/locationdataharvester/mylocationsengine/src/mylocationsdatabasemanager.cpp Fri May 14 15:47:27 2010 +0300 @@ -21,20 +21,30 @@ #include #include #include +#include + #include -#include +//#include #include #include +#include #include "mylocationsdatabasemanager.h" #include "mylocationlogger.h" #include "mylocationsdefines.h" -//Custom landmark database for storing the my locations details -_LIT( KMyLocationsDatabaseUri, "file://c:MyLocationsLandmarks.ldb" ); + // separator _LIT( KSeparator, ","); // space _LIT( KSpace, " "); +// QString separator +const QString KQStringSeparator = ","; +// QString space +const QString KQStringSpace = " "; + +// Used to set nearest landmarks search distance criteria +const TUint32 KSearchCriteriaDistance = 100; + // ----------------------------------------------------------------------------- // CMyLocationsDatabaseManager::ConstructL() // 2nd phase constructor. @@ -49,50 +59,22 @@ // create landmarks lookup database. iLandmarksLookupDb = CLookupDatabase::NewL(KLandmarksLookupDatabaseName); User::LeaveIfError( iLandmarksLookupDb->Open() ); - - CPosLmDatabaseManager* dbManager = CPosLmDatabaseManager::NewL(); - CleanupStack::PushL(dbManager); - - //Create custom landmark database for storing my locations data - if (!dbManager->DatabaseExistsL(KMyLocationsDatabaseUri)) + + iLocationAppLookupDb = new LocationDataLookupDb(); + if( !iLocationAppLookupDb->open() ) { - HPosLmDatabaseInfo* dbInfo = HPosLmDatabaseInfo::NewLC( - KMyLocationsDatabaseUri); - dbManager->CreateDatabaseL(*dbInfo); - CleanupStack::PopAndDestroy(dbInfo); + User::Leave( KErrUnknown ); } - - CleanupStack::PopAndDestroy(dbManager); - - //Open and initialize the custom landmark database - iMyLocationsLandmarksDb = CPosLandmarkDatabase::OpenL( - KMyLocationsDatabaseUri); - if (iMyLocationsLandmarksDb->IsInitializingNeeded()) - { - ExecuteAndDeleteLD(iMyLocationsLandmarksDb->InitializeL()); - } - - // create mylocations lookup database. - iMylocationsLookupDb - = CLookupDatabase::NewL(KMylocationsLookupDatabaseName); - - // Create category manager for mylocations - iMyLocationsCatManager = CPosLmCategoryManager::NewL( - *iMyLocationsLandmarksDb); - + // Create category manager for landmarks iLandmarksCatManager = CPosLmCategoryManager::NewL(*iLandmarkDb); - //open the lookup database - User::LeaveIfError( iMylocationsLookupDb->Open() ); - // open file session User::LeaveIfError(iFsSession.Connect()); - // Add contacts, calendar and history categories - AddMylocationsCategoryL(ESourceLandmarksContactsCat); - //close the lookup database - iMylocationsLookupDb->Close(); + // Add contacts and calendar categories + iLmContactsCatId = AddMylocationsCategoryL(KContactsCategory); + iLmCalendarCatId = AddMylocationsCategoryL( KCalendarCategory ); } @@ -102,9 +84,8 @@ // ----------------------------------------------------------------------------- // CMyLocationsDatabaseManager::CMyLocationsDatabaseManager() : iLandmarkDb( NULL ), - iMyLocationsLandmarksDb( NULL ), iLmContactsCatId( 0 ), iLandmarksLookupDb( NULL ), - iMylocationsLookupDb( NULL ), iMyLocationsCatManager( NULL ), + iLocationAppLookupDb( NULL ), iLandmarksCatManager( NULL ) { } @@ -122,20 +103,16 @@ iLandmarksLookupDb->Close(); delete iLandmarksLookupDb; } - if (iMylocationsLookupDb) + if (iLocationAppLookupDb) { - iMylocationsLookupDb->Close(); - delete iMylocationsLookupDb; + iLocationAppLookupDb->close(); + delete iLocationAppLookupDb; } delete iLandmarksCatManager; delete iLandmarkDb; - delete iMyLocationsCatManager; - - delete iMyLocationsLandmarksDb; - // close the file session iFsSession.Close(); @@ -146,107 +123,27 @@ // Adds the category to the mylocations and landmarks database.. // ----------------------------------------------------------------------------- // -void CMyLocationsDatabaseManager::AddMylocationsCategoryL( const TUint32 aCategoryType ) +TUint32 CMyLocationsDatabaseManager::AddMylocationsCategoryL( const TDesC& aCategoryName ) { __TRACE_CALLSTACK;//Open the resource file - RResourceFile resourceFile; - resourceFile.OpenL( iFsSession, KMyLocationsResourceFile ); - CleanupClosePushL( resourceFile ); - // Get the category name - HBufC8* dataBuffer = NULL; - if (aCategoryType == ESourceLandmarksContactsCat) - { - dataBuffer = resourceFile.AllocReadLC(R_LOCINT_LIST_CATEGORY_CONTACTS); - } + TPosLmItemId catId = 0; - TResourceReader resReader; - resReader.SetBuffer(dataBuffer); - TPtrC resData = resReader.ReadTPtrC(); - - TLookupItem lookupItem; - lookupItem.iLmId = 0; - lookupItem.iSource = aCategoryType; - lookupItem.iUid = 0; - - RArray itemArray; - CleanupClosePushL(itemArray); - iMylocationsLookupDb->FindEntriesBySourceTypeL(lookupItem.iSource, - itemArray); - - // Get the category from mylocations lookup table - if (itemArray.Count() == 0) + //create category + CPosLandmarkCategory *category = CPosLandmarkCategory::NewL(); + CleanupStack::PushL(category); + category->SetCategoryNameL( aCategoryName ); + + // Add category to landmarks database + TRAPD ( error, ( catId = iLandmarksCatManager->AddCategoryL( *category ) ) ); + if (error == KErrNone || error == KErrAlreadyExists) { - // category not found, so create one. - CPosLandmarkCategory *category = CPosLandmarkCategory::NewL(); - CleanupStack::PushL(category); - category->SetCategoryNameL(resData); - - if ( aCategoryType == ESourceLandmarksContactsCat) - { - TPosLmItemId landmarksCatId = 0; - // Add category to landmarks database - TRAPD ( error, ( landmarksCatId = iLandmarksCatManager->AddCategoryL( *category ) ) ); - if (error == KErrNone || error == KErrAlreadyExists) - { - landmarksCatId = iLandmarksCatManager->GetCategoryL(resData); - } - lookupItem.iUid = landmarksCatId; - } - - // Add the catefory to mylocations database - TPosLmItemId myLocationsCatId = 0; - // Add category to mylocations database - TRAPD ( error, ( myLocationsCatId = iMyLocationsCatManager->AddCategoryL( *category ) ) ); - if (error == KErrNone || error == KErrAlreadyExists) - { - myLocationsCatId = iMyLocationsCatManager->GetCategoryL(resData); - } - // create this entry in mylocations lookup table - lookupItem.iSource = aCategoryType; - lookupItem.iLmId = myLocationsCatId; - iMylocationsLookupDb->CreateEntryL(lookupItem); - - CleanupStack::PopAndDestroy(category); - } - else - { - // category found in lookup table, - // update the corresponding category in Mylocations and landmarks database with - // current localized string - - - lookupItem.iLmId = itemArray[0].iLmId; - lookupItem.iUid = itemArray[0].iUid; - if ( aCategoryType == ESourceLandmarksContactsCat) - { - CPosLandmarkCategory *category = - iLandmarksCatManager->ReadCategoryLC(lookupItem.iUid); - category->SetCategoryNameL(resData); - TRAP_IGNORE ( ( iLandmarksCatManager->UpdateCategoryL( *category ) ) ); - CleanupStack::PopAndDestroy(category); - } - // update category in mylocations db - CPosLandmarkCategory *category2 = - iMyLocationsCatManager->ReadCategoryLC(lookupItem.iLmId); - category2->SetCategoryNameL(resData); - TRAP_IGNORE ( ( iMyLocationsCatManager->UpdateCategoryL( *category2 ) ) ); - CleanupStack::PopAndDestroy(category2); + catId = iLandmarksCatManager->GetCategoryL( aCategoryName ); } - CleanupStack::PopAndDestroy(&itemArray); + CleanupStack::PopAndDestroy(category); - if ( dataBuffer ) - { - CleanupStack::PopAndDestroy(dataBuffer); - } - - if (aCategoryType == ESourceLandmarksContactsCat) - iLmContactsCatId = lookupItem.iUid; - - // Close the resource file - CleanupStack::PopAndDestroy( &resourceFile ); - + return catId; } // ----------------------------------------------------------------------------- @@ -260,7 +157,6 @@ const TUint32 aUid, const TUint32 aSourceType, const TEntryChangeType aChangeType) { __TRACE_CALLSTACK;//open the lookup database - User::LeaveIfError(iMylocationsLookupDb->Open()); switch (aChangeType) { // if the entry is added @@ -285,8 +181,6 @@ break; } } - //close the lookup database - iMylocationsLookupDb->Close(); } @@ -306,20 +200,24 @@ // create a search object. CPosLandmarkSearch* search = CPosLandmarkSearch::NewL( - *iMyLocationsLandmarksDb); + *iLandmarkDb); CleanupStack::PushL(search); - TBuf lmAddress; - GetLandmarkFullAddress(lmAddress, aLandmark); + TBuf lmAddress1; + GetLandmarkFullAddress( lmAddress1, aLandmark ); + QString str1 = QString( (QChar*)lmAddress1.Ptr(), lmAddress1.Length()); - // Create the search criterion - CPosLmTextCriteria* crit = CPosLmTextCriteria::NewLC(); - crit->SetTextL(lmAddress); - crit->SetAttributesToSearch(CPosLandmark::ELandmarkName); - + // create nearest search criteria object + TLocality position( TCoordinate( 0, 0), 0 ); + aLandmark->GetPosition( position ); + CPosLmNearestCriteria* nearestCriteria = + CPosLmNearestCriteria::NewLC( + TCoordinate( position.Latitude(), position.Longitude() ) ); + nearestCriteria->SetMaxDistance( KSearchCriteriaDistance ); + // Start the search and execute it at once. - ExecuteAndDeleteLD(search->StartLandmarkSearchL(*crit)); - CleanupStack::PopAndDestroy(crit); + ExecuteAndDeleteLD( search->StartLandmarkSearchL( *nearestCriteria ) ); + CleanupStack::PopAndDestroy( nearestCriteria ); // Retrieve an iterator to access the matching landmarks. CPosLmItemIterator* iter = search->MatchIteratorL(); @@ -328,24 +226,19 @@ // Iterate the search matches. TPosLmItemId lmId; - while ((lmId = iter->NextL()) != KPosLmNullItemId) + while( ( lmId = iter->NextL() ) != KPosLmNullItemId ) { - //Found duplicate entries. - // Get the corresponding id in landmarks db - RArray itemArray; - CleanupClosePushL(itemArray); - iMylocationsLookupDb->FindEntriesByLandmarkIdL(lmId, itemArray); - if (itemArray.Count()) + CPosLandmark* lm = iLandmarkDb->ReadLandmarkLC( lmId ); + TBuf lmAddress2; + GetLandmarkFullAddress( lmAddress2, lm ); + QString str2 = QString( (QChar*)lmAddress2.Ptr(), lmAddress2.Length()); + CleanupStack::PopAndDestroy( lm ); + + if( str1 == str2 ) { - if (itemArray[0].iSource == ESourceLandmarks) - { - // return id only if the source is from landmarks database. - retId = itemArray[0].iUid; - CleanupStack::PopAndDestroy(&itemArray); - break; - } + retId = lmId; + break; } - CleanupStack::PopAndDestroy(&itemArray); } CleanupStack::PopAndDestroy(iter); @@ -361,63 +254,24 @@ // ----------------------------------------------------------------------------- // TBool CMyLocationsDatabaseManager::CompareLandmarks( - const CPosLandmark* aLandmark1, const CPosLandmark* aLandmark2) + const CPosLandmark* aLandmark1, const CPosLandmark* aLandmark2 ) { - __TRACE_CALLSTACK;// Compare landmark names - TPtrC name1, name2; - aLandmark1->GetLandmarkName(name1); - aLandmark2->GetLandmarkName(name2); - if (name1 != name2) - { - return EFalse; - } + __TRACE_CALLSTACK; - // Compare street info - TPtrC street1, street2; - aLandmark1->GetPositionField(EPositionFieldStreet, street1); - aLandmark2->GetPositionField(EPositionFieldStreet, street2); - if (street1 != street2) - { - return EFalse; - } - - // Compare City info - TPtrC city1, city2; - aLandmark1->GetPositionField(EPositionFieldCity, city1); - aLandmark2->GetPositionField(EPositionFieldCity, city2); - if (city1 != city2) - { - return EFalse; - } + TBuf lmAddress1; + GetLandmarkFullAddress( lmAddress1, aLandmark1 ); + QString str1 = QString( (QChar*)lmAddress1.Ptr(), lmAddress1.Length()); - // compare state info - TPtrC state1, state2; - aLandmark1->GetPositionField(EPositionFieldState, state1); - aLandmark2->GetPositionField(EPositionFieldState, state2); - if (state1 != state2) - { - return EFalse; - } + TBuf lmAddress2; + GetLandmarkFullAddress( lmAddress2, aLandmark2 ); + QString str2 = QString( (QChar*)lmAddress2.Ptr(), lmAddress2.Length()); - // compare postal code - TPtrC postalCode1, postalCode2; - aLandmark1->GetPositionField(EPositionFieldPostalCode, postalCode1); - aLandmark2->GetPositionField(EPositionFieldPostalCode, postalCode2); - if (postalCode1 != postalCode2) - { + if( str1 == str2 ) + return ETrue; + else return EFalse; - } - - // compare country name - TPtrC country1, country2; - aLandmark1->GetPositionField(EPositionFieldCountry, country1); - aLandmark2->GetPositionField(EPositionFieldCountry, country2); - if (country1 != country2) - { - return EFalse; - } - - return ETrue; + + } // ----------------------------------------------------------------------------- @@ -429,58 +283,94 @@ const TUint32 aUid, const TUint32 aSourceType) { __TRACE_CALLSTACK; + // Create a lookup item + QLookupItem lookupItem; + lookupItem.mSourceUid = aUid; + lookupItem.mSourceType = aSourceType; + lookupItem.mDestId = 0; + lookupItem.mIconType = QLookupItem::EIconTypeDefault; + lookupItem.mIsDuplicate = 0; + lookupItem.mIconPath = ""; + lookupItem.mMapTilePath = ""; + + //fill address into lookup item. + FillLookupItemAddressDetails( aLandmark, lookupItem ); + if ( aSourceType == ESourceLandmarks ) { - AddToMylocationsDbL(aLandmark, aUid, aSourceType); - return; - } - if ( aSourceType == ESourceLandmarksCategory ) - { - CreateCategoryL(aUid); - return; + // Logic: check if the entry is already present in lookupdb. + // If present, it means the landmark corresponds to a contact/calendar. So ignore it. + // If not present, it means the landmark is created directly into the landmarks db. So add + // it in lookupdb as well. + + // check if the entry is already present in lookup db. + QList itemArray; + iLocationAppLookupDb->findEntriesByLandmarkId( aUid, itemArray ); + if( itemArray.count() ) + { + return; + } + else + { + lookupItem.mDestId = aUid; + iLocationAppLookupDb->createEntry( lookupItem ); + return; + } } - // Create a lookup item - TLookupItem lookupItem; - lookupItem.iUid = aUid; - lookupItem.iSource = aSourceType; + TPosLmItemId catId; + if( aSourceType == ESourceCalendar ) + { + // category id to calendar + catId = iLmCalendarCatId; + } + else + { + // remove landmark name, which is basically contact's name. + aLandmark->SetLandmarkNameL( KNullDesC ); + // category id to contacts + catId = iLmContactsCatId; + } // check if this landmark is already present in database - TPosLmItemId dupLmId = CheckIfDuplicateExistsL(aLandmark); - if (dupLmId) + TPosLmItemId dupLmId = CheckIfDuplicateExistsL( aLandmark ); + if ( dupLmId ) { // landmark already present in db. get the details CPosLandmark* dupLandmark = iLandmarkDb->ReadLandmarkLC(dupLmId); - if (dupLandmark) + if( dupLandmark ) { - if (aSourceType == ESourceContactsPref || aSourceType - == ESourceContactsWork || aSourceType - == ESourceContactsHome) - { - dupLandmark->AddCategoryL(iLmContactsCatId); - } + // add category. + dupLandmark->AddCategoryL( catId ); // update the landmark object in the db - iLandmarkDb->UpdateLandmarkL(*dupLandmark); - CleanupStack::PopAndDestroy(dupLandmark); + iLandmarkDb->UpdateLandmarkL( *dupLandmark ); + CleanupStack::PopAndDestroy( dupLandmark ); } // point the lookup item's landmark uid to the existing landmark. - lookupItem.iLmId = dupLmId; + lookupItem.mDestId = dupLmId; + if( aSourceType == ESourceCalendar ) + { + // set duplicate flag to true. only if it is calendar entry. + // for contacts duplicate doesnot hold good as the location name is the contact name. + + // set duplicate only if there are calendar entries already pointing to this landmark. + if( IsDuplicateEntry( dupLmId ) ) + { + lookupItem.mIsDuplicate = 1; + } + } } else // it is a new entry, so add into the database { - if (aSourceType == ESourceContactsPref || aSourceType - == ESourceContactsWork || aSourceType == ESourceContactsHome) - { - aLandmark->AddCategoryL(iLmContactsCatId); - } + // add category. + aLandmark->AddCategoryL( catId ); // add the landmark into the db. // point the lookup item's landmark uid to the newly created landmark in the db. - lookupItem.iLmId = iLandmarkDb->AddLandmarkL(*aLandmark); + lookupItem.mDestId = iLandmarkDb->AddLandmarkL( *aLandmark ); } // create the entry in the lookup table. - iLandmarksLookupDb->CreateEntryL(lookupItem); - + iLocationAppLookupDb->createEntry( lookupItem ); } // ----------------------------------------------------------------------------- @@ -489,164 +379,210 @@ // ----------------------------------------------------------------------------- // void CMyLocationsDatabaseManager::HandleEntryModificationL( - CPosLandmark* aLandmark, const TUint32 aUid, const TUint32 aSourceType) + CPosLandmark* aLandmark, const TUint32 aUid, const TUint32 aSourceType ) { __TRACE_CALLSTACK; if ( aSourceType == ESourceLandmarks ) { - ModifyMylocationsDbL( aLandmark, aUid, aSourceType ); + HandleLandmarkModificationL( aLandmark, aUid ); return; } - TLookupItem lookupItem; - lookupItem.iUid = aUid; - lookupItem.iSource = aSourceType; + QLookupItem lookupItem; + lookupItem.mSourceUid = aUid; + lookupItem.mSourceType = aSourceType; + lookupItem.mIconType = QLookupItem::EIconTypeDefault; + // Behavior: If an entry is modified, + // If this entry is not present in lookup table. add the entry and update the landmarks db. + // If this entry is already present in lookup table, check if the location info is modified or not. + // If the location info is modified, delete the landmark from db and add the new landmark + // into the db. + // Before deletion make sure that the landmark is not being refered by other lookup entries. - if (aSourceType == ESourceContactsPref || aSourceType - == ESourceContactsWork || aSourceType == ESourceContactsHome) + // find the entry in the lookup table. + if ( iLocationAppLookupDb->findEntryBySourceIdAndType( lookupItem ) ) { - // Behavior: If a contact is modified, - // If this entry is not present in lookup table. add the entry and update the landmarks db. - // If this entry is already present in lookup table, check if the location info is modified or not. - // If the location info is modified, delete the landmark from db and add the new landmark - // into the db. - // Before deletion make sure that the landmark is not being refered by other lookup entries. - - // find the entry in the lookup table. - if (iLandmarksLookupDb->FindEntryL(lookupItem)) + //fill address into lookup item. + FillLookupItemAddressDetails( aLandmark, lookupItem ); + + QString locationName = lookupItem.mName; + + TPosLmItemId catId; + + if( aSourceType == ESourceCalendar ) { - // check if the location info is modified by comparing the new landmark with the existing landmark - CPosLandmark* existingLandmark = NULL; - TRAPD( error, ( existingLandmark = - CheckAndReadLandmarkL( iLandmarkDb, lookupItem.iLmId ) ) ); - CleanupStack::PushL(existingLandmark); - if (error == KErrNotFound) + catId = iLmCalendarCatId; + } + else + { + // remove landmark name, which is basically contact's name. + aLandmark->SetLandmarkNameL( KNullDesC ); + + // category id to contacts + catId = iLmContactsCatId; + } + + + // check if the location info is modified by comparing the new landmark with the existing landmark + CPosLandmark* existingLandmark = NULL; + TRAPD( error, ( existingLandmark = + CheckAndReadLandmarkL( iLandmarkDb, lookupItem.mDestId ) ) ); + CleanupStack::PushL( existingLandmark ); + if ( error == KErrNotFound ) + { + // Landmarks item deleted. So delete corresponding lookup entries. + QList itemArray; + iLocationAppLookupDb->findEntriesByLandmarkId( lookupItem.mDestId, itemArray ); + for ( int i = 0; i < itemArray.count(); i++) { - // Landmarks item deleted. So delete corresponding lookup entries. - RArray itemArray; - CleanupClosePushL(itemArray); - iLandmarksLookupDb->FindEntriesByLandmarkIdL(lookupItem.iLmId, - itemArray); - for (TInt i = 0; i < itemArray.Count(); i++) - { - iLandmarksLookupDb->DeleteEntryL(itemArray[i]); - } - CleanupStack::PopAndDestroy(&itemArray); - - // Add the entry into the lookup table and update landmarks db. - HandleEntryAdditionL(aLandmark, aUid, aSourceType); - - CleanupStack::PopAndDestroy(existingLandmark); - return; + iLocationAppLookupDb->deleteEntryBySourceIdAndType( itemArray[i] ); } - if (!CompareLandmarks(existingLandmark, aLandmark)) - { - // landmarks are not same, means location information is modified. + // Add the entry into the lookup table and update landmarks db. + HandleEntryAdditionL( aLandmark, aUid, aSourceType ); + + CleanupStack::PopAndDestroy( existingLandmark ); + return; + } - // Check if the new landmark is already in db. - TPosLmItemId dupLmId = CheckIfDuplicateExistsL(aLandmark); - if (dupLmId) + if ( !CompareLandmarks( existingLandmark, aLandmark ) ) + { + // landmarks are not same, means location information is modified. + + // Check if the new landmark is already in db. + TPosLmItemId dupLmId = CheckIfDuplicateExistsL( aLandmark ); + if ( dupLmId ) + { + // landmark already present in db. get the details + CPosLandmark* dupLandmark = iLandmarkDb->ReadLandmarkLC( dupLmId ); + if ( dupLandmark ) { - // landmark already present in db. get the details - CPosLandmark* dupLandmark = iLandmarkDb->ReadLandmarkLC( - dupLmId); - if (dupLandmark) - { - // add category. - dupLandmark->AddCategoryL(iLmContactsCatId); + // add category. + dupLandmark->AddCategoryL( catId ); - // update the landmark object in the db - iLandmarkDb->UpdateLandmarkL(*dupLandmark); - } - CleanupStack::PopAndDestroy(dupLandmark); - - // update the lookup item to refer to the newly created landmark. - lookupItem.iLmId = dupLmId; - iLandmarksLookupDb->UpdateEntryL(lookupItem); + // update the landmark object in the db + iLandmarkDb->UpdateLandmarkL( *dupLandmark ); } - else + CleanupStack::PopAndDestroy( dupLandmark ); + + // update the lookup item to refer to the newly created landmark. + lookupItem.mDestId = dupLmId; + if( aSourceType == ESourceCalendar ) { - // landmark not already present in db. - // Create a new entry in the db - aLandmark->AddCategoryL(iLmContactsCatId); - lookupItem.iLmId = iLandmarkDb->AddLandmarkL(*aLandmark); - // update the lookup table - iLandmarksLookupDb->UpdateEntryL(lookupItem); + // for contacts duplicate doesnot hold good as the location name is the contact name. + if( !lookupItem.mIsDuplicate ) + { + // if current lookup item duplicate property is 0, then remove next corresponding + // calendar lookup entry duplicate property. + // this is required because the current entry will be pointing to a new landmark. + UnsetDuplicateNextCalEntry( existingLandmark->LandmarkId() ); + } + + // set duplicate only if there are calendar entries already pointing to this landmark. + if( IsDuplicateEntry( dupLmId ) ) + { + lookupItem.mIsDuplicate = 1; + } + } + + iLocationAppLookupDb->updateEntryBySourceIdAndType( lookupItem ); } else { - // landmarks are same, means location not modified. So return. - CleanupStack::PopAndDestroy(existingLandmark); - return; + // landmark not already present in db. + // Create a new entry in the db + aLandmark->AddCategoryL( catId ); + lookupItem.mDestId = iLandmarkDb->AddLandmarkL( *aLandmark ); + if( aSourceType == ESourceCalendar ) + { + // for contacts duplicate doesnot hold good as the location name is the contact name. + if( !lookupItem.mIsDuplicate ) + { + // if current lookup item duplicate property is 0, then remove next corresponding + // calendar lookup entry duplicate property. + // this is required because the current entry will be pointing to a new landmark. + UnsetDuplicateNextCalEntry( existingLandmark->LandmarkId() ); + } + } + + lookupItem.mIsDuplicate = 0; + // update the lookup table + iLocationAppLookupDb->updateEntryBySourceIdAndType( lookupItem ); + } + } + else + { + // landmarks are same, means location not modified. So return. + if( aSourceType == ESourceContactsPref + || aSourceType == ESourceContactsWork + || aSourceType == ESourceContactsHome + ) + { + // in case of contacts, there is a chance that contact name is modified. + // so update the lookup database entry with that name. + lookupItem.mName = locationName; + iLocationAppLookupDb->updateEntryBySourceIdAndType( lookupItem ); } - // delete the existing landmark only if it not being refered by other lookup entries. + CleanupStack::PopAndDestroy( existingLandmark ); + return; + } - // Check if any other entries are refering this landmark. - RArray itemArray; - CleanupClosePushL(itemArray); - iLandmarksLookupDb->FindEntriesByLandmarkIdL( - existingLandmark->LandmarkId(), itemArray); + // delete the existing landmark only if it not being refered by other lookup entries. - if (itemArray.Count()) - { - // There are other lookup entries refering this landmark. So do not delete the landmark + // Check if any other entries are refering this landmark. + QList itemArray; + iLocationAppLookupDb->findEntriesByLandmarkId( + existingLandmark->LandmarkId(), itemArray ); - // If none of these lookup item's source type is contacts, disassociate 'iLmContactsCatId' category - // from this landmark. - TInt i = 0; - while (i < itemArray.Count()) + if ( itemArray.count() ) + { + // There are other lookup entries refering this landmark. So do not delete the landmark + + // If none of these lookup item's source type is current source type, disassociate 'catId' category + // from this landmark. + TInt i = 0; + while ( i < itemArray.count() ) + { + if( aSourceType == ESourceCalendar ) { - if (itemArray[i].iSource == ESourceContactsPref - || itemArray[i].iSource == ESourceContactsWork - || itemArray[i].iSource == ESourceContactsHome - ) + if ( itemArray[i].mSourceType == aSourceType ) { - // a lookup item exists which is from contacts, so 'iLmContactsCatId' is still valid. + // a lookup item exists which is from calendar, so 'catId' is still valid. break; } - i++; - } - if (i == itemArray.Count()) + } + else { - // no lookup items from contacts exists refering this landmark. - // so disassociate 'iLmContactsCatId' from this landmark - - existingLandmark->RemoveCategory(iLmContactsCatId); - iLandmarkDb->UpdateLandmarkL(*existingLandmark); + // a lookup item exists which is from contacts, so 'catId' is still valid. + break; } + i++; } - else + if ( i == itemArray.count() ) { - // no other lookup entry is refering this landmark. + // no lookup items from current source type exists refering this landmark. + // so disassociate 'catId' from this landmark - // check if any other categories is associated with this landmark. - // Assume this landmark is associated with a history entry or a user created landmark entry. - // there is a chance that this landmark is still valid. - // Do not delete the landmark in this case. - RArray categoryIdArray; - CleanupClosePushL(categoryIdArray); - existingLandmark->GetCategoriesL(categoryIdArray); - if (categoryIdArray.Count() == 1) - { - // only one category i.e, 'iLmContactsCatId' is associated. - // delete the landmark. - iLandmarkDb->RemoveLandmarkL(existingLandmark->LandmarkId()); - } - CleanupStack::PopAndDestroy(&categoryIdArray); + existingLandmark->RemoveCategory( catId ); + iLandmarkDb->UpdateLandmarkL( *existingLandmark ); } - CleanupStack::PopAndDestroy(&itemArray); - CleanupStack::PopAndDestroy(existingLandmark); - + } + else + { + // no other lookup entry is refering this landmark. + // delete the landmark. + iLandmarkDb->RemoveLandmarkL( existingLandmark->LandmarkId() ); } - else // entry not present in lookup table - { - // Add the entry into the lookup table and update landmarks db. - HandleEntryAdditionL(aLandmark, aUid, aSourceType); - } + CleanupStack::PopAndDestroy( existingLandmark ); + + } + else // entry not present in lookup table + { + // Add the entry into the lookup table and update landmarks db. + HandleEntryAdditionL( aLandmark, aUid, aSourceType ); } } @@ -659,107 +595,252 @@ const TUint32 aSourceType) { __TRACE_CALLSTACK; - TLookupItem lookupItem; - lookupItem.iUid = aUid; - lookupItem.iSource = aSourceType; - - if (aSourceType == ESourceContactsPref || aSourceType - == ESourceContactsWork || aSourceType == ESourceContactsHome) - { - // Behavior: In the context of contacts, if a contact is deleted, the user is not interested in - // that contact's data, hence its address as well. So, delete the corresponding entries from - // both lookup table and iLandmarkDb. - // Before deleting the entry from iLandmarkDb, make sure that this entry is not being refered by - // other entries of the lookup table. If it is being refered by other entries in lookup table, then - // do not delete the landmark. + QLookupItem lookupItem; + lookupItem.mSourceUid = aUid; + lookupItem.mSourceType = aSourceType; - // Find the corresponding landmark uid - if (iLandmarksLookupDb->FindEntryL(lookupItem)) + // Behavior: if an entry is deleted, delete the corresponding entries from + // both lookup table and iLandmarkDb. + // Before deleting the entry from iLandmarkDb, make sure that this entry is not being refered by + // other entries of the lookup table. If it is being refered by other entries in lookup table, then + // do not delete the landmark. + + if ( !iLocationAppLookupDb->findEntryBySourceIdAndType( lookupItem ) ) + { + if( aSourceType == ESourceLandmarks ) { - // delete the lookup entry. - iLandmarksLookupDb->DeleteEntryL(lookupItem); + lookupItem.mDestId = aUid; + } + else + { + return; + } + } + + // Find the corresponding landmark uid + - // Check if any other entries are refering this landmark. - RArray itemArray; - CleanupClosePushL(itemArray); - iLandmarksLookupDb->FindEntriesByLandmarkIdL(lookupItem.iLmId, - itemArray); + // delete the lookup entry. + iLocationAppLookupDb->deleteEntryBySourceIdAndType( lookupItem ); + + // Check if any other entries are refering this landmark. + QList itemArray; + iLocationAppLookupDb->findEntriesByLandmarkId( lookupItem.mDestId, itemArray ); - if (itemArray.Count()) + if ( itemArray.count() ) + { + + if( aSourceType == ESourceLandmarks ) + { + CPosLandmark* lm = NULL; + + for( int i = 0; i < itemArray.count(); i++ ) { - // There are other lookup entries refering this landmark. So do not delete the landmark - - // If none of these lookup item's source type is contacts, disassociate 'iLmContactsCatId' category - // from this landmark. - TInt i = 0; - while (i < itemArray.Count()) + if( itemArray[i].mSourceType == ESourceCalendar ) + { + // add landmark entry since a calendar item is present with this location. + if( !lm ) + { + lm = CreateLandmarkItemLC( itemArray[i] ); + } + lm->AddCategoryL( iLmCalendarCatId ); + } + else { - if (itemArray[i].iSource == ESourceContactsPref - || itemArray[i].iSource == ESourceContactsWork - || itemArray[i].iSource == ESourceContactsHome) + // add landmark entry since a contact item is present with this location. + if( !lm ) + { + QString tempStr = itemArray[i].mName; + itemArray[i].mName = ""; + lm = CreateLandmarkItemLC( itemArray[i] ); + itemArray[i].mName = tempStr; + } + lm->AddCategoryL( iLmCalendarCatId ); + } + } + + lookupItem.mDestId = iLandmarkDb->AddLandmarkL( *lm ); + CleanupStack::PopAndDestroy( lm ); + + bool dupUnset = false; + for( int i=0; iupdateEntryById( itemArray[i] ); + } + + return; + } + + // There are other lookup entries refering this landmark. So do not delete the landmark + + // If none of these lookup item's source type is current source type, disassociate current source category + // from this landmark. + TInt i = 0; + while ( i < itemArray.count() ) + { + if( aSourceType == ESourceCalendar ) + { + if( itemArray[i].mSourceType == aSourceType ) + { + if( lookupItem.mIsDuplicate == 0 ) { - // a lookup item exists which is from contacts/calendar, so 'iLmContactsCatId' is still valid. - break; + itemArray[i].mIsDuplicate = 0; + iLocationAppLookupDb->updateEntryById( itemArray[i] ); } - i++; + // a lookup item exists which is from calendar, so 'iLmCalendarCatId' is still valid. + break; } - if ( i == itemArray.Count() ) - { - // no lookup items from contacts exists refering this landmark. - // so disassociate 'iLmContactsCatId' from this landmark + + } + else if ( itemArray[i].mSourceType == ESourceContactsPref + || itemArray[i].mSourceType == ESourceContactsWork + || itemArray[i].mSourceType == ESourceContactsHome) + { + // a lookup item exists which is from contacts, so 'iLmContactsCatId' is still valid. + break; + } + i++; + } + if ( i == itemArray.count() ) + { + // no lookup items from current source type exists refering this landmark. + // so disassociate current source category from this landmark - CPosLandmark* landmark = iLandmarkDb->ReadLandmarkLC( - lookupItem.iLmId); - landmark->RemoveCategory(iLmContactsCatId); - iLandmarkDb->UpdateLandmarkL(*landmark); - CleanupStack::PopAndDestroy(landmark); - } + CPosLandmark* landmark = iLandmarkDb->ReadLandmarkLC( lookupItem.mDestId ); + if( aSourceType == ESourceCalendar ) + { + landmark->RemoveCategory( iLmCalendarCatId ); } else { - // no other lookup entry is refering this landmark. - - // check if any other categories is associated with this landmark. - // Assume this landmark is associated with a history entry or a user created landmark entry. - // there is a chance that this landmark is still valid. - // Do not delete the landmark in this case. - CPosLandmark* landmark = iLandmarkDb->ReadLandmarkLC( - lookupItem.iLmId); - RArray categoryIdArray; - CleanupClosePushL(categoryIdArray); - landmark->GetCategoriesL(categoryIdArray); - if (categoryIdArray.Count() == 1) - { - // only one category i.e, 'iLmCalendarCatId' is associated. - // delete the landmark. - iLandmarkDb->RemoveLandmarkL(lookupItem.iLmId); - } - - CleanupStack::PopAndDestroy(&categoryIdArray); - CleanupStack::PopAndDestroy(landmark); + landmark->RemoveCategory( iLmContactsCatId ); } - CleanupStack::PopAndDestroy(&itemArray); + + iLandmarkDb->UpdateLandmarkL( *landmark ); + CleanupStack::PopAndDestroy( landmark ); } } - - else if (aSourceType == ESourceLandmarks) + else { - // Landmarks item deleted. So delete corresponding lookup entries. - RArray itemArray; - CleanupClosePushL(itemArray); - iLandmarksLookupDb->FindEntriesByLandmarkIdL(aUid, itemArray); - for (TInt i = 0; i < itemArray.Count(); i++) + // no other lookup entry is refering this landmark. + // delete the landmark. + if ( aSourceType != ESourceLandmarks ) { - iLandmarksLookupDb->DeleteEntryL(itemArray[i]); + iLandmarkDb->RemoveLandmarkL( lookupItem.mDestId ); } - - CleanupStack::PopAndDestroy(&itemArray); - - DeleteFromMylocationsDbL(aUid, aSourceType); } } +// ----------------------------------------------------------------------------- +// CMyLocationsDatabaseManager::HandleLandmarkModificationL() +// ----------------------------------------------------------------------------- +// +void CMyLocationsDatabaseManager::HandleLandmarkModificationL( + CPosLandmark* aLandmark, const TUint32 aUid ) +{ + // logic: if a landmark is modified, + // first update the corresponding landmark lookup entry if present, else create a new entry. + // Check for any contact/calendar entries refering this landmark entry, + // if exists, create a new landmark entry with that location details and update all those + // lookup entry's destid with the newly created landmark id. + + QLookupItem lookupItem; + lookupItem.mSourceUid = aUid; + lookupItem.mSourceType = ESourceLandmarks; + lookupItem.mIconType = QLookupItem::EIconTypeDefault; + bool found = iLocationAppLookupDb->findEntryBySourceIdAndType( lookupItem ); + //fill address into lookup item. + FillLookupItemAddressDetails( aLandmark, lookupItem ); + lookupItem.mDestId = aUid; + lookupItem.mIsDuplicate = 0; + lookupItem.mIconType = QLookupItem::EIconTypeDefault; + lookupItem.mIconPath = ""; + lookupItem.mMapTilePath = ""; + + // update entry in lookup table. + if ( found ) + { + iLocationAppLookupDb->updateEntryById( lookupItem ); + } + else + { + iLocationAppLookupDb->createEntry( lookupItem ); + } + + QList itemArray; + iLocationAppLookupDb->findEntriesByLandmarkId( lookupItem.mDestId, itemArray ); + + if( itemArray.count() == 1 ) + { + //only one entry ie the entry corresponding to landmark db is present. + return; + } + + CPosLandmark* lm = NULL; + + for( int i = 0; i < itemArray.count(); i++ ) + { + if( itemArray[i].mSourceType != ESourceLandmarks ) + { + if( itemArray[i].mSourceType == ESourceCalendar ) + { + // add landmark entry since a calendar item is present with this location. + if( !lm ) + { + lm = CreateLandmarkItemLC( itemArray[i] ); + } + lm->AddCategoryL( iLmCalendarCatId ); + } + else + { + // add landmark entry since a calendar item is present with this location. + if( !lm ) + { + QString tempStr = itemArray[i].mName; + itemArray[i].mName = ""; + lm = CreateLandmarkItemLC( itemArray[i] ); + itemArray[i].mName = tempStr; + } + lm->AddCategoryL( iLmCalendarCatId ); + } + } + } + + // add the entry to landmarks db + quint32 newDestId = iLandmarkDb->AddLandmarkL( *lm ); + CleanupStack::PopAndDestroy( lm ); + + bool calDuplicateUnset = false; + // update all the lookup entries with new landmark id + for( int i = 0; i < itemArray.count(); i++ ) + { + if( itemArray[i].mSourceType != ESourceLandmarks ) + { + itemArray[i].mDestId = newDestId; + + if( itemArray[i].mSourceType == ESourceCalendar ) + { + if( !calDuplicateUnset ) + { + itemArray[i].mIsDuplicate = 0; + calDuplicateUnset = true; + } + else + { + itemArray[i].mIsDuplicate = 1; + } + } + iLocationAppLookupDb->updateEntryById( itemArray[i] ); + } + } +} // ----------------------------------------------------------------------------- // CMyLocationsDatabaseManager::GetLandmarkFullAddress() // Gets the comma separated full address of the given landmark. @@ -772,23 +853,9 @@ TPtrC tempStr; TInt retStatus; TBool addressEmtpy = ETrue; - retStatus = aLandmark->GetLandmarkName(tempStr); - if (retStatus == KErrNone && tempStr.Length()) - { - aLandmarkAddress.Copy(tempStr); - addressEmtpy = EFalse; - } - retStatus = aLandmark->GetPositionField(EPositionFieldStreet, tempStr); if (retStatus == KErrNone && tempStr.Length()) { - if (!addressEmtpy) - { - aLandmarkAddress.Append(KSeparator); - aLandmarkAddress.Append(KSpace); - aLandmarkAddress.Append(tempStr); - } - else { aLandmarkAddress.Copy(tempStr); addressEmtpy = EFalse; @@ -845,19 +912,6 @@ } // ----------------------------------------------------------------------------- -// CMyLocationsDatabaseManager::CheckCategoryAvailabilityL() -// Checks if given category id is found in the database pointed by category manager. -// ----------------------------------------------------------------------------- -// -void CMyLocationsDatabaseManager::CheckCategoryAvailabilityL( - CPosLmCategoryManager* aCategoryManager, const TUint32 aCategoryId) -{ - __TRACE_CALLSTACK; - CPosLandmarkCategory *category = aCategoryManager->ReadCategoryLC( - aCategoryId); - CleanupStack::PopAndDestroy(category); -} -// ----------------------------------------------------------------------------- // CMyLocationsDatabaseManager::CheckAndReadLandmarkL() // Checks if given landmark id is found in the database and returns the read landmark. // ----------------------------------------------------------------------------- @@ -870,111 +924,167 @@ CleanupStack::Pop(lm); return lm; } + // ----------------------------------------------------------------------------- -// CMyLocationsDatabaseManager::AddToMylocationsDbL() -// Adds the entry into the mylocations database and updates the lookup table. +// CMyLocationsDatabaseManager::FillLookupItemAddressDetails() +// Creates a new category in Mylocations Db and adds a corresponding entry in +// mylocations lookup table. // ----------------------------------------------------------------------------- // -void CMyLocationsDatabaseManager::AddToMylocationsDbL(CPosLandmark* aLandmark, - const TUint32 aUid, const TUint32 aSourceType) +void CMyLocationsDatabaseManager::FillLookupItemAddressDetails( CPosLandmark* aLandmark, QLookupItem& aLookupItem ) { - __TRACE_CALLSTACK; - if (aSourceType == ESourceLandmarks) + __TRACE_CALLSTACK;// Read the category. + + // fill geo-coordinates + TLocality position; + aLandmark->GetPosition( position ); + aLookupItem.mLatitude = position.Latitude(); + aLookupItem.mLongitude = position.Longitude(); + + TPtrC tempStr; + TInt retStatus; + + // Copy landmark name in address 1 + retStatus = aLandmark->GetLandmarkName( tempStr ); + aLookupItem.mName = ""; + if( retStatus == KErrNone && tempStr.Length() > 0 ) { - CPosLandmark* landmark = iLandmarkDb->ReadLandmarkLC(aUid); - RArray catArray; - CleanupClosePushL( catArray ); - landmark->GetCategoriesL(catArray); - + aLookupItem.mName = QString( (QChar*)tempStr.Ptr(), tempStr.Length() ); + } + + // get street + aLookupItem.mStreet = ""; + retStatus = aLandmark->GetPositionField( EPositionFieldStreet, tempStr ); + if( retStatus == KErrNone && tempStr.Length() ) + { + aLookupItem.mStreet = QString( (QChar*)tempStr.Ptr(), tempStr.Length()); + } - // add the categories in the mylocations database for this landmark - for (TInt i = 0; i < catArray.Count(); i++) - { - TLookupItem lItem; - lItem.iUid = catArray[i]; - lItem.iSource = ESourceLandmarksUserCat; - lItem.iLmId = 0; - if (!iMylocationsLookupDb->FindEntryL(lItem)) - { - lItem.iSource = ESourceLandmarksContactsCat; - if (!iMylocationsLookupDb->FindEntryL(lItem)) - { - // means this is global category, so just add it - lItem.iLmId = lItem.iUid; - } - } - TRAP_IGNORE( aLandmark->AddCategoryL( lItem.iLmId ) ); - } + // get postal code + aLookupItem.mPostalCode = ""; + retStatus = aLandmark->GetPositionField( EPositionFieldPostalCode, tempStr ); + if( retStatus == KErrNone && tempStr.Length() ) + { + aLookupItem.mPostalCode = QString( (QChar*)tempStr.Ptr(), tempStr.Length()); + } - CleanupStack::PopAndDestroy( &catArray ); - TLookupItem lookupItem; - lookupItem.iUid = aUid; - lookupItem.iSource = aSourceType; - TRAP_IGNORE( lookupItem.iLmId = iMyLocationsLandmarksDb->AddLandmarkL( *aLandmark ) ); - CleanupStack::PopAndDestroy(landmark); - iMylocationsLookupDb->CreateEntryL(lookupItem); + // get city + aLookupItem.mCity = ""; + retStatus = aLandmark->GetPositionField( EPositionFieldCity, tempStr ); + if( retStatus == KErrNone && tempStr.Length() ) + { + aLookupItem.mCity = QString( (QChar*)tempStr.Ptr(), tempStr.Length()); + } + + // get State + aLookupItem.mState = ""; + retStatus = aLandmark->GetPositionField( EPositionFieldState, tempStr ); + if( retStatus == KErrNone && tempStr.Length() ) + { + aLookupItem.mState = QString( (QChar*)tempStr.Ptr(), tempStr.Length()); + } + + // get country + aLookupItem.mCountry = ""; + retStatus = aLandmark->GetPositionField( EPositionFieldCountry, tempStr ); + if( retStatus == KErrNone && tempStr.Length() ) + { + aLookupItem.mCountry = QString( (QChar*)tempStr.Ptr(), tempStr.Length()); } } // ----------------------------------------------------------------------------- -// CMyLocationsDatabaseManager::ModifyMylocationsDbL() -// Adds the entry into the mylocations database and updates the lookup table. +// CMyLocationsDatabaseManager::UnsetDuplicateNextCalEntry() // ----------------------------------------------------------------------------- // -void CMyLocationsDatabaseManager::ModifyMylocationsDbL(CPosLandmark* aLandmark, - const TUint32 aUid, const TUint32 aSourceType) +void CMyLocationsDatabaseManager::UnsetDuplicateNextCalEntry( quint32 aLandmarkId ) { - __TRACE_CALLSTACK; - TLookupItem lookupItem; - lookupItem.iUid = aUid; - lookupItem.iSource = aSourceType; - iMylocationsLookupDb->FindEntryL(lookupItem); - iMylocationsLookupDb->DeleteEntryL(lookupItem); - iMyLocationsLandmarksDb->RemoveLandmarkL(lookupItem.iLmId); - AddToMylocationsDbL(aLandmark, lookupItem.iUid, lookupItem.iSource); + // get next duplicate item + QList itemArray; + iLocationAppLookupDb->findEntriesByLandmarkId( aLandmarkId, itemArray ); + for ( int i = 0; i < itemArray.count(); i++) + { + if( itemArray[i].mSourceType == ESourceCalendar ) + { + itemArray[i].mIsDuplicate = 0; + iLocationAppLookupDb->updateEntryById( itemArray[i] ); + break; + } + } + +} +// ----------------------------------------------------------------------------- +// CMyLocationsDatabaseManager::IsDuplicateEntry() +// ----------------------------------------------------------------------------- +// +bool CMyLocationsDatabaseManager::IsDuplicateEntry( quint32 aLandmarkId ) +{ + // get next duplicate item + QList itemArray; + iLocationAppLookupDb->findEntriesByLandmarkId( aLandmarkId, itemArray ); + for ( int i = 0; i < itemArray.count(); i++) + { + if( itemArray[i].mSourceType == ESourceCalendar || + itemArray[i].mSourceType == ESourceLandmarks ) + { + return true; + } + } + + return false; } // ----------------------------------------------------------------------------- -// CMyLocationsDatabaseManager::DeleteFromMylocationsDbL() -// Deletes the entry from the mylocations database and updates the lookup table. -// ----------------------------------------------------------------------------- -// -void CMyLocationsDatabaseManager::DeleteFromMylocationsDbL(const TUint32 aUid, - const TUint32 aSourceType) -{ - __TRACE_CALLSTACK; - TLookupItem lookupItem; - lookupItem.iUid = aUid; - lookupItem.iSource = aSourceType; - iMylocationsLookupDb->FindEntryL(lookupItem); - - iMyLocationsLandmarksDb->RemoveLandmarkL(lookupItem.iLmId); - iMylocationsLookupDb->DeleteEntryL(lookupItem); -} -// ----------------------------------------------------------------------------- -// CMyLocationsDatabaseManager::CreateCategoryL() -// Creates a new category in Mylocations Db and adds a corresponding entry in -// mylocations lookup table. +// CMyLocationsDatabaseManager::CreateLandmarkItemLC() // ----------------------------------------------------------------------------- // -void CMyLocationsDatabaseManager::CreateCategoryL(const TUint32 aUid) +CPosLandmark* CMyLocationsDatabaseManager::CreateLandmarkItemLC( const QLookupItem &aLookupItem ) { - __TRACE_CALLSTACK;// Read the category. - CPosLandmarkCategory *category = iLandmarksCatManager->ReadCategoryLC(aUid); + __TRACE_CALLSTACK;//return value + CPosLandmark *landmark = NULL; + TLocality loc( TCoordinate( aLookupItem.mLatitude, aLookupItem.mLongitude ), 0 ); + + landmark = CPosLandmark::NewL(); + CleanupStack::PushL( landmark ); + + // Fill the location details into the landmark object + landmark->SetPositionL( loc ); + + // Set the landmark name as contact name + TBuf text( aLookupItem.mName.utf16() ); + TRAP_IGNORE( landmark->SetLandmarkNameL( text ) ); - TLookupItem lookupItem; - lookupItem.iUid = aUid; - lookupItem.iSource = ESourceLandmarksUserCat; - // Add category to landmarks database - TRAPD ( err, (lookupItem.iLmId = iMyLocationsCatManager->AddCategoryL( *category ) ) ); + text.Copy( aLookupItem.mStreet.utf16() ); + landmark->SetPositionFieldL( EPositionFieldStreet, text ); + + // Set the City + text.Copy( aLookupItem.mCity.utf16() ); + landmark->SetPositionFieldL( EPositionFieldCity, text ); - if (err == KErrNone) - { - iMylocationsLookupDb->CreateEntryL(lookupItem); - } - CleanupStack::PopAndDestroy(category); + // Set the state/region + text.Copy( aLookupItem.mState.utf16() ); + landmark->SetPositionFieldL( EPositionFieldState, text ); + // Set the Postal code + text.Copy( aLookupItem.mPostalCode.utf16() ); + landmark->SetPositionFieldL( EPositionFieldPostalCode, text ); + + // Set the country + text.Copy( aLookupItem.mCountry.utf16() ); + landmark->SetPositionFieldL( EPositionFieldCountry, text ); + + return landmark; } +// ----------------------------------------------------------------------------- +// CMyLocationsDatabaseManager::UpdateMapTilePath() +// ----------------------------------------------------------------------------- +// +void CMyLocationsDatabaseManager::UpdateMapTilePath( TUint32 aSourceId, TUint32 aSourceType, + TFileName aFilePath ) +{ + QString filePath = QString( (QChar*)aFilePath.Ptr(), aFilePath.Length() ); + iLocationAppLookupDb->updateMaptileBySourceIdAndType( aSourceId, aSourceType, filePath ); +} // End of file diff -r 0f22fb80ebba -r cd10d5b85554 locationdataharvester/mylocationsengine/src/mylocationsengine.cpp --- a/locationdataharvester/mylocationsengine/src/mylocationsengine.cpp Mon May 03 12:27:22 2010 +0300 +++ b/locationdataharvester/mylocationsengine/src/mylocationsengine.cpp Fri May 14 15:47:27 2010 +0300 @@ -20,14 +20,15 @@ #include #include #include -#include +#include #include #include #include #include +#include #include "mylocationsengine.h" #include "mylocationsdefines.h" -#include "geocodeupdate.h" //header for CGeocodeUpdate class +#include "geocodeupdate.h" //header for GeocodeUpdate class //handle for CMyLocationsHistoryDbObserver class #include "mylocationlogger.h" #if ( defined __WINSCW__ ) || ( defined __WINS__ ) @@ -35,14 +36,10 @@ #endif _LIT(KFolderName,":\\MapTile\\"); const TInt KImagePathSize=36; -const TInt KBufSize=256; const TInt KDefaultFilePathSize = 20; // separator _LIT( KSeparator, ","); -_LIT(KContactPrefered, "Contact Prefered"); -_LIT(KContactHome, "Contact Home"); -_LIT(KContactWork, "Contact Work"); _LIT(KPNGType, ".png"); _LIT(KSingleSpace, " "); @@ -67,8 +64,6 @@ __TRACE_CALLSTACK; CActiveScheduler::Add(this); - - //Connection to Landmark DB iLandmarkDb = CPosLandmarkDatabase::OpenL(); ExecuteAndDeleteLD(iLandmarkDb->InitializeL()); @@ -96,8 +91,6 @@ MYLOCLOGSTRING(" start contact db observation "); StartContactsChangeNotifierL(); - MYLOCLOGSTRING(" start landmark db observation "); - StartLandmarksChangeNotifier(); //set the folder path to store maptile imageFilePath.Zero(); @@ -107,6 +100,9 @@ iCalSession = CCalSession::NewL(); NotifyChangeL(status); + // Start listening to landmarks db changes + StartLandmarksChangeNotifier(); + } // ----------------------------------------------------------------------------- // CMyLocationsEngine::SetFolderPath() @@ -207,8 +203,10 @@ // ----------------------------------------------------------------------------- // CMyLocationsEngine::CMyLocationsEngine() : - CActive(EPriorityStandard), iCalSession(NULL), iCalView(NULL), iContactsDb( - NULL), iContactChangeNotifier(NULL), iLandmarkDb(NULL), + CActive(EPriorityStandard), + iCalSession(NULL), iCalView(NULL), + iContactsDb(NULL), iContactChangeNotifier(NULL), + iLandmarkDb(NULL), iMapTileInterface(NULL), iMyLocationsDatabaseManager(NULL), iMaptileDatabase(NULL), iAddressCompare(NULL), iMaptileGeocoderPluginAvailable(EFalse),iCalenderNotification(NULL) @@ -257,8 +255,7 @@ __TRACE_CALLSTACK; TBufC defaultFile = iCalSession->DefaultFileNameL(); - TChar drive = defaultFile[0]; - + TChar drive = defaultFile[0]; TRAP(aStatus, iCalSession->OpenL( defaultFile )); MYLOCLOGSTRING1("iCalSession->OpenL() status-%d",aStatus); if ( KErrNone == aStatus ) @@ -328,7 +325,7 @@ { __TRACE_CALLSTACK; - GeocodeUpdate::CreateContactdb(); + GeocodeUpdate::createContactdb(); iContactsDb = CContactDatabase::OpenL(); // Create CContactChangeNotifier object with 'this' object. iContactChangeNotifier = CContactChangeNotifier::NewL(*iContactsDb,this); @@ -346,7 +343,6 @@ SetActive(); } - // ----------------------------------------------------------------------------- // CMyLocationsEngine::CalChangeNotification() // Callback when there is a change in the calendar database. @@ -357,7 +353,7 @@ RArray& aChangeItems) { __TRACE_CALLSTACK; - + if(iCalenderNotification) { delete iCalenderNotification; @@ -381,7 +377,13 @@ case EChangeModify: { - + if (iMapTileRequestQueue.Count() > 0) + { + if (calChangeEntry.iEntryId == iMapTileRequestQueue[0]->iUId) + { + return; + } + } TLookupItem lookupItem; lookupItem.iSource = ESourceCalendar; lookupItem.iUid = calChangeEntry.iEntryId; @@ -396,6 +398,9 @@ lookupItem.iSource = ESourceCalendar; lookupItem.iUid = calChangeEntry.iEntryId; TRAP_IGNORE( iMaptileDatabase->DeleteEntryL(lookupItem)); + + TRAP_IGNORE( UpdateDatabaseL( NULL, + calChangeEntry.iEntryId, ESourceCalendar, EEntryDeleted ) ); break; } }; @@ -403,6 +408,10 @@ } } +// ----------------------------------------------------------------------------- +// CMyLocationsEngine::CalenderEntryAddedL() +// ----------------------------------------------------------------------------- +// void CMyLocationsEngine::CalenderEntryAddedL(TCalChangeEntry aCalChangeEntry) { __TRACE_CALLSTACK; @@ -474,13 +483,13 @@ { // If the contact is a modified one and it might already exist in // mylocations db, so delete it - iMyLocationsDatabaseManager->UpdateDatabaseL(NULL, + UpdateDatabaseL(NULL, aEvent.iContactId, ESourceContactsPref, EEntryDeleted); - iMyLocationsDatabaseManager->UpdateDatabaseL(NULL, + UpdateDatabaseL(NULL, aEvent.iContactId, ESourceContactsWork, EEntryDeleted); - iMyLocationsDatabaseManager->UpdateDatabaseL(NULL, + UpdateDatabaseL(NULL, aEvent.iContactId, ESourceContactsHome, EEntryDeleted); } @@ -496,7 +505,7 @@ // if home address available, update Mylocations. if (homeAddressLm) { - iMyLocationsDatabaseManager->UpdateDatabaseL(homeAddressLm, + UpdateDatabaseL(homeAddressLm, aEvent.iContactId, ESourceContactsHome, changeType); CleanupStack::PopAndDestroy(homeAddressLm); } @@ -504,7 +513,7 @@ // if work address available, update Mylocations. if (workAddressLm) { - iMyLocationsDatabaseManager->UpdateDatabaseL(workAddressLm, + UpdateDatabaseL(workAddressLm, aEvent.iContactId, ESourceContactsWork, changeType); CleanupStack::PopAndDestroy(workAddressLm); } @@ -512,7 +521,7 @@ // if prefered address available, update Mylocations. if (preferedAddressLm) { - iMyLocationsDatabaseManager->UpdateDatabaseL( + UpdateDatabaseL( preferedAddressLm, aEvent.iContactId, ESourceContactsPref, changeType); CleanupStack::PopAndDestroy(preferedAddressLm); @@ -529,15 +538,15 @@ // the contact is deleted, so delete the corresponding entries from database. // delete prefered address in database - iMyLocationsDatabaseManager->UpdateDatabaseL(NULL, aEvent.iContactId, + UpdateDatabaseL(NULL, aEvent.iContactId, ESourceContactsPref, EEntryDeleted); // delete work address in database - iMyLocationsDatabaseManager->UpdateDatabaseL(NULL, aEvent.iContactId, + UpdateDatabaseL(NULL, aEvent.iContactId, ESourceContactsWork, EEntryDeleted); // delete home address in database - iMyLocationsDatabaseManager->UpdateDatabaseL(NULL, aEvent.iContactId, + UpdateDatabaseL(NULL, aEvent.iContactId, ESourceContactsHome, EEntryDeleted); } } @@ -554,19 +563,20 @@ TLookupItem lookupItem; lookupItem.iUid = aEvent.iContactId; // If contact is deleted delete from mylocations db - /* if (aEvent.iType == EContactDbObserverEventContactDeleted) + if (aEvent.iType == EContactDbObserverEventContactDeleted) { - MYLOCLOGSTRING("EContactDbObserverEventContactDeleted" ); - // delete prefered address in database - lookupItem.iSource = ESourceContactsPref; - FindEntryAndDeleteL(lookupItem); + lookupItem.iSource = ESourceContactsPref; + iMaptileDatabase->DeleteEntryL(lookupItem); - lookupItem.iSource = ESourceContactsWork; - FindEntryAndDeleteL(lookupItem); + lookupItem.iSource = ESourceContactsWork; + iMaptileDatabase->DeleteEntryL(lookupItem); - lookupItem.iSource = ESourceContactsHome; - FindEntryAndDeleteL(lookupItem); - }*/ + lookupItem.iSource = ESourceContactsHome; + iMaptileDatabase->DeleteEntryL(lookupItem); + + MYLOCLOGSTRING("EContactDbObserverEventContactDeleted "); + return; + } //Get the contact item iEventType = aEvent.iType; @@ -709,26 +719,7 @@ } // } break; - } - case EContactDbObserverEventContactDeleted: - { - - lookupItem.iSource = ESourceContactsPref; - iMaptileDatabase->DeleteEntryL(lookupItem); - - lookupItem.iSource = ESourceContactsWork; - iMaptileDatabase->DeleteEntryL(lookupItem); - - lookupItem.iSource = ESourceContactsHome; - iMaptileDatabase->DeleteEntryL(lookupItem); - - MYLOCLOGSTRING("EContactDbObserverEventContactDeleted "); - /* // the contact is deleted, so delete the corresponding entries from database. - TLookupItem lookupItem; - lookupItem.iUid = aEvent.iContactId; - iMaptileDatabase->DeleteEntryL(lookupItem);*/ - break; - } + } case EContactDbObserverEventContactAdded: { MYLOCLOGSTRING("EContactDbObserverEventContactAdded" ); @@ -850,7 +841,7 @@ TInt CMyLocationsEngine::RequestExecute( CMapTileRequest* aMapTileRequest) { __TRACE_CALLSTACK; - TInt errorCode; + TInt errorCode = KErrNone; switch (aMapTileRequest->iAddressType) { case ESourceCalendar: @@ -867,6 +858,8 @@ aMapTileRequest->iImagePath, this)); break; } + default: + break; }; return errorCode; @@ -1050,19 +1043,6 @@ TRAP_IGNORE( landmark->SetLandmarkNameL( sName1 ) ); - if (aAddressType == EAddressPref) // default/prefered address - { - TRAP_IGNORE( landmark->SetLandmarkDescriptionL(KContactPrefered) ); - } - else if (aAddressType == EAddressWork) // work address - { - TRAP_IGNORE( landmark->SetLandmarkDescriptionL(KContactWork) ); - } - else // home address - { - TRAP_IGNORE( landmark->SetLandmarkDescriptionL(KContactHome) ); - } - // Set the street TInt adrId = FindContactsField(aContactItem, aAddressType, KUidContactFieldVCardMapADR); @@ -1184,6 +1164,23 @@ switch (aSrcType) { + // if source type is calendar + case ESourceCalendar: + { + switch( aChangeType ) + { + case EChangeAdd: + retVal = EEntryAdded; + break; + case EChangeDelete: + retVal = EEntryDeleted; + break; + case EChangeModify: + retVal = EEntryModified; + break; + } + break; + } // if source type is contacts case ESourceContactsPref: case ESourceContactsWork: @@ -1236,16 +1233,6 @@ } // ----------------------------------------------------------------------------- -// CMyLocationsEngine::MyLocationsDbManager() -// Gets handle to mylocations database manager. -// ----------------------------------------------------------------------------- -// -CMyLocationsDatabaseManager& CMyLocationsEngine::MyLocationsDbManager() -{ - __TRACE_CALLSTACK; - return *iMyLocationsDatabaseManager; -} -// ----------------------------------------------------------------------------- // CMyLocationsEngine::RunL() // Handles active object's request completion event. // ----------------------------------------------------------------------------- @@ -1255,70 +1242,37 @@ __TRACE_CALLSTACK; switch (iLmEvent.iEventType) { - case EPosLmEventLandmarkCreated: - case EPosLmEventLandmarkUpdated: - { - TBuf lmAddress; - CPosLandmark* readLandmark = iLandmarkDb->ReadLandmarkLC( - iLmEvent.iLandmarkItemId); - - if (readLandmark) + case EPosLmEventLandmarkCreated: + case EPosLmEventLandmarkUpdated: { - iMyLocationsDatabaseManager->GetLandmarkFullAddress(lmAddress, - readLandmark); - - CPosLandmark* landmark = CPosLandmark::NewL(); - CleanupStack::PushL(landmark); - - TRAP_IGNORE( landmark->SetLandmarkNameL( lmAddress )); - - TPtrC iconFileName; - TInt iconIndex; - TInt iconMaskIndex; - TInt err = readLandmark->GetIcon(iconFileName, iconIndex, - iconMaskIndex); - - if (err == KErrNone) - { - TRAP_IGNORE( landmark->SetIconL( - iconFileName, iconIndex, iconMaskIndex ) ); + CPosLandmark* readLandmark = iLandmarkDb->ReadLandmarkLC( + iLmEvent.iLandmarkItemId); + + if (readLandmark) + { + // update the entry in database. + UpdateDatabaseL( readLandmark, + iLmEvent.iLandmarkItemId, ESourceLandmarks, MapChangeType( + ESourceLandmarks, iLmEvent.iEventType ) ); + + CleanupStack::PopAndDestroy(readLandmark); } - - // update the entry in mylocations database. - iMyLocationsDatabaseManager->UpdateDatabaseL(landmark, - iLmEvent.iLandmarkItemId, ESourceLandmarks, MapChangeType( - ESourceLandmarks, iLmEvent.iEventType)); - - CleanupStack::PopAndDestroy(landmark); - CleanupStack::PopAndDestroy(readLandmark); } - } break; - case EPosLmEventLandmarkDeleted: - { - // delete the corresponding entries in mylocations database. - iMyLocationsDatabaseManager->UpdateDatabaseL(NULL, - iLmEvent.iLandmarkItemId, ESourceLandmarks, EEntryDeleted); - } + case EPosLmEventLandmarkDeleted: + { + // delete the corresponding entries in mylocations database. + UpdateDatabaseL(NULL, + iLmEvent.iLandmarkItemId, ESourceLandmarks, EEntryDeleted); + } break; - case EPosLmEventCategoryCreated: - { - // delete the corresponding entries in mylocations database. - iMyLocationsDatabaseManager->UpdateDatabaseL(NULL, - iLmEvent.iLandmarkItemId, ESourceLandmarksCategory, - MapChangeType(ESourceLandmarksCategory, iLmEvent.iEventType)); - } - break; - - } // start the change notifier again; StartLandmarksChangeNotifier(); } - // ----------------------------------------------------------------------------- // CMyLocationsEngine::DoCancel() // Implements cancellation of an outstanding request. @@ -1331,17 +1285,6 @@ } // ----------------------------------------------------------------------------- -// CMyLocationsEngine::RunError() -// Implements cancellation of an outstanding request. -// ----------------------------------------------------------------------------- -// -TInt CMyLocationsEngine::RunError(TInt /*aError*/) -{ - __TRACE_CALLSTACK; - return KErrNone; -} - -// ----------------------------------------------------------------------------- // CMyLocationsEngine::MapTilefetchingCompleted() // Handles the maptile fetching completion event and updates the maptile lookup db. // ----------------------------------------------------------------------------- @@ -1425,6 +1368,8 @@ iMaptileDatabase->CreateEntryL(aLookupItem); } + iMyLocationsDatabaseManager->UpdateMapTilePath( aLookupItem.iUid, aLookupItem.iSource, + aLookupItem.iFilePath ); } // ----------------------------------------------------------------------------- @@ -1442,21 +1387,29 @@ { switch (iMapTileRequestQueue[0]->iAddressType) { - /*//TODO: - case ESourceCalendar: - { - break; - }*/ - case ESourceContactsPref: - case ESourceContactsWork: - case ESourceContactsHome: - { - GeocodeUpdate::UpDate(iMapTileRequestQueue[0]->iUId, - iMapTileRequestQueue[0]->iAddressType, aLatitude, - aLongitude); - MYLOCLOGSTRING("Geo code updated into contact db"); - break; - } + //TODO: + case ESourceCalendar: + { + + CPosLandmark *landmark=NULL; + landmark=iMapTileInterface->GetLandMarkDetails(); + TRAP_IGNORE( UpdateDatabaseL( landmark, iMapTileRequestQueue[0]->iUId, + ESourceCalendar, + MapChangeType( ESourceCalendar, iMapTileRequestQueue[0]->iEventType ) ) ); + MYLOCLOGSTRING("Geo-codinate updated to calender db"); + break; + } + case ESourceContactsPref: + case ESourceContactsWork: + case ESourceContactsHome: + { + GeocodeUpdate::updateGeocodeToContactDB( + iMapTileRequestQueue[0]->iUId, + iMapTileRequestQueue[0]->iAddressType, aLatitude, + aLongitude); + MYLOCLOGSTRING("Geo-codinate updated to contact db"); + break; + } }; @@ -1464,4 +1417,23 @@ } +// ----------------------------------------------------------------------------- +// CMyLocationsEngine::UpdateDatabaseL() +// ----------------------------------------------------------------------------- +// +void CMyLocationsEngine::UpdateDatabaseL( CPosLandmark* aLandmark, const TUint32 aUid, + const TUint32 aSourceType, const TEntryChangeType aChangeType ) +{ + __TRACE_CALLSTACK; + Cancel(); + iMyLocationsDatabaseManager->UpdateDatabaseL( aLandmark, aUid, + aSourceType, aChangeType ); + if( aSourceType != ESourceLandmarks ) + { + StartLandmarksChangeNotifier(); + } + +} + //End of file + diff -r 0f22fb80ebba -r cd10d5b85554 locationdataharvester/mylocationsengine/src/mylocationslookupdb.cpp --- a/locationdataharvester/mylocationsengine/src/mylocationslookupdb.cpp Mon May 03 12:27:22 2010 +0300 +++ b/locationdataharvester/mylocationsengine/src/mylocationslookupdb.cpp Fri May 14 15:47:27 2010 +0300 @@ -15,7 +15,7 @@ * */ -#include +#include #include #include "mylocationslookupdb.h" #include "mylocationlogger.h" diff -r 0f22fb80ebba -r cd10d5b85554 locationdataharvester/rom/mylocations.iby --- a/locationdataharvester/rom/mylocations.iby Mon May 03 12:27:22 2010 +0300 +++ b/locationdataharvester/rom/mylocations.iby Fri May 14 15:47:27 2010 +0300 @@ -11,18 +11,18 @@ * * Contributors: * -* Description: +* Description: mylocations iby file * */ - #ifndef __Mylocations_IBY__ #define __Mylocations_IBY__ file=ABI_DIR\BUILD_DIR\mylocationsengine.exe PROGRAMS_DIR\mylocationsengine.exe file=ABI_DIR\BUILD_DIR\geocodeupdate.dll PROGRAMS_DIR\geocodeupdate.dll file=ABI_DIR\BUILD_DIR\maptileservice.dll PROGRAMS_DIR\maptileservice.dll +file=ABI_DIR\BUILD_DIR\locationdatalookupdb.dll PROGRAMS_DIR\locationdatalookupdb.dll //Resource file(s) for Mylocations application (mylocations.iby) data=DATAZ_\APP_RESOURCE_DIR\mylocations.rsc APP_RESOURCE_DIR\mylocations.rsc diff -r 0f22fb80ebba -r cd10d5b85554 locationpickerservice/inc/locationpickerappwindow.h --- a/locationpickerservice/inc/locationpickerappwindow.h Mon May 03 12:27:22 2010 +0300 +++ b/locationpickerservice/inc/locationpickerappwindow.h Fri May 14 15:47:27 2010 +0300 @@ -28,6 +28,7 @@ class LocationPickerService; class LocationPickerProxyModel; class LocationPickerLandscapeView; +class LocationPickerContent; class LocationPickerAppWindow: public HbMainWindow { @@ -58,15 +59,17 @@ //activate locationpicker view void activateLocationPickerView(); //changes the orientation - void changeOrientation(Qt::Orientation); + void changeOrientation( Qt::Orientation ); //complete the service void serviceComplete(); //sets the category ID during orientation change in collection content - void setCategoryID( quint32 acategoryId ); + void setCategoryId( quint32 acategoryId ); //handles orientation change in collection list void handleCollectionList(); //handle all List void allListHandle(); + //clear content models + void clearContentModels(); private: // search view LocationPickerSearchView* mLocationPickerSearchView; @@ -76,6 +79,8 @@ LocationPickerPotraitView* mLocationPickerPotraitView; //location picker landscape view LocationPickerLandscapeView* mLocationPickerLandscapeView; + //locationpicker content + LocationPickerContent* mLocationPickerContent; //location picker service; LocationPickerService *mService; //View Type diff -r 0f22fb80ebba -r cd10d5b85554 locationpickerservice/inc/locationpickercollectioncontent.h --- a/locationpickerservice/inc/locationpickercollectioncontent.h Mon May 03 12:27:22 2010 +0300 +++ b/locationpickerservice/inc/locationpickercollectioncontent.h Fri May 14 15:47:27 2010 +0300 @@ -34,14 +34,18 @@ ~LocationPickerCollectionContent(); //get proxy model LocationPickerProxyModel* getProxyModel(); - //get LocationPickerDataManager - LocationPickerDataManager* getDataManager(); - + //get standard model + QStandardItemModel* getStandardModel(); + // gets the data pointed to by index and copies to the aValue + void getData( QModelIndex aIndex, quint32& aValue ); + //return true if location entry is found + bool locationFound(); private: Qt::Orientations mOrientation; LocationPickerProxyModel *mProxyModel; QStandardItemModel *mModel; LocationPickerDataManager *mDataManager; + bool mLocationFound; }; #endif // LOCATIONPICKERCOLLECTIONCONTENT_H diff -r 0f22fb80ebba -r cd10d5b85554 locationpickerservice/inc/locationpickercollectionlistcontent.h --- a/locationpickerservice/inc/locationpickercollectionlistcontent.h Mon May 03 12:27:22 2010 +0300 +++ b/locationpickerservice/inc/locationpickercollectionlistcontent.h Fri May 14 15:47:27 2010 +0300 @@ -35,8 +35,8 @@ ~LocationPickerCollectionListContent(); //get standard model QStandardItemModel* getStandardModel(); - //get LocationPickerDataManager - LocationPickerDataManager* getDataManager(); + // gets the data pointed to by index and copies to the aValue + void getData( QModelIndex aIndex, quint32& aValue ); private: Qt::Orientation mOrientation; diff -r 0f22fb80ebba -r cd10d5b85554 locationpickerservice/inc/locationpickercontent.h --- a/locationpickerservice/inc/locationpickercontent.h Mon May 03 12:27:22 2010 +0300 +++ b/locationpickerservice/inc/locationpickercontent.h Fri May 14 15:47:27 2010 +0300 @@ -34,33 +34,26 @@ public: // contructor - LocationPickerContent(Qt::Orientation aOrientation ); + LocationPickerContent(); // destructor ~LocationPickerContent(); - // locationsNotFound - bool locationsFound(); - - //get proxy model - LocationPickerProxyModel* getListProxyModel(); + //get standard List Model + QStandardItemModel* getStandardListModel(); - //get standard Model - QStandardItemModel* getStandardModel(); + //get standard Grid Model + QStandardItemModel* getStandardGridModel(); - //get data manager - LocationPickerDataManager* getDataManager(); + void createNoEntryDisplay( QStandardItemModel *aModel ); - //get hbgridview proxy model - LocationPickerProxyModel* getGridProxyModel(); + bool populateModel( Qt::Orientation aOrientation ); private: Qt::Orientations mOrientation; - LocationPickerProxyModel *mListProxyModel; - LocationPickerProxyModel *mProxyGridModel; LocationPickerDataManager *mDataManager; - QStandardItemModel *mModel; - bool mLocationsFound; + QStandardItemModel *mListModel; + QStandardItemModel *mGridModel; }; diff -r 0f22fb80ebba -r cd10d5b85554 locationpickerservice/inc/locationpickerdatamanager.h --- a/locationpickerservice/inc/locationpickerdatamanager.h Mon May 03 12:27:22 2010 +0300 +++ b/locationpickerservice/inc/locationpickerdatamanager.h Fri May 14 15:47:27 2010 +0300 @@ -30,18 +30,17 @@ class LocationPickerDataManager { public: + static LocationPickerDataManager* getInstance(); +private: // constructors LocationPickerDataManager(); - LocationPickerDataManager( QStandardItemModel &aModel, TViewType aViewType ); // destructor ~LocationPickerDataManager(); - +public: // populates the model with data - bool populateModel(Qt::Orientations aOrientation,quint32 aCollectionId = 0); - - // gets the data pointed to by index and copies to the aValue - void getData(int index, quint32& aValue ); + bool populateModel( QStandardItemModel &aModel, TViewType aViewType, + Qt::Orientations aOrientation,quint32 aCollectionId = 0); // gets the location item void getLocationItem( quint32 aLmId, QLocationPickerItem &aItem ); diff -r 0f22fb80ebba -r cd10d5b85554 locationpickerservice/inc/locationpickerdatamanager_p.h --- a/locationpickerservice/inc/locationpickerdatamanager_p.h Mon May 03 12:27:22 2010 +0300 +++ b/locationpickerservice/inc/locationpickerdatamanager_p.h Fri May 14 15:47:27 2010 +0300 @@ -22,10 +22,8 @@ #include "locationpickertypes.h" #include "qlocationpickeritem.h" -class CPosLmItemIterator; -class CPosLandmarkDatabase; -class CPosLmCategoryManager; -class CPosLandmarkSearch; +class LocationDataLookupDb; +class QLookupItem; /** Class used for managing the data of model * @@ -33,40 +31,30 @@ class LocationPickerDataManagerPrivate { public: - // constructors + // constructor LocationPickerDataManagerPrivate(); - LocationPickerDataManagerPrivate( QStandardItemModel &aModel, TViewType aViewType ); // destructor ~LocationPickerDataManagerPrivate(); // populates the model with data - bool populateModel( const Qt::Orientations aOrientation, quint32 aCollectionId = 0 ); - - // gets the data pointed to by index and copies to the aValue - void getData(int index, quint32& aValue ); + bool populateModel( QStandardItemModel &aModel, TViewType aViewType, + const Qt::Orientations aOrientation, quint32 aCollectionId = 0 ); // gets the location item void getLocationItem( quint32 aLmId, QLocationPickerItem &aItem ); private: - // populates model - bool populateModelL( quint32 aCollectionId ); // populates landmarks - void populateLandmarksL(); + bool populateLandmarks( QList &aItemArray ); // populates collections - void populateCollectionsL(); - // gets the location item - void getLocationItemL( quint32 aLmId, QLocationPickerItem &aItem ); + void populateCollections(); private: Qt::Orientations mOrientation; QStandardItemModel *mModel; TViewType mViewType; - CPosLmItemIterator* mIterator; - CPosLandmarkDatabase* mLandmarkDb; - CPosLmCategoryManager *mLmCategoryManager; - CPosLandmarkSearch *mLandmarkSearch; + LocationDataLookupDb *mDb; quint32 mCategoryId; }; diff -r 0f22fb80ebba -r cd10d5b85554 locationpickerservice/inc/locationpickerdocumentloader.h --- a/locationpickerservice/inc/locationpickerdocumentloader.h Mon May 03 12:27:22 2010 +0300 +++ b/locationpickerservice/inc/locationpickerdocumentloader.h Fri May 14 15:47:27 2010 +0300 @@ -18,7 +18,7 @@ #ifndef LOCATIONPICKERDOCUMENTLOADER_H_ #define LOCATIONPICKERDOCUMENTLOADER_H_ -#include +#include class LocationPickerDocumentLoader : public HbDocumentLoader { @@ -40,7 +40,7 @@ /** * from base class */ - QObject *createObject(const QString& type, const QString &name); + QObject *createObject( const QString& type, const QString &name ); }; #endif /* LOCATIONPICKERDOCUMENTLOADER_H_ */ diff -r 0f22fb80ebba -r cd10d5b85554 locationpickerservice/inc/locationpickerlandscapeview.h --- a/locationpickerservice/inc/locationpickerlandscapeview.h Mon May 03 12:27:22 2010 +0300 +++ b/locationpickerservice/inc/locationpickerlandscapeview.h Fri May 14 15:47:27 2010 +0300 @@ -20,7 +20,7 @@ -#include +#include #include #include "locationpickertypes.h" @@ -28,9 +28,8 @@ class HbListView; class QStandardItemModel; class LocationPickerProxyModel; -class LocationPickerContent; -class LocationPickerCollectionListContent; class LocationPickerCollectionContent; +class LocatipnPickerProxyModel; class HbGridViewItem; class HbGridView; class HbAction; @@ -44,15 +43,12 @@ Q_OBJECT public: // constructor - LocationPickerLandscapeView(HbDocumentLoader* aLoader); + LocationPickerLandscapeView( HbDocumentLoader* aLoader ); // destructor ~LocationPickerLandscapeView(); -private: - //disable the tabs - void disableTabs(); public: //get the items from docml and connect to respective slots - void init(Qt::Orientation aOrientation ); + void init( Qt::Orientation aOrientation, QStandardItemModel *aModel ); //Set the appropriate model on grid view void manageGridView(); //Create collection list and sets to list view @@ -62,10 +58,12 @@ //Get the view type TViewType getViewType(); //set the view type - void setViewType(TViewType aViewType); + void setViewType( TViewType aViewType ); + //clear collection content + void clearContentModel(); private slots: //slot to handle list item actions - void handleActivated(const QModelIndex &aIndex); + void handleActivated( const QModelIndex &aIndex ); //slots to handle menu action items void sortDescending(); void sortAscending(); @@ -82,14 +80,14 @@ void handleCollectionList(); void selectItem( quint32 aLm ); void completeService(); - void sendCategoryID( quint32 acategoryId ); + void sendCategoryID( quint32 acategoryId ); + void collectionContentExited(); private: //document loader HbDocumentLoader* mDocumentLoader; - // all view - LocationPickerContent* mLocationPickerContent; - // collection list content - LocationPickerCollectionListContent* mLocationPickerCollectionListContent; + //locationPickerProxyModel + LocationPickerProxyModel *mProxyModel; + QStandardItemModel *mModel; //actions HbAction *mAllAction; HbAction *mCollectionAction; diff -r 0f22fb80ebba -r cd10d5b85554 locationpickerservice/inc/locationpickerpotraitview.h --- a/locationpickerservice/inc/locationpickerpotraitview.h Mon May 03 12:27:22 2010 +0300 +++ b/locationpickerservice/inc/locationpickerpotraitview.h Fri May 14 15:47:27 2010 +0300 @@ -19,7 +19,7 @@ #define LOCATIONPICKERPOTRAITVIEW_H -#include +#include #include #include "locationpickertypes.h" @@ -27,7 +27,6 @@ class HbListView; class QStandardItemModel; class LocationPickerProxyModel; -class LocationPickerContent; class LocationPickerCollectionListContent; class LocationPickerCollectionContent; class HbListViewItem; @@ -41,15 +40,14 @@ Q_OBJECT public: // constructor - LocationPickerPotraitView(HbDocumentLoader* aLoader); + LocationPickerPotraitView( HbDocumentLoader* aLoader ); // destructor ~LocationPickerPotraitView(); -private: +public: //disable the tabs - void disableTabs(); -public: + void disableTabs( QStandardItemModel *aModel ); //get the items from docml and connect to respective slots - void init(Qt::Orientation aOrientation ); + void init( bool aPopulated, Qt::Orientation aOrientation, QStandardItemModel *aModel ); //Set the appropriate model on list view void manageListView(); //Create collection list and sets to list view @@ -59,10 +57,12 @@ //Get the view type TViewType getViewType(); //set the view type - void setViewType(TViewType aViewType); + void setViewType( TViewType aViewType ); + //clear collection Model + void clearContentModel(); private slots: //slot to handle list item actions - void handleActivated(const QModelIndex &aIndex); + void handleActivated( const QModelIndex &aIndex ); //slots to handle menu action items void sortDescending(); void sortAscending(); @@ -80,13 +80,16 @@ void completeService(); void sendCategoryID( quint32 aCategoryId ); void handleAllList(); + void collectionContentExited(); private: //document loader HbDocumentLoader* mDocumentLoader; - // all view - LocationPickerContent* mLocationPickerContent; // collection list content LocationPickerCollectionListContent* mLocationPickerCollectionListContent; + //locationPickerProxyModel + LocationPickerProxyModel *mProxyModel; + //standard model + QStandardItemModel *mModel; //actions HbAction *mAllAction; HbAction *mCollectionAction; diff -r 0f22fb80ebba -r cd10d5b85554 locationpickerservice/inc/locationpickerproxymodel.h --- a/locationpickerservice/inc/locationpickerproxymodel.h Mon May 03 12:27:22 2010 +0300 +++ b/locationpickerservice/inc/locationpickerproxymodel.h Fri May 14 15:47:27 2010 +0300 @@ -31,16 +31,16 @@ public: // constructor - LocationPickerProxyModel(Qt::Orientations aOrientation , QObject *parent = 0); + LocationPickerProxyModel( Qt::Orientations aOrientation , QObject *parent = 0 ); // used to - void filterParameterChanged(QString aSearchText); + void filterParameterChanged( QString aSearchText ); protected: // override QSortFilterProxyModel function to define logic for filter - bool filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const; + bool filterAcceptsRow( int sourceRow, const QModelIndex &sourceParent ) const; // override QSortFilterProxyModel function to define logic for sort - bool lessThan(const QModelIndex &left, const QModelIndex &right) const; + bool lessThan( const QModelIndex &left, const QModelIndex &right ) const; private: // search string diff -r 0f22fb80ebba -r cd10d5b85554 locationpickerservice/inc/locationpickersearchview.h --- a/locationpickerservice/inc/locationpickersearchview.h Mon May 03 12:27:22 2010 +0300 +++ b/locationpickerservice/inc/locationpickersearchview.h Fri May 14 15:47:27 2010 +0300 @@ -38,14 +38,16 @@ Q_OBJECT public: // constructor - LocationPickerSearchView(HbDocumentLoader &aLoader); + LocationPickerSearchView( HbDocumentLoader &aLoader ); // destructor ~LocationPickerSearchView(); //initialize the action items and connect to slots - void init(); + void init( QStandardItemModel *aModel ); +private: + void getData( QModelIndex aIndex, quint32& aValue ); private slots: // slot to perform search - void doSearch(QString aCriteria); + void doSearch( QString aCriteria ); // slot to handle select event on a list item void handleActivated(const QModelIndex &aIndex); // slot to handle backbutton on search panel @@ -64,8 +66,6 @@ HbListView *mListView; // search panel HbSearchPanel *mSearchPanel; - // handle to data manager to populate model - LocationPickerDataManager *mDataManager; //TextItem HbTextItem* mEmptyLabel; //Graphicslayout diff -r 0f22fb80ebba -r cd10d5b85554 locationpickerservice/inc/locationpickertypes.h --- a/locationpickerservice/inc/locationpickertypes.h Mon May 03 12:27:22 2010 +0300 +++ b/locationpickerservice/inc/locationpickertypes.h Fri May 14 15:47:27 2010 +0300 @@ -19,6 +19,7 @@ #define LOCATIONPICKERTYPES_H #include +#include // separator const QString KSeparator(","); @@ -34,9 +35,12 @@ //Contacts collection icon const QString KCollectionsContacts("qtg_small_contacts"); -//Contacts collection icon +//Calendar collection icon const QString KCollectionsCalendar("qtg_small_calendar"); +//Places collection icon +const QString KCollectionsPlaces("qtg_small_favorite"); + //Contacts type prefered icon const QString KContactPrefIcon("qtg_mono_favourites"); //Contacts type home icon @@ -44,13 +48,6 @@ //Contacts type work icon const QString KContactWorkIcon("qtg_mono_work"); - -// strings used to differentiate the contact address type -const QString KContactHome("Contact Home"); -const QString KContactWork("Contact Work"); -const QString KContactsString("Others"); - - /** * Defines view type in location picker */ diff -r 0f22fb80ebba -r cd10d5b85554 locationpickerservice/locationpickerservice.pro --- a/locationpickerservice/locationpickerservice.pro Mon May 03 12:27:22 2010 +0300 +++ b/locationpickerservice/locationpickerservice.pro Fri May 14 15:47:27 2010 +0300 @@ -35,15 +35,13 @@ TARGET.CAPABILITY = ALL \ -TCB - LIBS += -llbs \ - -leposlandmarks \ - -leposlmsearchlib } # ##### qthighway CONFIG += service LIBS += -lxqservice \ - -lxqserviceutil + -lxqserviceutil \ + -llocationdatalookupdb SERVICE.FILE = service_conf.xml SERVICE.OPTIONS = embeddable SERVICE.OPTIONS += hidden diff -r 0f22fb80ebba -r cd10d5b85554 locationpickerservice/resources/locationpickerlandscape.docml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/locationpickerservice/resources/locationpickerlandscape.docml Fri May 14 15:47:27 2010 +0300 @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -r 0f22fb80ebba -r cd10d5b85554 locationpickerservice/resources/locationpickerpotrait.docml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/locationpickerservice/resources/locationpickerpotrait.docml Fri May 14 15:47:27 2010 +0300 @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -r 0f22fb80ebba -r cd10d5b85554 locationpickerservice/resources/locationpickersearchview.docml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/locationpickerservice/resources/locationpickersearchview.docml Fri May 14 15:47:27 2010 +0300 @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -r 0f22fb80ebba -r cd10d5b85554 locationpickerservice/src/locationpickerappwindow.cpp --- a/locationpickerservice/src/locationpickerappwindow.cpp Mon May 03 12:27:22 2010 +0300 +++ b/locationpickerservice/src/locationpickerappwindow.cpp Fri May 14 15:47:27 2010 +0300 @@ -25,21 +25,25 @@ #include "locationpickerdatamanager.h" #include "locationpickerdocumentloader.h" #include "locationpickerlandscapeview.h" +#include "locationpickercontent.h" // ---------------------------------------------------------------------------- // LocationPickerAppWindow::LocationPickerAppWindow() // ---------------------------------------------------------------------------- -LocationPickerAppWindow::LocationPickerAppWindow(QWidget *parent, Hb::WindowFlags windowFlags) +LocationPickerAppWindow::LocationPickerAppWindow( QWidget *parent, Hb::WindowFlags windowFlags ) :HbMainWindow(parent, windowFlags), mLocationPickerSearchView(NULL), mLocationPickerDocumentLoader(NULL), mLocationPickerPotraitView(NULL), mLocationPickerLandscapeView(NULL), + mLocationPickerContent(NULL), mService(NULL), mviewType(ELocationPickerContent) { // create the service object; mService = new LocationPickerService(this); + mLocationPickerContent = new LocationPickerContent(); + //create document loader object mLocationPickerDocumentLoader = new LocationPickerDocumentLoader(); @@ -51,28 +55,39 @@ QGraphicsWidget *locationPickerWidget = mLocationPickerDocumentLoader->findWidget("LocationPickerPotraitView"); Q_ASSERT_X((locationPickerWidget != 0), "locationpickerservice", "invalid DocML file"); mLocationPickerPotraitView = qobject_cast(locationPickerWidget); + bool populated = mLocationPickerContent->populateModel(Qt::Vertical); //initialize potrait widgets and connect to respective signals - mLocationPickerPotraitView->init(Qt::Vertical); + mLocationPickerPotraitView->init(populated, Qt::Vertical, mLocationPickerContent->getStandardListModel()); connectPotraitSlots(); - addView( mLocationPickerPotraitView ); + if(!populated) + { + mLocationPickerPotraitView->disableTabs(mLocationPickerContent->getStandardListModel()); + addView( mLocationPickerPotraitView ); + setCurrentView(mLocationPickerPotraitView); + } + else + { + addView( mLocationPickerPotraitView ); - mLocationPickerDocumentLoader->reset(); + mLocationPickerDocumentLoader->reset(); - //load the Locationpicker landscape view - mLocationPickerDocumentLoader->load(":/locationpickerlandscape.docml", &ok); - Q_ASSERT_X(ok, "locationpickerservice", "invalid DocML file"); - //find graphics location picker landscape view - locationPickerWidget = mLocationPickerDocumentLoader->findWidget("LocationPickerLandscapeView"); - Q_ASSERT_X((locationPickerWidget != 0), "locationpickerservice", "invalid DocML file"); - mLocationPickerLandscapeView = qobject_cast(locationPickerWidget); - //initialize widgets and connect to respective signals - mLocationPickerLandscapeView->init(Qt::Horizontal); - connectLandscapeSlots(); - addView(mLocationPickerLandscapeView); - //connect to orientationChanged signal - connect(this, SIGNAL(orientationChanged(Qt::Orientation)),this, SLOT(changeOrientation(Qt::Orientation))); - //launch the view in current orientation - changeOrientation(this->orientation()); + //load the Locationpicker landscape view + mLocationPickerDocumentLoader->load(":/locationpickerlandscape.docml", &ok); + Q_ASSERT_X(ok, "locationpickerservice", "invalid DocML file"); + //find graphics location picker landscape view + locationPickerWidget = mLocationPickerDocumentLoader->findWidget("LocationPickerLandscapeView"); + Q_ASSERT_X((locationPickerWidget != 0), "locationpickerservice", "invalid DocML file"); + mLocationPickerLandscapeView = qobject_cast(locationPickerWidget); + mLocationPickerContent->populateModel(Qt::Horizontal); + //initialize widgets and connect to respective signals + mLocationPickerLandscapeView->init(Qt::Horizontal, mLocationPickerContent->getStandardGridModel()); + connectLandscapeSlots(); + addView(mLocationPickerLandscapeView); + //connect to orientationChanged signal + connect(this, SIGNAL(orientationChanged(Qt::Orientation)),this, SLOT(changeOrientation(Qt::Orientation))); + //launch the view in current orientation + changeOrientation(this->orientation()); + } } // ---------------------------------------------------------------------------- @@ -85,6 +100,7 @@ delete mLocationPickerDocumentLoader; delete mLocationPickerPotraitView; delete mLocationPickerLandscapeView; + delete mLocationPickerContent; } // ---------------------------------------------------------------------------- @@ -93,8 +109,7 @@ void LocationPickerAppWindow::itemSelected( quint32 aLmid ) { QLocationPickerItem item; - LocationPickerDataManager dataManager; - dataManager.getLocationItem(aLmid, item); + LocationPickerDataManager::getInstance()->getLocationItem(aLmid, item); // complete the request mService->complete(item); } @@ -124,7 +139,7 @@ Q_ASSERT_X((mLocationPickerSearchView != 0), "mLocationPickerSearchView", "qobject cast failure"); //initialize the action items and connect to slots - mLocationPickerSearchView->init(); + mLocationPickerSearchView->init(mLocationPickerContent->getStandardListModel()); connect(mLocationPickerSearchView,SIGNAL(switchView()),this,SLOT(activateLocationPickerView())); connect(mLocationPickerSearchView,SIGNAL(selectItem( quint32 )),this,SLOT(itemSelected( quint32 ))); addView(mLocationPickerSearchView); @@ -132,6 +147,7 @@ //set LocationPickerSearchview as current view setCurrentView(mLocationPickerSearchView); mviewType = ELocationPickerSearchView; + } // ---------------------------------------------------------------------------- @@ -158,7 +174,7 @@ // ---------------------------------------------------------------------------- // LocationPickerAppWindow::changeOrientation() // ---------------------------------------------------------------------------- -void LocationPickerAppWindow::changeOrientation(Qt::Orientation) +void LocationPickerAppWindow::changeOrientation( Qt::Orientation ) { //check the orientation and load view accordingly if( orientation() == (Qt::Horizontal )) @@ -214,8 +230,9 @@ connect(mLocationPickerPotraitView,SIGNAL(switchToSearchView()),this,SLOT(activateSearchView())); connect(mLocationPickerPotraitView,SIGNAL(selectItem( quint32 )),this,SLOT(itemSelected( quint32 ))); connect(mLocationPickerPotraitView,SIGNAL(completeService()),this,SLOT(serviceComplete())); - connect(mLocationPickerPotraitView,SIGNAL(sendCategoryID( quint32 )),this,SLOT(setCategoryID( quint32 ))); + connect(mLocationPickerPotraitView,SIGNAL(sendCategoryID( quint32 )),this,SLOT(setCategoryId( quint32 ))); connect(mLocationPickerPotraitView,SIGNAL(handleAllList()),this,SLOT(allListHandle())); + connect(mLocationPickerPotraitView,SIGNAL(collectionContentExited()),this,SLOT(clearContentModels())); } // ---------------------------------------------------------------------------- @@ -226,14 +243,15 @@ connect(mLocationPickerLandscapeView,SIGNAL(switchToSearchView()),this,SLOT(activateSearchView())); connect(mLocationPickerLandscapeView,SIGNAL(selectItem( quint32 )),this,SLOT(itemSelected( quint32 ))); connect(mLocationPickerLandscapeView,SIGNAL(completeService()),this,SLOT(serviceComplete())); - connect(mLocationPickerLandscapeView,SIGNAL(sendCategoryID( quint32 )),this,SLOT(setCategoryID( quint32 ))); + connect(mLocationPickerLandscapeView,SIGNAL(sendCategoryID( quint32 )),this,SLOT(setCategoryId( quint32 ))); connect(mLocationPickerLandscapeView,SIGNAL(handleCollectionList()),this,SLOT(handleCollectionList())); + connect(mLocationPickerLandscapeView,SIGNAL(collectionContentExited()),this,SLOT(clearContentModels())); } // ---------------------------------------------------------------------------- -// LocationPickerAppWindow::setCategoryID() +// LocationPickerAppWindow::setCategoryId() // ---------------------------------------------------------------------------- -void LocationPickerAppWindow::setCategoryID( quint32 acategoryId ) +void LocationPickerAppWindow::setCategoryId( quint32 acategoryId ) { //set the same category id to both views mLocationPickerPotraitView->setCategoryID(acategoryId); @@ -275,4 +293,13 @@ setCurrentView(mLocationPickerLandscapeView); } +// ---------------------------------------------------------------------------- +// LocationPickerAppWindow::clearContentModels() +// ---------------------------------------------------------------------------- +void LocationPickerAppWindow::clearContentModels() +{ + mLocationPickerLandscapeView->clearContentModel(); + mLocationPickerPotraitView->clearContentModel(); +} + Q_IMPLEMENT_USER_METATYPE(QLocationPickerItem) diff -r 0f22fb80ebba -r cd10d5b85554 locationpickerservice/src/locationpickercollectioncontent.cpp --- a/locationpickerservice/src/locationpickercollectioncontent.cpp Mon May 03 12:27:22 2010 +0300 +++ b/locationpickerservice/src/locationpickercollectioncontent.cpp Fri May 14 15:47:27 2010 +0300 @@ -31,12 +31,14 @@ :mOrientation(aOrientation), mProxyModel(NULL), mModel(NULL), - mDataManager(NULL) + mDataManager(NULL), + mLocationFound(false) { // Create a standard model for the view list mModel = new QStandardItemModel( this ); - mDataManager = new LocationPickerDataManager( *mModel, ELocationPickerCollectionContent ); - if( mDataManager->populateModel( mOrientation , aCollectionId ) ) + // create data manager to manage data in the model + mDataManager = LocationPickerDataManager::getInstance(); + if( mDataManager->populateModel( *mModel, ELocationPickerCollectionContent, mOrientation , aCollectionId ) ) { // Create the proxy model. mProxyModel = new LocationPickerProxyModel(mOrientation); @@ -46,6 +48,7 @@ mProxyModel->setSortCaseSensitivity(Qt::CaseInsensitive); // sort mProxyModel->sort(0, Qt::AscendingOrder); + mLocationFound = true; } else { @@ -53,6 +56,7 @@ QStandardItem *modelItem = new QStandardItem(); modelItem->setData(QVariant(hbTrId("txt_lint_list_no_location_entries_present")), Qt::DisplayRole); mModel->appendRow( modelItem ); + mLocationFound = false; } } @@ -63,22 +67,39 @@ { delete mProxyModel; delete mModel; - delete mDataManager; } // ---------------------------------------------------------------- // LocationPickerCollectionContent::getProxyModel // ----------------------------------------------------------------- LocationPickerProxyModel* LocationPickerCollectionContent::getProxyModel() - { +{ return mProxyModel; - } - +} // ---------------------------------------------------------------- -// LocationPickerCollectionContent::getDataManager +// LocationPickerCollectionContent::getStandardModel // ----------------------------------------------------------------- -LocationPickerDataManager* LocationPickerCollectionContent::getDataManager() - { - return mDataManager; - } +QStandardItemModel* LocationPickerCollectionContent::getStandardModel() +{ + return mModel; +} + +// ---------------------------------------------------------------------------- +// LocationPickerCollectionContent::getData() +// ---------------------------------------------------------------------------- + +void LocationPickerCollectionContent::getData( QModelIndex aIndex, quint32& aValue ) +{ + QStandardItem* item = mModel->item( aIndex.row(), aIndex.column() ); + QVariant var = item->data( Qt::UserRole ); + aValue = var.toUInt(); +} + +// ---------------------------------------------------------------------------- +// LocationPickerCollectionContent::locationFound() +// ---------------------------------------------------------------------------- +bool LocationPickerCollectionContent::locationFound() +{ + return mLocationFound; +} diff -r 0f22fb80ebba -r cd10d5b85554 locationpickerservice/src/locationpickercollectionlistcontent.cpp --- a/locationpickerservice/src/locationpickercollectionlistcontent.cpp Mon May 03 12:27:22 2010 +0300 +++ b/locationpickerservice/src/locationpickercollectionlistcontent.cpp Fri May 14 15:47:27 2010 +0300 @@ -25,16 +25,16 @@ // ---------------------------------------------------------------------- // LocationPickerCollectionListContent::LocationPickerCollectionListContent() // ---------------------------------------------------------------------- -LocationPickerCollectionListContent::LocationPickerCollectionListContent(Qt::Orientation aOrientation ) +LocationPickerCollectionListContent::LocationPickerCollectionListContent( Qt::Orientation aOrientation ) :mOrientation(aOrientation), mModel(NULL), mDataManager(NULL) { // Create a standard model for the view list mModel = new QStandardItemModel( this ); - - mDataManager = new LocationPickerDataManager( *mModel, ELocationPickerCollectionListContent ); - mDataManager->populateModel( mOrientation ); + // create data manager to manage data in the model + mDataManager = LocationPickerDataManager::getInstance(); + mDataManager->populateModel( *mModel, ELocationPickerCollectionListContent, mOrientation ); } // ---------------------------------------------------------------------- @@ -42,8 +42,6 @@ // ---------------------------------------------------------------------- LocationPickerCollectionListContent::~LocationPickerCollectionListContent() { - if( mDataManager ) - delete mDataManager; delete mModel; } @@ -55,11 +53,13 @@ return mModel; } -// ---------------------------------------------------------------- -// LocationPickerCollectionListContent::getDataManager -// ----------------------------------------------------------------- -LocationPickerDataManager* LocationPickerCollectionListContent::getDataManager() - { - return mDataManager; - } +// ---------------------------------------------------------------------------- +// LocationPickerCollectionListContent::getData() +// ---------------------------------------------------------------------------- +void LocationPickerCollectionListContent::getData( QModelIndex aIndex, quint32& aValue ) +{ + QStandardItem* item = mModel->item( aIndex.row(), aIndex.column() ); + QVariant var = item->data( Qt::UserRole ); + aValue = var.toUInt(); +} diff -r 0f22fb80ebba -r cd10d5b85554 locationpickerservice/src/locationpickercontent.cpp --- a/locationpickerservice/src/locationpickercontent.cpp Mon May 03 12:27:22 2010 +0300 +++ b/locationpickerservice/src/locationpickercontent.cpp Fri May 14 15:47:27 2010 +0300 @@ -27,69 +27,52 @@ // ----------------------------------------------------------------------------- // LocationPickerContent::LocationPickerContent() // ----------------------------------------------------------------------------- -LocationPickerContent::LocationPickerContent( Qt::Orientation aOrientation ) - :mOrientation(aOrientation), - mListProxyModel(NULL), - mProxyGridModel(NULL), - mDataManager(NULL), - mModel(NULL), - mLocationsFound(true) +LocationPickerContent::LocationPickerContent() + :mDataManager(NULL), + mListModel(NULL), + mGridModel(NULL) { - // Create a standard model for the list view - mModel = new QStandardItemModel( this ); // create data manager to manage data in the model - mDataManager = new LocationPickerDataManager( *mModel, ELocationPickerContent ); - if(mOrientation == Qt::Vertical) + mDataManager = LocationPickerDataManager::getInstance(); + +} + +// ----------------------------------------------------------------------------- +// LocationPickerContent::populateModel() +// ----------------------------------------------------------------------------- +bool LocationPickerContent::populateModel( Qt::Orientation aOrientation ) +{ + bool locationsFound; + if(aOrientation == Qt::Vertical) { - if( mDataManager->populateModel(mOrientation) ) + // Create a standard model for the list view + mListModel = new QStandardItemModel( this ); + if( mDataManager->populateModel( *mListModel, ELocationPickerContent, aOrientation) ) { - // Create the proxy model and set source model - mListProxyModel = new LocationPickerProxyModel( mOrientation, this ); - mListProxyModel->setSourceModel(mModel); - // set sort properties - mListProxyModel->setDynamicSortFilter(TRUE); - mListProxyModel->setSortRole(Qt::DisplayRole); - mListProxyModel->setSortCaseSensitivity(Qt::CaseInsensitive); - - // sort in ascending order - mListProxyModel->sort(0, Qt::AscendingOrder); - mLocationsFound = true; + locationsFound = true; } else { - // no locations to display. - QStandardItem *modelItem = new QStandardItem(); - modelItem->setData(QVariant(hbTrId("txt_lint_list_no_location_entries_present")), Qt::DisplayRole); - mModel->appendRow( modelItem ); - mLocationsFound = false; + createNoEntryDisplay(mListModel); + locationsFound = false; } } //for landscape view else { - if( mDataManager->populateModel(mOrientation) ) + // Create a standard model for the grid view + mGridModel = new QStandardItemModel( this ); + if( mDataManager->populateModel(*mGridModel, ELocationPickerContent, aOrientation) ) { - // Create the proxy model and set source model - mProxyGridModel = new LocationPickerProxyModel( mOrientation , this ); - mProxyGridModel->setSourceModel(mModel); - // set sort properties - mProxyGridModel->setDynamicSortFilter(TRUE); - mProxyGridModel->setSortRole(Qt::DisplayRole); - mProxyGridModel->setSortCaseSensitivity(Qt::CaseInsensitive); - - // sort in ascending order - mProxyGridModel->sort(0, Qt::AscendingOrder); - mLocationsFound = true; + locationsFound = true; } else { - // no locations to display. - QStandardItem *modelItem = new QStandardItem(); - modelItem->setData(QVariant(hbTrId("txt_lint_list_no_location_entries_present")), Qt::DisplayRole); - mModel->appendRow( modelItem ); - mLocationsFound = false; + createNoEntryDisplay(mGridModel); + locationsFound = false; } } + return locationsFound; } // ----------------------------------------------------------------------------- @@ -97,50 +80,34 @@ // ----------------------------------------------------------------------------- LocationPickerContent::~LocationPickerContent() { - // delete data manager - if( mDataManager ) - delete mDataManager; - delete mProxyGridModel; - delete mListProxyModel; - delete mModel; + delete mListModel; + delete mGridModel; } // ----------------------------------------------------------------------------- -// LocationPickerContent::locationsFound() +// LocationPickerContent::getStandardListModel() // ----------------------------------------------------------------------------- -bool LocationPickerContent::locationsFound() +QStandardItemModel* LocationPickerContent::getStandardListModel() { - return mLocationsFound; + return mListModel; } // ----------------------------------------------------------------------------- -// LocationPickerContent::getListProxyModel() +// LocationPickerContent::getStandardGridModel() // ----------------------------------------------------------------------------- -LocationPickerProxyModel* LocationPickerContent::getListProxyModel() -{ - return mListProxyModel; -} - -// ----------------------------------------------------------------------------- -// LocationPickerContent::getStandardModel() -// ----------------------------------------------------------------------------- -QStandardItemModel* LocationPickerContent::getStandardModel() +QStandardItemModel* LocationPickerContent::getStandardGridModel() { - return mModel; + return mGridModel; } -// ----------------------------------------------------------------------------- -// LocationPickerContent::getDataManager() -// ----------------------------------------------------------------------------- -LocationPickerDataManager* LocationPickerContent::getDataManager() -{ - return mDataManager; -} +// ---------------------------------------------------------------------------- +// LocationPickerContent::createNoEntryDisplay() +// ---------------------------------------------------------------------------- -// ----------------------------------------------------------------------------- -// LocationPickerContent::getGridProxyModel() -// ----------------------------------------------------------------------------- -LocationPickerProxyModel* LocationPickerContent::getGridProxyModel() +void LocationPickerContent::createNoEntryDisplay( QStandardItemModel *aModel ) { - return mProxyGridModel; + // no locations to display. + QStandardItem *modelItem = new QStandardItem(); + modelItem->setData(QVariant(hbTrId("txt_lint_list_no_location_entries_present")), Qt::DisplayRole); + aModel->appendRow( modelItem ); } diff -r 0f22fb80ebba -r cd10d5b85554 locationpickerservice/src/locationpickerdatamanager.cpp --- a/locationpickerservice/src/locationpickerdatamanager.cpp Mon May 03 12:27:22 2010 +0300 +++ b/locationpickerservice/src/locationpickerdatamanager.cpp Fri May 14 15:47:27 2010 +0300 @@ -20,21 +20,20 @@ // ---------------------------------------------------------------------------- -// LocationPickerDataManager::LocationPickerDataManager() +// LocationPickerDataManager::getInstance() // ---------------------------------------------------------------------------- - -LocationPickerDataManager::LocationPickerDataManager() : - d_ptr( new LocationPickerDataManagerPrivate() ) +LocationPickerDataManager* LocationPickerDataManager::getInstance() { + static LocationPickerDataManager singletonInstance; + return &singletonInstance; } // ---------------------------------------------------------------------------- // LocationPickerDataManager::LocationPickerDataManager() // ---------------------------------------------------------------------------- -LocationPickerDataManager::LocationPickerDataManager( - QStandardItemModel &aModel, TViewType aViewType ) : - d_ptr( new LocationPickerDataManagerPrivate( aModel, aViewType) ) +LocationPickerDataManager::LocationPickerDataManager() : + d_ptr( new LocationPickerDataManagerPrivate() ) { } @@ -50,21 +49,11 @@ // ---------------------------------------------------------------------------- // LocationPickerDataManager::populateModel() // ---------------------------------------------------------------------------- -bool LocationPickerDataManager::populateModel(Qt::Orientations aOrientation, quint32 aCollectionId) +bool LocationPickerDataManager::populateModel( QStandardItemModel &aModel, TViewType aViewType, + Qt::Orientations aOrientation, quint32 aCollectionId ) { Q_D( LocationPickerDataManager); - return( d->populateModel(aOrientation, aCollectionId) ); -} - - -// ---------------------------------------------------------------------------- -// LocationPickerDataManager::getData() -// ---------------------------------------------------------------------------- - -void LocationPickerDataManager::getData( int aIndex, quint32& aValue ) -{ - Q_D( LocationPickerDataManager); - return( d->getData( aIndex, aValue ) ); + return( d->populateModel( aModel, aViewType, aOrientation, aCollectionId) ); } // ---------------------------------------------------------------------------- diff -r 0f22fb80ebba -r cd10d5b85554 locationpickerservice/src/locationpickerdatamanager_p.cpp --- a/locationpickerservice/src/locationpickerdatamanager_p.cpp Mon May 03 12:27:22 2010 +0300 +++ b/locationpickerservice/src/locationpickerdatamanager_p.cpp Fri May 14 15:47:27 2010 +0300 @@ -15,18 +15,17 @@ * */ -#include -#include -#include -#include -#include -#include -#include -#include -#include #include +#include +#include +#include +#include +#include +#include "locationpickerdatamanager_p.h" -#include "locationpickerdatamanager_p.h" +//constant value used +const int ASPECTRATIOHEIGHT(3); +const int ASPECTRATIOWIDTH (4); // ---------------------------------------------------------------------------- @@ -36,25 +35,10 @@ LocationPickerDataManagerPrivate::LocationPickerDataManagerPrivate() : mModel( NULL ), mViewType( ELocationPickerContent ), - mIterator(NULL), - mLandmarkDb(NULL), - mLmCategoryManager(NULL), - mLandmarkSearch(NULL) + mDb( NULL ) { -} - -// ---------------------------------------------------------------------------- -// LocationPickerDataManagerPrivate::LocationPickerDataManagerPrivate() -// ---------------------------------------------------------------------------- - -LocationPickerDataManagerPrivate::LocationPickerDataManagerPrivate( QStandardItemModel &aModel, TViewType aViewType ) : - mModel( &aModel ), - mViewType( aViewType ), - mIterator(NULL), - mLandmarkDb(NULL), - mLmCategoryManager(NULL), - mLandmarkSearch(NULL) -{ + mDb = new LocationDataLookupDb(); + mDb->open(); } @@ -64,384 +48,277 @@ LocationPickerDataManagerPrivate::~LocationPickerDataManagerPrivate() { // delete the member variables; - - if( mIterator ) - delete mIterator; - if ( mLandmarkDb ) - delete mLandmarkDb; - if( mLmCategoryManager ) - delete mLmCategoryManager; - if( mLandmarkSearch ) - delete mLandmarkSearch; + if( mDb ) + { + mDb->close(); + delete mDb; + mDb = NULL; + } } // ---------------------------------------------------------------------------- // LocationPickerDataManagerPrivate::populateModel() // ---------------------------------------------------------------------------- -bool LocationPickerDataManagerPrivate::populateModel( const Qt::Orientations aOrientation, quint32 aCollectionId ) +bool LocationPickerDataManagerPrivate::populateModel( QStandardItemModel &aModel, + TViewType aViewType, const Qt::Orientations aOrientation, quint32 aCollectionId ) { - bool retValue = false; + mModel = &aModel; + mViewType = aViewType; mOrientation = aOrientation; - TRAP_IGNORE( retValue = populateModelL( aCollectionId ) ); - return retValue; -} -// ---------------------------------------------------------------------------- -// LocationPickerDataManagerPrivate::populateModel() -// ---------------------------------------------------------------------------- -bool LocationPickerDataManagerPrivate::populateModelL( quint32 aCollectionId ) -{ - // Handle to the landmark database - mLandmarkDb = NULL; - - //Open and intialize Landmark DB - mLandmarkDb = CPosLandmarkDatabase::OpenL(); - ExecuteAndDeleteLD( mLandmarkDb->InitializeL() ); + if( !mDb ) + { + // no items in the landmark database, so return false. + return false; + } switch( mViewType ) { case ELocationPickerContent: case ELocationPickerSearchView: { - // Create an iterator for iterating the landmarks in the database - mIterator = mLandmarkDb->LandmarkIteratorL(); - - if( ( !mIterator ) || (mIterator->NumOfItemsL() == 0) ) - { - // no items in the landmark database, so return false. - return false; - } - CleanupStack::PushL(mIterator); - populateLandmarksL(); - CleanupStack::Pop( mIterator ); + QList itemArray; + mDb->getEntries( itemArray ); + return populateLandmarks( itemArray ); } - break; + case ELocationPickerCollectionListContent: { - - // Create category manager for landmarks - mLmCategoryManager = CPosLmCategoryManager::NewL( *mLandmarkDb ); - - if( !mLmCategoryManager ) - { - return false; - } - // Create an iterator for iterating the referenced categories in the database - mIterator = mLmCategoryManager->ReferencedCategoryIteratorL(); - - if( ( !mIterator ) || (mIterator->NumOfItemsL() == 0) ) - { - // no items in the landmark database, so return false. - return false; - } - CleanupStack::PushL(mIterator); - populateCollectionsL(); - CleanupStack::Pop( mIterator ); - + populateCollections(); } break; case ELocationPickerCollectionContent: { - - // create a search object. - mLandmarkSearch = CPosLandmarkSearch::NewL( *mLandmarkDb ); - CleanupStack::PushL( mLandmarkSearch ); - - // Create the search criterion - CPosLmCategoryCriteria* criteria = CPosLmCategoryCriteria::NewLC(); - criteria->SetCategoryItemId( aCollectionId ); - - // Start the search and execute it at once. - ExecuteAndDeleteLD( mLandmarkSearch->StartLandmarkSearchL( *criteria ) ); - CleanupStack::PopAndDestroy( criteria ); - - // Retrieve an iterator to access the matching landmarks. - mIterator = mLandmarkSearch->MatchIteratorL(); - if( ( !mIterator ) || (mIterator->NumOfItemsL() == 0) ) - { - // no landmarks in this collection - CleanupStack::Pop(mLandmarkSearch); + QList itemArray; + mDb->getEntries( itemArray, aCollectionId ); + if( itemArray.count() == 0 ) return false; - } - CleanupStack::PushL( mIterator ); - populateLandmarksL(); - CleanupStack::Pop( mIterator ); - CleanupStack::Pop(mLandmarkSearch); + + return populateLandmarks( itemArray ); } - break; } return true; } // ---------------------------------------------------------------------------- -// LocationPickerDataManagerPrivate::populateLandmarksL() +// LocationPickerDataManagerPrivate::populateLandmarks() // ---------------------------------------------------------------------------- -void LocationPickerDataManagerPrivate::populateLandmarksL() -{ - // Read each landmark in the database and copy to the model. - TPosLmItemId lmId; +bool LocationPickerDataManagerPrivate::populateLandmarks( QList &aItemArray ) +{ mModel->clear(); - while ( ( lmId = mIterator->NextL() ) != KPosLmNullItemId ) - { - CPosLandmark* readLandmark = mLandmarkDb->ReadLandmarkLC(lmId ); - - if( readLandmark ) - { - QString lmAddressLine1(" "); - QString lmAddressLine2(""); - TPtrC tempStr; - TInt retStatus; - - // Copy landmark name in string 1 - retStatus = readLandmark->GetLandmarkName( tempStr ); - if( retStatus == KErrNone && tempStr.Length() > 0) + if( !aItemArray.count() ) + { + return false; + } + QString lmAddressLine1; + QString lmAddressLine2; + + for( int i = 0; i < aItemArray.count(); i++ ) + { + + if( !aItemArray[i].mIsDuplicate ) + { + lmAddressLine1 = aItemArray[i].mName; + if( lmAddressLine1.isEmpty() ) + lmAddressLine1 = KSpace; + + bool addressEmtpy = true; // used to check if address line 2 is empty + if( !aItemArray[i].mStreet.isEmpty() ) { - lmAddressLine1 = QString( (QChar*)tempStr.Ptr(), tempStr.Length()); - } - - // create address line 2 - bool addressEmtpy = true; // used to check if address line 2 is empty - - // get street - retStatus = readLandmark->GetPositionField( EPositionFieldStreet, tempStr ); - if( retStatus == KErrNone && tempStr.Length() ) - { - lmAddressLine2 = QString( (QChar*)tempStr.Ptr(), tempStr.Length()); + lmAddressLine2 = aItemArray[i].mStreet; addressEmtpy = EFalse; } - - // Get city - retStatus =readLandmark->GetPositionField( EPositionFieldCity, tempStr ); - if( retStatus == KErrNone && tempStr.Length() ) + if( !aItemArray[i].mCity.isEmpty() ) { if( !addressEmtpy ) { lmAddressLine2 = lmAddressLine2 + KSeparator; lmAddressLine2 = lmAddressLine2 + KSpace; - lmAddressLine2 = lmAddressLine2 + QString( (QChar*)tempStr.Ptr(), tempStr.Length()); + lmAddressLine2 = lmAddressLine2 + aItemArray[i].mCity; } else { - lmAddressLine2 = QString( (QChar*)tempStr.Ptr(), tempStr.Length()); + lmAddressLine2 = aItemArray[i].mCity; addressEmtpy = EFalse; } } - // Get State - retStatus =readLandmark->GetPositionField( EPositionFieldState, tempStr ); - if( retStatus == KErrNone && tempStr.Length() ) + if( !aItemArray[i].mState.isEmpty() ) { if( !addressEmtpy ) { lmAddressLine2 = lmAddressLine2 + KSeparator; lmAddressLine2 = lmAddressLine2 + KSpace; - lmAddressLine2 = lmAddressLine2 + QString( (QChar*)tempStr.Ptr(), tempStr.Length()); + lmAddressLine2 = lmAddressLine2 + aItemArray[i].mState; } else { - lmAddressLine2 = QString( (QChar*)tempStr.Ptr(), tempStr.Length()); + lmAddressLine2 = aItemArray[i].mState; addressEmtpy = EFalse; } } - - // get country - retStatus =readLandmark->GetPositionField( EPositionFieldCountry, tempStr ); - if( retStatus == KErrNone && tempStr.Length() ) + if( !aItemArray[i].mCountry.isEmpty() ) { if( !addressEmtpy ) { lmAddressLine2 = lmAddressLine2 + KSeparator; lmAddressLine2 = lmAddressLine2 + KSpace; - lmAddressLine2 = lmAddressLine2 + QString( (QChar*)tempStr.Ptr(), tempStr.Length()); + lmAddressLine2 = lmAddressLine2 + aItemArray[i].mCountry; } else { - lmAddressLine2 = QString( (QChar*)tempStr.Ptr(), tempStr.Length()); + lmAddressLine2 = aItemArray[i].mCountry; addressEmtpy = EFalse; } } - - // get contact address type - QString contactAddressType; - retStatus = readLandmark->GetLandmarkDescription( tempStr ); - if( retStatus == KErrNone && tempStr.Length() > 0) - { - contactAddressType = QString( (QChar*)tempStr.Ptr(), tempStr.Length()); - } - // set icons based on contact address type QVariantList icons; - if( contactAddressType == KContactHome ) + + HbIcon adressTypeIcon; + bool adressIconPresent = false; + if( aItemArray[i].mSourceType == ESourceContactsHome ) + { + adressTypeIcon = HbIcon(KContactHomeIcon); + adressIconPresent = true; + } + else if( aItemArray[i].mSourceType == ESourceContactsWork ) + { + adressTypeIcon =HbIcon(KContactWorkIcon); + adressIconPresent = true; + } + else if( aItemArray[i].mSourceType == ESourceContactsPref ) + { + adressTypeIcon =HbIcon(KContactPrefIcon); + adressIconPresent = true; + } + + // create a list item and set to model + QStringList addressData; + //create model for grid view in landscape mode + if( mOrientation == Qt::Horizontal && ( mViewType == ELocationPickerCollectionContent || + mViewType == ELocationPickerContent ) ) + { + addressData.clear(); + + HbIcon landscapeIcon; + + if( QFile::exists( aItemArray[i].mMapTilePath ) ) { - icons << HbIcon(KDummyImage) << HbIcon(KContactHomeIcon); - } - else if( contactAddressType == KContactWork ) - { - icons << HbIcon(KDummyImage) << HbIcon(KContactWorkIcon); + //draw maptile Icon + QPainter painter; + QPixmap sourcePixmap; + sourcePixmap = QPixmap( QString(aItemArray[i].mMapTilePath) ); + int mapHeight = (sourcePixmap.height()/ASPECTRATIOHEIGHT)*ASPECTRATIOHEIGHT; + int mapWidth = mapHeight*ASPECTRATIOWIDTH/ASPECTRATIOHEIGHT; + QPixmap mapPixmap(mapWidth, mapHeight); + painter.begin( &mapPixmap ); + painter.drawPixmap( 0,0,sourcePixmap,(((sourcePixmap.width()-mapWidth))/2), + ((sourcePixmap.height()-mapHeight)/2),mapWidth,mapHeight ); + painter.end(); + if(adressIconPresent) + { + //draw the adressType Icon over mapTile Icon + QPixmap adressTypePixmap = adressTypeIcon.pixmap(); + painter.begin( &mapPixmap ); + painter.drawPixmap( (mapPixmap.width()-adressTypePixmap.width()),0,adressTypePixmap ); + painter.end(); + } + QIcon landscape( mapPixmap ); + landscapeIcon = HbIcon( landscape ); } else { - icons << HbIcon(KDummyImage) << HbIcon(KContactPrefIcon); + //draw dummy icon + landscapeIcon = HbIcon( KDummyImage ); } - - // create a list item and set to model - QStringList addressData; - //create model for grid view in landscape mode - if(mOrientation == Qt::Horizontal && ( mViewType == ELocationPickerCollectionContent || mViewType == ELocationPickerContent) ) - { - addressData.clear(); + + icons<setData(QVariant(addressData), Qt::DisplayRole); modelItem->setData( icons[0], Qt::DecorationRole ); - modelItem->setData(QString("contact"),Qt::UserRole); + modelItem->setData( aItemArray[i].mId, Qt::UserRole ); mModel->appendRow( modelItem ); } else { - //create model for list view in potrai mode + //create model for list view in potrait mode addressData.clear(); + HbIcon potraitIcon( KDummyImage ); + icons<setData(QVariant(addressData), Qt::DisplayRole); modelItem->setData( icons, Qt::DecorationRole ); + modelItem->setData( aItemArray[i].mId, Qt::UserRole ); mModel->appendRow( modelItem ); } - - CleanupStack::PopAndDestroy( readLandmark ); } - } + } + + return true; } // ---------------------------------------------------------------------------- -// LocationPickerDataManagerPrivate::populateCollectionsL() +// LocationPickerDataManagerPrivate::populateCollections() // ---------------------------------------------------------------------------- -void LocationPickerDataManagerPrivate::populateCollectionsL() +void LocationPickerDataManagerPrivate::populateCollections() { - // Read each categpry in the database and copy to the model. - TPosLmItemId lmId; - while ((lmId = mIterator->NextL()) != KPosLmNullItemId ) - { - CPosLandmarkCategory* readCategory = mLmCategoryManager->ReadCategoryLC(lmId ); - - if( readCategory ) - { - QString categoryName(""); - - TPtrC tempStr; - TInt retStatus; + // add contact collection + QStandardItem *modelItemContact = new QStandardItem(); + QString contactCollectionName( hbTrId("txt_lint_list_contact_addresses") ); + modelItemContact->setData( QVariant( contactCollectionName ), Qt::DisplayRole ); + modelItemContact->setData( HbIcon ( KCollectionsContacts ), Qt::DecorationRole ); + modelItemContact->setData( ESourceLandmarksContactsCat, Qt::UserRole ); + mModel->appendRow( modelItemContact ); - retStatus = readCategory->GetCategoryName( tempStr ); - if( retStatus == KErrNone && tempStr.Length() > 0) - { - categoryName = QString( (QChar*)tempStr.Ptr(), tempStr.Length()); - if(categoryName == KContactsString) - { - categoryName = hbTrId("txt_lint_list_contact_addresses"); - } - } - - // create a list item and copy to model - - QString iconPath; - QStandardItem *modelItem = new QStandardItem(); - modelItem->setData(QVariant(categoryName), Qt::DisplayRole); - modelItem->setData( HbIcon (KCollectionsContacts), Qt::DecorationRole ); - mModel->appendRow( modelItem ); - - CleanupStack::PopAndDestroy( readCategory ); - } - } + QStandardItem *modelItemCalendar = new QStandardItem(); + QString calendarCollectionName( hbTrId("txt_lint_list_calendar_event_locations") ); + modelItemCalendar->setData( QVariant( calendarCollectionName ), Qt::DisplayRole ); + modelItemCalendar->setData( HbIcon ( KCollectionsCalendar ), Qt::DecorationRole ); + modelItemCalendar->setData( ESourceLandmarksCalendarCat, Qt::UserRole ); + mModel->appendRow( modelItemCalendar ); + + QStandardItem *modelItemPlaces = new QStandardItem(); + QString placesCollectionName( hbTrId("txt_lint_list_places") ); + modelItemPlaces->setData( QVariant( placesCollectionName ), Qt::DisplayRole ); + modelItemPlaces->setData( HbIcon (KCollectionsPlaces), Qt::DecorationRole ); + modelItemPlaces->setData( ESourceLandmarks, Qt::UserRole ); + mModel->appendRow( modelItemPlaces ); } -// ---------------------------------------------------------------------------- -// LocationPickerDataManagerPrivate::getData() -// ---------------------------------------------------------------------------- - -void LocationPickerDataManagerPrivate::getData( int aIndex, quint32& aValue ) -{ - aValue = 0; - RArray idArray; - TRAPD( err, mIterator->GetItemIdsL( idArray, aIndex, 1 ) ); - if( err == KErrNone) - aValue = (quint32) idArray[0]; -} // ---------------------------------------------------------------------------- // LocationPickerDataManagerPrivate::getLocationItem() // ---------------------------------------------------------------------------- -void LocationPickerDataManagerPrivate::getLocationItem( quint32 aLmId, QLocationPickerItem& aItem ) +void LocationPickerDataManagerPrivate::getLocationItem( quint32 aId, QLocationPickerItem& aItem ) { - TRAPD( err, getLocationItemL( aLmId, aItem ) ); - if( err != KErrNone ) + QLookupItem item; + item.mId = aId; + if( mDb->findEntryById( item ) ) + { + aItem.mName = item.mName; + aItem.mStreet = item.mStreet; + aItem.mPostalCode = item.mPostalCode; + aItem.mCity = item.mCity; + aItem.mState = item.mState; + aItem.mCountry = item.mCountry; + aItem.mLatitude = item.mLatitude; + aItem.mLongitude = item.mLongitude; + aItem.mIsValid = true; + } + else + { aItem.mIsValid = false; + } + } -// ---------------------------------------------------------------------------- -// LocationPickerDataManagerPrivate::getLocationItem() -// ---------------------------------------------------------------------------- - -void LocationPickerDataManagerPrivate::getLocationItemL( quint32 aLmId, QLocationPickerItem& aItem ) -{ - //Open and intialize Landmark DB - CPosLandmarkDatabase* landmarkDb = NULL; - landmarkDb = CPosLandmarkDatabase::OpenL(); - - ExecuteAndDeleteLD( landmarkDb->InitializeL() ); - - CPosLandmark* readLandmark = landmarkDb->ReadLandmarkLC(aLmId ); - - if( readLandmark ) - { - // get position and store - TLocality position; - readLandmark->GetPosition( position ); - aItem.mLatitude = position.Latitude(); - aItem.mLongitude = position.Longitude(); - - // get address fields - TPtrC tempStr; - TInt retStatus; - - // Copy landmark name in string 1 - retStatus = readLandmark->GetLandmarkName( tempStr ); - if( retStatus == KErrNone && tempStr.Length() > 0) - { - aItem.mName = QString( (QChar*)tempStr.Ptr(), tempStr.Length()); - } - - // get street - retStatus = readLandmark->GetPositionField( EPositionFieldStreet, tempStr ); - if( retStatus == KErrNone && tempStr.Length() ) - { - aItem.mStreet = QString( (QChar*)tempStr.Ptr(), tempStr.Length()); - } - - // Get city - retStatus =readLandmark->GetPositionField( EPositionFieldCity, tempStr ); - if( retStatus == KErrNone && tempStr.Length() ) - { - aItem.mCity = QString( (QChar*)tempStr.Ptr(), tempStr.Length()); - } - // Get State - retStatus =readLandmark->GetPositionField( EPositionFieldState, tempStr ); - if( retStatus == KErrNone && tempStr.Length() ) - { - aItem.mState = QString( (QChar*)tempStr.Ptr(), tempStr.Length()); - } - - // get country - retStatus =readLandmark->GetPositionField( EPositionFieldCountry, tempStr ); - if( retStatus == KErrNone && tempStr.Length() ) - { - aItem.mCountry = QString( (QChar*)tempStr.Ptr(), tempStr.Length()); - } - } - aItem.mIsValid = true; - CleanupStack::PopAndDestroy(readLandmark); - delete landmarkDb; -} diff -r 0f22fb80ebba -r cd10d5b85554 locationpickerservice/src/locationpickerdocumentloader.cpp --- a/locationpickerservice/src/locationpickerdocumentloader.cpp Mon May 03 12:27:22 2010 +0300 +++ b/locationpickerservice/src/locationpickerdocumentloader.cpp Fri May 14 15:47:27 2010 +0300 @@ -40,29 +40,29 @@ // LocationPickerDocumentLoader::createObject // --------------------------------------------------------------------------- // -QObject *LocationPickerDocumentLoader::createObject(const QString& type, const QString &name) +QObject *LocationPickerDocumentLoader::createObject( const QString& type, const QString &name ) { //for locationpickerpotraitview - if (name == LocationPickerPotraitView::staticMetaObject.className() ) + if ( name == LocationPickerPotraitView::staticMetaObject.className() ) { QObject *object = new LocationPickerPotraitView(this); - object->setObjectName(name); + object->setObjectName( name ); return object; } //for locationpickerlandscapeview - if (name == LocationPickerLandscapeView::staticMetaObject.className()) + if ( name == LocationPickerLandscapeView::staticMetaObject.className() ) { QObject *object = new LocationPickerLandscapeView(this); - object->setObjectName(name); + object->setObjectName( name ); return object; } //for locationpickersearchview - if (name == LocationPickerSearchView::staticMetaObject.className()) + if ( name == LocationPickerSearchView::staticMetaObject.className() ) { QObject *object = new LocationPickerSearchView(*this); - object->setObjectName(name); + object->setObjectName( name ); return object; } //default case - return HbDocumentLoader::createObject(type, name); + return HbDocumentLoader::createObject( type, name ); } diff -r 0f22fb80ebba -r cd10d5b85554 locationpickerservice/src/locationpickerlandscapeview.cpp --- a/locationpickerservice/src/locationpickerlandscapeview.cpp Mon May 03 12:27:22 2010 +0300 +++ b/locationpickerservice/src/locationpickerlandscapeview.cpp Fri May 14 15:47:27 2010 +0300 @@ -26,7 +26,6 @@ #include "locationpickerproxymodel.h" #include "locationpickerdatamanager.h" -#include "locationpickercontent.h" #include "locationpickercollectionlistcontent.h" #include "locationpickercollectioncontent.h" @@ -36,8 +35,6 @@ // ---------------------------------------------------- LocationPickerLandscapeView::LocationPickerLandscapeView(HbDocumentLoader* aLoader) :mDocumentLoader(aLoader), - mLocationPickerContent(NULL), - mLocationPickerCollectionListContent(NULL), mAllAction(NULL), mCollectionAction(NULL), mSearchAction(NULL), @@ -55,7 +52,7 @@ mGridViewItem->setObjectName("locationgrid"); // create back action - mLandscapeBackAction = new HbAction(Hb::BackAction); + mLandscapeBackAction = new HbAction(Hb::BackNaviAction); setNavigationAction(mLandscapeBackAction); connect(mLandscapeBackAction, SIGNAL(triggered()), this, SLOT(backButtonTriggered())); @@ -66,8 +63,6 @@ LocationPickerLandscapeView::~LocationPickerLandscapeView() { delete mCollectionContent; - delete mLocationPickerContent; - delete mLocationPickerCollectionListContent; delete mAllAction; delete mCollectionAction; delete mAscendingAction; @@ -83,8 +78,7 @@ if(mViewType == ELocationPickerCollectionContent) { colectionTabTriggered(); - delete mCollectionContent; - mCollectionContent=NULL; + emit collectionContentExited(); } else { @@ -97,12 +91,18 @@ // ---------------------------------------------------- // LocationPickerPotraitView::~init() // ---------------------------------------------------- -void LocationPickerLandscapeView::init(Qt::Orientation aOrientation ) +void LocationPickerLandscapeView::init(Qt::Orientation aOrientation, QStandardItemModel *aModel ) { - // Create Collection List Content - mLocationPickerCollectionListContent = new LocationPickerCollectionListContent(aOrientation); - - mLocationPickerContent = new LocationPickerContent(aOrientation); + mModel = aModel; + //create proxy model + mProxyModel = new LocationPickerProxyModel( aOrientation , this ); + mProxyModel->setSourceModel(aModel); + // set sort properties + mProxyModel->setDynamicSortFilter(TRUE); + mProxyModel->setSortRole(Qt::DisplayRole); + mProxyModel->setSortCaseSensitivity(Qt::CaseInsensitive); + // sort in ascending order + mProxyModel->sort(0, Qt::AscendingOrder); //Get HbAction items mGridView = qobject_cast (mDocumentLoader->findObject(QString( @@ -122,7 +122,14 @@ { qFatal("Error Reading Docml"); } - + + if(this->mainWindow()->orientation() == Qt::Horizontal) + { + int rowCount = mGridView->rowCount(); + int columnCount = mGridView->columnCount(); + mGridView->setRowCount(columnCount); + mGridView->setColumnCount(rowCount); + } //connect to slots connect(mAscendingAction, SIGNAL(triggered()), this, SLOT(sortAscending())); connect(mDescendingAction, SIGNAL(triggered()), this, @@ -138,48 +145,27 @@ void LocationPickerLandscapeView::manageGridView() -{ - // Create Locationpicker Content - if (!mLocationPickerContent->locationsFound()) - { - //if no location entries present - mGridView->setModel(mLocationPickerContent->getStandardModel(),mGridViewItem); - disableTabs(); - mViewType = ELocationPickerContent; - } - else +{ + //set the appropriate model + switch(mViewType) { - //set the appropriate model - switch(mViewType) - { - case ELocationPickerContent: - { - mGridView->setModel(mLocationPickerContent->getGridProxyModel(),mGridViewItem); - mAllAction->setChecked(true); - mCollectionAction->setChecked(false); - } - break; - case ELocationPickerCollectionContent: - { - setCollectionData(mCategoryId); - mCollectionAction->setChecked(true); - mAllAction->setChecked(false); - } - break; - } + case ELocationPickerContent: + { + mGridView->setModel(mProxyModel,mGridViewItem); + mAllAction->setChecked(true); + mCollectionAction->setChecked(false); + } + break; + case ELocationPickerCollectionContent: + { + setCollectionData(mCategoryId); + mCollectionAction->setChecked(true); + mAllAction->setChecked(false); + } + break; } } -void LocationPickerLandscapeView::disableTabs() -{ - mAllAction->setDisabled(true); - mCollectionAction->setDisabled(true); - mSearchAction->setDisabled(true); - mAscendingAction->setDisabled(true); - mDescendingAction->setDisabled(true); -} - - // ----------------------------------------------------------------------------- // LocationPickerLandscapeView::handleActivated() // ----------------------------------------------------------------------------- @@ -188,31 +174,29 @@ //handle the activated signal according to model set switch(mViewType) - { + { case ELocationPickerContent: { - QModelIndex index = mLocationPickerContent->getGridProxyModel()->mapToSource( + QModelIndex index = mProxyModel->mapToSource( aIndex); quint32 lm = 0; - mLocationPickerContent->getDataManager()->getData(index.row(), lm); + QStandardItem* item = mModel->item( index.row(), index.column() ); + QVariant var = item->data( Qt::UserRole ); + lm = var.toUInt(); + //item selected, complete request emit selectItem( lm ); } break; - case ELocationPickerCollectionListContent: - { - mLocationPickerCollectionListContent->getDataManager()->getData( - aIndex.row(), mCategoryId); - setCollectionData(mCategoryId); - emit sendCategoryID(mCategoryId); - } - break; - //default case ELocationPickerCollectionContent: { + if(!mCollectionContent->getProxyModel()) + { + break; + } QModelIndex index = mCollectionContent->getProxyModel()->mapToSource( aIndex); quint32 lm = 0; - mCollectionContent->getDataManager()->getData(index.row(), lm); + mCollectionContent->getData(index, lm); emit selectItem(lm); } break; @@ -231,7 +215,7 @@ //check the model set and do sorting accordingly if (mViewType == ELocationPickerContent) { - mLocationPickerContent->getGridProxyModel()->sort(0, Qt::AscendingOrder); + mProxyModel->sort(0, Qt::AscendingOrder); } else { @@ -247,7 +231,7 @@ //check the model set and do sorting accordingly if (mViewType == ELocationPickerContent) { - mLocationPickerContent->getGridProxyModel()->sort(0, Qt::DescendingOrder); + mProxyModel->sort(0, Qt::DescendingOrder); } else { @@ -263,7 +247,7 @@ //execute only if tab is not pressed if (mAllAction->isChecked()) { - mGridView->setModel(mLocationPickerContent->getGridProxyModel(),mGridViewItem); + mGridView->setModel(mProxyModel,mGridViewItem); mAscendingAction->setEnabled(true); mDescendingAction->setEnabled(true); mCollectionAction->setChecked(false); @@ -311,9 +295,18 @@ void LocationPickerLandscapeView::setCollectionData( quint32 aCategoryId ) { - mCollectionContent - = new LocationPickerCollectionContent(this->mainWindow()->orientation() , aCategoryId); - mGridView->setModel(mCollectionContent->getProxyModel(),mGridViewItem); + if(!mCollectionContent) + { + mCollectionContent = new LocationPickerCollectionContent(Qt::Horizontal , aCategoryId); + } + if(mCollectionContent->locationFound()) + { + mGridView->setModel(mCollectionContent->getProxyModel(),mGridViewItem); + } + else + { + mGridView->setModel(mCollectionContent->getStandardModel(),mGridViewItem); + } mViewType = ELocationPickerCollectionContent; //Enable the options mAscendingAction->setEnabled(true); @@ -344,3 +337,16 @@ { mViewType = aViewType; } + +// ----------------------------------------------------------------------------- +// LocationPickerLandscapeView::clearContentModel() +// ----------------------------------------------------------------------------- +void LocationPickerLandscapeView::clearContentModel() +{ + if(mCollectionContent) + { + delete mCollectionContent; + mCollectionContent = NULL; + } +} + diff -r 0f22fb80ebba -r cd10d5b85554 locationpickerservice/src/locationpickerpotraitview.cpp --- a/locationpickerservice/src/locationpickerpotraitview.cpp Mon May 03 12:27:22 2010 +0300 +++ b/locationpickerservice/src/locationpickerpotraitview.cpp Fri May 14 15:47:27 2010 +0300 @@ -34,10 +34,10 @@ // ---------------------------------------------------- // LocationPickerPotraitView::LocationPickerView() // ---------------------------------------------------- -LocationPickerPotraitView::LocationPickerPotraitView(HbDocumentLoader* aLoader) +LocationPickerPotraitView::LocationPickerPotraitView( HbDocumentLoader* aLoader ) :mDocumentLoader(aLoader), - mLocationPickerContent(NULL), mLocationPickerCollectionListContent(NULL), + mProxyModel(NULL), mAllAction(NULL), mCollectionAction(NULL), mSearchAction(NULL), @@ -48,7 +48,7 @@ mViewType(ELocationPickerContent) { // create back action - mPotraitBackAction = new HbAction(Hb::BackAction); + mPotraitBackAction = new HbAction(Hb::BackNaviAction); // add back key action setNavigationAction(mPotraitBackAction); //connect to slots @@ -65,7 +65,6 @@ LocationPickerPotraitView::~LocationPickerPotraitView() { delete mCollectionContent; - delete mLocationPickerContent; delete mLocationPickerCollectionListContent; delete mAllAction; delete mCollectionAction; @@ -83,8 +82,7 @@ if(mViewType == ELocationPickerCollectionContent) { colectionTabTriggered(); - delete mCollectionContent; - mCollectionContent=NULL; + emit collectionContentExited(); } else { @@ -97,16 +95,26 @@ // ---------------------------------------------------- // LocationPickerPotraitView::init() // ---------------------------------------------------- -void LocationPickerPotraitView::init(Qt::Orientation aOrientation ) +void LocationPickerPotraitView::init( bool aPopulated, Qt::Orientation aOrientation, QStandardItemModel *aModel ) { + mModel = aModel; + if(aPopulated) + { // Create Collection List Content mLocationPickerCollectionListContent = new LocationPickerCollectionListContent(aOrientation); - mLocationPickerContent = new LocationPickerContent(aOrientation); - + //create proxy model + mProxyModel = new LocationPickerProxyModel( aOrientation , this ); + mProxyModel->setSourceModel(aModel); + // set sort properties + mProxyModel->setDynamicSortFilter(TRUE); + mProxyModel->setSortRole(Qt::DisplayRole); + mProxyModel->setSortCaseSensitivity(Qt::CaseInsensitive); + // sort in ascending order + mProxyModel->sort(0, Qt::AscendingOrder); + } //Get HbAction items mListView = qobject_cast (mDocumentLoader->findObject(QString( - "ListView"))); - + "ListView"))); //get the action items from docml mAllAction = qobject_cast (mDocumentLoader->findObject(QString( "allAction"))); @@ -118,11 +126,11 @@ QString("ascendingAction"))); mDescendingAction = qobject_cast (mDocumentLoader->findObject( QString("descendingAction"))); - if( !mAllAction || !mCollectionAction || !mSearchAction || !mListView || !mAscendingAction || !mDescendingAction) - { - qFatal("Error Reading Docml"); - } - + if( !mAllAction || !mCollectionAction || !mSearchAction || !mAscendingAction || !mDescendingAction || !mListView) + { + qFatal("Error Reading Docml"); + } + //connect to slots connect(mAscendingAction, SIGNAL(triggered()), this, SLOT(sortAscending())); connect(mDescendingAction, SIGNAL(triggered()), this, @@ -137,54 +145,46 @@ } void LocationPickerPotraitView::manageListView() -{ - if (!mLocationPickerContent->locationsFound()) +{ + //set the appropriate model + switch(mViewType) { - //if no location entries present - mListView->setModel(mLocationPickerContent->getStandardModel(),mListItem); - disableTabs(); - } - else - { - //set the appropriate model - switch(mViewType) + case ELocationPickerContent: + { + mListItem->setGraphicsSize(HbListViewItem::Thumbnail); + mListView->setModel(mProxyModel,mListItem); + mAllAction->setChecked(true); + mCollectionAction->setChecked(false); + mViewType = ELocationPickerContent; + } + break; + case ELocationPickerCollectionListContent: { - case ELocationPickerContent: - { - mListItem->setGraphicsSize(HbListViewItem::Thumbnail); - mListView->setModel(mLocationPickerContent->getListProxyModel(),mListItem); - mAllAction->setChecked(true); - mCollectionAction->setChecked(false); - mViewType = ELocationPickerContent; - } - break; - case ELocationPickerCollectionListContent: - { - mListItem->setGraphicsSize(HbListViewItem::MediumIcon); - mListView->setModel(mLocationPickerCollectionListContent->getStandardModel(),mListItem); - mCollectionAction->setChecked(true); - mAllAction->setChecked(false); - mViewType = ELocationPickerCollectionListContent; - } - break; - case ELocationPickerCollectionContent: - { - setCollectionData(mCategoryId); - mCollectionAction->setChecked(true); - mAllAction->setChecked(false); - mViewType = ELocationPickerCollectionContent; - } - break; - default: - break; + mListItem->setGraphicsSize(HbListViewItem::MediumIcon); + mListView->setModel(mLocationPickerCollectionListContent->getStandardModel(),mListItem); + mCollectionAction->setChecked(true); + mAllAction->setChecked(false); + mViewType = ELocationPickerCollectionListContent; } - + break; + case ELocationPickerCollectionContent: + { + setCollectionData(mCategoryId); + mCollectionAction->setChecked(true); + mAllAction->setChecked(false); + mViewType = ELocationPickerCollectionContent; + } + break; + default: + break; } } -void LocationPickerPotraitView::disableTabs() +void LocationPickerPotraitView::disableTabs( QStandardItemModel *aModel ) { + //if no location entries present + mListView->setModel(aModel,mListItem); mAllAction->setDisabled(true); mCollectionAction->setDisabled(true); mSearchAction->setDisabled(true); @@ -195,25 +195,31 @@ // ----------------------------------------------------------------------------- // LocationPickerView::handleActivated() // ----------------------------------------------------------------------------- -void LocationPickerPotraitView::handleActivated(const QModelIndex &aIndex) +void LocationPickerPotraitView::handleActivated( const QModelIndex &aIndex ) { //handle the activated signal according to model set switch(mViewType) { case ELocationPickerContent: - { - QModelIndex index = mLocationPickerContent->getListProxyModel()->mapToSource( + { + if(!mProxyModel) + { + break; + } + QModelIndex index = mProxyModel->mapToSource( aIndex); quint32 lm = 0; - mLocationPickerContent->getDataManager()->getData(index.row(), lm); + QStandardItem* item = mModel->item( index.row(), index.column() ); + QVariant var = item->data( Qt::UserRole ); + lm = var.toUInt(); //item selected, complete request emit selectItem( lm ); } break; case ELocationPickerCollectionListContent: { - mLocationPickerCollectionListContent->getDataManager()->getData( - aIndex.row(), mCategoryId); + mLocationPickerCollectionListContent->getData( + aIndex, mCategoryId ); mViewType = ELocationPickerCollectionContent; //send categoryID to set the collection content emit sendCategoryID(mCategoryId); @@ -221,10 +227,14 @@ break; case ELocationPickerCollectionContent: { + if(!mCollectionContent->getProxyModel()) + { + break; + } QModelIndex index = mCollectionContent->getProxyModel()->mapToSource( aIndex); quint32 lm = 0; - mCollectionContent->getDataManager()->getData(index.row(), lm); + mCollectionContent->getData(index, lm); //item selected, complete request emit selectItem(lm); } @@ -242,7 +252,7 @@ //check the model set and do sorting accordingly if (mViewType == ELocationPickerContent) { - mLocationPickerContent->getListProxyModel()->sort(0, Qt::AscendingOrder); + mProxyModel->sort(0, Qt::AscendingOrder); } else { @@ -258,7 +268,7 @@ //check the model set and do sorting accordingly if (mViewType == ELocationPickerContent) { - mLocationPickerContent->getListProxyModel()->sort(0, Qt::DescendingOrder); + mProxyModel->sort(0, Qt::DescendingOrder); } else { @@ -283,7 +293,7 @@ else { mListItem->setGraphicsSize(HbListViewItem::Thumbnail); - mListView->setModel(mLocationPickerContent->getListProxyModel(),mListItem); + mListView->setModel(mProxyModel,mListItem); mCollectionAction->setChecked(false); } mAscendingAction->setEnabled(true); @@ -338,10 +348,21 @@ // ----------------------------------------------------------------------------- void LocationPickerPotraitView::setCollectionData( quint32 acategoryId ) { - mCollectionContent - = new LocationPickerCollectionContent(this->mainWindow()->orientation() , acategoryId); + + if(!mCollectionContent) + { + mCollectionContent + = new LocationPickerCollectionContent(Qt::Vertical , acategoryId); + } mListItem->setGraphicsSize(HbListViewItem::Thumbnail); - mListView->setModel(mCollectionContent->getProxyModel(),mListItem); + if(mCollectionContent->locationFound()) + { + mListView->setModel(mCollectionContent->getProxyModel(),mListItem); + } + else + { + mListView->setModel(mCollectionContent->getStandardModel(),mListItem); + } mViewType = ELocationPickerCollectionContent; //Enable the options mAscendingAction->setEnabled(true); @@ -372,3 +393,17 @@ { mViewType = aViewType; } + + +// ----------------------------------------------------------------------------- +// LocationPickerView::clearContentModel() +// ----------------------------------------------------------------------------- +void LocationPickerPotraitView::clearContentModel() +{ + if(mCollectionContent) + { + delete mCollectionContent; + mCollectionContent = NULL; + } +} + diff -r 0f22fb80ebba -r cd10d5b85554 locationpickerservice/src/locationpickerproxymodel.cpp --- a/locationpickerservice/src/locationpickerproxymodel.cpp Mon May 03 12:27:22 2010 +0300 +++ b/locationpickerservice/src/locationpickerproxymodel.cpp Fri May 14 15:47:27 2010 +0300 @@ -22,7 +22,7 @@ // LocationPickerProxyModel::LocationPickerProxyModel() // ---------------------------------------------------- -LocationPickerProxyModel::LocationPickerProxyModel(Qt::Orientations aOrientation , QObject *parent) +LocationPickerProxyModel::LocationPickerProxyModel( Qt::Orientations aOrientation , QObject *parent ) :QSortFilterProxyModel(parent), mOrientation( aOrientation ) { @@ -31,8 +31,8 @@ // ---------------------------------------------------- // LocationPickerProxyModel::lessThan() // ---------------------------------------------------- - bool LocationPickerProxyModel::lessThan(const QModelIndex &left, - const QModelIndex &right) const + bool LocationPickerProxyModel::lessThan( const QModelIndex &left, + const QModelIndex &right ) const { // get left and right items data and implement sort logic // return true if left is less than right @@ -62,8 +62,8 @@ // LocationPickerProxyModel::filterAcceptsRow() // ---------------------------------------------------- -bool LocationPickerProxyModel::filterAcceptsRow(int sourceRow, - const QModelIndex &sourceParent) const +bool LocationPickerProxyModel::filterAcceptsRow( int sourceRow, + const QModelIndex &sourceParent ) const { if( mOrientation == Qt::Vertical) { @@ -82,7 +82,7 @@ // ---------------------------------------------------- // LocationPickerProxyModel::filterParameterChanged() // ---------------------------------------------------- -void LocationPickerProxyModel::filterParameterChanged(QString aSearchText) +void LocationPickerProxyModel::filterParameterChanged( QString aSearchText ) { mSearchText = " " + aSearchText; } diff -r 0f22fb80ebba -r cd10d5b85554 locationpickerservice/src/locationpickersearchview.cpp --- a/locationpickerservice/src/locationpickersearchview.cpp Mon May 03 12:27:22 2010 +0300 +++ b/locationpickerservice/src/locationpickersearchview.cpp Fri May 14 15:47:27 2010 +0300 @@ -32,12 +32,11 @@ // ---------------------------------------------------- // LocationPickerSearchView::LocationPickerSearchView() // ---------------------------------------------------- -LocationPickerSearchView::LocationPickerSearchView(HbDocumentLoader &aLoader) +LocationPickerSearchView::LocationPickerSearchView( HbDocumentLoader &aLoader ) :mProxyModel(NULL), mModel(NULL), mListView(NULL), mSearchPanel(NULL), - mDataManager(NULL), mEmptyLabel(NULL), mVerticalLayout(NULL), mDocumentLoader(aLoader) @@ -49,18 +48,16 @@ // ---------------------------------------------------- LocationPickerSearchView::~LocationPickerSearchView() { - if( mDataManager ) - delete mDataManager; delete mProxyModel; - delete mModel; delete mEmptyLabel; } // ---------------------------------------------------- // LocationPickerSearchView::init() // ---------------------------------------------------- -void LocationPickerSearchView::init() +void LocationPickerSearchView::init( QStandardItemModel *aModel ) { + mModel = aModel; //get listview from docml mListView = qobject_cast( mDocumentLoader.findObject(QString("SearchListView"))); @@ -86,11 +83,6 @@ hbListItem->setGraphicsSize(HbListViewItem::Thumbnail); mListView->setItemPrototype( hbListItem ); - // Create a standard model for the view list - mModel = new QStandardItemModel(this); - // create a data manager to populate the model - mDataManager = new LocationPickerDataManager( *mModel, ELocationPickerSearchView ); - // Create the proxy model. mProxyModel = new LocationPickerProxyModel( Qt ::Vertical ); mProxyModel->setSourceModel(mModel); @@ -100,17 +92,6 @@ mProxyModel->setDynamicSortFilter(TRUE); mProxyModel->setSortRole(Qt::DisplayRole); mProxyModel->setSortCaseSensitivity(Qt::CaseInsensitive); - - // populate data - bool populated = mDataManager->populateModel(Qt::Vertical); - if(!populated) - { - // no entries to display. - QStandardItem *modelItem = new QStandardItem(); - modelItem->setData(QVariant(hbTrId("txt_lint_list_no_location_entries_present")), Qt::DisplayRole); - mModel->appendRow( modelItem ); - } - // sort mProxyModel->sort(0, Qt::AscendingOrder); } @@ -127,7 +108,7 @@ // ---------------------------------------------------- // LocationPickerSearchView::doSearch() // ---------------------------------------------------- -void LocationPickerSearchView::doSearch(QString aCriteria) +void LocationPickerSearchView::doSearch( QString aCriteria ) { // use the string to search mProxyModel->filterParameterChanged(aCriteria); @@ -173,12 +154,22 @@ // ---------------------------------------------------- // LocationPickerSearchView::handleActivated() // ---------------------------------------------------- -void LocationPickerSearchView::handleActivated(const QModelIndex &aIndex) +void LocationPickerSearchView::handleActivated( const QModelIndex &aIndex ) { QModelIndex index = mProxyModel->mapToSource(aIndex); quint32 lm = 0; - mDataManager->getData( index.row(), lm ); + getData( index, lm ); //emit item is selectedsignal emit selectItem( lm ); } +// ---------------------------------------------------------------------------- +// LocationPickerSearchView::getData() +// ---------------------------------------------------------------------------- + +void LocationPickerSearchView::getData( QModelIndex aIndex, quint32& aValue ) +{ + QStandardItem* item = mModel->item( aIndex.row(), aIndex.column() ); + QVariant var = item->data( Qt::UserRole ); + aValue = var.toUInt(); +} diff -r 0f22fb80ebba -r cd10d5b85554 locationpickerservice/src/locationpickerservice.cpp --- a/locationpickerservice/src/locationpickerservice.cpp Mon May 03 12:27:22 2010 +0300 +++ b/locationpickerservice/src/locationpickerservice.cpp Fri May 14 15:47:27 2010 +0300 @@ -48,11 +48,11 @@ { mReturn=aLm; connect( this, SIGNAL( returnValueDelivered() ), qApp, SLOT( quit() ) ); - bool ok = completeRequest(mAsyncReqId,mReturn); - mAsyncReqId = 0; - if(ok==false) + bool ok = completeRequest(mAsyncReqId,mReturn); + mAsyncReqId = 0; + if(ok == false) { - qApp->quit(); + qApp->quit(); } } }