diff --git a/legacy/elementary/ChangeLog b/legacy/elementary/ChangeLog index 920f27ba8f..ea01dcbb88 100644 --- a/legacy/elementary/ChangeLog +++ b/legacy/elementary/ChangeLog @@ -88,3 +88,7 @@ * Add skeleton for handling remote commands access controls. +2012-05-23 Tae-Hwan Kim (Bluezery) + + * Map: Add elm_map_overlays_get & elm_map_overlay_visible_get functions. + diff --git a/legacy/elementary/NEWS b/legacy/elementary/NEWS index b893a1b8bc..9ee70f9405 100644 --- a/legacy/elementary/NEWS +++ b/legacy/elementary/NEWS @@ -8,6 +8,7 @@ Additions: * Focus can be moved in all directions by elm_widget_focus_go function. * Reload theme when it change on disk. * Fileselector: Add a wheel spinner that show/spin while EIO is working + * Add elm_map_overlays_get & elm_map_overlay_visible_get functions. Fixes: diff --git a/legacy/elementary/src/bin/test_map.c b/legacy/elementary/src/bin/test_map.c index d136e83100..0a2e0b8e36 100644 --- a/legacy/elementary/src/bin/test_map.c +++ b/legacy/elementary/src/bin/test_map.c @@ -205,6 +205,37 @@ _bubble_parking_follow(Evas_Object *map) } } +static void +_overlays_num_check(Evas_Object *obj) +{ + Evas_Coord x, y, w, h; + double lon, lat, max_lon, max_lat, min_lon, min_lat; + Eina_List *overlays, *l; + Elm_Map_Overlay *ovl; + int cnt = 0; + int cnt_visible = 0; + + overlays = elm_map_overlays_get(obj); + evas_object_geometry_get(obj, &x, &y, &w, &h); + elm_map_canvas_to_region_convert(obj, x, y, &min_lon, &max_lat); + elm_map_canvas_to_region_convert(obj, x + w, y + h, &max_lon, &min_lat); + + EINA_LIST_FOREACH(overlays, l, ovl) + { + if (elm_map_overlay_type_get(ovl) == ELM_MAP_OVERLAY_TYPE_CLASS) + continue; + elm_map_overlay_region_get(ovl, &lon, &lat); + if ((min_lon <= lon) && (lon <= max_lon) && + (min_lat <= lat) && (lat <= max_lat)) + { + if (elm_map_overlay_visible_get(ovl)) cnt_visible++; + cnt++; + } + } + printf("Number of (visible/total) overlays in viewport: %d/%d\n", + cnt_visible, cnt); +} + static void _map_clicked(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) { @@ -298,6 +329,7 @@ _map_drag_stop(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSE { printf("scroll,drag,stop\n"); evas_object_smart_callback_add(data, "longpressed", _map_longpressed, data); + _overlays_num_check(obj); } static void @@ -322,13 +354,14 @@ static void _map_zoom_stop(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) { printf("zoom,stop\n"); - _bubble_parking_follow(obj); + _overlays_num_check(obj); } static void _map_zoom_change(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) { printf("zoom,change\n"); + _bubble_parking_follow(obj); } static void diff --git a/legacy/elementary/src/lib/elm_map.c b/legacy/elementary/src/lib/elm_map.c index 46ad77118b..5e3e0dc9dd 100644 --- a/legacy/elementary/src/lib/elm_map.c +++ b/legacy/elementary/src/lib/elm_map.c @@ -150,6 +150,7 @@ struct _Color struct _Overlay_Group { Widget_Data *wd; + double lon, lat; Elm_Map_Overlay *overlay; // virtual group type overlay Elm_Map_Overlay *clas; // class overlay for this virtual group Overlay_Default *ovl; // rendered overlay @@ -239,6 +240,7 @@ struct _Elm_Map_Overlay { Widget_Data *wd; + Eina_Bool visible : 1; Eina_Bool paused : 1; Eina_Bool hide : 1; Evas_Coord zoom_min; @@ -439,6 +441,8 @@ struct _Widget_Data Eina_List *names; Eina_List *overlays; + Eina_List *group_overlays; + Eina_List *all_overlays; }; static char *_mapnik_url_cb(const Evas_Object *obj __UNUSED__, int x, int y, int zoom); @@ -734,6 +738,8 @@ _grid_item_in_viewport(Grid_Item *gi) static void _grid_item_update(Grid_Item *gi) { + EINA_SAFETY_ON_NULL_RETURN(gi); + evas_object_image_file_set(gi->img, gi->file, NULL); if (!gi->wd->zoom_timer && !gi->wd->scr_timer) evas_object_image_smooth_scale_set(gi->img, EINA_TRUE); @@ -786,7 +792,6 @@ _grid_item_unload(Grid_Item *gi) gi->wd->try_num--; } else gi->wd->download_list = eina_list_remove(gi->wd->download_list, gi); - } static Grid_Item * @@ -908,8 +913,7 @@ _download_job(void *data) wd->download_list = eina_list_remove(wd->download_list, gi); wd->try_num++; wd->download_num++; - evas_object_smart_callback_call(gi->wd->obj, SIG_TILE_LOAD, - NULL); + evas_object_smart_callback_call(wd->obj, SIG_TILE_LOAD, NULL); if (wd->download_num == 1) edje_object_signal_emit(elm_smart_scroller_edje_object_get(wd->scr), "elm,state,busy,start", "elm"); @@ -1005,7 +1009,8 @@ _grid_place(Widget_Data *wd) if (wd->zoom == g->zoom) _grid_load(g); else _grid_unload(g); } - if (!wd->download_idler) wd->download_idler = ecore_idler_add(_download_job, wd); + if (!wd->download_idler) + wd->download_idler = ecore_idler_add(_download_job, wd); } static void @@ -1350,7 +1355,7 @@ _mouse_wheel_cb(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, voi if (!wd->paused) { - Evas_Event_Mouse_Wheel *ev = (Evas_Event_Mouse_Wheel*) event_info; + Evas_Event_Mouse_Wheel *ev = event_info; zoom_do(wd, wd->zoom_detail - ((double)ev->z / 10)); } } @@ -1646,25 +1651,17 @@ _overlay_group_coord_member_update(Overlay_Group *grp, Evas_Coord x, Evas_Coord { EINA_SAFETY_ON_NULL_RETURN(grp); if (!grp->ovl) return; - char text[32]; + char text[32]; _overlay_default_coord_set(grp->ovl, x, y); + _coord_to_region_convert(grp->wd, x, y, grp->wd->size.w, &grp->lon, &grp->lat); + if (grp->members) eina_list_free(grp->members); grp->members = members; snprintf(text, sizeof(text), "%d", eina_list_count(members)); _overlay_default_layout_text_update(grp->ovl, text); } -static void -_overlay_group_region_get(Overlay_Group *grp, double *lon, double *lat) -{ - EINA_SAFETY_ON_NULL_RETURN(grp); - Evas_Coord xx, yy; - _overlay_default_coord_get(grp->ovl, &xx, &yy, NULL, NULL); - _coord_to_canvas(grp->wd, xx, yy, &xx, &yy); - elm_map_canvas_to_region_convert(grp->wd->obj, xx, yy, lon, lat); -} - static void _overlay_group_icon_update(Overlay_Group *grp, const Evas_Object *icon) { @@ -1829,18 +1826,23 @@ _overlay_class_new(Widget_Data *wd) return ovl; } -static void -_overlay_bubble_hide(Overlay_Bubble *bubble) -{ - EINA_SAFETY_ON_NULL_RETURN(bubble); - if (bubble->obj) evas_object_hide(bubble->obj); -} - static void _overlay_bubble_coord_update(Overlay_Bubble *bubble) { EINA_SAFETY_ON_NULL_RETURN(bubble); - if (!(bubble->pobj)) + if (bubble->pobj) + { + Evas_Coord x, y, w, h; + evas_object_geometry_get(bubble->pobj, &x, &y, &w, &h); + bubble->x = x + (w / 2); + bubble->y = y - (bubble->h / 2); + _canvas_to_coord(bubble->wd, bubble->x, bubble->y, + &(bubble->x), &(bubble->y)); + _coord_to_region_convert(bubble->wd, bubble->x, bubble->y, + bubble->wd->size.w, + &(bubble->lon), &(bubble->lat)); + } + else { _region_to_coord_convert(bubble->wd, bubble->lon, bubble->lat, bubble->wd->size.w, &bubble->x, &bubble->y); @@ -1867,45 +1869,27 @@ _overlay_bubble_coord_get(Overlay_Bubble *bubble, Evas_Coord *x, Evas_Coord *y, } } -static void -_overlay_bubble_show(Overlay_Bubble *bubble) +static Eina_Bool +_overlay_bubble_show_hide(Overlay_Bubble *bubble, Eina_Bool visible) { - EINA_SAFETY_ON_NULL_RETURN(bubble); - if (!(bubble->pobj)) + EINA_SAFETY_ON_NULL_RETURN_VAL(bubble, EINA_FALSE); + EINA_SAFETY_ON_NULL_RETURN_VAL(bubble->obj, EINA_FALSE); + + if (!visible) evas_object_hide(bubble->obj); + else if (bubble->pobj && !evas_object_visible_get(bubble->pobj)) + { + evas_object_hide(bubble->obj); + visible = EINA_FALSE; + } + else { _coord_to_canvas(bubble->wd, bubble->x, bubble->y, - &(bubble->x), &(bubble->y)); + &(bubble->x), &(bubble->y)); _obj_place(bubble->obj, bubble->x - (bubble->w /2), bubble->y - (bubble->h /2), bubble->w, bubble->h); + evas_object_raise(bubble->obj); } -} - -static void -_overlay_bubble_chase(Overlay_Bubble *bubble) -{ - EINA_SAFETY_ON_NULL_RETURN(bubble); - EINA_SAFETY_ON_NULL_RETURN(bubble->pobj); - - Evas_Coord x, y, w; - evas_object_geometry_get(bubble->pobj, &x, &y, &w, NULL); - x = x + (w / 2) - (bubble->w / 2); - y = y - bubble->h; - _obj_place(bubble->obj, x, y, bubble->w, bubble->h); - evas_object_raise(bubble->obj); -} - -static void -_overlay_bubble_hide_cb(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) -{ - EINA_SAFETY_ON_NULL_RETURN(data); - _overlay_bubble_hide(data); -} - -static void -_overlay_bubble_chase_cb(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) -{ - EINA_SAFETY_ON_NULL_RETURN(data); - _overlay_bubble_chase(data); + return visible; } static void @@ -1916,15 +1900,6 @@ _overlay_bubble_free(Overlay_Bubble* bubble) evas_object_del(bubble->bx); evas_object_del(bubble->sc); evas_object_del(bubble->obj); - if (bubble->pobj) - { - evas_object_event_callback_del_full(bubble->pobj, EVAS_CALLBACK_HIDE, - _overlay_bubble_hide_cb, bubble); - evas_object_event_callback_del_full(bubble->pobj, EVAS_CALLBACK_SHOW, - _overlay_bubble_chase_cb, bubble); - evas_object_event_callback_del_full(bubble->pobj, EVAS_CALLBACK_MOVE, - _overlay_bubble_chase_cb, bubble); - } free(bubble); } @@ -1941,8 +1916,6 @@ _overlay_bubble_new(Elm_Map_Overlay *overlay) bubble->obj = edje_object_add(evas_object_evas_get(overlay->wd->obj)); _elm_theme_object_set(overlay->wd->obj, bubble->obj , "map", "marker_bubble", elm_widget_style_get(overlay->wd->obj)); - evas_object_event_callback_add(bubble->obj, EVAS_CALLBACK_MOUSE_UP, - _overlay_bubble_chase_cb, bubble); evas_object_event_callback_add(bubble->obj, EVAS_CALLBACK_MOUSE_DOWN, _overlay_clicked_cb, overlay); @@ -2369,6 +2342,10 @@ _overlay_grouping(Eina_List *clas_membs, Elm_Map_Overlay *boss) sum_y = (sum_y + by) / (cnt + 1); grp_membs = eina_list_append(grp_membs, boss); _overlay_group_coord_member_update(boss->grp, sum_x, sum_y, grp_membs); + + // Append group to all overlay list + boss->wd->group_overlays = eina_list_append(boss->wd->group_overlays, + boss->grp->overlay); } } @@ -2376,54 +2353,64 @@ static void _overlay_show(Elm_Map_Overlay *overlay) { Widget_Data *wd = overlay->wd; - Eina_Bool hide = EINA_FALSE; - - if (overlay->type == ELM_MAP_OVERLAY_TYPE_CLASS) return; if (overlay->paused) return; - if ((overlay->grp->clas) && (overlay->grp->clas->paused)) return; + if ((overlay->grp) && (overlay->grp->clas) && + (overlay->grp->clas->paused)) return; - if (((overlay->grp->in) || (overlay->hide) || - (overlay->zoom_min > wd->zoom))) - hide = EINA_TRUE; - if ((overlay->grp->clas) && ((overlay->grp->clas->hide) || - (overlay->grp->clas->zoom_min > wd->zoom))) - hide = EINA_TRUE; + overlay->visible = EINA_TRUE; + if (overlay->type == ELM_MAP_OVERLAY_TYPE_CLASS) + { + overlay->visible = EINA_FALSE; + return; + } + if (overlay->grp) + { + if ((overlay->grp->in) || + (overlay->hide) || (overlay->zoom_min > wd->zoom)) + overlay->visible = EINA_FALSE; - if (overlay->type == ELM_MAP_OVERLAY_TYPE_DEFAULT) - { - if (hide) _overlay_default_hide(overlay->ovl); - else _overlay_default_show(overlay->ovl); + if ((overlay->grp->clas) && + ((overlay->grp->clas->hide) || + (overlay->grp->clas->zoom_min > wd->zoom))) + overlay->visible = EINA_FALSE; } - else if (overlay->type == ELM_MAP_OVERLAY_TYPE_BUBBLE) + + switch (overlay->type) { - if (hide) _overlay_bubble_hide(overlay->ovl); - else _overlay_bubble_show(overlay->ovl); - } - else if (overlay->type == ELM_MAP_OVERLAY_TYPE_ROUTE) - { - if (hide) _overlay_route_hide(overlay->ovl); - else _overlay_route_show(overlay->ovl); - } - else if (overlay->type == ELM_MAP_OVERLAY_TYPE_LINE) - { - if (hide) _overlay_line_hide(overlay->ovl); - else _overlay_line_show(overlay->ovl); - } - else if (overlay->type == ELM_MAP_OVERLAY_TYPE_POLYGON) - { - if (hide) _overlay_polygon_hide(overlay->ovl); - else _overlay_polygon_show(overlay->ovl); - } - else if (overlay->type == ELM_MAP_OVERLAY_TYPE_CIRCLE) - { - if (hide) _overlay_circle_hide(overlay->ovl); - else _overlay_circle_show(overlay->ovl); - } - else if (overlay->type == ELM_MAP_OVERLAY_TYPE_SCALE) - { - if (hide) _overlay_scale_hide(overlay->ovl); - else _overlay_scale_show(overlay->ovl); + case ELM_MAP_OVERLAY_TYPE_DEFAULT: + if (overlay->visible) _overlay_default_show(overlay->ovl); + else _overlay_default_hide(overlay->ovl); + break; + case ELM_MAP_OVERLAY_TYPE_GROUP: + if (overlay->visible) _overlay_group_show(overlay->ovl); + else _overlay_group_hide(overlay->ovl); + break; + case ELM_MAP_OVERLAY_TYPE_BUBBLE: + overlay->visible = _overlay_bubble_show_hide(overlay->ovl, + overlay->visible); + break; + case ELM_MAP_OVERLAY_TYPE_ROUTE: + if (overlay->visible) _overlay_route_show(overlay->ovl); + else _overlay_route_hide(overlay->ovl); + break; + case ELM_MAP_OVERLAY_TYPE_LINE: + if (overlay->visible) _overlay_line_show(overlay->ovl); + else _overlay_line_hide(overlay->ovl); + break; + case ELM_MAP_OVERLAY_TYPE_POLYGON: + if (overlay->visible) _overlay_polygon_show(overlay->ovl); + else _overlay_polygon_hide(overlay->ovl); + break; + case ELM_MAP_OVERLAY_TYPE_CIRCLE: + if (overlay->visible) _overlay_circle_show(overlay->ovl); + else _overlay_circle_hide(overlay->ovl); + break; + case ELM_MAP_OVERLAY_TYPE_SCALE: + if (overlay->visible) _overlay_scale_show(overlay->ovl); + else _overlay_scale_hide(overlay->ovl); + default: + ERR("Invalid overlay type to show: %d", overlay->type); } } @@ -2435,13 +2422,19 @@ _overlay_place(Widget_Data *wd) Eina_List *l, *ll; Elm_Map_Overlay *overlay; - // Reset group & Update overlays coord + eina_list_free(wd->group_overlays); + wd->group_overlays = NULL; + EINA_LIST_FOREACH(wd->overlays, l, overlay) { - if (overlay->type == ELM_MAP_OVERLAY_TYPE_CLASS) continue; + // Reset groups + if ((overlay->type == ELM_MAP_OVERLAY_TYPE_CLASS) || + (overlay->type == ELM_MAP_OVERLAY_TYPE_CLASS)) continue; overlay->grp->in = EINA_FALSE; overlay->grp->boss = EINA_FALSE; + _overlay_group_hide(overlay->grp); + // Update overlays' coord if (overlay->type == ELM_MAP_OVERLAY_TYPE_DEFAULT) _overlay_default_coord_update(overlay->ovl); else if (overlay->type == ELM_MAP_OVERLAY_TYPE_BUBBLE) @@ -2468,16 +2461,9 @@ _overlay_place(Widget_Data *wd) } } - // Place overlays + // Place group overlays and overlays + EINA_LIST_FOREACH(wd->group_overlays, l, overlay) _overlay_show(overlay); EINA_LIST_FOREACH(wd->overlays, l, overlay) _overlay_show(overlay); - - // Place group overlays on top of overlays - EINA_LIST_FOREACH(wd->overlays, l, overlay) - { - if (overlay->type == ELM_MAP_OVERLAY_TYPE_CLASS) continue; - if (overlay->grp->boss) _overlay_group_show(overlay->grp); - else _overlay_group_hide(overlay->grp); - } } static Evas_Object * @@ -2897,22 +2883,6 @@ _name_parse(Elm_Map_Name *n) } } -Grid *_get_current_grid(Widget_Data *wd) -{ - EINA_SAFETY_ON_NULL_RETURN_VAL(wd, NULL); - Eina_List *l; - Grid *g = NULL, *ret = NULL; - EINA_LIST_FOREACH(wd->grids, l, g) - { - if (wd->zoom == g->zoom) - { - ret = g; - break; - } - } - return ret; -} - static void _route_cb(void *data, const char *file, int status) { @@ -3749,6 +3719,8 @@ _del_pre_hook(Evas_Object *obj) EINA_LIST_FOREACH_SAFE(wd->overlays, l, ll, overlay) elm_map_overlay_del(overlay); eina_list_free(wd->overlays); + eina_list_free(wd->group_overlays); + eina_list_free(wd->all_overlays); EINA_LIST_FREE(wd->track, track) evas_object_del(track); @@ -3889,7 +3861,7 @@ elm_map_add(Evas_Object *parent) evas_object_event_callback_add(obj, EVAS_CALLBACK_MOUSE_UP, _mouse_up, wd); evas_object_event_callback_add(obj, EVAS_CALLBACK_MOUSE_WHEEL, - _mouse_wheel_cb,wd); + _mouse_wheel_cb, wd); wd->obj = obj; wd->scr = elm_smart_scroller_add(e); @@ -4723,6 +4695,32 @@ elm_map_overlay_add(Evas_Object *obj, double lon, double lat) #endif } +EAPI Eina_List * +elm_map_overlays_get(Evas_Object *obj) +{ +#ifdef HAVE_ELEMENTARY_ECORE_CON + ELM_CHECK_WIDTYPE(obj, widtype) NULL; + Widget_Data *wd = elm_widget_data_get(obj); + EINA_SAFETY_ON_NULL_RETURN_VAL(wd, NULL); + + Eina_List *l; + Elm_Map_Overlay *ovl; + + eina_list_free(wd->all_overlays); + wd->all_overlays = NULL; + + EINA_LIST_FOREACH(wd->overlays, l, ovl) + wd->all_overlays = eina_list_append(wd->all_overlays, ovl); + EINA_LIST_FOREACH(wd->group_overlays, l, ovl) + wd->all_overlays = eina_list_append(wd->all_overlays, ovl); + + return wd->all_overlays; +#else + (void) obj; + return NULL; +#endif +} + EAPI void elm_map_overlay_del(Elm_Map_Overlay *overlay) { @@ -4907,6 +4905,21 @@ elm_map_overlay_paused_get(const Elm_Map_Overlay *overlay) #endif } +EAPI Eina_Bool +elm_map_overlay_visible_get(const Elm_Map_Overlay *overlay) +{ +#ifdef HAVE_ELEMENTARY_ECORE_CON + EINA_SAFETY_ON_NULL_RETURN_VAL(overlay, EINA_FALSE); + EINA_SAFETY_ON_NULL_RETURN_VAL(overlay->wd, EINA_FALSE); + ELM_CHECK_WIDTYPE(overlay->wd->obj, widtype) EINA_FALSE; + + return overlay->visible; +#else + (void) overlay; + return EINA_FALSE; +#endif +} + EAPI void elm_map_overlay_show(Elm_Map_Overlay *overlay) { @@ -4980,6 +4993,7 @@ elm_map_overlay_region_set(Elm_Map_Overlay *overlay, double lon, double lat) else if (overlay->type == ELM_MAP_OVERLAY_TYPE_BUBBLE) { Overlay_Bubble *ovl = overlay->ovl; + ovl->pobj = NULL; ovl->lon = lon; ovl->lat = lat; } @@ -5004,7 +5018,8 @@ elm_map_overlay_region_get(const Elm_Map_Overlay *overlay, double *lon, double * if (overlay->type == ELM_MAP_OVERLAY_TYPE_GROUP) { Overlay_Group *ovl = overlay->ovl; - _overlay_group_region_get(ovl, lon, lat); + if (lon) *lon = ovl->lon; + if (lat) *lat = ovl->lat; } else if (overlay->type == ELM_MAP_OVERLAY_TYPE_DEFAULT) { @@ -5392,25 +5407,7 @@ elm_map_overlay_bubble_follow(Elm_Map_Overlay *bubble, const Elm_Map_Overlay *pa Evas_Object *pobj = _overlay_obj_get(parent); if (!pobj) return; - if (ovl->pobj) - { - evas_object_event_callback_del_full(ovl->pobj, EVAS_CALLBACK_HIDE, - _overlay_bubble_hide_cb, ovl); - evas_object_event_callback_del_full(ovl->pobj, EVAS_CALLBACK_SHOW, - _overlay_bubble_chase_cb, ovl); - evas_object_event_callback_del_full(ovl->pobj, EVAS_CALLBACK_MOVE, - _overlay_bubble_chase_cb, ovl); - } - ovl->pobj = pobj; - evas_object_event_callback_add(ovl->pobj, EVAS_CALLBACK_HIDE, - _overlay_bubble_hide_cb, ovl); - evas_object_event_callback_add(ovl->pobj, EVAS_CALLBACK_SHOW, - _overlay_bubble_chase_cb, ovl); - evas_object_event_callback_add(ovl->pobj, EVAS_CALLBACK_MOVE, - _overlay_bubble_chase_cb, ovl); - - _overlay_bubble_chase(ovl); evas_object_smart_changed(bubble->wd->pan_smart); #else (void) bubble; diff --git a/legacy/elementary/src/lib/elm_map.h b/legacy/elementary/src/lib/elm_map.h index 05ab6cbc8d..383c183c4e 100644 --- a/legacy/elementary/src/lib/elm_map.h +++ b/legacy/elementary/src/lib/elm_map.h @@ -178,7 +178,7 @@ typedef enum _Elm_Map_Overlay_Type 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_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_del(). */ typedef struct _Elm_Map_Name Elm_Map_Name; /**< A handle for specific coordinates. */ typedef struct _Elm_Map_Overlay Elm_Map_Overlay; /**< A overlay to be shown in a specific point of the map. This can be created by elm_map_overlay_add() and similar functions and deleted by elm_map_overlay_del(). */ @@ -587,6 +587,19 @@ EAPI const char *elm_map_user_agent_get(const Evas_Object *obj); */ EAPI Elm_Map_Overlay * elm_map_overlay_add(Evas_Object *obj, double lon, double lat); +/** + * Return all overlays in the map object. + * + * @param obj The map object to return overlays. + * @return The list of all overlays or @c NULL upon failure. + * + * This list includes group overlays also. + * So this can be changed dynamically while zooming and panning. + * + * @ingroup Map + */ +EAPI EAPI Eina_List * elm_map_overlays_get(Evas_Object *obj); + /** * Delete a overlay from the map. This function can delete all types * of overlays. @@ -732,6 +745,20 @@ EAPI void elm_map_overlay_paused_set(Elm_Map_Overlay *overlay, */ EAPI Eina_Bool elm_map_overlay_paused_get(const Elm_Map_Overlay *overlay); +/** + * Get a value whether the overlay is visible or not. + * + * @param overlay The overlay to return visible state. + * @return @c EINA_TRUE means overlay is visible. @c EINA_FALSE indicates + * it is not. + * + * The visible of the overlay can not be set. + * This value can be changed dynamically while zooming and panning + * + * @ingroup Map + */ +EAPI Eina_Bool elm_map_overlay_visible_get(const Elm_Map_Overlay *overlay); + /** * Set the content object of the overlay. * @@ -1354,10 +1381,10 @@ EAPI const char *elm_map_source_get(const Evas_Object *obj, Elm_Map_So * 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(), + * elm_map_route_del(), * and distance can be get with elm_map_route_distance_get(). * - * @see elm_map_route_remove() + * @see elm_map_route_del() * @see elm_map_route_distance_get() * @see elm_map_source_set() *