/** * @defgroup Map Map * @ingroup Elementary * * @image html img/widget/map/preview-00.png * @image latex img/widget/map/preview-00.eps * * This is a widget specifically for displaying a map. It uses basically * OpenStreetMap provider http://www.openstreetmap.org/, * but custom providers can be added. * * It supports some basic but yet nice features: * @li zoom and scroll * @li markers with content to be displayed when user clicks over it * @li group of markers * @li routes * * Smart callbacks one can listen to: * * - "clicked" - This is called when a user has clicked the map without * dragging around. * - "press" - This is called when a user has pressed down on the map. * - "longpressed" - This is called when a user has pressed down on the map * for a long time without dragging around. * - "clicked,double" - This is called when a user has double-clicked * the map. * - "load,detail" - Map detailed data load begins. * - "loaded,detail" - This is called when all currently visible parts of * the map are loaded. * - "zoom,start" - Zoom animation started. * - "zoom,stop" - Zoom animation stopped. * - "zoom,change" - Zoom changed when using an auto zoom mode. * - "scroll" - the content has been scrolled (moved). * - "scroll,anim,start" - scrolling animation has started. * - "scroll,anim,stop" - scrolling animation has stopped. * - "scroll,drag,start" - dragging the contents around has started. * - "scroll,drag,stop" - dragging the contents around has stopped. * - "downloaded" - This is called when all currently required map images * are downloaded. * - "route,load" - This is called when route request begins. * - "route,loaded" - This is called when route request ends. * - "name,load" - This is called when name request begins. * - "name,loaded- This is called when name request ends. * * Available style for map widget: * - @c "default" * * Available style for markers: * - @c "radio" * - @c "radio2" * - @c "empty" * * Available style for marker bubble: * - @c "default" * * List of examples: * @li @ref map_example_01 * @li @ref map_example_02 * @li @ref map_example_03 */ /** * @addtogroup Map * @{ */ /** * Set map's zoom behavior. It can be set to manual or automatic. * * Default value is #ELM_MAP_ZOOM_MODE_MANUAL. * * Values don't work as bitmask, only one can be choosen. * * @note Valid sizes are 2^zoom, consequently the map may be smaller * than the scroller view. * * @see elm_map_zoom_mode_set() * @see elm_map_zoom_mode_get() * * @ingroup Map */ typedef enum { ELM_MAP_ZOOM_MODE_MANUAL, /**< Zoom controlled manually by elm_map_zoom_set(). It's set by default. */ ELM_MAP_ZOOM_MODE_AUTO_FIT, /**< Zoom until map fits inside the scroll frame with no pixels outside this area. */ ELM_MAP_ZOOM_MODE_AUTO_FILL, /**< Zoom until map fills scroll, ensuring no pixels are left unfilled. */ ELM_MAP_ZOOM_MODE_LAST } Elm_Map_Zoom_Mode; /** * Set route service to be used. By default used source is * #ELM_MAP_ROUTE_SOURCE_YOURS. * * @see elm_map_route_source_set() * @see elm_map_route_source_get() * * @ingroup Map */ typedef enum { ELM_MAP_ROUTE_SOURCE_YOURS, /**< Routing service http://www.yournavigation.org/ . Set by default.*/ ELM_MAP_ROUTE_SOURCE_MONAV, /**< MoNav offers exact routing without heuristic assumptions. Its routing core is based on Contraction Hierarchies. It's not working with Map yet. */ ELM_MAP_ROUTE_SOURCE_ORS, /**< Open Route Service: http://www.openrouteservice.org/ . It's not working with Map yet. */ ELM_MAP_ROUTE_SOURCE_LAST } Elm_Map_Route_Sources; typedef enum { ELM_MAP_NAME_SOURCE_NOMINATIM, ELM_MAP_NAME_SOURCE_LAST } Elm_Map_Name_Sources; /** * Set type of transport used on route. * * @see elm_map_route_add() * * @ingroup Map */ typedef enum { ELM_MAP_ROUTE_TYPE_MOTOCAR, /**< Route should consider an automobile will be used. */ ELM_MAP_ROUTE_TYPE_BICYCLE, /**< Route should consider a bicycle will be used by the user. */ ELM_MAP_ROUTE_TYPE_FOOT, /**< Route should consider user will be walking. */ ELM_MAP_ROUTE_TYPE_LAST } Elm_Map_Route_Type; /** * Set the routing method, what should be priorized, time or distance. * * @see elm_map_route_add() * * @ingroup Map */ typedef enum { ELM_MAP_ROUTE_METHOD_FASTEST, /**< Route should priorize time. */ ELM_MAP_ROUTE_METHOD_SHORTEST, /**< Route should priorize distance. */ ELM_MAP_ROUTE_METHOD_LAST } Elm_Map_Route_Method; typedef enum { ELM_MAP_NAME_METHOD_SEARCH, ELM_MAP_NAME_METHOD_REVERSE, ELM_MAP_NAME_METHOD_LAST } Elm_Map_Name_Method; typedef struct _Elm_Map_Marker Elm_Map_Marker; /**< A marker to be shown in a specific point of the map. Can be created with elm_map_marker_add() and deleted with elm_map_marker_remove(). */ typedef struct _Elm_Map_Marker_Class Elm_Map_Marker_Class; /**< Each marker must be associated to a class. It's required to add a mark. The class defines the style of the marker when a marker is displayed alone (not grouped). A new class can be created with elm_map_marker_class_new(). */ typedef struct _Elm_Map_Group_Class Elm_Map_Group_Class; /**< Each marker must be associated to a group class. It's required to add a mark. The group class defines the style of the marker when a marker is grouped to other markers. Markers with the same group are grouped if they are close. A new group class can be created with elm_map_marker_group_class_new(). */ typedef struct _Elm_Map_Route Elm_Map_Route; /**< A route to be shown in the map. Can be created with elm_map_route_add() and deleted with elm_map_route_remove(). */ typedef struct _Elm_Map_Name Elm_Map_Name; /**< A handle for specific coordinates. */ typedef struct _Elm_Map_Track Elm_Map_Track; typedef Evas_Object *(*ElmMapMarkerGetFunc)(Evas_Object *obj, Elm_Map_Marker *marker, void *data); /**< Bubble content fetching class function for marker classes. When the user click on a marker, a bubble is displayed with a content. */ typedef void (*ElmMapMarkerDelFunc)(Evas_Object *obj, Elm_Map_Marker *marker, void *data, Evas_Object *o); /**< Function to delete bubble content for marker classes. */ typedef Evas_Object *(*ElmMapMarkerIconGetFunc)(Evas_Object *obj, Elm_Map_Marker *marker, void *data); /**< Icon fetching class function for marker classes. */ typedef Evas_Object *(*ElmMapGroupIconGetFunc)(Evas_Object *obj, void *data); /**< Icon fetching class function for markers group classes. */ typedef char *(*ElmMapModuleSourceFunc)(void); typedef int (*ElmMapModuleZoomMinFunc)(void); typedef int (*ElmMapModuleZoomMaxFunc)(void); typedef char *(*ElmMapModuleUrlFunc)(Evas_Object *obj, int x, int y, int zoom); typedef int (*ElmMapModuleRouteSourceFunc)(void); typedef char *(*ElmMapModuleRouteUrlFunc)(Evas_Object *obj, char *type_name, int method, double flon, double flat, double tlon, double tlat); typedef char *(*ElmMapModuleNameUrlFunc)(Evas_Object *obj, int method, char *name, double lon, double lat); typedef Eina_Bool (*ElmMapModuleGeoIntoCoordFunc)(const Evas_Object *obj, int zoom, double lon, double lat, int size, int *x, int *y); typedef Eina_Bool (*ElmMapModuleCoordIntoGeoFunc)(const Evas_Object *obj, int zoom, int x, int y, int size, double *lon, double *lat); /** * Add a new map widget to the given parent Elementary (container) object. * * @param parent The parent object. * @return a new map widget handle or @c NULL, on errors. * * This function inserts a new map widget on the canvas. * * @ingroup Map */ EAPI Evas_Object *elm_map_add(Evas_Object *parent); /** * Set the zoom level of the map. * * @param obj The map object. * @param zoom The zoom level to set. * * This sets the zoom level. * * It will respect limits defined by elm_map_source_zoom_min_set() and * elm_map_source_zoom_max_set(). * * By default these values are 0 (world map) and 18 (maximum zoom). * * This function should be used when zoom mode is set to * #ELM_MAP_ZOOM_MODE_MANUAL. This is the default mode, and can be set * with elm_map_zoom_mode_set(). * * @see elm_map_zoom_mode_set(). * @see elm_map_zoom_get(). * * @ingroup Map */ EAPI void elm_map_zoom_set(Evas_Object *obj, int zoom); /** * Get the zoom level of the map. * * @param obj The map object. * @return The current zoom level. * * This returns the current zoom level of the map object. * * Note that if you set the fill mode to other than #ELM_MAP_ZOOM_MODE_MANUAL * (which is the default), the zoom level may be changed at any time by the * map object itself to account for map size and map viewport size. * * @see elm_map_zoom_set() for details. * * @ingroup Map */ EAPI int elm_map_zoom_get(const Evas_Object *obj); /** * Set the zoom mode used by the map object. * * @param obj The map object. * @param mode The zoom mode of the map, being it one of * #ELM_MAP_ZOOM_MODE_MANUAL (default), #ELM_MAP_ZOOM_MODE_AUTO_FIT, * or #ELM_MAP_ZOOM_MODE_AUTO_FILL. * * This sets the zoom mode to manual or one of the automatic levels. * Manual (#ELM_MAP_ZOOM_MODE_MANUAL) means that zoom is set manually by * elm_map_zoom_set() and will stay at that level until changed by code * or until zoom mode is changed. This is the default mode. * * The Automatic modes will allow the map object to automatically * adjust zoom mode based on properties. #ELM_MAP_ZOOM_MODE_AUTO_FIT will * adjust zoom so the map fits inside the scroll frame with no pixels * outside this area. #ELM_MAP_ZOOM_MODE_AUTO_FILL will be similar but * ensure no pixels within the frame are left unfilled. Do not forget that * the valid sizes are 2^zoom, consequently the map may be smaller than * the scroller view. * * @see elm_map_zoom_set() * * @ingroup Map */ EAPI void elm_map_zoom_mode_set(Evas_Object *obj, Elm_Map_Zoom_Mode mode); /** * Get the zoom mode used by the map object. * * @param obj The map object. * @return The zoom mode of the map, being it one of * #ELM_MAP_ZOOM_MODE_MANUAL (default), #ELM_MAP_ZOOM_MODE_AUTO_FIT, * or #ELM_MAP_ZOOM_MODE_AUTO_FILL. * * This function returns the current zoom mode used by the map object. * * @see elm_map_zoom_mode_set() for more details. * * @ingroup Map */ EAPI Elm_Map_Zoom_Mode elm_map_zoom_mode_get(const Evas_Object *obj); /** * Get the current coordinates of the map. * * @param obj The map object. * @param lon Pointer where to store longitude. * @param lat Pointer where to store latitude. * * This gets the current center coordinates of the map object. It can be * set by elm_map_geo_region_bring_in() and elm_map_geo_region_show(). * * @see elm_map_geo_region_bring_in() * @see elm_map_geo_region_show() * * @ingroup Map */ EAPI void elm_map_geo_region_get(const Evas_Object *obj, double *lon, double *lat); /** * Animatedly bring in given coordinates to the center of the map. * * @param obj The map object. * @param lon Longitude to center at. * @param lat Latitude to center at. * * This causes map to jump to the given @p lat and @p lon coordinates * and show it (by scrolling) in the center of the viewport, if it is not * already centered. This will use animation to do so and take a period * of time to complete. * * @see elm_map_geo_region_show() for a function to avoid animation. * @see elm_map_geo_region_get() * * @ingroup Map */ EAPI void elm_map_geo_region_bring_in(Evas_Object *obj, double lon, double lat); /** * Show the given coordinates at the center of the map, @b immediately. * * @param obj The map object. * @param lon Longitude to center at. * @param lat Latitude to center at. * * This causes map to @b redraw its viewport's contents to the * region contining the given @p lat and @p lon, that will be moved to the * center of the map. * * @see elm_map_geo_region_bring_in() for a function to move with animation. * @see elm_map_geo_region_get() * * @ingroup Map */ EAPI void elm_map_geo_region_show(Evas_Object *obj, double lon, double lat); /** * Pause or unpause the map. * * @param obj The map object. * @param paused Use @c EINA_TRUE to pause the map @p obj or @c EINA_FALSE * to unpause it. * * This sets the paused state to on (@c EINA_TRUE) or off (@c EINA_FALSE) * for map. * * The default is off. * * This will stop zooming using animation, changing zoom levels will * change instantly. This will stop any existing animations that are running. * * @see elm_map_paused_get() * * @ingroup Map */ EAPI void elm_map_paused_set(Evas_Object *obj, Eina_Bool paused); /** * Get a value whether map is paused or not. * * @param obj The map object. * @return @c EINA_TRUE means map is pause. @c EINA_FALSE indicates * it is not. If @p obj is @c NULL, @c EINA_FALSE is returned. * * This gets the current paused state for the map object. * * @see elm_map_paused_set() for details. * * @ingroup Map */ EAPI Eina_Bool elm_map_paused_get(const Evas_Object *obj); /** * Set to show markers during zoom level changes or not. * * @param obj The map object. * @param paused Use @c EINA_TRUE to @b not show markers or @c EINA_FALSE * to show them. * * This sets the paused state to on (@c EINA_TRUE) or off (@c EINA_FALSE) * for map. * * The default is off. * * This will stop zooming using animation, changing zoom levels will * change instantly. This will stop any existing animations that are running. * * This sets the paused state to on (@c EINA_TRUE) or off (@c EINA_FALSE) * for the markers. * * The default is off. * * Enabling it will force the map to stop displaying the markers during * zoom level changes. Set to on if you have a large number of markers. * * @see elm_map_paused_markers_get() * * @ingroup Map */ EAPI void elm_map_paused_markers_set(Evas_Object *obj, Eina_Bool paused); /** * Get a value whether markers will be displayed on zoom level changes or not * * @param obj The map object. * @return @c EINA_TRUE means map @b won't display markers or @c EINA_FALSE * indicates it will. If @p obj is @c NULL, @c EINA_FALSE is returned. * * This gets the current markers paused state for the map object. * * @see elm_map_paused_markers_set() for details. * * @ingroup Map */ EAPI Eina_Bool elm_map_paused_markers_get(const Evas_Object *obj); /** * Get the information of downloading status. * * @param obj The map object. * @param try_num Pointer where to store number of tiles being downloaded. * @param finish_num Pointer where to store number of tiles successfully * downloaded. * * This gets the current downloading status for the map object, the number * of tiles being downloaded and the number of tiles already downloaded. * * @ingroup Map */ EAPI void elm_map_utils_downloading_status_get(const Evas_Object *obj, int *try_num, int *finish_num); /** * Convert a pixel coordinate (x,y) into a geographic coordinate * (longitude, latitude). * * @param obj The map object. * @param x the coordinate. * @param y the coordinate. * @param size the size in pixels of the map. * The map is a square and generally his size is : pow(2.0, zoom)*256. * @param lon Pointer where to store the longitude that correspond to x. * @param lat Pointer where to store the latitude that correspond to y. * * @note Origin pixel point is the top left corner of the viewport. * Map zoom and size are taken on account. * * @see elm_map_utils_convert_geo_into_coord() if you need the inverse. * * @ingroup Map */ EAPI void elm_map_utils_convert_coord_into_geo(const Evas_Object *obj, int x, int y, int size, double *lon, double *lat); /** * Convert a geographic coordinate (longitude, latitude) into a pixel * coordinate (x, y). * * @param obj The map object. * @param lon the longitude. * @param lat the latitude. * @param size the size in pixels of the map. The map is a square * and generally his size is : pow(2.0, zoom)*256. * @param x Pointer where to store the horizontal pixel coordinate that * correspond to the longitude. * @param y Pointer where to store the vertical pixel coordinate that * correspond to the latitude. * * @note Origin pixel point is the top left corner of the viewport. * Map zoom and size are taken on account. * * @see elm_map_utils_convert_coord_into_geo() if you need the inverse. * * @ingroup Map */ EAPI void elm_map_utils_convert_geo_into_coord(const Evas_Object *obj, double lon, double lat, int size, int *x, int *y); /** * Convert a geographic coordinate (longitude, latitude) into a name * (address). * * @param obj The map object. * @param lon the longitude. * @param lat the latitude. * @return name A #Elm_Map_Name handle for this coordinate. * * To get the string for this address, elm_map_name_address_get() * should be used. * * @see elm_map_utils_convert_name_into_coord() if you need the inverse. * * @ingroup Map */ EAPI Elm_Map_Name *elm_map_utils_convert_coord_into_name(const Evas_Object *obj, double lon, double lat); /** * Convert a name (address) into a geographic coordinate * (longitude, latitude). * * @param obj The map object. * @param name The address. * @return name A #Elm_Map_Name handle for this address. * * To get the longitude and latitude, elm_map_name_region_get() * should be used. * * @see elm_map_utils_convert_coord_into_name() if you need the inverse. * * @ingroup Map */ EAPI Elm_Map_Name *elm_map_utils_convert_name_into_coord(const Evas_Object *obj, char *address); /** * Convert a pixel coordinate into a rotated pixel coordinate. * * @param obj The map object. * @param x horizontal coordinate of the point to rotate. * @param y vertical coordinate of the point to rotate. * @param cx rotation's center horizontal position. * @param cy rotation's center vertical position. * @param degree amount of degrees from 0.0 to 360.0 to rotate arount Z axis. * @param xx Pointer where to store rotated x. * @param yy Pointer where to store rotated y. * * @ingroup Map */ EAPI void elm_map_utils_rotate_coord(const Evas_Object *obj, const Evas_Coord x, const Evas_Coord y, const Evas_Coord cx, const Evas_Coord cy, const double degree, Evas_Coord *xx, Evas_Coord *yy); /** * Add a new marker to the map object. * * @param obj The map object. * @param lon The longitude of the marker. * @param lat The latitude of the marker. * @param clas The class, to use when marker @b isn't grouped to others. * @param clas_group The class group, to use when marker is grouped to others * @param data The data passed to the callbacks. * * @return The created marker or @c NULL upon failure. * * A marker will be created and shown in a specific point of the map, defined * by @p lon and @p lat. * * It will be displayed using style defined by @p class when this marker * is displayed alone (not grouped). A new class can be created with * elm_map_marker_class_new(). * * If the marker is grouped to other markers, it will be displayed with * style defined by @p class_group. Markers with the same group are grouped * if they are close. A new group class can be created with * elm_map_marker_group_class_new(). * * Markers created with this method can be deleted with * elm_map_marker_remove(). * * A marker can have associated content to be displayed by a bubble, * when a user click over it, as well as an icon. These objects will * be fetch using class' callback functions. * * @see elm_map_marker_class_new() * @see elm_map_marker_group_class_new() * @see elm_map_marker_remove() * * @ingroup Map */ EAPI Elm_Map_Marker *elm_map_marker_add(Evas_Object *obj, double lon, double lat, Elm_Map_Marker_Class *clas, Elm_Map_Group_Class *clas_group, void *data); /** * Set the maximum numbers of markers' content to be displayed in a group. * * @param obj The map object. * @param max The maximum numbers of items displayed in a bubble. * * A bubble will be displayed when the user clicks over the group, * and will place the content of markers that belong to this group * inside it. * * A group can have a long list of markers, consequently the creation * of the content of the bubble can be very slow. * * In order to avoid this, a maximum number of items is displayed * in a bubble. * * By default this number is 30. * * Marker with the same group class are grouped if they are close. * * @see elm_map_marker_add() * * @ingroup Map */ EAPI void elm_map_max_marker_per_group_set(Evas_Object *obj, int max); /** * Remove a marker from the map. * * @param marker The marker to remove. * * @see elm_map_marker_add() * * @ingroup Map */ EAPI void elm_map_marker_remove(Elm_Map_Marker *marker); /** * Get the current coordinates of the marker. * * @param marker marker. * @param lat Pointer where to store the marker's latitude. * @param lon Pointer where to store the marker's longitude. * * These values are set when adding markers, with function * elm_map_marker_add(). * * @see elm_map_marker_add() * * @ingroup Map */ EAPI void elm_map_marker_region_get(const Elm_Map_Marker *marker, double *lon, double *lat); /** * Animatedly bring in given marker to the center of the map. * * @param marker The marker to center at. * * This causes map to jump to the given @p marker's coordinates * and show it (by scrolling) in the center of the viewport, if it is not * already centered. This will use animation to do so and take a period * of time to complete. * * @see elm_map_marker_show() for a function to avoid animation. * @see elm_map_marker_region_get() * * @ingroup Map */ EAPI void elm_map_marker_bring_in(Elm_Map_Marker *marker); /** * Show the given marker at the center of the map, @b immediately. * * @param marker The marker to center at. * * This causes map to @b redraw its viewport's contents to the * region contining the given @p marker's coordinates, that will be * moved to the center of the map. * * @see elm_map_marker_bring_in() for a function to move with animation. * @see elm_map_markers_list_show() if more than one marker need to be * displayed. * @see elm_map_marker_region_get() * * @ingroup Map */ EAPI void elm_map_marker_show(Elm_Map_Marker *marker); /** * Move and zoom the map to display a list of markers. * * @param markers A list of #Elm_Map_Marker handles. * * The map will be centered on the center point of the markers in the list. * Then the map will be zoomed in order to fit the markers using the maximum * zoom which allows display of all the markers. * * @warning All the markers should belong to the same map object. * * @see elm_map_marker_show() to show a single marker. * @see elm_map_marker_bring_in() * * @ingroup Map */ EAPI void elm_map_markers_list_show(Eina_List *markers); /** * Get the Evas object returned by the ElmMapMarkerGetFunc callback * * @param marker The marker wich content should be returned. * @return Return the evas object if it exists, else @c NULL. * * To set callback function #ElmMapMarkerGetFunc for the marker class, * elm_map_marker_class_get_cb_set() should be used. * * This content is what will be inside the bubble that will be displayed * when an user clicks over the marker. * * This returns the actual Evas object used to be placed inside * the bubble. This may be @c NULL, as it may * not have been created or may have been deleted, at any time, by * the map. Do not modify this object (move, resize, * show, hide, etc.), as the map is controlling it. This * function is for querying, emitting custom signals or hooking * lower level callbacks for events on that object. Do not delete * this object under any circumstances. * * @ingroup Map */ EAPI Evas_Object *elm_map_marker_object_get(const Elm_Map_Marker *marker); /** * Update the marker * * @param marker The marker to be updated. * * If a content is set to this marker, it will call function to delete it, * #ElmMapMarkerDelFunc, and then will fetch the content again with * #ElmMapMarkerGetFunc. * * These functions are set for the marker class with * elm_map_marker_class_get_cb_set() and elm_map_marker_class_del_cb_set(). * * @ingroup Map */ EAPI void elm_map_marker_update(Elm_Map_Marker *marker); /** * Close all the bubbles opened by the user. * * @param obj The map object. * * A bubble is displayed with a content fetched with #ElmMapMarkerGetFunc * when the user clicks on a marker. * * This functions is set for the marker class with * elm_map_marker_class_get_cb_set(). * * @ingroup Map */ EAPI void elm_map_bubbles_close(Evas_Object *obj); /** * Create a new group class. * * @param obj The map object. * @return Returns the new group class. * * Each marker must be associated to a group class. Markers in the same * group are grouped if they are close. * * The group class defines the style of the marker when a marker is grouped * to others markers. When it is alone, another class will be used. * * A group class will need to be provided when creating a marker with * elm_map_marker_add(). * * Some properties and functions can be set by class, as: * - style, with elm_map_group_class_style_set() * - data - to be associated to the group class. It can be set using * elm_map_group_class_data_set(). * - min zoom to display markers, set with * elm_map_group_class_zoom_displayed_set(). * - max zoom to group markers, set using * elm_map_group_class_zoom_grouped_set(). * - visibility - set if markers will be visible or not, set with * elm_map_group_class_hide_set(). * - #ElmMapGroupIconGetFunc - used to fetch icon for markers group classes. * It can be set using elm_map_group_class_icon_cb_set(). * * @see elm_map_marker_add() * @see elm_map_group_class_style_set() * @see elm_map_group_class_data_set() * @see elm_map_group_class_zoom_displayed_set() * @see elm_map_group_class_zoom_grouped_set() * @see elm_map_group_class_hide_set() * @see elm_map_group_class_icon_cb_set() * * @ingroup Map */ EAPI Elm_Map_Group_Class *elm_map_group_class_new(Evas_Object *obj); /** * Set the marker's style of a group class. * * @param clas The group class. * @param style The style to be used by markers. * * Each marker must be associated to a group class, and will use the style * defined by such class when grouped to other markers. * * The following styles are provided by default theme: * @li @c radio - blue circle * @li @c radio2 - green circle * @li @c empty * * @see elm_map_group_class_new() for more details. * @see elm_map_marker_add() * * @ingroup Map */ EAPI void elm_map_group_class_style_set(Elm_Map_Group_Class *clas, const char *style); /** * Set the icon callback function of a group class. * * @param clas The group class. * @param icon_get The callback function that will return the icon. * * Each marker must be associated to a group class, and it can display a * custom icon. The function @p icon_get must return this icon. * * @see elm_map_group_class_new() for more details. * @see elm_map_marker_add() * * @ingroup Map */ EAPI void elm_map_group_class_icon_cb_set(Elm_Map_Group_Class *clas, ElmMapGroupIconGetFunc icon_get); /** * Set the data associated to the group class. * * @param clas The group class. * @param data The new user data. * * This data will be passed for callback functions, like icon get callback, * that can be set with elm_map_group_class_icon_cb_set(). * * If a data was previously set, the object will lose the pointer for it, * so if needs to be freed, you must do it yourself. * * @see elm_map_group_class_new() for more details. * @see elm_map_group_class_icon_cb_set() * @see elm_map_marker_add() * * @ingroup Map */ EAPI void elm_map_group_class_data_set(Elm_Map_Group_Class *clas, void *data); /** * Set the minimum zoom from where the markers are displayed. * * @param clas The group class. * @param zoom The minimum zoom. * * Markers only will be displayed when the map is displayed at @p zoom * or bigger. * * @see elm_map_group_class_new() for more details. * @see elm_map_marker_add() * * @ingroup Map */ EAPI void elm_map_group_class_zoom_displayed_set(Elm_Map_Group_Class *clas, int zoom); /** * Set the zoom from where the markers are no more grouped. * * @param clas The group class. * @param zoom The maximum zoom. * * Markers only will be grouped when the map is displayed at * less than @p zoom. * * @see elm_map_group_class_new() for more details. * @see elm_map_marker_add() * * @ingroup Map */ EAPI void elm_map_group_class_zoom_grouped_set(Elm_Map_Group_Class *clas, int zoom); /** * Set if the markers associated to the group class @p clas are hidden or not. * * @param clas The group class. * @param hide Use @c EINA_TRUE to hide markers or @c EINA_FALSE * to show them. * * If @p hide is @c EINA_TRUE the markers will be hidden, but default * is to show them. * * @ingroup Map */ EAPI void elm_map_group_class_hide_set(Evas_Object *obj, Elm_Map_Group_Class *clas, Eina_Bool hide); /** * Create a new marker class. * * @param obj The map object. * @return Returns the new group class. * * Each marker must be associated to a class. * * The marker class defines the style of the marker when a marker is * displayed alone, i.e., not grouped to to others markers. When grouped * it will use group class style. * * A marker class will need to be provided when creating a marker with * elm_map_marker_add(). * * Some properties and functions can be set by class, as: * - style, with elm_map_marker_class_style_set() * - #ElmMapMarkerIconGetFunc - used to fetch icon for markers classes. * It can be set using elm_map_marker_class_icon_cb_set(). * - #ElmMapMarkerGetFunc - used to fetch bubble content for marker classes. * Set using elm_map_marker_class_get_cb_set(). * - #ElmMapMarkerDelFunc - used to delete bubble content for marker classes. * Set using elm_map_marker_class_del_cb_set(). * * @see elm_map_marker_add() * @see elm_map_marker_class_style_set() * @see elm_map_marker_class_icon_cb_set() * @see elm_map_marker_class_get_cb_set() * @see elm_map_marker_class_del_cb_set() * * @ingroup Map */ EAPI Elm_Map_Marker_Class *elm_map_marker_class_new(Evas_Object *obj); /** * Set the marker's style of a marker class. * * @param clas The marker class. * @param style The style to be used by markers. * * Each marker must be associated to a marker class, and will use the style * defined by such class when alone, i.e., @b not grouped to other markers. * * The following styles are provided by default theme: * @li @c radio * @li @c radio2 * @li @c empty * * @see elm_map_marker_class_new() for more details. * @see elm_map_marker_add() * * @ingroup Map */ EAPI void elm_map_marker_class_style_set(Elm_Map_Marker_Class *clas, const char *style); /** * Set the icon callback function of a marker class. * * @param clas The marker class. * @param icon_get The callback function that will return the icon. * * Each marker must be associated to a marker class, and it can display a * custom icon. The function @p icon_get must return this icon. * * @see elm_map_marker_class_new() for more details. * @see elm_map_marker_add() * * @ingroup Map */ EAPI void elm_map_marker_class_icon_cb_set(Elm_Map_Marker_Class *clas, ElmMapMarkerIconGetFunc icon_get); /** * Set the bubble content callback function of a marker class. * * @param clas The marker class. * @param get The callback function that will return the content. * * Each marker must be associated to a marker class, and it can display a * a content on a bubble that opens when the user click over the marker. * The function @p get must return this content object. * * If this content will need to be deleted, elm_map_marker_class_del_cb_set() * can be used. * * @see elm_map_marker_class_new() for more details. * @see elm_map_marker_class_del_cb_set() * @see elm_map_marker_add() * * @ingroup Map */ EAPI void elm_map_marker_class_get_cb_set(Elm_Map_Marker_Class *clas, ElmMapMarkerGetFunc get); /** * Set the callback function used to delete bubble content of a marker class. * * @param clas The marker class. * @param del The callback function that will delete the content. * * Each marker must be associated to a marker class, and it can display a * a content on a bubble that opens when the user click over the marker. * The function to return such content can be set with * elm_map_marker_class_get_cb_set(). * * If this content must be freed, a callback function need to be * set for that task with this function. * * If this callback is defined it will have to delete (or not) the * object inside, but if the callback is not defined the object will be * destroyed with evas_object_del(). * * @see elm_map_marker_class_new() for more details. * @see elm_map_marker_class_get_cb_set() * @see elm_map_marker_add() * * @ingroup Map */ EAPI void elm_map_marker_class_del_cb_set(Elm_Map_Marker_Class *clas, ElmMapMarkerDelFunc del); /** * Get the list of available sources. * * @param obj The map object. * @return The source names list. * * It will provide a list with all available sources, that can be set as * current source with elm_map_source_name_set(), or get with * elm_map_source_name_get(). * * Available sources: * @li "Mapnik" * @li "Osmarender" * @li "CycleMap" * @li "Maplint" * * @see elm_map_source_name_set() for more details. * @see elm_map_source_name_get() * * @ingroup Map */ EAPI const char **elm_map_source_names_get(const Evas_Object *obj); /** * Set the source of the map. * * @param obj The map object. * @param source The source to be used. * * Map widget retrieves images that composes the map from a web service. * This web service can be set with this method. * * A different service can return a different maps with different * information and it can use different zoom values. * * The @p source_name need to match one of the names provided by * elm_map_source_names_get(). * * The current source can be get using elm_map_source_name_get(). * * @see elm_map_source_names_get() * @see elm_map_source_name_get() * * * @ingroup Map */ EAPI void elm_map_source_name_set(Evas_Object *obj, const char *source_name); /** * Get the name of currently used source. * * @param obj The map object. * @return Returns the name of the source in use. * * @see elm_map_source_name_set() for more details. * * @ingroup Map */ EAPI const char *elm_map_source_name_get(const Evas_Object *obj); /** * Set the source of the route service to be used by the map. * * @param obj The map object. * @param source The route service to be used, being it one of * #ELM_MAP_ROUTE_SOURCE_YOURS (default), #ELM_MAP_ROUTE_SOURCE_MONAV, * and #ELM_MAP_ROUTE_SOURCE_ORS. * * Each one has its own algorithm, so the route retrieved may * differ depending on the source route. Now, only the default is working. * * #ELM_MAP_ROUTE_SOURCE_YOURS is the routing service provided at * http://www.yournavigation.org/. * * #ELM_MAP_ROUTE_SOURCE_MONAV, offers exact routing without heuristic * assumptions. Its routing core is based on Contraction Hierarchies. * * #ELM_MAP_ROUTE_SOURCE_ORS, is provided at http://www.openrouteservice.org/ * * @see elm_map_route_source_get(). * * @ingroup Map */ EAPI void elm_map_route_source_set(Evas_Object *obj, Elm_Map_Route_Sources source); /** * Get the current route source. * * @param obj The map object. * @return The source of the route service used by the map. * * @see elm_map_route_source_set() for details. * * @ingroup Map */ EAPI Elm_Map_Route_Sources elm_map_route_source_get(const Evas_Object *obj); /** * Set the minimum zoom of the source. * * @param obj The map object. * @param zoom New minimum zoom value to be used. * * By default, it's 0. * * @ingroup Map */ EAPI void elm_map_source_zoom_min_set(Evas_Object *obj, int zoom); /** * Get the minimum zoom of the source. * * @param obj The map object. * @return Returns the minimum zoom of the source. * * @see elm_map_source_zoom_min_set() for details. * * @ingroup Map */ EAPI int elm_map_source_zoom_min_get(const Evas_Object *obj); /** * Set the maximum zoom of the source. * * @param obj The map object. * @param zoom New maximum zoom value to be used. * * By default, it's 18. * * @ingroup Map */ EAPI void elm_map_source_zoom_max_set(Evas_Object *obj, int zoom); /** * Get the maximum zoom of the source. * * @param obj The map object. * @return Returns the maximum zoom of the source. * * @see elm_map_source_zoom_min_set() for details. * * @ingroup Map */ EAPI int elm_map_source_zoom_max_get(const Evas_Object *obj); /** * Set the user agent used by the map object to access routing services. * * @param obj The map object. * @param user_agent The user agent to be used by the map. * * User agent is a client application implementing a network protocol used * in communications within a client–server distributed computing system * * The @p user_agent identification string will transmitted in a header * field @c User-Agent. * * @see elm_map_user_agent_get() * * @ingroup Map */ EAPI void elm_map_user_agent_set(Evas_Object *obj, const char *user_agent); /** * Get the user agent used by the map object. * * @param obj The map object. * @return The user agent identification string used by the map. * * @see elm_map_user_agent_set() for details. * * @ingroup Map */ EAPI const char *elm_map_user_agent_get(const Evas_Object *obj); /** * Add a new route to the map object. * * @param obj The map object. * @param type The type of transport to be considered when tracing a route. * @param method The routing method, what should be priorized. * @param flon The start longitude. * @param flat The start latitude. * @param tlon The destination longitude. * @param tlat The destination latitude. * * @return The created route or @c NULL upon failure. * * A route will be traced by point on coordinates (@p flat, @p flon) * to point on coordinates (@p tlat, @p tlon), using the route service * set with elm_map_route_source_set(). * * It will take @p type on consideration to define the route, * depending if the user will be walking or driving, the route may vary. * One of #ELM_MAP_ROUTE_TYPE_MOTOCAR, #ELM_MAP_ROUTE_TYPE_BICYCLE, or * #ELM_MAP_ROUTE_TYPE_FOOT need to be used. * * Another parameter is what the route should priorize, the minor distance * or the less time to be spend on the route. So @p method should be one * of #ELM_MAP_ROUTE_METHOD_SHORTEST or #ELM_MAP_ROUTE_METHOD_FASTEST. * * Routes created with this method can be deleted with * elm_map_route_remove(), colored with elm_map_route_color_set(), * and distance can be get with elm_map_route_distance_get(). * * @see elm_map_route_remove() * @see elm_map_route_color_set() * @see elm_map_route_distance_get() * @see elm_map_route_source_set() * * @ingroup Map */ EAPI Elm_Map_Route *elm_map_route_add(Evas_Object *obj, Elm_Map_Route_Type type, Elm_Map_Route_Method method, double flon, double flat, double tlon, double tlat); /** * Remove a route from the map. * * @param route The route to remove. * * @see elm_map_route_add() * * @ingroup Map */ EAPI void elm_map_route_remove(Elm_Map_Route *route); /** * Set the route color. * * @param route The route object. * @param r Red channel value, from 0 to 255. * @param g Green channel value, from 0 to 255. * @param b Blue channel value, from 0 to 255. * @param a Alpha channel value, from 0 to 255. * * It uses an additive color model, so each color channel represents * how much of each primary colors must to be used. 0 represents * ausence of this color, so if all of the three are set to 0, * the color will be black. * * These component values should be integers in the range 0 to 255, * (single 8-bit byte). * * This sets the color used for the route. By default, it is set to * solid red (r = 255, g = 0, b = 0, a = 255). * * For alpha channel, 0 represents completely transparent, and 255, opaque. * * @see elm_map_route_color_get() * * @ingroup Map */ EAPI void elm_map_route_color_set(Elm_Map_Route *route, int r, int g, int b, int a); /** * Get the route color. * * @param route The route object. * @param r Pointer where to store the red channel value. * @param g Pointer where to store the green channel value. * @param b Pointer where to store the blue channel value. * @param a Pointer where to store the alpha channel value. * * @see elm_map_route_color_set() for details. * * @ingroup Map */ EAPI void elm_map_route_color_get(const Elm_Map_Route *route, int *r, int *g, int *b, int *a); /** * Get the route distance in kilometers. * * @param route The route object. * @return The distance of route (unit : km). * * @ingroup Map */ EAPI double elm_map_route_distance_get(const Elm_Map_Route *route); /** * Get the information of route nodes. * * @param route The route object. * @return Returns a string with the nodes of route. * * @ingroup Map */ EAPI const char *elm_map_route_node_get(const Elm_Map_Route *route); /** * Get the information of route waypoint. * * @param route the route object. * @return Returns a string with information about waypoint of route. * * @ingroup Map */ EAPI const char *elm_map_route_waypoint_get(const Elm_Map_Route *route); /** * Get the address of the name. * * @param name The name handle. * @return Returns the address string of @p name. * * This gets the coordinates of the @p name, created with one of the * conversion functions. * * @see elm_map_utils_convert_name_into_coord() * @see elm_map_utils_convert_coord_into_name() * * @ingroup Map */ EAPI const char *elm_map_name_address_get(const Elm_Map_Name *name); /** * Get the current coordinates of the name. * * @param name The name handle. * @param lat Pointer where to store the latitude. * @param lon Pointer where to store The longitude. * * This gets the coordinates of the @p name, created with one of the * conversion functions. * * @see elm_map_utils_convert_name_into_coord() * @see elm_map_utils_convert_coord_into_name() * * @ingroup Map */ EAPI void elm_map_name_region_get(const Elm_Map_Name *name, double *lon, double *lat); /** * Remove a name from the map. * * @param name The name to remove. * * Basically the struct handled by @p name will be freed, so convertions * between address and coordinates will be lost. * * @see elm_map_utils_convert_name_into_coord() * @see elm_map_utils_convert_coord_into_name() * * @ingroup Map */ EAPI void elm_map_name_remove(Elm_Map_Name *name); /** * Rotate the map. * * @param obj The map object. * @param degree Angle from 0.0 to 360.0 to rotate arount Z axis. * @param cx Rotation's center horizontal position. * @param cy Rotation's center vertical position. * * @see elm_map_rotate_get() * * @ingroup Map */ EAPI void elm_map_rotate_set(Evas_Object *obj, double degree, Evas_Coord cx, Evas_Coord cy); /** * Get the rotate degree of the map * * @param obj The map object * @param degree Pointer where to store degrees from 0.0 to 360.0 * to rotate arount Z axis. * @param cx Pointer where to store rotation's center horizontal position. * @param cy Pointer where to store rotation's center vertical position. * * @see elm_map_rotate_set() to set map rotation. * * @ingroup Map */ EAPI void elm_map_rotate_get(const Evas_Object *obj, double *degree, Evas_Coord *cx, Evas_Coord *cy); /** * Enable or disable mouse wheel to be used to zoom in / out the map. * * @param obj The map object. * @param disabled Use @c EINA_TRUE to disable mouse wheel or @c EINA_FALSE * to enable it. * * Mouse wheel can be used for the user to zoom in or zoom out the map. * * It's disabled by default. * * @see elm_map_wheel_disabled_get() * * @ingroup Map */ EAPI void elm_map_wheel_disabled_set(Evas_Object *obj, Eina_Bool disabled); /** * Get a value whether mouse wheel is enabled or not. * * @param obj The map object. * @return @c EINA_TRUE means map is disabled. @c EINA_FALSE indicates * it is enabled. If @p obj is @c NULL, @c EINA_FALSE is returned. * * Mouse wheel can be used for the user to zoom in or zoom out the map. * * @see elm_map_wheel_disabled_set() for details. * * @ingroup Map */ EAPI Eina_Bool elm_map_wheel_disabled_get(const Evas_Object *obj); #ifdef ELM_EMAP /** * Add a track on the map * * @param obj The map object. * @param emap The emap route object. * @return The route object. This is an elm object of type Route. * * @see elm_route_add() for details. * * @ingroup Map */ EAPI Evas_Object *elm_map_track_add(Evas_Object *obj, EMap_Route *emap); #endif /** * Remove a track from the map * * @param obj The map object. * @param route The track to remove. * * @ingroup Map */ EAPI void elm_map_track_remove(Evas_Object *obj, Evas_Object *route); /** * @} */