From aa96bf598769c5ee778786429bf880ec327d7e93 Mon Sep 17 00:00:00 2001 From: "Carsten Haitzler (Rasterman)" Date: Sun, 5 Sep 2021 11:47:22 +0100 Subject: [PATCH] elm - map widget - empty out and clean out code and tests - broken elm map has been broken for a long time now sue to upstream web api changes/breaks made by openstreetmaps. this isn't sustainable to have code do this. since it's broken there is little point keeping code for something that is totally non-functional, so reduce code, document it as broken and remove tests. at least symbols remain so no missing symbols and code using it will end up with an empty non-functional widget (much like they would without these changes anyway). @feat --- src/bin/elementary/meson.build | 1 - src/bin/elementary/test.c | 4 - src/bin/elementary/test_map.c | 1228 ------ src/lib/elementary/elm_map.c | 5529 ++---------------------- src/lib/elementary/elm_map_common.h | 440 +- src/lib/elementary/elm_map_eo.legacy.h | 470 +- src/lib/elementary/elm_map_legacy.h | 130 +- 7 files changed, 373 insertions(+), 7429 deletions(-) delete mode 100644 src/bin/elementary/test_map.c diff --git a/src/bin/elementary/meson.build b/src/bin/elementary/meson.build index 1d7aa75057..5254eb69ba 100644 --- a/src/bin/elementary/meson.build +++ b/src/bin/elementary/meson.build @@ -86,7 +86,6 @@ elementary_test_src = [ 'test_launcher.c', 'test_layout.c', 'test_list.c', - 'test_map.c', 'test_main_menu.c', 'test_menu.c', 'test_multi.c', diff --git a/src/bin/elementary/test.c b/src/bin/elementary/test.c index d0d374ece4..a317875263 100644 --- a/src/bin/elementary/test.c +++ b/src/bin/elementary/test.c @@ -228,7 +228,6 @@ void test_calendar(void *data, Evas_Object *obj, void *event_info); void test_calendar2(void *data, Evas_Object *obj, void *event_info); void test_calendar3(void *data, Evas_Object *obj, void *event_info); void test_efl_ui_calendar(void *data, Evas_Object *obj, void *event_info); -void test_map(void *data, Evas_Object *obj, void *event_info); void test_weather(void *data, Evas_Object *obj, void *event_info); void test_flip(void *data, Evas_Object *obj, void *event_info); void test_flip2(void *data, Evas_Object *obj, void *event_info); @@ -1255,9 +1254,6 @@ add_tests: ADD_TEST(NULL, "Naviframe", "Naviframe 3", test_naviframe3); ADD_TEST(NULL, "Naviframe", "Naviframe: Complex", test_naviframe_complex); - //------------------------------// - ADD_TEST(NULL, "Geographic", "Map", test_map); - //------------------------------// ADD_TEST(NULL, "Dividers", "Panel", test_panel); ADD_TEST(NULL, "Dividers", "Panel Scrollable", test_panel2); diff --git a/src/bin/elementary/test_map.c b/src/bin/elementary/test_map.c deleted file mode 100644 index b87f3d6521..0000000000 --- a/src/bin/elementary/test_map.c +++ /dev/null @@ -1,1228 +0,0 @@ -#ifdef HAVE_CONFIG_H -# include "elementary_config.h" -#endif -#include - -#define SOURCE_MAX 10 -#define MARKER_MAX 1000 -#define NAME_ENTRY_TEXT "Enter freeform address" - -typedef struct Overlay_Data -{ - char file[PATH_MAX]; -} Overlay_Data; - -typedef struct Map_Source -{ - Evas_Object *map; - Elm_Map_Source_Type type; - char *source_name; -} Map_Source; - - -static Elm_Map_Overlay *route_start, *route_end, *route_clas; -static Elm_Map_Overlay *bubble_img; -static Elm_Map_Overlay *bubble_parking; -static Elm_Map_Overlay *route_ovl; -static Elm_Map_Overlay *line_start, *line_end, *line; -static Elm_Map_Overlay *poly; -static Elm_Map_Overlay *circle; -static Elm_Map_Overlay *scale; -static Eina_List *poly_points; - -static Evas_Object *menu, *fs_win; -static Elm_Map_Route *route; -static Elm_Map_Name *name; -static Evas_Object *track; -static Evas_Coord down_x, down_y; -static Evas_Coord old_x, old_y, old_d; -static Map_Source ts[SOURCE_MAX]; -static Map_Source rs[SOURCE_MAX]; -static Map_Source ns[SOURCE_MAX]; - -static void -#ifdef ELM_EMAP -my_map_gpx_fileselector_done(void *data, Evas_Object *obj EINA_UNUSED, void *event_info) -#else -my_map_gpx_fileselector_done(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info) -#endif -{ - const char *selected = event_info; - - if (selected) - { - printf("Selected file: %s\n", selected); -#ifdef ELM_EMAP - EMap_Route *emap = emap_route_gpx_new(selected); - track = elm_map_track_add(data, emap); -#else - printf("libEMap is required !\n"); -#endif - } - evas_object_del(fs_win); -} - -static Evas_Object * -_route_icon_get(Evas_Object *obj) -{ - Evas_Object *icon = elm_icon_add(obj); - elm_image_file_set(icon, PACKAGE_DATA_DIR"/images/bubble.png", NULL); - evas_object_show(icon); - - return icon; -} - -static Evas_Object * -_box_get(Evas_Object *obj, Overlay_Data *data, Elm_Map_Overlay *ovl) -{ - Evas_Object *bx, *img, *label; - double lon, lat; - char buf[256]; - bx = elm_box_add(obj); - evas_object_show(bx); - - img = evas_object_image_add(evas_object_evas_get(obj)); - evas_object_image_file_set(img, data->file, NULL); - evas_object_image_filled_set(img, EINA_TRUE); - evas_object_size_hint_min_set(img, 64, 64); - evas_object_show(img); - elm_box_pack_end(bx, img); - - label = elm_label_add(bx); - elm_map_overlay_region_get(ovl, &lon, &lat); - snprintf(buf, sizeof(buf), "%0.4lf %0.4lf", lon, lat); - elm_object_text_set(label, buf); - evas_object_show(label); - elm_box_pack_end(bx, label); - return bx; -} - -static void -_overlays_show(void *data, Evas_Object *obj EINA_UNUSED, void *ev EINA_UNUSED) -{ - Eina_List *members = elm_map_overlay_group_members_get(data); - elm_map_overlays_show(members); -} - -static Evas_Object * -_btn_get(Evas_Object *obj, Elm_Map_Overlay *ovl) -{ - Evas_Object *btn; - - btn = elm_button_add(obj); - elm_object_text_set(btn, "Show"); - evas_object_smart_callback_add(btn, "clicked", _overlays_show, ovl); - evas_object_show(btn); - - return btn; -} - -static Evas_Object * -_label_get(Evas_Object *obj) -{ - Evas_Object *label; - label = elm_label_add(obj); - elm_object_text_set(label, "Here is a parking lot."); - evas_object_show(label); - return label; -} - -static Evas_Object * -_icon_get(Evas_Object *obj, Overlay_Data *data) -{ - Evas_Object *icon = elm_icon_add(obj); - elm_image_file_set(icon, data->file, NULL); - evas_object_show(icon); - - return icon; -} - -static void -_overlay_hide(void *data, Evas_Object *obj EINA_UNUSED, void *ev EINA_UNUSED) -{ - elm_map_overlay_hide_set(data, EINA_TRUE); -} - -static void -_overlay_pause(void *data, Evas_Object *obj EINA_UNUSED, void *ev EINA_UNUSED) -{ - elm_map_overlay_paused_set(data, EINA_TRUE); -} - -static void -_overlay_unpause(void *data, Evas_Object *obj EINA_UNUSED, void *ev EINA_UNUSED) -{ - elm_map_overlay_paused_set(data, EINA_FALSE); -} - -static void -_overlay_show(void *data, Evas_Object *obj EINA_UNUSED, void *ev EINA_UNUSED) -{ - elm_map_overlay_show(data); -} - -static Evas_Object * -_btn_box_get(Evas_Object *obj, Elm_Map_Overlay *ovl) -{ - Evas_Object *bx, *btn, *btn2, *btn3, *btn4; - bx = elm_box_add(obj); - elm_box_horizontal_set(bx, EINA_TRUE); - evas_object_show(bx); - - btn = elm_button_add(bx); - elm_object_text_set(btn, "Hide"); - evas_object_smart_callback_add(btn, "clicked", _overlay_hide, ovl); - evas_object_show(btn); - elm_box_pack_end(bx, btn); - - btn2 = elm_button_add(bx); - elm_object_text_set(btn2, "Pause"); - evas_object_smart_callback_add(btn2, "clicked", _overlay_pause, ovl); - evas_object_show(btn2); - elm_box_pack_end(bx, btn2); - - btn3 = elm_button_add(bx); - elm_object_text_set(btn3, "Unpause"); - evas_object_smart_callback_add(btn3, "clicked", _overlay_unpause, ovl); - evas_object_show(btn3); - elm_box_pack_end(bx, btn3); - - btn4 = elm_button_add(bx); - elm_object_text_set(btn4, "Show"); - evas_object_smart_callback_add(btn4, "clicked", _overlay_show, ovl); - evas_object_show(btn4); - elm_box_pack_end(bx, btn4); - - return bx; -} - -static void -_bubble_parking_follow(Evas_Object *map) -{ - double lon, lat; - Evas_Coord x, y; - - if (bubble_parking) - { - Elm_Map_Overlay *ovl = elm_map_overlay_data_get(bubble_parking); - elm_map_overlay_region_get(ovl, &lon, &lat); - elm_map_region_to_canvas_convert(map, lon, lat, &x, &y); - elm_map_canvas_to_region_convert(map, x+40, y+50, &lon, &lat); - elm_map_overlay_region_set(bubble_parking, lon, lat); - } -} - -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 EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - printf("clicked\n"); -} - -static void -_map_clicked_double(void *data EINA_UNUSED, Evas_Object *obj, void *event_info) -{ - printf("clicked,double\n"); - double lon, lat; - Evas_Event_Mouse_Down *ev = event_info; - if (!ev) return; - if (elm_map_zoom_get(obj) < 5) return; - - elm_map_canvas_to_region_convert(obj, ev->canvas.x, ev->canvas.y, &lon, &lat); - printf("x:%d, y:%d, lon:%lf, lat:%lf\n", ev->canvas.x, ev->canvas.y, lon, lat); - - if (!route_clas) - { - route_clas = elm_map_overlay_class_add(obj); - elm_map_overlay_icon_set(route_clas, _route_icon_get(obj)); - elm_map_overlay_displayed_zoom_min_set(route_clas, 5); - } - - if (route_start && route_end) - { - elm_map_overlay_del(route_start); - elm_map_overlay_del(route_end); - elm_map_route_del(route); - route_start = NULL; - route_end = NULL; - route = NULL; - } - - if (!route_start) route_start = elm_map_overlay_add(obj, lon, lat); - else route_end = elm_map_overlay_add(obj, lon, lat); - - if (route_start && route_end) - { - double start_lon, start_lat, end_lon, end_lat; - elm_map_overlay_class_append(route_clas, route_start); - elm_map_overlay_class_append(route_clas, route_end); - elm_map_overlay_region_get(route_start, &start_lon, &start_lat); - elm_map_overlay_region_get(route_end, &end_lon, &end_lat); - route = elm_map_route_add(obj, ELM_MAP_ROUTE_TYPE_MOTOCAR, - ELM_MAP_ROUTE_METHOD_FASTEST, - start_lon, start_lat, end_lon, end_lat, - NULL, NULL); - } -} - -static void -_map_press(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - printf("press\n"); -} - -static void -_map_longpressed(void *data EINA_UNUSED, Evas_Object *obj, void *event_info) -{ - if (!event_info) return; - double lon, lat; - Evas_Event_Mouse_Down *ev = event_info; - elm_map_canvas_to_region_convert(obj, ev->canvas.x, ev->canvas.y, &lon, &lat); - printf("longpressed, x:%d, y:%d, lon:%lf, lat:%lf\n", ev->canvas.x, ev->canvas.y, lon, lat); - - if (elm_map_zoom_get(obj) < 8) return; - if (name) elm_map_name_del(name); - name = elm_map_name_add(obj, NULL, lon, lat, NULL, NULL); -} - -static void -_map_scroll(void *data EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED) -{ - double lon, lat; - elm_map_region_get(obj, &lon, &lat); - printf("scroll, longitude: %f latitude: %f\n", lon, lat); - _bubble_parking_follow(obj); -} - -static void -_map_drag_start(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - printf("scroll,drag,start\n"); - evas_object_smart_callback_del(data, "longpressed", _map_longpressed); -} - -static void -_map_drag_stop(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - printf("scroll,drag,stop\n"); - evas_object_smart_callback_add(data, "longpressed", _map_longpressed, data); - _overlays_num_check(obj); -} - -static void -_map_anim_start(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - printf("scroll,anim,start\n"); -} - -static void -_map_anim_stop(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - printf("scroll,anim,stop\n"); -} - -static void -_map_zoom_start(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - printf("zoom,start\n"); -} - -static void -_map_zoom_stop(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - printf("zoom,stop\n"); - _overlays_num_check(obj); -} - -static void -_map_zoom_change(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - printf("zoom,change\n"); - _bubble_parking_follow(obj); -} - -static void -_map_loaded(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - printf("loaded\n"); -} - -static void -_map_tile_load(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - printf("tile,load\n"); -} - -static void -_map_tile_loaded(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - int try_num, finish_num; - elm_map_tile_load_status_get(data, &try_num, &finish_num); - printf("tile,loaded: %d / %d\n", finish_num, try_num); -} - -static void -_map_tile_loaded_fail(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - int try_num, finish_num; - elm_map_tile_load_status_get(data, &try_num, &finish_num); - printf("tile,loaded,fail: %d / %d\n", finish_num, try_num); -} - -static void -_map_route_load(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - printf("route,load\n"); -} - -static void -_map_route_loaded(void *data EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED) -{ - printf("route,loaded\n"); - double d; - const char *w, *n; - - d = elm_map_route_distance_get(route); - printf("route distance = %lf km\n", d); - - w = elm_map_route_waypoint_get(route); - if (w) printf("[waypoints]\n%s\n", w); - - n = elm_map_route_node_get(route); - if (n) printf("[nodes]\n%s\n", n); - - if (route_ovl) elm_map_overlay_del(route_ovl); - route_ovl = elm_map_overlay_route_add(obj, route); -} - -static void -_map_route_loaded_fail(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - printf("route,loaded,fail\n"); -} - -static void -_map_name_load(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - printf("name,load\n"); -} - -static void -_map_name_loaded(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - printf("name,loaded\n"); - if (!name) return; - double lon, lat; - const char *addr = elm_map_name_address_get(name); - elm_map_name_region_get(name, &lon, &lat); - if (addr) - { - printf("name of [lon = %lf, lat = %lf] is %s\n", lon, lat, addr); - if (EINA_DBL_NONZERO(lon) && EINA_DBL_NONZERO(lat)) - { - Eina_Bool b = elm_map_paused_get(data); - elm_map_paused_set(data, EINA_TRUE); - elm_map_zoom_mode_set(data, ELM_MAP_ZOOM_MODE_MANUAL); - elm_map_zoom_set(data, elm_map_zoom_max_get(data)); - elm_map_region_show(data, lon, lat); - elm_map_paused_set(data, b); - } - } - - elm_map_name_del(name); - name = NULL; -} - -static void -_map_name_loaded_fail(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - printf("name,loaded,fail\n"); -} - -static void -_src_set(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - Map_Source *s = data; - - if (!s) return; - elm_map_source_set(s->map, s->type, s->source_name); -} - -static void -_show_urmatt(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - elm_map_zoom_mode_set(data, ELM_MAP_ZOOM_MODE_MANUAL); - if (elm_map_zoom_get(data) < 12) elm_map_zoom_set(data, 12); - elm_map_region_show(data,7.325201, 48.526813); -} - -static void -_bring_seoul(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - elm_map_zoom_mode_set(data, ELM_MAP_ZOOM_MODE_MANUAL); - if (elm_map_zoom_get(data) < 12) elm_map_zoom_set(data, 12); - elm_map_region_bring_in(data, 126.977969, 37.566535); -} - -static void -_bring_zoom_suwon(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - elm_map_region_zoom_bring_in(data, 16, 126.977969, 37.566535); -} - -static void -_paused_set(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - elm_map_paused_set(data, EINA_TRUE); -} - -static void -_paused_unset(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - elm_map_paused_set(data, EINA_FALSE); -} - -static void -_zoom_in(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - int zoom; - - zoom = elm_map_zoom_get(data) + 1; - elm_map_zoom_mode_set(data, ELM_MAP_ZOOM_MODE_MANUAL); - elm_map_zoom_set(data, zoom); -} - -static void -_zoom_out(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - int zoom; - - zoom = elm_map_zoom_get(data) - 1; - elm_map_zoom_mode_set(data, ELM_MAP_ZOOM_MODE_MANUAL); - elm_map_zoom_set(data, zoom); -} - -static void -_zoom_fit(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - elm_map_zoom_mode_set(data, ELM_MAP_ZOOM_MODE_AUTO_FIT); -} - -static void -_zoom_fill(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - elm_map_zoom_mode_set(data, ELM_MAP_ZOOM_MODE_AUTO_FILL); -} - -static void -_zoom_manual(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - elm_map_zoom_mode_set(data, ELM_MAP_ZOOM_MODE_MANUAL); -} - -static void -_track_add(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - Evas_Object *fs, *vbox, *hbox, *sep; - const char *path = NULL; - - fs_win = elm_win_util_standard_add("fileselector", "File Selector"); - elm_win_autodel_set(fs_win, EINA_TRUE); - - vbox = elm_box_add(fs_win); - evas_object_size_hint_weight_set(vbox, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); - elm_win_resize_object_add(fs_win, vbox); - evas_object_show(vbox); - - fs = elm_fileselector_add(fs_win); - elm_fileselector_is_save_set(fs, EINA_TRUE); - elm_fileselector_expandable_set(fs, EINA_FALSE); - path = eina_environment_home_get(); - //if "HOME" is not available, set current dir. path - if (!path) - path = "."; - elm_fileselector_path_set(fs, path); - evas_object_size_hint_weight_set(fs, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); - evas_object_size_hint_align_set(fs, EVAS_HINT_FILL, EVAS_HINT_FILL); - elm_box_pack_end(vbox, fs); - evas_object_show(fs); - - evas_object_smart_callback_add(fs, "done", my_map_gpx_fileselector_done, data); - - sep = elm_separator_add(fs_win); - elm_separator_horizontal_set(sep, EINA_TRUE); - elm_box_pack_end(vbox, sep); - evas_object_show(sep); - - hbox = elm_box_add(fs_win); - elm_box_horizontal_set(hbox, EINA_TRUE); - elm_box_pack_end(vbox, hbox); - evas_object_show(hbox); - - evas_object_resize(fs_win, 240, 350); - evas_object_show(fs_win); -} - - -static void -_track_remove(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - elm_map_track_remove(data, track); -} - -static void -_rotate_cw(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - double d; - Evas_Coord x, y, w, h; - float half_w, half_h; - evas_object_geometry_get(data, &x, &y, &w, &h); - half_w = (float)w * 0.5; - half_h = (float)h * 0.5; - - elm_map_rotate_get(data, &d, NULL, NULL); - d += 15.0; - elm_map_rotate_set(data, d, x + half_w, y + half_h); -} - -static void -_rotate_ccw(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - double d; - Evas_Coord x, y, w, h; - float half_w, half_h; - evas_object_geometry_get(data, &x, &y, &w, &h); - half_w = (float)w * 0.5; - half_h = (float)h * 0.5; - - elm_map_rotate_get(data, &d, NULL, NULL); - d -= 15.0; - elm_map_rotate_set(data, d, x + half_w, y + half_h); -} - -static void -_rotate_reset(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - Evas_Coord x, y, w, h; - float half_w, half_h; - evas_object_geometry_get(data, &x, &y, &w, &h); - half_w = (float)w * 0.5; - half_h = (float)h * 0.5; - - elm_map_rotate_set(data, 0.0, x + half_w, y + half_h); -} - -static void -_wheel_disable(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - elm_map_wheel_disabled_set(data, EINA_TRUE); -} - -static void -_wheel_enable(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - elm_map_wheel_disabled_set(data, EINA_FALSE); -} - -static void -_zoom_min_set(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - elm_map_zoom_min_set(data, 1); -} - -static void -_zoom_max_set(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - elm_map_zoom_max_set(data, 10); -} - -static void -_line_add(void *data, Evas_Object *obj EINA_UNUSED, void *ei EINA_UNUSED) -{ - double lon, lat; - - elm_map_canvas_to_region_convert(data, down_x, down_y, &lon, &lat); - printf("line marker: %d %d %lf %lf\n", down_x, down_y, lon, lat); - if (line_start && line_end) - { - elm_map_overlay_del(line_start); - elm_map_overlay_del(line_end); - elm_map_overlay_del(line); - line_start = NULL; - line_end = NULL; - line = NULL; - } - if (!line_start) line_start = elm_map_overlay_add(data, lon, lat); - else if (!line_end) line_end = elm_map_overlay_add(data, lon, lat); - - if (line_start && line_end) - { - double flon, flat, tlon, tlat; - elm_map_overlay_region_get(line_start, &flon, &flat); - elm_map_overlay_region_get(line_end, &tlon, &tlat); - line = elm_map_overlay_line_add(data, flon, flat, tlon, tlat); - printf("line add: (%lf, %lf) --> (%lf, %lf)\n", flon, flat, tlon, tlat); - } -} - -static void -_poly_add(void *data, Evas_Object *obj EINA_UNUSED, void *ei EINA_UNUSED) -{ - double lon, lat; - - elm_map_canvas_to_region_convert(data, down_x, down_y, &lon, &lat); - printf("%d %d %lf %lf\n", down_x, down_y, lon, lat); - - if (!poly) poly = elm_map_overlay_polygon_add(data); - poly_points = eina_list_append(poly_points, - elm_map_overlay_add(data, lon, lat)); - elm_map_overlay_polygon_region_add(poly, lon, lat); -} - -static void -_poly_clear(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *ei EINA_UNUSED) -{ - Elm_Map_Overlay *ovl; - if (poly) elm_map_overlay_del(poly); - EINA_LIST_FREE(poly_points, ovl) elm_map_overlay_del(ovl); - poly = NULL; - poly_points = NULL; -} - -static void -_circle_add(void *data, Evas_Object *obj EINA_UNUSED, void *ei EINA_UNUSED) -{ - double radius = 100; - double lon, lat; - - if (circle) elm_map_overlay_del(circle); - elm_map_canvas_to_region_convert(data, down_x, down_y, &lon, &lat); - circle = elm_map_overlay_circle_add(data, lon, lat, radius); -} - -static void -_scale_add(void *data, Evas_Object *obj EINA_UNUSED, void *ei EINA_UNUSED) -{ - if (scale) elm_map_overlay_del(scale); - scale = elm_map_overlay_scale_add(data, down_x, down_y); -} - -static void -_submenu_src_add(void *data, Elm_Object_Item *parent) -{ - int idx; - const char **tile_srcs; - const char **route_srcs; - const char **name_srcs; - - if ((!data) || (!parent)) return; - - tile_srcs = elm_map_sources_get(data, ELM_MAP_SOURCE_TYPE_TILE); - route_srcs = elm_map_sources_get(data, ELM_MAP_SOURCE_TYPE_ROUTE); - name_srcs = elm_map_sources_get(data, ELM_MAP_SOURCE_TYPE_NAME); - - for (idx = 0; tile_srcs[idx]; idx++) - { - if (idx >= SOURCE_MAX) break; - ts[idx].map = data; - ts[idx].type = ELM_MAP_SOURCE_TYPE_TILE; - ts[idx].source_name = strdup(tile_srcs[idx]); - elm_menu_item_add(menu, parent, "", tile_srcs[idx], _src_set, &ts[idx]); - } - for (idx = 0; route_srcs[idx]; idx++) - { - if (idx >= SOURCE_MAX) break; - rs[idx].map = data; - rs[idx].type = ELM_MAP_SOURCE_TYPE_ROUTE; - rs[idx].source_name = strdup(route_srcs[idx]); - elm_menu_item_add(menu, parent, "", route_srcs[idx], _src_set, &rs[idx]); - } - for (idx = 0; name_srcs[idx]; idx++) - { - if (idx >= SOURCE_MAX) break; - ns[idx].map = data; - ns[idx].type = ELM_MAP_SOURCE_TYPE_NAME; - ns[idx].source_name = strdup(name_srcs[idx]); - elm_menu_item_add(menu, parent, "", name_srcs[idx], _src_set, &ns[idx]); - } -} - -static void -_submenu_move_add(void *data, Elm_Object_Item *parent) -{ - if ((!data) || (!parent)) return; - elm_menu_item_add(menu, parent, NULL, "Show Urmatt", _show_urmatt, data); - elm_menu_item_add(menu, parent, NULL, "Bring Seoul", _bring_seoul, data); - elm_menu_item_add(menu, parent, NULL, "Zoom & Bring Suwon", _bring_zoom_suwon, data); - -} - -static void -_submenu_zoom_add(void *data, Elm_Object_Item *parent) -{ - if ((!data) || (!parent)) return; - elm_menu_item_add(menu, parent, NULL, "Zoom +", _zoom_in, data); - elm_menu_item_add(menu, parent, NULL, "Zoom -", _zoom_out, data); - elm_menu_item_add(menu, parent, NULL, "Zoom Fit", _zoom_fit, data); - elm_menu_item_add(menu, parent, NULL, "Zoom Fill", _zoom_fill, data); - elm_menu_item_add(menu, parent, NULL, "Zoom Manual", _zoom_manual, data); - elm_menu_item_add(menu, parent, NULL, "Zoom Min to 1", _zoom_min_set, data); - elm_menu_item_add(menu, parent, NULL, "Zoom Max to 10", _zoom_max_set, data); -} - -static void -_submenu_prop_add(void *data, Elm_Object_Item *parent) -{ - if ((!data) || (!parent)) return; - elm_menu_item_add(menu, parent, NULL, "Paused Set", _paused_set, data); - elm_menu_item_add(menu, parent, NULL, "Paused Unset", _paused_unset, data); - elm_menu_item_add(menu, parent, NULL, "Rotate CW", _rotate_cw, data); - elm_menu_item_add(menu, parent, NULL, "Rotate CCW", _rotate_ccw, data); - elm_menu_item_add(menu, parent, NULL, "Reset Rotate", _rotate_reset, data); - elm_menu_item_add(menu, parent, NULL, "Disable Wheel", _wheel_disable, data); - elm_menu_item_add(menu, parent, NULL, "Enable Wheel", _wheel_enable, data); -} - -static void -_submenu_track_add(void *data, Elm_Object_Item *parent) -{ - if ((!data) || (!parent)) return; - elm_menu_item_add(menu, parent, NULL, "Add Track", _track_add, data); - elm_menu_item_add(menu, parent, NULL, "Remove Track", _track_remove, data); -} - -static void -_submenu_ovl_add(void *data, Elm_Object_Item *parent) -{ - if ((!data) || (!parent)) return; - elm_menu_item_add(menu, parent, NULL, "Add line", _line_add, data); - elm_menu_item_add(menu, parent, NULL, "Add polygon", _poly_add, data); - elm_menu_item_add(menu, parent, NULL, "Clear polygon", _poly_clear, data); - elm_menu_item_add(menu, parent, NULL, "Add circle", _circle_add, data); - elm_menu_item_add(menu, parent, NULL, "Add scale", _scale_add, data); -} - -static void -_submenu_info_add(Evas_Object *map, Elm_Object_Item *parent) -{ - if (!map || !parent) return; - char buf[PATH_MAX] = { 0 }; - double lon = 0.0, lat = 0.0; - - elm_map_canvas_to_region_convert(map, - down_x, down_y, - &lon, &lat); - - snprintf(buf, PATH_MAX, "Longitude : %f", lon); - elm_menu_item_add(menu, parent, NULL, buf, NULL, NULL); - - snprintf(buf, PATH_MAX, "Latitude : %f", lat); - elm_menu_item_add(menu, parent, NULL, buf, NULL, NULL); -} - -static void -_map_mouse_down(void *data, Evas *evas EINA_UNUSED, Evas_Object *obj, void *event_info) -{ - Evas_Event_Mouse_Down *ev = event_info; - Elm_Object_Item *menu_it; - static Elm_Object_Item *info_it = NULL; - - if (!ev) return; - - if (ev->button == 2) - { - old_x = ev->canvas.x; - old_y = ev->canvas.y; - old_d = 0.0; - } - else if (ev->button == 3) - { - down_x = ev->canvas.x; - down_y = ev->canvas.y; - if (!menu) - { - menu = elm_menu_add(obj); - elm_menu_parent_set(menu, obj); - menu_it = elm_menu_item_add(menu, NULL, "", "Source", NULL, NULL); - _submenu_src_add(data, menu_it); - menu_it = elm_menu_item_add(menu, NULL, "", "Move", NULL, NULL); - _submenu_move_add(data, menu_it); - menu_it = elm_menu_item_add(menu, NULL, "", "Zoom", NULL, NULL); - _submenu_zoom_add(data, menu_it); - menu_it = elm_menu_item_add(menu, NULL, "", "Prop", NULL, NULL); - _submenu_prop_add(data, menu_it); - menu_it = elm_menu_item_add(menu, NULL, "", "Track", NULL, NULL); - _submenu_track_add(data, menu_it); - menu_it = elm_menu_item_add(menu, NULL, "", "Overlay", NULL, NULL); - _submenu_ovl_add(data, menu_it); - - info_it = elm_menu_item_add(menu, NULL, "", "Info", NULL, NULL); - } - - elm_menu_item_subitems_clear(info_it); - _submenu_info_add(obj, info_it); - - elm_menu_move(menu, ev->canvas.x, ev->canvas.y); - evas_object_show(menu); - } -} - -static void -_map_mouse_move(void *data, Evas *evas EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info) -{ - Evas_Event_Mouse_Move *move = event_info; - Evas_Coord x, y, w, h; - float half_w, half_h; - int d, d_diff; - double cur_d; - if (!move) return; - - if (move->buttons == 2) - { - evas_object_geometry_get(data, &x, &y, &w, &h); - half_w = (float)w * 0.5; - half_h = (float)h * 0.5; - elm_map_rotate_get(data, &cur_d, NULL, NULL); - - d = move->cur.canvas.x - old_x; - if (!old_d) old_d = d; - else - { - d_diff = old_d - d; - if (d_diff > 0) - { - old_d --; - cur_d += 1.0; - } - else if (d_diff < 0) - { - old_d ++; - cur_d -= 1.0; - } - old_d = d; - elm_map_rotate_set(data, cur_d, x + half_w, y + half_h); - } - } -} - -static void -_map_mouse_up(void *data EINA_UNUSED, Evas *evas EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info) -{ - Evas_Event_Mouse_Up *up = event_info; - if (!up) return; - - if (up->button == 2) - { - old_x = 0; - old_y = 0; - } -} - -static void -_overlay_cb(void *data EINA_UNUSED, Evas_Object *map, void *ev) -{ - printf("Overlay clicked: "); - Elm_Map_Overlay *overlay = ev; - Overlay_Data *od; - Elm_Map_Overlay_Type type = elm_map_overlay_type_get(overlay); - - if (type != ELM_MAP_OVERLAY_TYPE_GROUP && - type != ELM_MAP_OVERLAY_TYPE_DEFAULT) return; - - if (!bubble_img) bubble_img = elm_map_overlay_bubble_add(map); - elm_map_overlay_bubble_follow(bubble_img, overlay); - elm_map_overlay_bubble_content_clear(bubble_img); - - if (type == ELM_MAP_OVERLAY_TYPE_GROUP) - { - Eina_List *l; - Elm_Map_Overlay *memb; - Eina_List *members = elm_map_overlay_group_members_get(overlay); - printf("Group Members Num: %d\n", eina_list_count(members)); - EINA_LIST_FOREACH(members, l, memb) - { - od = elm_map_overlay_data_get(memb); - if (od) - elm_map_overlay_bubble_content_append(bubble_img, - _box_get(map, od, memb)); - } - elm_map_overlay_bubble_content_append(bubble_img, - _btn_get(map, overlay)); - } - else - { - od = elm_map_overlay_data_get(overlay); - if (od) - elm_map_overlay_bubble_content_append(bubble_img, - _box_get(map, od, overlay)); - elm_map_overlay_bubble_content_append(bubble_img, - _btn_box_get(map, overlay)); - } -} - -static void -_parking_cb(void *data EINA_UNUSED, Evas_Object *map, Elm_Map_Overlay *ovl) -{ - double lon, lat; - Evas_Coord x, y; - elm_map_overlay_region_get(ovl, &lon, &lat); - elm_map_region_to_canvas_convert(map, lon, lat, &x, &y); - printf("Parking clicked: %lf %lf %d %d\n", lon, lat, x, y); - - elm_map_canvas_to_region_convert(map, x+40, y+50, &lon, &lat); - if (!bubble_parking) - { - Evas_Object *bubble, *label; - bubble = elm_bubble_add(map); - elm_bubble_pos_set(bubble, ELM_BUBBLE_POS_TOP_LEFT); - elm_object_text_set(bubble, "Overlay object"); - elm_object_part_text_set(bubble, "info", "Bubble is overlayed"); - - label = elm_label_add(bubble); - elm_object_text_set(label, "Parking Here !!"); - evas_object_show(label); - elm_object_content_set(bubble, label); - - evas_object_resize(bubble, 125, 50); - evas_object_show(bubble); - - bubble_parking = elm_map_overlay_add(map, lon, lat); - elm_map_overlay_content_set(bubble_parking, bubble); - } - else elm_map_overlay_region_set(bubble_parking, lon, lat); - elm_map_overlay_data_set(bubble_parking, ovl); -} - -static void -_del_map(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *ei EINA_UNUSED) -{ - if (route_start) elm_map_overlay_del(route_start); - if (route_end) elm_map_overlay_del(route_end); - if (route_clas) elm_map_overlay_del(route_clas); - if (bubble_img) elm_map_overlay_del(bubble_img); - if (bubble_parking) elm_map_overlay_del(bubble_parking); - if (route_ovl) elm_map_overlay_del(route_ovl); - route_start = NULL; - route_end = NULL; - route_clas = NULL; - bubble_img = NULL; - bubble_parking = NULL; - route_ovl = NULL; - - if (route) elm_map_route_del(route); - if (name) elm_map_name_del(name); - if (menu) evas_object_del(menu); - route = NULL; - name = NULL; - menu = NULL; -} - -void -test_map(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - Evas_Object *win, *map; - int idx = 0; - const char **tile_srcs; - const char **route_srcs; - const char **name_srcs; - Overlay_Data data1; - Overlay_Data data2; - Overlay_Data data3; - Overlay_Data data4; - Overlay_Data data5; - Overlay_Data data6; - Overlay_Data data7; - Overlay_Data data8; - Overlay_Data data9; - Overlay_Data data10; - Overlay_Data data11; - Overlay_Data parking; - Overlay_Data icon_data; - - snprintf(data1.file, PATH_MAX, "%s/images/logo.png", elm_app_data_dir_get()); - snprintf(data2.file, PATH_MAX, "%s/images/logo_small.png", elm_app_data_dir_get()); - snprintf(data3.file, PATH_MAX, "%s/images/panel_01.png", elm_app_data_dir_get()); - snprintf(data4.file, PATH_MAX, "%s/images/plant_01.png", elm_app_data_dir_get()); - snprintf(data5.file, PATH_MAX, "%s/images/rock_01.png", elm_app_data_dir_get()); - snprintf(data6.file, PATH_MAX, "%s/images/rock_02.png", elm_app_data_dir_get()); - snprintf(data7.file, PATH_MAX, "%s/images/sky_01.png", elm_app_data_dir_get()); - snprintf(data8.file, PATH_MAX, "%s/images/sky_02.png", elm_app_data_dir_get()); - snprintf(data9.file, PATH_MAX, "%s/images/sky_03.png", elm_app_data_dir_get()); - snprintf(data10.file, PATH_MAX, "%s/images/sky_03.png", elm_app_data_dir_get()); - snprintf(data11.file, PATH_MAX, "%s/images/wood_01.png", elm_app_data_dir_get()); - snprintf(parking.file, PATH_MAX, "%s/images/parking.png", elm_app_data_dir_get()); - snprintf(icon_data.file, PATH_MAX, "%s/images/icon_14.png", elm_app_data_dir_get()); - - win = elm_win_util_standard_add("map", "Map"); - elm_win_autodel_set(win, EINA_TRUE); - - map = elm_map_add(win); - if (map) - { - Elm_Map_Overlay *ovl_1, *ovl_2, *ovl_3, *ovl_4, *ovl_5, *ovl_6; - Elm_Map_Overlay *ovl_7, *ovl_8, *ovl_9, *ovl_10, *ovl_11; - Elm_Map_Overlay *parking1, *parking2, *parking3, *parking4, *parking5; - Elm_Map_Overlay *grp1, *grp2, *grp_parking; - - evas_object_event_callback_add(map, EVAS_CALLBACK_DEL, _del_map, NULL); - - tile_srcs = elm_map_sources_get(map, ELM_MAP_SOURCE_TYPE_TILE); - route_srcs = elm_map_sources_get(map, ELM_MAP_SOURCE_TYPE_ROUTE); - name_srcs = elm_map_sources_get(map, ELM_MAP_SOURCE_TYPE_NAME); - - if (!tile_srcs) return; - printf("Tile sources [ "); - for (idx = 0; tile_srcs[idx] ; idx++) printf("%s, ", tile_srcs[idx]); - printf("]\n"); - if (!route_srcs) return; - printf("Route sources [ "); - for (idx = 0; route_srcs[idx] ; idx++) printf("%s, ", route_srcs[idx]); - printf("]\n"); - if (!name_srcs) return; - printf("Name sources [ "); - for (idx = 0; name_srcs[idx] ; idx++) printf("%s, ", name_srcs[idx]); - printf("]\n"); - - evas_object_size_hint_weight_set(map, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); - elm_win_resize_object_add(win, map); - evas_object_data_set(map, "window", win); - - evas_object_event_callback_add(map, EVAS_CALLBACK_MOUSE_DOWN, - _map_mouse_down, map); - evas_object_event_callback_add(map, EVAS_CALLBACK_MOUSE_MOVE, - _map_mouse_move, map); - evas_object_event_callback_add(map, EVAS_CALLBACK_MOUSE_UP, - _map_mouse_up, map); - - evas_object_smart_callback_add(map, "clicked", _map_clicked, map); - evas_object_smart_callback_add(map, "clicked,double", _map_clicked_double, map); - evas_object_smart_callback_add(map, "press", _map_press, map); - evas_object_smart_callback_add(map, "longpressed", _map_longpressed, map); - evas_object_smart_callback_add(map, "scroll", _map_scroll, map); - evas_object_smart_callback_add(map, "scroll,drag,start", _map_drag_start, map); - evas_object_smart_callback_add(map, "scroll,drag,stop", _map_drag_stop, map); - evas_object_smart_callback_add(map, "scroll,anim,start", _map_anim_start, map); - evas_object_smart_callback_add(map, "scroll,anim,stop", _map_anim_stop, map); - evas_object_smart_callback_add(map, "zoom,start", _map_zoom_start, map); - evas_object_smart_callback_add(map, "zoom,stop", _map_zoom_stop, map); - evas_object_smart_callback_add(map, "zoom,change", _map_zoom_change, map); - evas_object_smart_callback_add(map, "loaded", _map_loaded, map); - evas_object_smart_callback_add(map, "tile,load", _map_tile_load, map); - evas_object_smart_callback_add(map, "tile,loaded", _map_tile_loaded, map); - evas_object_smart_callback_add(map, "tile,loaded,fail", _map_tile_loaded_fail, map); - evas_object_smart_callback_add(map, "route,load", _map_route_load, map); - evas_object_smart_callback_add(map, "route,loaded", _map_route_loaded, map); - evas_object_smart_callback_add(map, "route,loaded,fail", _map_route_loaded_fail, map); - evas_object_smart_callback_add(map, "name,load", _map_name_load, map); - evas_object_smart_callback_add(map, "name,loaded", _map_name_loaded, map); - evas_object_smart_callback_add(map, "name,loaded,fail", _map_name_loaded_fail, map); - evas_object_smart_callback_add(map, "overlay,clicked", _overlay_cb, map); - - // Create Overlays - ovl_1 = elm_map_overlay_add(map, 2.352, 48.857); - elm_map_overlay_color_set(ovl_1, 0x00, 0xfa, 0x9a, 0xff); - elm_map_overlay_displayed_zoom_min_set(ovl_1, 5); - ovl_2 = elm_map_overlay_add(map, 3, 48.857); - elm_map_overlay_color_set(ovl_2, 0xff, 0xd7, 0x00, 0xff); - elm_map_overlay_displayed_zoom_min_set(ovl_2, 4); - ovl_3 = elm_map_overlay_add(map, 2.352, 49); - elm_map_overlay_displayed_zoom_min_set(ovl_3, 3); - ovl_4 = elm_map_overlay_add(map, 7.31451, 48.857127); - ovl_5 = elm_map_overlay_add(map, 7.314704, 48.857119); - ovl_6 = elm_map_overlay_add(map, 7.31432, 48.856785); - ovl_7 = elm_map_overlay_add(map, 7.3148, 48.85725); - ovl_8 = elm_map_overlay_add(map, 7.316445, 48.8572210000694); - ovl_9 = elm_map_overlay_add(map, 7.316527000125, 48.85609); - ovl_10 = elm_map_overlay_add(map, 7.3165409990833, 48.856078); - ovl_11 = elm_map_overlay_add(map, 7.319812, 48.856561); - elm_map_overlay_data_set(ovl_1, &data1); - elm_map_overlay_data_set(ovl_2, &data2); - elm_map_overlay_data_set(ovl_3, &data3); - elm_map_overlay_data_set(ovl_4, &data4); - elm_map_overlay_data_set(ovl_5, &data5); - elm_map_overlay_data_set(ovl_6, &data6); - elm_map_overlay_data_set(ovl_7, &data7); - elm_map_overlay_data_set(ovl_8, &data8); - elm_map_overlay_data_set(ovl_9, &data9); - elm_map_overlay_data_set(ovl_10, &data10); - elm_map_overlay_data_set(ovl_11, &data11); - - // Append overlays to groups - grp1 = elm_map_overlay_class_add(map); - elm_map_overlay_class_zoom_max_set(grp1, 6); - elm_map_overlay_class_append(grp1, ovl_1); - elm_map_overlay_class_append(grp1, ovl_2); - elm_map_overlay_class_append(grp1, ovl_3); - elm_map_overlay_class_append(grp1, ovl_4); - elm_map_overlay_class_append(grp1, ovl_5); - elm_map_overlay_class_append(grp1, ovl_6); - - // Append overlays to groups - grp2 = elm_map_overlay_class_add(map); - elm_map_overlay_displayed_zoom_min_set(grp2, 9); - elm_map_overlay_class_append(grp2, ovl_7); - elm_map_overlay_class_append(grp2, ovl_8); - elm_map_overlay_class_append(grp2, ovl_9); - elm_map_overlay_class_append(grp2, ovl_10); - elm_map_overlay_class_append(grp2, ovl_11); - - // Create overlays - parking1 = elm_map_overlay_add(map, 127.04871, 37.25730); - parking2 = elm_map_overlay_add(map, 127.05578, 37.25545); - parking3 = elm_map_overlay_add(map, 127.05515, 37.25439); - parking4 = elm_map_overlay_add(map, 127.05328, 37.25721); - elm_map_overlay_icon_set(parking4, _icon_get(map, &icon_data)); - parking5 = elm_map_overlay_add(map, 127.05431, 37.25873); - elm_map_overlay_content_set(parking5, _label_get(map)); - elm_map_overlay_get_cb_set(parking1, _parking_cb, NULL); - elm_map_overlay_get_cb_set(parking2, _parking_cb, NULL); - elm_map_overlay_get_cb_set(parking3, _parking_cb, NULL); - elm_map_overlay_get_cb_set(parking4, _parking_cb, NULL); - elm_map_overlay_get_cb_set(parking5, _parking_cb, NULL); - - // Append overlays to groups - grp_parking = elm_map_overlay_class_add(map); - elm_map_overlay_icon_set(grp_parking, _icon_get(map, &parking)); - elm_map_overlay_get_cb_set(grp_parking, _parking_cb, NULL); - elm_map_overlay_class_append(grp_parking, parking1); - elm_map_overlay_class_append(grp_parking, parking2); - elm_map_overlay_class_append(grp_parking, parking3); - elm_map_overlay_class_append(grp_parking, parking4); - elm_map_overlay_class_append(grp_parking, parking5); - - evas_object_show(map); - } - - evas_object_resize(win, 800, 800); - evas_object_show(win); -} diff --git a/src/lib/elementary/elm_map.c b/src/lib/elementary/elm_map.c index 6d287fef5e..afe8757867 100644 --- a/src/lib/elementary/elm_map.c +++ b/src/lib/elementary/elm_map.c @@ -57,265 +57,13 @@ #define NOMINATIM_ATTR_ADDRESS "display_name" static Eina_Bool _key_action_move(Evas_Object *obj, const char *params); -static Eina_Bool _key_action_zoom(Evas_Object *obj, const char *params); -static Eina_Bool _zoom_animator_set(Elm_Map_Data *sd, void *callback); static const Elm_Action key_actions[] = { {"move", _key_action_move}, - {"zoom", _key_action_zoom}, + {"zoom", _key_action_move}, {NULL, NULL} }; -static char * -_mapnik_url_cb(const Evas_Object *obj EINA_UNUSED, - int x, - int y, - int zoom) -{ - char buf[PATH_MAX]; - - // ((x+y+zoom)%3)+'a' is requesting map images from distributed - // tile servers (eg., a, b, c) - snprintf(buf, sizeof(buf), "http://%c.tile.openstreetmap.org/%d/%d/%d.png", - ((x + y + zoom) % 3) + 'a', zoom, x, y); - return strdup(buf); -} - -static char * -_osmarender_url_cb(const Evas_Object *obj EINA_UNUSED, - int x, - int y, - int zoom) -{ - char buf[PATH_MAX]; - - snprintf(buf, sizeof(buf), - "http://%c.tah.openstreetmap.org/Tiles/tile/%d/%d/%d.png", - ((x + y + zoom) % 3) + 'a', zoom, x, y); - - return strdup(buf); -} - -static char * -_cyclemap_url_cb(const Evas_Object *obj EINA_UNUSED, - int x, - int y, - int zoom) -{ - char buf[PATH_MAX]; - - snprintf(buf, sizeof(buf), - "http://%c.tile.opencyclemap.org/cycle/%d/%d/%d.png", - ((x + y + zoom) % 3) + 'a', zoom, x, y); - - return strdup(buf); -} - -static char * -_mapquest_url_cb(const Evas_Object *obj EINA_UNUSED, - int x, - int y, - int zoom) -{ - char buf[PATH_MAX]; - - snprintf(buf, sizeof(buf), - "http://otile%d.mqcdn.com/tiles/1.0.0/osm/%d/%d/%d.png", - ((x + y + zoom) % 4) + 1, zoom, x, y); - - return strdup(buf); -} - -static char * -_mapquest_aerial_url_cb(const Evas_Object *obj EINA_UNUSED, - int x, - int y, - int zoom) -{ - char buf[PATH_MAX]; - - snprintf(buf, sizeof(buf), "http://oatile%d.mqcdn.com/naip/%d/%d/%d.png", - ((x + y + zoom) % 4) + 1, zoom, x, y); - - return strdup(buf); -} - -static char * -_yours_url_cb(const Evas_Object *obj EINA_UNUSED, - const char *type_name, - int method, - double flon, - double flat, - double tlon, - double tlat) -{ - char buf[PATH_MAX]; - - snprintf - (buf, sizeof(buf), - "%s?flat=%lf&flon=%lf&tlat=%lf&tlon=%lf&v=%s&fast=%d&instructions=1", - ROUTE_YOURS_URL, flat, flon, tlat, tlon, type_name, method); - - return strdup(buf); -} - -// TODO: fix monav api -/* - static char * - _monav_url_cb(const Evas_Object *obj EINA_UNUSED, - char *type_name, - int method, - double flon, - double flat, - double tlon, - double tlat) - { - char buf[PATH_MAX]; - - snprintf(buf, sizeof(buf), - "%s?flat=%f&flon=%f&tlat=%f&tlon=%f&v=%s&fast=%d&instructions=1", - ROUTE_MONAV_URL, flat, flon, tlat, tlon, type_name, method); - - return strdup(buf); - } - - //TODO: fix ors api - - static char * - _ors_url_cb(const Evas_Object *obj EINA_UNUSED, - char *type_name, - int method, - double flon, - double flat, - double tlon, - double tlat) - { - char buf[PATH_MAX]; - - snprintf(buf, sizeof(buf), - "%s?flat=%f&flon=%f&tlat=%f&tlon=%f&v=%s&fast=%d&instructions=1", - ROUTE_ORS_URL, flat, flon, tlat, tlon, type_name, method); - - return strdup(buf); - } - */ - -static char * -_nominatim_url_cb(const Evas_Object *obj, - int method, - const char *name, - double lon, - double lat) -{ - char **str; - char buf[PATH_MAX + 256]; - unsigned int ele, idx; - char search_url[PATH_MAX]; - - ELM_MAP_DATA_GET(obj, sd); - - if (method == ELM_MAP_NAME_METHOD_SEARCH) - { - search_url[0] = '\0'; - str = eina_str_split_full(name, " ", 0, &ele); - for (idx = 0; idx < ele; idx++) - { - eina_strlcat(search_url, str[idx], sizeof(search_url)); - if (!(idx == (ele - 1))) - eina_strlcat(search_url, "+", sizeof(search_url)); - } - snprintf(buf, sizeof(buf), - "%s/search?q=%s&format=xml&polygon=0&addressdetails=0", - NAME_NOMINATIM_URL, search_url); - - if (str) - { - free(str[0]); - free(str); - } - } - else if (method == ELM_MAP_NAME_METHOD_REVERSE) - snprintf(buf, sizeof(buf), - "%s/reverse?format=xml&lat=%lf&lon=%lf&zoom=%d&addressdetails=0", - NAME_NOMINATIM_URL, lat, lon, (int)sd->zoom); - else strcpy(buf, ""); - - return strdup(buf); -} - -// Refer : http://wiki.openstreetmap.org/wiki/FAQ -// meters per pixel when latitude is 0 (equator) -// meters per pixel = _osm_scale_meter[zoom] * cos (latitude) -static const double _osm_scale_meter[] = -{ - 78206, 39135.758482, 19567.879241, 9783.939621, 4891.969810, - 2445.984905, 1222.992453, 611.496226, 305.748113, 152.874057, 76.437028, - 38.218514, 19.109257, 9.554629, 4.777314, 2.388657, 1.194329, 0.597164, - 0.29858 -}; - -static double -_scale_cb(const Evas_Object *obj EINA_UNUSED, - double lon EINA_UNUSED, - double lat, - int zoom) -{ - if ((zoom < 0) || - (zoom >= (int)(sizeof(_osm_scale_meter) / sizeof(_osm_scale_meter[0]))) - ) - return 0; - return _osm_scale_meter[zoom] * cos(lat * ELM_PI / 180.0); -} - -static Evas_Object * -_osm_copyright_cb(Evas_Object *obj) -{ - Evas_Object *label; - - label = elm_label_add(obj); - elm_object_text_set(label, "" - "openstreetmap.org opendatacommons.org creativecommons.org" - ""); - - return label; -} - -static const Source_Tile src_tiles[] = -{ - {"Mapnik", 0, 18, _mapnik_url_cb, NULL, NULL, _scale_cb, _osm_copyright_cb}, - {"Osmarender", 0, 17, _osmarender_url_cb, NULL, NULL, _scale_cb, _osm_copyright_cb}, - {"CycleMap", 0, 16, _cyclemap_url_cb, NULL, NULL, _scale_cb, _osm_copyright_cb}, - {"MapQuest", 0, 18, _mapquest_url_cb, NULL, NULL, _scale_cb, _osm_copyright_cb}, - {"MapQuest Open Aerial", 0, 11, _mapquest_aerial_url_cb, NULL, NULL, - _scale_cb, _osm_copyright_cb} -}; - -static void _kml_parse(Elm_Map_Route *r); -// FIXME: Fix more open sources -static const Source_Route src_routes[] = -{ - {"Yours", _yours_url_cb, _kml_parse} // http://www.yournavigation.org/ - //{"Monav", _monav_url_cb, _kml_parse}, - //{"ORS", _ors_url_cb, _kml_parse)}, // http://www.openrouteservice.org -}; - -// Scale in meters -static const double _scale_tb[] = -{ - 10000000, 5000000, 2000000, 1000000, 500000, 200000, 100000, 50000, - 20000, 10000, 5000, 2000, 1000, 500, 500, 200, 100, 50, 20, 10, 5, 2, 1 -}; - -static void _name_parse(Elm_Map_Name *n); -static void _name_list_parse(Elm_Map_Name_List *nl); -// FIXME: Add more open sources -static const Source_Name src_names[] = -{ - {"Nominatim", _nominatim_url_cb, _name_parse, _name_list_parse} -}; - -static int id_num = 1; - static const char SIG_CLICKED[] = "clicked"; static const char SIG_CLICKED_DOUBLE[] = "clicked,double"; static const char SIG_PRESS[] = "press"; @@ -367,3506 +115,6 @@ static const Evas_Smart_Cb_Description _smart_callbacks[] = { {NULL, NULL} }; -static void -_edj_overlay_size_get(Elm_Map_Data *sd, - Evas_Coord *w, - Evas_Coord *h) -{ - Evas_Object *edj; - const char *s; - - EINA_SAFETY_ON_NULL_RETURN(w); - EINA_SAFETY_ON_NULL_RETURN(h); - - edj = edje_object_add(evas_object_evas_get(sd->obj)); - elm_widget_theme_object_set - (sd->obj, edj, "map/marker", "radio", - elm_widget_style_get(sd->obj)); - - s = edje_object_data_get(edj, "size_w"); - if (s) *w = atoi(s); - else *w = 0; - - s = edje_object_data_get(edj, "size_h"); - if (s) *h = atoi(s); - else *h = 0; - - evas_object_del(edj); -} - -static void -_rotate_do(Evas_Coord x, - Evas_Coord y, - Evas_Coord cx, - Evas_Coord cy, - double degree, - Evas_Coord *xx, - Evas_Coord *yy) -{ - double r = (degree * M_PI) / 180.0; - - if (xx) *xx = ((x - cx) * cos(r)) + ((y - cy) * cos(r + M_PI_2)) + cx; - if (yy) *yy = ((x - cx) * sin(r)) + ((y - cy) * sin(r + M_PI_2)) + cy; -} - -static void -_obj_rotate(Elm_Map_Data *sd, - Evas_Object *obj) -{ - Evas_Coord w, h, ow, oh; - - evas_map_util_points_populate_from_object(sd->map, obj); - - evas_object_geometry_get(obj, NULL, NULL, &ow, &oh); - evas_object_image_size_get(obj, &w, &h); - if ((w > ow) || (h > oh)) - { - evas_map_point_image_uv_set(sd->map, 0, 0, 0); - evas_map_point_image_uv_set(sd->map, 1, w, 0); - evas_map_point_image_uv_set(sd->map, 2, w, h); - evas_map_point_image_uv_set(sd->map, 3, 0, h); - } - evas_map_util_rotate(sd->map, sd->rotate.d, sd->rotate.cx, sd->rotate.cy); - - evas_object_map_set(obj, sd->map); - evas_object_map_enable_set(obj, EINA_TRUE); -} - -static void -_obj_place(Evas_Object *obj, - Evas_Coord x, - Evas_Coord y, - Evas_Coord w, - Evas_Coord h) -{ - EINA_SAFETY_ON_NULL_RETURN(obj); - - evas_object_geometry_set(obj, x, y, w, h); - evas_object_show(obj); -} - -static void -_coord_to_region_convert(Elm_Map_Data *sd, - Evas_Coord x, - Evas_Coord y, - Evas_Coord size, - double *lon, - double *lat) -{ - int zoom; - - EINA_SAFETY_ON_NULL_RETURN(sd); - - zoom = floor(log((double)size / sd->size.tile) / log(2)); - if ((sd->src_tile) && (sd->src_tile->coord_to_geo)) - { - if (sd->src_tile->coord_to_geo - (sd->obj, zoom, x, y, size, lon, lat)) - return; - } - - if (lon) *lon = (x / (double)size * 360.0) - 180; - if (lat) - { - double n = ELM_PI - (2.0 * ELM_PI * y / size); - *lat = 180.0 / ELM_PI *atan(0.5 * (exp(n) - exp(-n))); - } -} - -static void -_region_to_coord_convert(Elm_Map_Data *sd, - double lon, - double lat, - Evas_Coord size, - Evas_Coord *x, - Evas_Coord *y) -{ - int zoom; - - EINA_SAFETY_ON_NULL_RETURN(sd); - - zoom = floor(log((double)size / 256) / log(2)); - if ((sd->src_tile) && (sd->src_tile->geo_to_coord)) - { - if (sd->src_tile->geo_to_coord - (sd->obj, zoom, lon, lat, size, x, y)) return; - } - - if (x) *x = floor((lon + 180.0) / 360.0 * size); - if (y) - *y = floor((1.0 - log(tan(lat * ELM_PI / 180.0) + - (1.0 / cos(lat * ELM_PI / 180.0))) - / ELM_PI) / 2.0 * size); -} - -static void -_viewport_coord_get(Elm_Map_Data *sd, - Evas_Coord *vx, - Evas_Coord *vy, - Evas_Coord *vw, - Evas_Coord *vh) -{ - Evas_Coord x = 0, y = 0, w = 0, h = 0; - - EINA_SAFETY_ON_NULL_RETURN(sd); - - elm_interface_scrollable_content_pos_get(sd->obj, &x, &y); - elm_interface_scrollable_content_viewport_geometry_get - (sd->obj, NULL, NULL, &w, &h); - - if (w > sd->size.w) x -= ((w - sd->size.w) / 2); - if (h > sd->size.h) y -= ((h - sd->size.h) / 2); - if (vx) *vx = x; - if (vy) *vy = y; - if (vw) *vw = w; - if (vh) *vh = h; -} - -// Map coordinates to canvas geometry without rotate -static void -_coord_to_canvas_no_rotation(Elm_Map_Data *sd, - Evas_Coord x, - Evas_Coord y, - Evas_Coord *xx, - Evas_Coord *yy) -{ - Evas_Coord vx = 0, vy = 0, sx = 0, sy = 0; - - _viewport_coord_get(sd, &vx, &vy, NULL, NULL); - evas_object_geometry_get(sd->pan_obj, &sx, &sy, NULL, NULL); - if (xx) *xx = x - vx + sx; - if (yy) *yy = y - vy + sy; -} - -// Map coordinates to canvas geometry -static void -_coord_to_canvas(Elm_Map_Data *sd, - Evas_Coord x, - Evas_Coord y, - Evas_Coord *xx, - Evas_Coord *yy) -{ - _coord_to_canvas_no_rotation(sd, x, y, &x, &y); - _rotate_do(x, y, sd->rotate.cx, sd->rotate.cy, sd->rotate.d, &x, &y); - if (xx) *xx = x; - if (yy) *yy = y; -} - -// Canvas geometry to map coordinates -static void -_canvas_to_coord(Elm_Map_Data *sd, - Evas_Coord x, - Evas_Coord y, - Evas_Coord *xx, - Evas_Coord *yy) -{ - Evas_Coord vx = 0, vy = 0, sx = 0, sy = 0; - - _viewport_coord_get(sd, &vx, &vy, NULL, NULL); - evas_object_geometry_get(sd->pan_obj, &sx, &sy, NULL, NULL); - _rotate_do(x - sx + vx, y - sy + vy, sd->rotate.cx - sx + vx, - sd->rotate.cy - sy + vy, -sd->rotate.d, &x, &y); - if (xx) *xx = x; - if (yy) *yy = y; -} - -static void -_grid_item_coord_get(Grid_Item *gi, - int *x, - int *y, - int *w, - int *h) -{ - EINA_SAFETY_ON_NULL_RETURN(gi); - - if (x) *x = gi->x * gi->wsd->size.tile; - if (y) *y = gi->y * gi->wsd->size.tile; - if (w) *w = gi->wsd->size.tile; - if (h) *h = gi->wsd->size.tile; -} - -static Eina_Bool -_grid_item_in_viewport(Grid_Item *gi) -{ - Evas_Coord vx = 0, vy = 0, vw = 0, vh = 0; - Evas_Coord x = 0, y = 0, w = 0, h = 0; - - EINA_SAFETY_ON_NULL_RETURN_VAL(gi, EINA_FALSE); - - _viewport_coord_get(gi->wsd, &vx, &vy, &vw, &vh); - _grid_item_coord_get(gi, &x, &y, &w, &h); - - return ELM_RECTS_INTERSECT(x, y, w, h, vx, vy, vw, vh); -} - -static Eina_Bool -_loaded_timeout_cb(void *data) -{ - ELM_MAP_DATA_GET(data, sd); - - EINA_SAFETY_ON_NULL_RETURN_VAL(data, EINA_FALSE); - - sd->loaded_timer = NULL; - if (!(sd->download_num) && !(sd->download_idler)) - efl_event_callback_legacy_call - (sd->obj, ELM_MAP_EVENT_LOADED, NULL); - return ECORE_CALLBACK_CANCEL; -} - -static void -_grid_item_update(Grid_Item *gi) -{ - Evas_Load_Error err; - - EINA_SAFETY_ON_NULL_RETURN(gi); - - evas_object_image_file_set(gi->img, gi->file, NULL); - if (!gi->wsd->zoom_timer && !gi->wsd->scr_timer) - evas_object_image_smooth_scale_set(gi->img, EINA_TRUE); - else evas_object_image_smooth_scale_set(gi->img, EINA_FALSE); - - err = evas_object_image_load_error_get(gi->img); - if (err != EVAS_LOAD_ERROR_NONE) - { - ERR("Image loading error (%s): %s", gi->file, evas_load_error_str(err)); - ecore_file_remove(gi->file); - gi->file_have = EINA_FALSE; - } - else - { - Evas_Coord x, y, w, h; - - _grid_item_coord_get(gi, &x, &y, &w, &h); - _coord_to_canvas_no_rotation(gi->wsd, x, y, &x, &y); - _obj_place(gi->img, x, y, w, h); - _obj_rotate(gi->wsd, gi->img); - gi->file_have = EINA_TRUE; - } - - ecore_timer_del(gi->wsd->loaded_timer); - gi->wsd->loaded_timer = ecore_timer_add(0.25, _loaded_timeout_cb, gi->wsd->obj); -} - -static void -_grid_item_load(Grid_Item *gi) -{ - EINA_SAFETY_ON_NULL_RETURN(gi); - - if (gi->file_have) _grid_item_update(gi); - else if (!gi->job) - { - gi->wsd->download_list = eina_list_remove(gi->wsd->download_list, gi); - gi->wsd->download_list = eina_list_append(gi->wsd->download_list, gi); - } -} - -static void -_grid_item_unload(Grid_Item *gi) -{ - EINA_SAFETY_ON_NULL_RETURN(gi); - - if (gi->file_have) - { - evas_object_hide(gi->img); - evas_object_image_file_set(gi->img, NULL, NULL); - } - else if (gi->job) - { - ecore_file_download_abort(gi->job); - ecore_file_remove(gi->file); - gi->job = NULL; - gi->wsd->try_num--; - } - else gi->wsd->download_list = eina_list_remove(gi->wsd->download_list, gi); -} - -static Grid_Item * -_grid_item_create(Grid *g, - Evas_Coord x, - Evas_Coord y) -{ - char buf[PATH_MAX]; - char buf2[PATH_MAX + 128]; - Grid_Item *gi; - char *url; - - EINA_SAFETY_ON_NULL_RETURN_VAL(g, NULL); - - gi = ELM_NEW(Grid_Item); - gi->wsd = g->wsd; - gi->g = g; - gi->x = x; - gi->y = y; - - gi->file_have = EINA_FALSE; - gi->job = NULL; - - gi->img = evas_object_image_add - (evas_object_evas_get((g->wsd)->obj)); - evas_object_image_smooth_scale_set(gi->img, EINA_FALSE); - evas_object_image_scale_hint_set(gi->img, EVAS_IMAGE_SCALE_HINT_DYNAMIC); - evas_object_image_filled_set(gi->img, EINA_TRUE); - evas_object_smart_member_add(gi->img, g->wsd->pan_obj); - evas_object_pass_events_set(gi->img, EINA_TRUE); - evas_object_stack_below(gi->img, g->wsd->sep_maps_overlays); - - snprintf(buf, sizeof(buf), "%s" CACHE_TILE_ROOT, efreet_cache_home_get(), - g->wsd->id, g->zoom, x); - - snprintf(buf2, sizeof(buf2), CACHE_TILE_PATH, buf, y); - if (!ecore_file_exists(buf)) ecore_file_mkpath(buf); - - eina_stringshare_replace(&gi->file, buf2); - url = g->wsd->src_tile->url_cb((g->wsd)->obj, x, y, g->zoom); - if ((!url) || (!strlen(url))) - { - eina_stringshare_replace(&gi->url, NULL); - ERR("Getting source url failed: %s", gi->file); - } - else eina_stringshare_replace(&gi->url, url); - - free(url); - eina_matrixsparse_data_idx_set(g->grid, y, x, gi); - - return gi; -} - -static void -_grid_item_free(Grid_Item *gi) -{ - EINA_SAFETY_ON_NULL_RETURN(gi); - - _grid_item_unload(gi); - if (gi->g && gi->g->grid) - eina_matrixsparse_data_idx_set(gi->g->grid, gi->y, gi->x, NULL); - eina_stringshare_del(gi->url); - if (gi->file_have) ecore_file_remove(gi->file); - eina_stringshare_del(gi->file); - evas_object_del(gi->img); - - free(gi); -} - -static void -_downloaded_cb(void *data, - const char *file EINA_UNUSED, - int status) -{ - Grid_Item *gi = data; - - if (status == 200) - { - DBG("Download success from %s to %s", gi->url, gi->file); - - _grid_item_update(gi); - gi->wsd->finish_num++; - efl_event_callback_legacy_call - ((gi->wsd)->obj, ELM_MAP_EVENT_TILE_LOADED, NULL); - } - else - { - WRN("Download failed from %s to %s (%d) ", gi->url, gi->file, status); - - ecore_file_remove(gi->file); - gi->file_have = EINA_FALSE; - efl_event_callback_legacy_call - ((gi->wsd)->obj, ELM_MAP_EVENT_TILE_LOADED_FAIL, NULL); - } - - ELM_WIDGET_DATA_GET_OR_RETURN(gi->wsd->obj, wd); - gi->job = NULL; - gi->wsd->download_num--; - if (!gi->wsd->download_num) - edje_object_signal_emit(wd->resize_obj, - "elm,state,busy,stop", "elm"); -} - -static Eina_Bool -_download_job(void *data) -{ - Evas_Object *obj = data; - ELM_MAP_DATA_GET(obj, sd); - Eina_List *l, *ll; - Grid_Item *gi; - ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd, ECORE_CALLBACK_CANCEL); - - if (!eina_list_count(sd->download_list)) - { - sd->download_idler = NULL; - return ECORE_CALLBACK_CANCEL; - } - - EINA_LIST_REVERSE_FOREACH_SAFE(sd->download_list, l, ll, gi) - { - Eina_Bool ret, file_exists; - - if ((gi->g->zoom != sd->zoom) || !(_grid_item_in_viewport(gi))) - { - sd->download_list = eina_list_remove(sd->download_list, gi); - continue; - } - if (sd->download_num >= MAX_CONCURRENT_DOWNLOAD) - return ECORE_CALLBACK_RENEW; - - file_exists = ecore_file_exists(gi->file); - if (!file_exists) - { - /* Check here if we can download into this directory even if this one - disappear due to some user black magic */ - char *dir_path; - dir_path = ecore_file_dir_get(gi->file); - if (!ecore_file_exists(dir_path)) ecore_file_mkpath(dir_path); - free(dir_path); - ret = ecore_file_download_full - (gi->url, gi->file, _downloaded_cb, NULL, gi, &(gi->job), sd->ua); - - if ((!ret) || (!gi->job)) - { - ERR("Can't start to download from %s to %s", gi->url, gi->file); - continue; - } - sd->try_num++; - sd->download_num++; - } - sd->download_list = eina_list_remove(sd->download_list, gi); - efl_event_callback_legacy_call - (obj, ELM_MAP_EVENT_TILE_LOAD, NULL); - if (sd->download_num == 1) - edje_object_signal_emit(wd->resize_obj, - "elm,state,busy,start", "elm"); - if (file_exists) - { - /* It seem the file already exists, try to load it and let - _grid_item_update do his job. If this file isn't a image the func - will invalidate it and try to redownload it. */ - _grid_item_update(gi); - gi->wsd->finish_num++; - efl_event_callback_legacy_call - ((gi->wsd)->obj, ELM_MAP_EVENT_TILE_LOADED, NULL); - } - } - - return ECORE_CALLBACK_RENEW; -} - -static void -_grid_viewport_get(Grid *g, - int *x, - int *y, - int *w, - int *h) -{ - int xx, yy, ww, hh; - Evas_Coord vx = 0, vy = 0, vw = 0, vh = 0; - - EINA_SAFETY_ON_NULL_RETURN(g); - - _viewport_coord_get(g->wsd, &vx, &vy, &vw, &vh); - if (vx < 0) vx = 0; - if (vy < 0) vy = 0; - - xx = (vx / g->wsd->size.tile) - 1; - if (xx < 0) xx = 0; - - yy = (vy / g->wsd->size.tile) - 1; - if (yy < 0) yy = 0; - - ww = (vw / g->wsd->size.tile) + 3; - if (xx + ww >= g->tw) ww = g->tw - xx; - - hh = (vh / g->wsd->size.tile) + 3; - if (yy + hh >= g->th) hh = g->th - yy; - - if (x) *x = xx; - if (y) *y = yy; - if (w) *w = ww; - if (h) *h = hh; -} - -static void -_grid_unload(Grid *g) -{ - Eina_Matrixsparse_Cell *cell; - Eina_Iterator *it; - Grid_Item *gi; - - EINA_SAFETY_ON_NULL_RETURN(g); - - it = eina_matrixsparse_iterator_new(g->grid); - EINA_ITERATOR_FOREACH(it, cell) - { - gi = eina_matrixsparse_cell_data_get(cell); - _grid_item_unload(gi); - } - eina_iterator_free(it); -} - -static void -_grid_load(Grid *g) -{ - Eina_Matrixsparse_Cell *cell; - int x, y, xx, yy, ww, hh; - Eina_Iterator *it; - Grid_Item *gi; - - EINA_SAFETY_ON_NULL_RETURN(g); - - it = eina_matrixsparse_iterator_new(g->grid); - EINA_ITERATOR_FOREACH(it, cell) - { - gi = eina_matrixsparse_cell_data_get(cell); - if (!_grid_item_in_viewport(gi)) _grid_item_unload(gi); - } - eina_iterator_free(it); - - _grid_viewport_get(g, &xx, &yy, &ww, &hh); - for (y = yy; y < yy + hh; y++) - { - for (x = xx; x < xx + ww; x++) - { - gi = eina_matrixsparse_data_idx_get(g->grid, y, x); - if (!gi) gi = _grid_item_create(g, x, y); - _grid_item_load(gi); - } - } -} - -static void -_grid_place(Elm_Map_Data *sd) -{ - Eina_List *l; - Grid *g; - - EINA_SAFETY_ON_NULL_RETURN(sd); - - EINA_LIST_FOREACH(sd->grids, l, g) - { - if (sd->zoom == g->zoom) _grid_load(g); - else _grid_unload(g); - } - if (!sd->download_idler) - sd->download_idler = ecore_idler_add(_download_job, sd->obj); -} - -static void -_grid_all_create(Elm_Map_Data *sd) -{ - int zoom; - - EINA_SAFETY_ON_NULL_RETURN(sd->src_tile); - - for (zoom = sd->src_tile->zoom_min; zoom <= sd->src_tile->zoom_max; zoom++) - { - Grid *g; - int tnum; - - g = ELM_NEW(Grid); - g->wsd = sd; - g->zoom = zoom; - tnum = pow(2.0, g->zoom); - g->tw = tnum; - g->th = tnum; - g->grid = eina_matrixsparse_new(g->th, g->tw, NULL, NULL); - sd->grids = eina_list_append(sd->grids, g); - } -} - -static void -_grid_all_clear(Elm_Map_Data *sd) -{ - Grid *g; - - EINA_SAFETY_ON_NULL_RETURN(sd); - - EINA_LIST_FREE(sd->grids, g) - { - Eina_Matrixsparse_Cell *cell; - Eina_Iterator *it = eina_matrixsparse_iterator_new(g->grid); - - EINA_ITERATOR_FOREACH(it, cell) - { - Grid_Item *gi; - - gi = eina_matrixsparse_cell_data_get(cell); - if (gi) _grid_item_free(gi); - } - eina_iterator_free(it); - - eina_matrixsparse_free(g->grid); - free(g); - } -} - -static void -_track_place(Elm_Map_Data *sd) -{ -#ifdef ELM_EMAP - Eina_List *l; - Evas_Coord size; - Evas_Object *route; - Evas_Coord px, py, ow, oh; - int xmin, xmax, ymin, ymax; - - px = sd->pan_x; - py = sd->pan_y; - _viewport_coord_get(sd, NULL, NULL, &ow, &oh); - - size = sd->size.w; - - EINA_LIST_FOREACH(sd->track, l, route) - { - double lon_min, lon_max; - double lat_min, lat_max; - - elm_route_longitude_min_max_get(route, &lon_min, &lon_max); - elm_route_latitude_min_max_get(route, &lat_min, &lat_max); - _region_to_coord_convert(sd, lon_min, lat_max, size, &xmin, &ymin); - _region_to_coord_convert(sd, lon_max, lat_min, size, &xmax, &ymax); - - if ( !(xmin < px && xmax < px) && !(xmin > px + ow && xmax > px + ow)) - { - if ((ymin < py && ymax < py) || - (ymin > py + oh && ymax > py + oh)) - { - //display the route - evas_object_geometry_set(route, xmin - px, ymin - py, - xmax - xmin, ymax - ymin); - evas_object_raise(route); - _obj_rotate(sd, route); - evas_object_show(route); - - continue; - } - } - //the route is not display - evas_object_hide(route); - } -#else - (void)sd; -#endif -} - -static void -_calc_job(Elm_Map_Data *sd) -{ - if (sd->calc_job.zoom_mode_set) - { - sd->calc_job.zoom_mode_set(sd, sd->calc_job.zoom); - sd->calc_job.zoom_mode_set = NULL; - } - if (!sd->zoom_animator) - { - if (sd->calc_job.region_show_bring_in) - { - sd->calc_job.region_show_bring_in - (sd, sd->calc_job.lon, sd->calc_job.lat, sd->calc_job.bring_in); - sd->calc_job.region_show_bring_in = NULL; - } - if (sd->calc_job.overlays_show) - { - sd->calc_job.overlays_show(sd, sd->calc_job.overlays); - sd->calc_job.overlays_show = NULL; - } - } -} - -static void -_smooth_update(Elm_Map_Data *sd) -{ - Eina_List *l; - Grid *g; - - EINA_LIST_FOREACH(sd->grids, l, g) - { - Eina_Iterator *it = eina_matrixsparse_iterator_new(g->grid); - Eina_Matrixsparse_Cell *cell; - - EINA_ITERATOR_FOREACH(it, cell) - { - Grid_Item *gi = eina_matrixsparse_cell_data_get(cell); - if (_grid_item_in_viewport(gi)) - evas_object_image_smooth_scale_set(gi->img, EINA_TRUE); - } - eina_iterator_free(it); - } -} - -static Eina_Bool -_zoom_timeout_cb(void *data) -{ - ELM_MAP_DATA_GET(data, sd); - - _smooth_update(sd); - sd->zoom_timer = NULL; - efl_event_callback_legacy_call - (sd->obj, EFL_UI_EVENT_ZOOM_STOP, NULL); - - return ECORE_CALLBACK_CANCEL; -} - -static void -_zoom_do(Elm_Map_Data *sd, - double zoom) -{ - Evas_Coord vx, vy, vw, vh; - Evas_Coord ow, oh; - - if (zoom > sd->src_tile->zoom_max) zoom = sd->src_tile->zoom_max; - else if (zoom < sd->src_tile->zoom_min) - zoom = sd->src_tile->zoom_min; - if (zoom > sd->zoom_max) zoom = sd->zoom_max; - else if (zoom < sd->zoom_min) - zoom = sd->zoom_min; - - sd->zoom = ROUND(zoom); - sd->zoom_detail = zoom; - ow = sd->size.w; - oh = sd->size.h; - sd->size.tile = pow(2.0, (zoom - sd->zoom)) * sd->tsize; - sd->size.w = pow(2.0, sd->zoom) * sd->size.tile; - sd->size.h = sd->size.w; - - // Fix to zooming with (viewport center vx, vy) as the center to prevent - // from zooming with (0,0) as the center. (scroller default behavior) - _viewport_coord_get(sd, &vx, &vy, &vw, &vh); - if ((vw > 0) && (vh > 0) && (ow > 0) && (oh > 0)) - { - Evas_Coord x, y; - double sx, sy; - - if (vw > ow) sx = 0.5; - else sx = (vx + ((double)vw / 2)) / ow; - if (vh > oh) sy = 0.5; - else sy = (vy + ((double)vh / 2)) / oh; - - if (sx > 1.0) sx = 1.0; - if (sy > 1.0) sy = 1.0; - - x = ceil((sx * sd->size.w) - ((double)vw / 2)); - y = ceil((sy * sd->size.h) - ((double)vh / 2)); - if (x < 0) x = 0; - else if (x > (sd->size.w - vw)) - x = sd->size.w - vw; - if (y < 0) y = 0; - else if (y > (sd->size.h - vh)) - y = sd->size.h - vh; - elm_interface_scrollable_content_region_show - (sd->obj, x, y, vw, vh); - } - - if (sd->zoom_timer) - { - ecore_timer_del(sd->zoom_timer); - sd->zoom_timer = NULL; - } - else - efl_event_callback_legacy_call - (sd->obj, EFL_UI_EVENT_ZOOM_START, NULL); - - sd->zoom_timer = ecore_timer_add(0.25, _zoom_timeout_cb, sd->obj); - efl_event_callback_legacy_call - (sd->obj, EFL_UI_EVENT_ZOOM_CHANGE, NULL); - - efl_event_callback_legacy_call - (sd->pan_obj, ELM_PAN_EVENT_CHANGED, NULL); - evas_object_smart_changed(sd->pan_obj); -} - -static void -_zoom_anim_cb(void *data, const Efl_Event *event EINA_UNUSED) -{ - ELM_MAP_DATA_GET(data, sd); - - if (sd->ani.zoom_cnt <= 0) - { - _zoom_animator_set(sd, NULL); - evas_object_smart_changed(sd->pan_obj); - _calc_job(sd); - } - else - { - sd->ani.zoom += sd->ani.zoom_diff; - sd->ani.zoom_cnt--; - _zoom_do(sd, sd->ani.zoom); - } -} - -static void -_zoom_bring_anim_cb(void *data, const Efl_Event *event EINA_UNUSED) -{ - ELM_MAP_DATA_GET(data, sd); - - if ((sd->ani.zoom_cnt <= 0) && (sd->ani.region_cnt <= 0)) - { - _zoom_animator_set(sd, NULL); - evas_object_smart_changed(sd->pan_obj); - _calc_job(sd); - } - else - { - Evas_Coord x, y, w, h; - if (sd->ani.zoom_cnt > 0) - { - sd->ani.zoom += sd->ani.zoom_diff; - _zoom_do(sd, sd->ani.zoom); - sd->ani.zoom_cnt--; - } - if (sd->ani.region_cnt > 0) - { - sd->ani.lon += sd->ani.lon_diff; - sd->ani.lat += sd->ani.lat_diff; - - _region_to_coord_convert - (sd, sd->ani.lon, sd->ani.lat, sd->size.w, &x, &y); - _viewport_coord_get(sd, NULL, NULL, &w, &h); - x = x - (w / 2); - y = y - (h / 2); - elm_interface_scrollable_content_region_show(sd->obj, x, y, w, h); - sd->ani.region_cnt--; - } - } -} - -static Eina_Bool -_zoom_animator_set(Elm_Map_Data *sd, - void *callback) -{ - Eina_Bool r = EINA_FALSE; - - sd->zoom_animator = !!callback; - r = efl_event_callback_del(sd->obj, EFL_CANVAS_OBJECT_EVENT_ANIMATOR_TICK, _zoom_anim_cb, sd->obj); - r |= efl_event_callback_del(sd->obj, EFL_CANVAS_OBJECT_EVENT_ANIMATOR_TICK, _zoom_bring_anim_cb, sd->obj); - if (callback) efl_event_callback_add(sd->obj, EFL_CANVAS_OBJECT_EVENT_ANIMATOR_TICK, callback, sd->obj); - - return r; -} - -static void -_zoom_with_animation(Elm_Map_Data *sd, - double zoom, - int cnt) -{ - if (cnt == 0) return; - - sd->ani.zoom_cnt = cnt; - sd->ani.zoom = sd->zoom; - sd->ani.zoom_diff = (double)(zoom - sd->zoom) / cnt; - _zoom_animator_set(sd, _zoom_anim_cb); -} - -static void -_zoom_bring_with_animation(Elm_Map_Data *sd, - double zoom, - double lon, - double lat, - int zoom_cnt, - int region_cnt) -{ - double tlon, tlat; - Evas_Coord vx, vy, vw, vh; - if ((zoom_cnt == 0) || (region_cnt == 0)) return; - - sd->ani.zoom_cnt = zoom_cnt; - sd->ani.zoom = sd->zoom; - sd->ani.zoom_diff = (double)(zoom - sd->zoom) / zoom_cnt; - - sd->ani.region_cnt = region_cnt; - _viewport_coord_get(sd, &vx, &vy, &vw, &vh); - _coord_to_region_convert - (sd, vx + vw / 2, vy + vh / 2, sd->size.w, &tlon, &tlat); - sd->ani.lon = tlon; - sd->ani.lat = tlat; - sd->ani.lon_diff = (lon - tlon) / region_cnt; - sd->ani.lat_diff = (lat - tlat) / region_cnt; - - _zoom_animator_set(sd, _zoom_bring_anim_cb); -} - -static void -_sizing_eval(Evas_Object *obj) -{ - Evas_Coord maxw = -1, maxh = -1; - - evas_object_size_hint_max_get(obj, &maxw, &maxh); - evas_object_size_hint_max_set(obj, maxw, maxh); -} - -static void -_changed_size_hints_cb(void *data, - Evas *e EINA_UNUSED, - Evas_Object *obj EINA_UNUSED, - void *event_info EINA_UNUSED) -{ - _sizing_eval(data); -} - -static Eina_Bool -_scr_timeout_cb(void *data) -{ - ELM_MAP_DATA_GET(data, sd); - - _smooth_update(sd); - sd->scr_timer = NULL; - evas_object_smart_callback_call(sd->obj, "scroll,drag,stop", NULL); - - return ECORE_CALLBACK_CANCEL; -} - -static void -_scroll_cb(Evas_Object *obj, - void *data EINA_UNUSED) -{ - ELM_MAP_DATA_GET(obj, sd); - - if (sd->scr_timer) ecore_timer_del(sd->scr_timer); - else - evas_object_smart_callback_call(sd->obj, "scroll,drag,start", NULL); - ELM_SAFE_FREE(sd->long_timer, ecore_timer_del); - sd->scr_timer = ecore_timer_add(0.25, _scr_timeout_cb, obj); - evas_object_smart_callback_call(sd->obj, "scroll", NULL); -} - -static void -_scroll_animate_start_cb(Evas_Object *obj, - void *data EINA_UNUSED) -{ - ELM_MAP_DATA_GET(obj, sd); - - evas_object_smart_callback_call(sd->obj, "scroll,anim,start", NULL); -} - -static void -_scroll_animate_stop_cb(Evas_Object *obj, - void *data EINA_UNUSED) -{ - ELM_MAP_DATA_GET(obj, sd); - - evas_object_smart_callback_call(sd->obj, "scroll,anim,stop", NULL); -} - -static Eina_Bool -_long_press_cb(void *data) -{ - ELM_MAP_DATA_GET(data, sd); - - sd->long_timer = NULL; - - evas_object_smart_callback_call(sd->obj, "longpressed", &sd->ev); - - return ECORE_CALLBACK_CANCEL; -} - -static void -_mouse_down_cb(void *data, - Evas *evas EINA_UNUSED, - Evas_Object *obj EINA_UNUSED, - void *event_info) -{ - ELM_MAP_DATA_GET(data, sd); - Evas_Event_Mouse_Down *ev = event_info; - - if (ev->button != 1) return; - if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) sd->on_hold = EINA_TRUE; - else sd->on_hold = EINA_FALSE; - - if (ev->flags & EVAS_BUTTON_DOUBLE_CLICK) - evas_object_smart_callback_call - (sd->obj, "clicked,double", ev); - else - efl_event_callback_legacy_call - (sd->obj, ELM_MAP_EVENT_PRESS, ev); - - ecore_timer_del(sd->long_timer); - sd->ev = *ev; - sd->long_timer = - ecore_timer_add(_elm_config->longpress_timeout, _long_press_cb, data); -} - -static void -_mouse_up_cb(void *data, - Evas *evas EINA_UNUSED, - Evas_Object *obj EINA_UNUSED, - void *event_info) -{ - ELM_MAP_DATA_GET(data, sd); - Evas_Event_Mouse_Up *ev = event_info; - - EINA_SAFETY_ON_NULL_RETURN(ev); - - if (ev->button != 1) return; - - if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) sd->on_hold = EINA_TRUE; - else sd->on_hold = EINA_FALSE; - - ELM_SAFE_FREE(sd->long_timer, ecore_timer_del); - - if (!sd->on_hold) - - evas_object_smart_callback_call - (sd->obj, "clicked", ev); - sd->on_hold = EINA_FALSE; -} - -static void -_mouse_wheel_cb(void *data, - Evas *e EINA_UNUSED, - Evas_Object *obj EINA_UNUSED, - void *event_info) -{ - ELM_MAP_DATA_GET(data, sd); - - if (!sd->paused) - { - Evas_Event_Mouse_Wheel *ev = event_info; - - _zoom_do(sd, sd->zoom_detail - ((double)ev->z / 10)); - } -} - -static void -_region_max_min_get(Eina_List *overlays, - double *max_longitude, - double *min_longitude, - double *max_latitude, - double *min_latitude) -{ - double max_lon = -180, min_lon = 180; - double max_lat = -90, min_lat = 90; - Elm_Map_Overlay *overlay; - Eina_List *l; - - EINA_LIST_FOREACH(overlays, l, overlay) - { - double lon, lat; - - if (overlay->type == ELM_MAP_OVERLAY_TYPE_DEFAULT) - { - Overlay_Default *ovl = overlay->ovl; - - lon = ovl->lon; - lat = ovl->lat; - } - else if (overlay->type == ELM_MAP_OVERLAY_TYPE_CLASS) - { - // FIXME: class center coord is alright?? - Overlay_Class *ovl = overlay->ovl; - double max_lo, min_lo, max_la, min_la; - - _region_max_min_get - (ovl->members, &max_lo, &min_lo, &max_la, &min_la); - lon = (max_lo + min_lo) / 2; - lat = (max_la + min_la) / 2; - } - else if (overlay->type == ELM_MAP_OVERLAY_TYPE_BUBBLE) - { - Overlay_Bubble *ovl = overlay->ovl; - - lon = ovl->lon; - lat = ovl->lat; - } - else - { - WRN("Not supported overlay type: %d", overlay->type); - continue; - } - if (lon > max_lon) max_lon = lon; - if (lon < min_lon) min_lon = lon; - if (lat > max_lat) max_lat = lat; - if (lat < min_lat) min_lat = lat; - } - - if (max_longitude) *max_longitude = max_lon; - if (min_longitude) *min_longitude = min_lon; - if (max_latitude) *max_latitude = max_lat; - if (min_latitude) *min_latitude = min_lat; -} - -static Evas_Object * -_icon_dup(Evas_Object *icon, - Evas_Object *parent) -{ - Evas_Object *dupp; - Evas_Coord w, h; - - if (!icon || !parent) return NULL; - dupp = evas_object_image_filled_add(evas_object_evas_get(parent)); - evas_object_image_source_set(dupp, icon); - // Set size as origin' size for proxy - evas_object_geometry_get(icon, NULL, NULL, &w, &h); - if (w <= 0 || h <= 0) - { - evas_object_size_hint_combined_min_get(icon, &w, &h); - evas_object_size_hint_min_set(dupp, w, h); - } - else evas_object_resize(dupp, w, h); - // Original should have size for proxy - evas_object_resize(icon, w, h); - - return dupp; -} - -static void -_overlay_clicked_cb(void *data, - Evas *e EINA_UNUSED, - Evas_Object *obj EINA_UNUSED, - void *ev EINA_UNUSED) -{ - Elm_Map_Overlay *overlay = data; - - EINA_SAFETY_ON_NULL_RETURN(data); - - efl_event_callback_legacy_call - ((overlay->wsd)->obj, ELM_MAP_EVENT_OVERLAY_CLICKED, overlay); - if (overlay->cb) - overlay->cb(overlay->cb_data, (overlay->wsd)->obj, overlay); -} - -static void -_overlay_default_hide(Overlay_Default *ovl) -{ - EINA_SAFETY_ON_NULL_RETURN(ovl); - - if (ovl->content) evas_object_hide(ovl->content); - if (ovl->icon) evas_object_hide(ovl->icon); - if (ovl->clas_content) evas_object_hide(ovl->clas_content); - if (ovl->clas_icon) evas_object_hide(ovl->clas_icon); - if (ovl->layout) evas_object_hide(ovl->layout); -} - -static void -_overlay_default_show(Overlay_Default *ovl) -{ - Evas_Object *disp; - Evas_Coord x, y, w, h; - - EINA_SAFETY_ON_NULL_RETURN(ovl); - - evas_object_hide(ovl->layout); - if (ovl->content) - { - disp = ovl->content; - evas_object_geometry_get(disp, NULL, NULL, &w, &h); - if (w <= 0 || h <= 0) evas_object_size_hint_combined_min_get(disp, &w, &h); - ovl->w = w; - ovl->h = h; - } - else if (!(ovl->icon) && ovl->clas_content) - { - disp = ovl->clas_content; - - evas_object_geometry_get(disp, NULL, NULL, &w, &h); - if (w <= 0 || h <= 0) evas_object_size_hint_combined_min_get(disp, &w, &h); - } - else - { - if (ovl->icon) evas_object_show(ovl->icon); - else if (ovl->clas_icon) - evas_object_show(ovl->clas_icon); - disp = ovl->layout; - w = ovl->w; - h = ovl->h; - } - _coord_to_canvas(ovl->wsd, ovl->x, ovl->y, &x, &y); - _obj_place(disp, x - (w / 2), y - (h / 2), w, h); -} - -static void -_overlay_default_coord_get(Overlay_Default *ovl, - Evas_Coord *x, - Evas_Coord *y, - Evas_Coord *w, - Evas_Coord *h) -{ - EINA_SAFETY_ON_NULL_RETURN(ovl); - - if (x) *x = ovl->x; - if (y) *y = ovl->y; - if (w) *w = ovl->w; - if (h) *h = ovl->h; -} - -static void -_overlay_default_coord_set(Overlay_Default *ovl, - Evas_Coord x, - Evas_Coord y) -{ - EINA_SAFETY_ON_NULL_RETURN(ovl); - - ovl->x = x; - ovl->y = y; -} - -static void -_overlay_default_coord_update(Overlay_Default *ovl) -{ - EINA_SAFETY_ON_NULL_RETURN(ovl); - - _region_to_coord_convert - (ovl->wsd, ovl->lon, ovl->lat, ovl->wsd->size.w, &ovl->x, &ovl->y); -} - -static void -_overlay_default_layout_text_update(Overlay_Default *ovl, - const char *text) -{ - if (!ovl->content && !ovl->icon && !ovl->clas_content && !ovl->clas_icon) - elm_layout_text_set(ovl->layout, "elm.text", text); -} - -static void -_overlay_default_content_update(Overlay_Default *ovl, - Evas_Object *content, - Elm_Map_Overlay *overlay) -{ - EINA_SAFETY_ON_NULL_RETURN(ovl); - - if (ovl->content == content) return; - evas_object_del(ovl->content); - ovl->content = content; - evas_object_smart_member_add(ovl->content, ovl->wsd->pan_obj); - evas_object_stack_above(ovl->content, ovl->wsd->sep_maps_overlays); - - if (ovl->content) - evas_object_event_callback_add(ovl->content, EVAS_CALLBACK_MOUSE_DOWN, - _overlay_clicked_cb, overlay); -} - -static void -_overlay_default_layout_update(Overlay_Default *ovl) -{ - EINA_SAFETY_ON_NULL_RETURN(ovl); - - if (ovl->icon) - { - evas_object_color_set(ovl->layout, 255, 255, 255, 255); - if (!elm_layout_theme_set - (ovl->layout, "map/marker", "empty", - elm_widget_style_get((ovl->wsd)->obj))) - CRI("Failed to set layout!"); - - elm_object_part_content_set(ovl->layout, "elm.icon", ovl->icon); - } - else if (!ovl->icon && ovl->clas_icon) - { - evas_object_color_set(ovl->layout, 255, 255, 255, 255); - if (!elm_layout_theme_set - (ovl->layout, "map/marker", "empty", - elm_widget_style_get((ovl->wsd)->obj))) - CRI("Failed to set layout!"); - - elm_object_part_content_set(ovl->layout, "elm.icon", ovl->clas_icon); - } - else - { - evas_object_color_set - (ovl->layout, ovl->c.r, ovl->c.g, ovl->c.b, ovl->c.a); - if (!elm_layout_theme_set - (ovl->layout, "map/marker", "radio", - elm_widget_style_get((ovl->wsd)->obj))) - CRI("Failed to set layout!"); - } -} - -static void -_overlay_default_class_content_update(Overlay_Default *ovl, - Evas_Object *content) -{ - EINA_SAFETY_ON_NULL_RETURN(ovl); - - evas_object_del(ovl->clas_content); - ovl->clas_content = _icon_dup(content, ovl->layout); - _overlay_default_layout_update(ovl); -} - -static void -_overlay_default_icon_update(Overlay_Default *ovl, - Evas_Object *icon) -{ - EINA_SAFETY_ON_NULL_RETURN(ovl); - - if (ovl->icon == icon) return; - - evas_object_del(ovl->icon); - ovl->icon = icon; - _overlay_default_layout_update(ovl); -} - -static void -_overlay_default_class_icon_update(Overlay_Default *ovl, - Evas_Object *icon) -{ - EINA_SAFETY_ON_NULL_RETURN(ovl); - - evas_object_del(ovl->clas_icon); - ovl->clas_icon = _icon_dup(icon, ovl->layout); - _overlay_default_layout_update(ovl); -} - -static void -_overlay_default_color_update(Overlay_Default *ovl, - Color c) -{ - EINA_SAFETY_ON_NULL_RETURN(ovl); - - ovl->c = c; - _overlay_default_layout_update(ovl); -} - -static void -_overlay_default_free(Overlay_Default *ovl) -{ - EINA_SAFETY_ON_NULL_RETURN(ovl); - - evas_object_del(ovl->content); - evas_object_del(ovl->icon); - evas_object_del(ovl->clas_content); - evas_object_del(ovl->clas_icon); - evas_object_del(ovl->layout); - - free(ovl); -} - -static Overlay_Default * -_overlay_default_new(Elm_Map_Overlay *overlay, - double lon, - double lat, - Color c, - double scale) -{ - Overlay_Default *ovl; - - EINA_SAFETY_ON_NULL_RETURN_VAL(overlay, NULL); - - ovl = ELM_NEW(Overlay_Default); - ovl->wsd = overlay->wsd; - _edj_overlay_size_get(ovl->wsd, &(ovl->w), &(ovl->h)); - ovl->w *= scale; - ovl->h *= scale; - ovl->layout = elm_layout_add((ovl->wsd)->obj); - evas_object_smart_member_add(ovl->layout, ovl->wsd->pan_obj); - evas_object_stack_above(ovl->layout, ovl->wsd->sep_maps_overlays); - if (!elm_layout_theme_set(ovl->layout, "map/marker", "radio", - elm_widget_style_get((ovl->wsd)->obj))) - CRI("Failed to set layout!"); - - evas_object_event_callback_add(ovl->layout, EVAS_CALLBACK_MOUSE_DOWN, - _overlay_clicked_cb, overlay); - ovl->lon = lon; - ovl->lat = lat; - _overlay_default_color_update(ovl, c); - - return ovl; -} - -static void -_overlay_group_hide(Overlay_Group *grp) -{ - EINA_SAFETY_ON_NULL_RETURN(grp); - - if (grp->ovl) _overlay_default_hide(grp->ovl); -} - -static void -_overlay_group_show(Overlay_Group *grp) -{ - EINA_SAFETY_ON_NULL_RETURN(grp); - - if (grp->ovl) _overlay_default_show(grp->ovl); -} - -static void -_overlay_group_coord_member_update(Overlay_Group *grp, - Evas_Coord x, - Evas_Coord y, - Eina_List *members) -{ - char text[32]; - - EINA_SAFETY_ON_NULL_RETURN(grp); - - if (!grp->ovl) return; - - _overlay_default_coord_set(grp->ovl, x, y); - _coord_to_region_convert - (grp->wsd, x, y, grp->wsd->size.w, &grp->lon, &grp->lat); - - 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_icon_update(Overlay_Group *grp, - Evas_Object *icon) -{ - EINA_SAFETY_ON_NULL_RETURN(grp); - - if (grp->ovl) - _overlay_default_icon_update - (grp->ovl, _icon_dup(icon, (grp->wsd)->obj)); -} - -static void -_overlay_group_content_update(Overlay_Group *grp, - Evas_Object *content, - Elm_Map_Overlay *overlay) -{ - EINA_SAFETY_ON_NULL_RETURN(grp); - - _overlay_default_content_update - (grp->ovl, _icon_dup(content, grp->wsd->obj), overlay); - - return; -} - -static void -_overlay_group_color_update(Overlay_Group *grp, - Color c) -{ - EINA_SAFETY_ON_NULL_RETURN(grp); - - _overlay_default_color_update(grp->ovl, c); -} - -static void -_overlay_group_cb_set(Overlay_Group *grp, - Elm_Map_Overlay_Get_Cb cb, - void *data) -{ - EINA_SAFETY_ON_NULL_RETURN(grp); - - grp->overlay->cb = cb; - grp->overlay->data = data; -} - -static void -_overlay_group_free(Overlay_Group *grp) -{ - EINA_SAFETY_ON_NULL_RETURN(grp); - - free(grp->overlay); - if (grp->ovl) _overlay_default_free(grp->ovl); - eina_list_free(grp->members); - - free(grp); -} - -static Overlay_Group * -_overlay_group_new(Elm_Map_Data *sd) -{ - Overlay_Group *grp; - Color c = {0x90, 0xee, 0x90, 0xff}; - - grp = ELM_NEW(Overlay_Group); - grp->wsd = sd; - grp->overlay = ELM_NEW(Elm_Map_Overlay); // this is a virtual overlay - grp->overlay->wsd = sd; - grp->overlay->type = ELM_MAP_OVERLAY_TYPE_GROUP; - grp->overlay->ovl = grp; - grp->ovl = _overlay_default_new(grp->overlay, -1, -1, c, 2); - - return grp; -} - -static void -_overlay_class_cb_set(Overlay_Class *ovl, - Elm_Map_Overlay_Get_Cb cb, - void *data) -{ - Eina_List *l; - Elm_Map_Overlay *overlay; - - EINA_SAFETY_ON_NULL_RETURN(ovl); - - // Update class members' callbacks - EINA_LIST_FOREACH(ovl->members, l, overlay) - _overlay_group_cb_set(overlay->grp, cb, data); -} - -static void -_overlay_class_icon_update(Overlay_Class *ovl, - Evas_Object *icon) -{ - Eina_List *l; - Elm_Map_Overlay *overlay; - - EINA_SAFETY_ON_NULL_RETURN(ovl); - - if (ovl->icon == icon) return; - evas_object_del(ovl->icon); - ovl->icon = icon; - // For using proxy, it should have size and be shown but moved away to hide. - evas_object_geometry_set(icon, -9999, -9999, 32, 32); - evas_object_show(icon); - - // Update class members' class icons - EINA_LIST_FOREACH(ovl->members, l, overlay) - { - _overlay_group_icon_update(overlay->grp, icon); - - if (overlay->type == ELM_MAP_OVERLAY_TYPE_DEFAULT) - _overlay_default_class_icon_update(overlay->ovl, icon); - } -} - -static void -_overlay_class_content_update(Overlay_Class *ovl, - Evas_Object *content) -{ - Eina_List *l; - Elm_Map_Overlay *overlay; - - EINA_SAFETY_ON_NULL_RETURN(ovl); - - if (ovl->content == content) return; - evas_object_del(ovl->content); - ovl->content = content; - // For using proxy, it should have size and be shown but moved away to hide. - // content should have it's own size - evas_object_move(content, -9999, -9999); - - // Update class members' class contents - EINA_LIST_FOREACH(ovl->members, l, overlay) - { - _overlay_group_content_update(overlay->grp, content, overlay); - - if (overlay->type == ELM_MAP_OVERLAY_TYPE_DEFAULT) - _overlay_default_class_content_update(overlay->ovl, content); - } -} - -static void -_overlay_class_color_update(Overlay_Class *ovl, - Color c) -{ - Eina_List *l; - Elm_Map_Overlay *overlay; - - EINA_SAFETY_ON_NULL_RETURN(ovl); - - // Update class members' class contents - EINA_LIST_FOREACH(ovl->members, l, overlay) - _overlay_group_color_update(overlay->grp, c); -} - -static void -_overlay_class_free(Overlay_Class *clas) -{ - Eina_List *l; - Elm_Map_Overlay *overlay; - - EINA_SAFETY_ON_NULL_RETURN(clas); - - // Update class members' class contents - EINA_LIST_FOREACH(clas->members, l, overlay) - { - overlay->grp->klass = NULL; - _overlay_group_content_update(overlay->grp, NULL, NULL); - _overlay_group_icon_update(overlay->grp, NULL); - - if (overlay->type == ELM_MAP_OVERLAY_TYPE_DEFAULT) - { - _overlay_default_class_content_update(overlay->ovl, NULL); - _overlay_default_class_icon_update(overlay->ovl, NULL); - } - } - evas_object_del(clas->icon); - eina_list_free(clas->members); - - free(clas); -} - -static Overlay_Class * -_overlay_class_new(Elm_Map_Data *sd) -{ - Overlay_Class *ovl; - - ovl = ELM_NEW(Overlay_Class); - ovl->wsd = sd; - ovl->icon = NULL; - ovl->zoom_max = OVERLAY_CLASS_ZOOM_MAX; - - return ovl; -} - -static void -_overlay_bubble_coord_update(Overlay_Bubble *bubble) -{ - EINA_SAFETY_ON_NULL_RETURN(bubble); - - 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->wsd, bubble->x, bubble->y, &(bubble->x), &(bubble->y)); - _coord_to_region_convert - (bubble->wsd, bubble->x, bubble->y, bubble->wsd->size.w, - &(bubble->lon), &(bubble->lat)); - } - else - { - _region_to_coord_convert(bubble->wsd, bubble->lon, bubble->lat, - bubble->wsd->size.w, &bubble->x, &bubble->y); - } -} - -static void -_overlay_bubble_coord_get(Overlay_Bubble *bubble, - Evas_Coord *x, - Evas_Coord *y, - Evas_Coord *w, - Evas_Coord *h) -{ - EINA_SAFETY_ON_NULL_RETURN(bubble); - - if (!(bubble->pobj)) - { - if (x) *x = bubble->x; - if (y) *y = bubble->y; - if (w) *w = bubble->w; - if (h) *h = bubble->h; - } - else - { - if (x) *x = 0; - if (y) *y = 0; - if (w) *w = 0; - if (h) *h = 0; - } -} - -static Eina_Bool -_overlay_bubble_show_hide(Overlay_Bubble *bubble, - Eina_Bool visible) -{ - 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->wsd, 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); - } - return visible; -} - -static void -_overlay_bubble_free(Overlay_Bubble *bubble) -{ - EINA_SAFETY_ON_NULL_RETURN(bubble); - - evas_object_del(bubble->bx); - evas_object_del(bubble->sc); - evas_object_del(bubble->obj); - - free(bubble); -} - -static Overlay_Bubble * -_overlay_bubble_new(Elm_Map_Overlay *overlay) -{ - Evas_Coord h; - const char *s; - Overlay_Bubble *bubble; - - EINA_SAFETY_ON_NULL_RETURN_VAL(overlay, NULL); - - bubble = ELM_NEW(Overlay_Bubble); - bubble->wsd = overlay->wsd; - - bubble->obj = - edje_object_add(evas_object_evas_get((overlay->wsd)->obj)); - elm_widget_theme_object_set - ((overlay->wsd)->obj, bubble->obj, "map", "marker_bubble", - elm_widget_style_get((overlay->wsd)->obj)); - - evas_object_event_callback_add(bubble->obj, EVAS_CALLBACK_MOUSE_DOWN, - _overlay_clicked_cb, overlay); - - bubble->sc = elm_scroller_add(bubble->obj); - elm_widget_style_set(bubble->sc, "map_bubble"); - elm_scroller_content_min_limit(bubble->sc, EINA_FALSE, EINA_TRUE); - elm_scroller_policy_set - (bubble->sc, ELM_SCROLLER_POLICY_AUTO, ELM_SCROLLER_POLICY_OFF); - elm_scroller_bounce_set - (bubble->sc, _elm_config->thumbscroll_bounce_enable, EINA_FALSE); - edje_object_part_swallow(bubble->obj, "elm.swallow.content", bubble->sc); - - bubble->bx = elm_box_add(bubble->sc); - evas_object_size_hint_align_set(bubble->bx, EVAS_HINT_FILL, EVAS_HINT_FILL); - evas_object_size_hint_weight_set - (bubble->bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); - elm_box_horizontal_set(bubble->bx, EINA_TRUE); - elm_object_content_set(bubble->sc, bubble->bx); - - s = edje_object_data_get(bubble->obj, "size_w"); - if (s) bubble->w = atoi(s); - else bubble->w = 0; - - edje_object_size_min_calc(bubble->obj, NULL, &(bubble->h)); - s = edje_object_data_get(bubble->obj, "size_h"); - if (s) h = atoi(s); - else h = 0; - - if (bubble->h < h) bubble->h = h; - - bubble->lon = -1; - bubble->lat = -1; - bubble->x = -1; - bubble->y = -1; - - return bubble; -} - -static void -_overlay_route_color_update(Overlay_Route *ovl, - Color c) -{ - EINA_SAFETY_ON_NULL_RETURN(ovl); - - evas_object_color_set(ovl->obj, c.r, c.g, c.b, c.a); -} - -static void -_overlay_route_hide(Overlay_Route *ovl) -{ - EINA_SAFETY_ON_NULL_RETURN(ovl); - - evas_object_hide(ovl->obj); -} - -static void -_overlay_route_show(Overlay_Route *r) -{ - Path *p; - Eina_List *l; - Path_Node *n; - - EINA_SAFETY_ON_NULL_RETURN(r); - EINA_SAFETY_ON_NULL_RETURN(r->wsd); - - evas_object_polygon_points_clear(r->obj); - EINA_LIST_FOREACH(r->nodes, l, n) - { - p = eina_list_nth(r->paths, n->idx); - if (!p) continue; - - _region_to_coord_convert - (r->wsd, n->pos.lon, n->pos.lat, r->wsd->size.w, &p->x, &p->y); - _coord_to_canvas(r->wsd, p->x, p->y, &p->x, &p->y); - } - EINA_LIST_FOREACH(r->paths, l, p) - evas_object_polygon_point_add(r->obj, p->x - 3, p->y - 3); - - EINA_LIST_REVERSE_FOREACH(r->paths, l, p) - evas_object_polygon_point_add(r->obj, p->x + 3, p->y + 3); - - evas_object_show(r->obj); -} - -static void -_overlay_route_free(Overlay_Route *route) -{ - Path *p; - Path_Node *n; - - EINA_SAFETY_ON_NULL_RETURN(route); - - evas_object_del(route->obj); - - EINA_LIST_FREE(route->paths, p) - free(p); - - EINA_LIST_FREE(route->nodes, n) - { - eina_stringshare_del(n->pos.address); - free(n); - } - - free(route); -} - -static Overlay_Route * -_overlay_route_new(Elm_Map_Data *sd, - const Elm_Map_Route *route, - Color c) -{ - Eina_List *l; - Path_Node *n; - Overlay_Route *ovl; - - EINA_SAFETY_ON_NULL_RETURN_VAL(route, NULL); - - ovl = ELM_NEW(Overlay_Route); - ovl->wsd = sd; - ovl->obj = - evas_object_polygon_add(evas_object_evas_get(sd->obj)); - evas_object_smart_member_add(ovl->obj, sd->pan_obj); - _overlay_route_color_update(ovl, c); - - EINA_LIST_FOREACH(route->nodes, l, n) - { - Path *path; - Path_Node *node; - - node = ELM_NEW(Path_Node); - node->idx = n->idx; - node->pos.lon = n->pos.lon; - node->pos.lat = n->pos.lat; - if (n->pos.address) node->pos.address = strdup(n->pos.address); - ovl->nodes = eina_list_append(ovl->nodes, node); - - path = ELM_NEW(Path); - ovl->paths = eina_list_append(ovl->paths, path); - } - - return ovl; -} - -static void -_overlay_line_color_update(Overlay_Line *ovl, - Color c) -{ - EINA_SAFETY_ON_NULL_RETURN(ovl); - - evas_object_color_set(ovl->obj, c.r, c.g, c.b, c.a); -} - -static void -_overlay_line_hide(Overlay_Line *ovl) -{ - EINA_SAFETY_ON_NULL_RETURN(ovl); - - if (ovl->obj) evas_object_hide(ovl->obj); -} - -static void -_overlay_line_show(Overlay_Line *ovl) -{ - Evas_Coord fx, fy, tx, ty; - Elm_Map_Data *sd = ovl->wsd; - - _region_to_coord_convert(sd, ovl->flon, ovl->flat, sd->size.w, &fx, &fy); - _region_to_coord_convert(sd, ovl->tlon, ovl->tlat, sd->size.w, &tx, &ty); - _coord_to_canvas(sd, fx, fy, &fx, &fy); - _coord_to_canvas(sd, tx, ty, &tx, &ty); - evas_object_line_xy_set(ovl->obj, fx, fy, tx, ty); - evas_object_show(ovl->obj); -} - -static void -_overlay_line_free(Overlay_Line *ovl) -{ - EINA_SAFETY_ON_NULL_RETURN(ovl); - - evas_object_del(ovl->obj); - free(ovl); -} - -static Overlay_Line * -_overlay_line_new(Elm_Map_Data *sd, - double flon, - double flat, - double tlon, - double tlat, - Color c) -{ - Overlay_Line *ovl; - - ovl = ELM_NEW(Overlay_Line); - ovl->wsd = sd; - ovl->flon = flon; - ovl->flat = flat; - ovl->tlon = tlon; - ovl->tlat = tlat; - ovl->obj = - evas_object_line_add(evas_object_evas_get(sd->obj)); - evas_object_smart_member_add(ovl->obj, sd->pan_obj); - _overlay_line_color_update(ovl, c); - - return ovl; -} - -static void -_overlay_polygon_color_update(Overlay_Polygon *ovl, - Color c) -{ - EINA_SAFETY_ON_NULL_RETURN(ovl); - - evas_object_color_set(ovl->obj, c.r, c.g, c.b, c.a); -} - -static void -_overlay_polygon_hide(Overlay_Polygon *ovl) -{ - EINA_SAFETY_ON_NULL_RETURN(ovl); - - if (ovl->obj) evas_object_hide(ovl->obj); -} - -static void -_overlay_polygon_show(Overlay_Polygon *ovl) -{ - Eina_List *l; - Region *r; - Elm_Map_Data *sd; - - EINA_SAFETY_ON_NULL_RETURN(ovl); - - sd = ovl->wsd; - - evas_object_polygon_points_clear(ovl->obj); - EINA_LIST_FOREACH(ovl->regions, l, r) - { - Evas_Coord x, y; - - _region_to_coord_convert(sd, r->lon, r->lat, sd->size.w, &x, &y); - _coord_to_canvas(sd, x, y, &x, &y); - evas_object_polygon_point_add(ovl->obj, x, y); - } - evas_object_show(ovl->obj); -} - -static void -_overlay_polygon_free(Overlay_Polygon *ovl) -{ - Region *r; - - EINA_SAFETY_ON_NULL_RETURN(ovl); - - evas_object_del(ovl->obj); - - EINA_LIST_FREE(ovl->regions, r) - free(r); - - free(ovl); -} - -static Overlay_Polygon * -_overlay_polygon_new(Elm_Map_Data *sd, Color c) -{ - Overlay_Polygon *ovl; - - ovl = ELM_NEW(Overlay_Polygon); - ovl->wsd = sd; - ovl->obj = - evas_object_polygon_add(evas_object_evas_get(sd->obj)); - evas_object_smart_member_add(ovl->obj, sd->pan_obj); - _overlay_polygon_color_update(ovl, c); - - return ovl; -} - -static void -_overlay_circle_color_update(Overlay_Circle *ovl, - Color c) -{ - Evas_Object *obj; - - EINA_SAFETY_ON_NULL_RETURN(ovl); - - obj = elm_layout_edje_get(ovl->obj); - evas_object_color_set(obj, c.r, c.g, c.b, c.a); -} - -static void -_overlay_circle_hide(Overlay_Circle *ovl) -{ - EINA_SAFETY_ON_NULL_RETURN(ovl); - - if (ovl->obj) evas_object_hide(ovl->obj); -} - -static void -_overlay_circle_show(Overlay_Circle *ovl) -{ - double r; - Evas_Coord x, y; - Elm_Map_Data *sd; - - EINA_SAFETY_ON_NULL_RETURN(ovl); - - sd = ovl->wsd; - - r = (ovl->ratio) * sd->size.w; - _region_to_coord_convert(sd, ovl->lon, ovl->lat, sd->size.w, &x, &y); - _coord_to_canvas(sd, x, y, &x, &y); - _obj_place(ovl->obj, x - r, y - r, r * 2, r * 2); -} - -static void -_overlay_circle_free(Overlay_Circle *ovl) -{ - EINA_SAFETY_ON_NULL_RETURN(ovl); - - evas_object_del(ovl->obj); - free(ovl); -} - -static Overlay_Circle * -_overlay_circle_new(Elm_Map_Data *sd, - double lon, - double lat, - double radius, - Color c) -{ - Overlay_Circle *ovl; - - ovl = ELM_NEW(Overlay_Circle); - ovl->wsd = sd; - ovl->lon = lon; - ovl->lat = lat; - ovl->radius = radius; - ovl->ratio = radius / sd->size.w; - - ovl->obj = elm_layout_add(sd->obj); - evas_object_smart_member_add(ovl->obj, sd->pan_obj); - evas_object_stack_above(ovl->obj, sd->sep_maps_overlays); - if (!elm_layout_theme_set(ovl->obj, "map/circle", "base", - elm_widget_style_get(sd->obj))) - CRI("Failed to set layout!"); - - _overlay_circle_color_update(ovl, c); - - return ovl; -} - -static void -_overlay_scale_color_update(Overlay_Scale *ovl, - Color c) -{ - EINA_SAFETY_ON_NULL_RETURN(ovl); - - evas_object_color_set(ovl->obj, c.r, c.g, c.b, c.a); -} - -static void -_overlay_scale_hide(Overlay_Scale *ovl) -{ - EINA_SAFETY_ON_NULL_RETURN(ovl); - - if (ovl->obj) evas_object_hide(ovl->obj); -} - -static void -_overlay_scale_show(Overlay_Scale *ovl) -{ - double text; - Evas_Coord w; - char buf[32]; - double meter; - double lon, lat; - Elm_Map_Data *sd; - - EINA_SAFETY_ON_NULL_RETURN(ovl); - - sd = ovl->wsd; - - if ((int)(sizeof(_scale_tb)/sizeof(double)) <= sd->zoom) - { - ERR("Zoom level is too high"); - return; - } - - elm_map_region_get(sd->obj, &lon, &lat); - meter = - sd->src_tile->scale_cb(sd->obj, lon, lat, sd->zoom); - - w = (_scale_tb[sd->zoom] / meter) * (sd->zoom_detail - sd->zoom + 1); - - text = _scale_tb[sd->zoom] / 1000; - if (text < 1) snprintf(buf, sizeof(buf), "%d m", (int)(text * 1000)); - else snprintf(buf, sizeof(buf), "%d km", (int)text); - - elm_layout_text_set(ovl->obj, "elm.text", buf); - _obj_place(ovl->obj, ovl->x, ovl->y, w, ovl->h); -} - -static void -_overlay_scale_free(Overlay_Scale *ovl) -{ - EINA_SAFETY_ON_NULL_RETURN(ovl); - - evas_object_del(ovl->obj); - free(ovl); -} - -static Overlay_Scale * -_overlay_scale_new(Elm_Map_Data *sd, - Evas_Coord x, - Evas_Coord y, - Color c) -{ - const char *s; - Overlay_Scale *ovl; - - ovl = ELM_NEW(Overlay_Scale); - ovl->wsd = sd; - ovl->x = x; - ovl->y = y; - - ovl->obj = elm_layout_add(sd->obj); - evas_object_smart_member_add(ovl->obj, sd->pan_obj); - evas_object_stack_above(ovl->obj, sd->sep_maps_overlays); - if (!elm_layout_theme_set(ovl->obj, "map/scale", "base", - elm_widget_style_get(sd->obj))) - CRI("Failed to set layout!"); - - s = edje_object_data_get(elm_layout_edje_get(ovl->obj), "size_w"); - - if (s) ovl->w = atoi(s); - else ovl->w = 100; - - s = edje_object_data_get(elm_layout_edje_get(ovl->obj), "size_h"); - if (s) ovl->h = atoi(s); - else ovl->h = 60; - - _overlay_scale_color_update(ovl, c); - - return ovl; -} - -static void -_overlay_grouping(Eina_List *clas_membs, - Elm_Map_Overlay *boss) -{ - Eina_List *l; - Elm_Map_Overlay *memb; - Eina_List *grp_membs = NULL; - int sum_x = 0, sum_y = 0, cnt = 0; - Evas_Coord bx = 0, by = 0, bw = 0, bh = 0; - - EINA_SAFETY_ON_NULL_RETURN(clas_membs); - EINA_SAFETY_ON_NULL_RETURN(boss); - - if (boss->type == ELM_MAP_OVERLAY_TYPE_DEFAULT) - _overlay_default_coord_get(boss->ovl, &bx, &by, &bw, &bh); - else if (boss->type == ELM_MAP_OVERLAY_TYPE_BUBBLE) - _overlay_bubble_coord_get(boss->ovl, &bx, &by, &bw, &bh); - - EINA_LIST_FOREACH(clas_membs, l, memb) - { - Evas_Coord x = 0, y = 0, w = 0, h = 0; - - if (boss == memb || memb->grp->in) continue; - if ((memb->hide) || (memb->zoom_min > memb->wsd->zoom)) continue; - - if (memb->type == ELM_MAP_OVERLAY_TYPE_DEFAULT) - _overlay_default_coord_get(memb->ovl, &x, &y, &w, &h); - else if (memb->type == ELM_MAP_OVERLAY_TYPE_BUBBLE) - _overlay_bubble_coord_get(memb->ovl, &x, &y, &w, &h); - - if (bw <= 0 || bh <= 0 || w <= 0 || h <= 0) continue; - if (ELM_RECTS_INTERSECT(x, y, w, h, bx, by, - bw * OVERLAY_GROUPING_SCALE, - bh * OVERLAY_GROUPING_SCALE)) - { - // Join group. - memb->grp->boss = EINA_FALSE; - memb->grp->in = EINA_TRUE; - sum_x += x; - sum_y += y; - cnt++; - grp_membs = eina_list_append(grp_membs, memb); - } - } - - if (cnt >= 1) - { - // Mark as boss - boss->grp->boss = EINA_TRUE; - boss->grp->in = EINA_TRUE; - sum_x = (sum_x + bx) / (cnt + 1); - 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->wsd->group_overlays = - eina_list_append(boss->wsd->group_overlays, boss->grp->overlay); - } -} - -static void -_overlay_show(Elm_Map_Overlay *overlay) -{ - Elm_Map_Data *sd = overlay->wsd; - - if (overlay->paused) return; - if ((overlay->grp) && (overlay->grp->klass) && (overlay->grp->klass->paused)) - return; - - 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 > sd->zoom)) - overlay->visible = EINA_FALSE; - - if ((overlay->grp->klass) && - ((overlay->grp->klass->hide) || - (overlay->grp->klass->zoom_min > sd->zoom))) - overlay->visible = EINA_FALSE; - } - - switch (overlay->type) - { - 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); - break; - default: - ERR("Invalid overlay type to show: %d", overlay->type); - } -} - -static void -_copyright_place(Elm_Map_Data *sd) -{ - Evas_Coord w, h; - Evas_Coord vw, vx, vy, vh; - - _viewport_coord_get(sd, &vx, &vy, &vw, &vh); - _coord_to_canvas_no_rotation(sd, vx, vy, &vx, &vy); - evas_object_size_hint_min_get(sd->copyright, &w, &h); - _obj_place(sd->copyright, vx + vw - w, vy + vh - h, w, h); -} - -static void -_overlay_place(Elm_Map_Data *sd) -{ - Eina_List *l, *ll; - Elm_Map_Overlay *overlay; - - sd->group_overlays = eina_list_free(sd->group_overlays); - - EINA_LIST_FOREACH(sd->overlays, l, overlay) - { - // Reset groups - if (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) - _overlay_bubble_coord_update(overlay->ovl); - } - - // Classify into group boss or follower - EINA_LIST_FOREACH(sd->overlays, l, overlay) - { - Elm_Map_Overlay *boss; - Overlay_Class *clas; - - if (overlay->type != ELM_MAP_OVERLAY_TYPE_CLASS) continue; - if (overlay->hide || (overlay->zoom_min > sd->zoom)) continue; - - clas = overlay->ovl; - if (clas->zoom_max < sd->zoom) continue; - EINA_LIST_FOREACH(clas->members, ll, boss) - { - if (boss->type == ELM_MAP_OVERLAY_TYPE_CLASS) continue; - if (boss->hide || (boss->zoom_min > sd->zoom)) continue; - if (boss->grp->in) continue; - _overlay_grouping(clas->members, boss); - } - } - - // Place group overlays and overlays - EINA_LIST_FOREACH(sd->group_overlays, l, overlay) - _overlay_show(overlay); - EINA_LIST_FOREACH(sd->overlays, l, overlay) - _overlay_show(overlay); -} - -static Evas_Object * -_overlay_obj_get(const Elm_Map_Overlay *overlay) -{ - EINA_SAFETY_ON_NULL_RETURN_VAL(overlay, NULL); - - if (overlay->type == ELM_MAP_OVERLAY_TYPE_GROUP) - { - Overlay_Group *ovl = overlay->ovl; - Overlay_Default *df = ovl->ovl; - - return df->layout; - } - else if (overlay->type == ELM_MAP_OVERLAY_TYPE_DEFAULT) - { - Overlay_Default *ovl = overlay->ovl; - - return ovl->layout; - } - else - { - ERR("Not supported overlay type: %d", overlay->type); - return NULL; - } -} - -static Eina_Bool -_xml_name_attrs_dump_cb(void *data, - const char *key, - const char *value) -{ - Name_Dump *dump = (Name_Dump *)data; - - EINA_SAFETY_ON_NULL_RETURN_VAL(dump, EINA_FALSE); - EINA_SAFETY_ON_NULL_RETURN_VAL(key, EINA_FALSE); - EINA_SAFETY_ON_NULL_RETURN_VAL(value, EINA_FALSE); - - if (!strncmp(key, NOMINATIM_ATTR_LON, strlen(NOMINATIM_ATTR_LON))) - dump->lon = _elm_atof(value); - else if (!strncmp(key, NOMINATIM_ATTR_LAT, strlen(NOMINATIM_ATTR_LAT))) - dump->lat = _elm_atof(value); - else if (!strncmp(key, NOMINATIM_ATTR_ADDRESS, strlen(NOMINATIM_ATTR_ADDRESS))) - { - if (!dump->address) - dump->address = strdup(value); - } - - return EINA_TRUE; -} - -static Eina_Bool -_xml_route_dump_cb(void *data, - Eina_Simple_XML_Type type, - const char *value, - unsigned offset EINA_UNUSED, - unsigned length) -{ - Route_Dump *dump = data; - - EINA_SAFETY_ON_NULL_RETURN_VAL(dump, EINA_FALSE); - EINA_SAFETY_ON_NULL_RETURN_VAL(value, EINA_FALSE); - - switch (type) - { - case EINA_SIMPLE_XML_OPEN: - case EINA_SIMPLE_XML_OPEN_EMPTY: - { - const char *attrs; - - attrs = eina_simple_xml_tag_attributes_find(value, length); - if (!attrs) - { - if (!strncmp(value, YOURS_DISTANCE, length)) - dump->id = ROUTE_XML_DISTANCE; - else if (!strncmp(value, YOURS_DESCRIPTION, length)) - dump->id = ROUTE_XML_DESCRIPTION; - else if (!strncmp(value, YOURS_COORDINATES, length)) - dump->id = ROUTE_XML_COORDINATES; - else dump->id = ROUTE_XML_NONE; - } - } - break; - - case EINA_SIMPLE_XML_DATA: - { - char *buf = malloc(length); - - if (!buf) return EINA_FALSE; - - snprintf(buf, length, "%s", value); - if (dump->id == ROUTE_XML_DISTANCE) - { - dump->distance = _elm_atof(buf); - free(buf); - } - else if (!(dump->description) && (dump->id == ROUTE_XML_DESCRIPTION)) - dump->description = buf; - else if (dump->id == ROUTE_XML_COORDINATES) - dump->coordinates = buf; - else free(buf); - } - break; - - default: - break; - } - - return EINA_TRUE; -} - -static Eina_Bool -_xml_name_dump_cb(void *data, - Eina_Simple_XML_Type type, - const char *value, - unsigned offset EINA_UNUSED, - unsigned length) -{ - Name_Dump *dump = data; - - EINA_SAFETY_ON_NULL_RETURN_VAL(dump, EINA_FALSE); - EINA_SAFETY_ON_NULL_RETURN_VAL(value, EINA_FALSE); - - switch (type) - { - case EINA_SIMPLE_XML_OPEN: - case EINA_SIMPLE_XML_OPEN_EMPTY: - { - const char *attrs; - attrs = eina_simple_xml_tag_attributes_find(value, length); - if (attrs) - { - if (!strncmp(value, NOMINATIM_RESULT, strlen(NOMINATIM_RESULT))) - dump->id = NAME_XML_NAME; - else dump->id = NAME_XML_NONE; - - eina_simple_xml_attributes_parse - (attrs, length - (attrs - value), _xml_name_attrs_dump_cb, - dump); - } - } - break; - - case EINA_SIMPLE_XML_DATA: - { - char *buf = malloc(length + 1); - - if (!buf) return EINA_FALSE; - snprintf(buf, length + 1, "%s", value); - if (dump->id == NAME_XML_NAME) dump->address = buf; - else free(buf); - } - break; - - default: - break; - } - - return EINA_TRUE; -} - -static Eina_Bool -_xml_name_dump_list_cb(void *data, - Eina_Simple_XML_Type type, - const char *value, - unsigned offset, - unsigned length) -{ - Elm_Map_Name_List *name_list = data; - Elm_Map_Name *name; - Name_Dump dump = {0, NULL, 0.0, 0.0}; - _xml_name_dump_cb(&dump, type, value, offset, length); - if (dump.address) - { - name = calloc(1, sizeof(Elm_Map_Name)); - if (!name) return EINA_FALSE; - name->address = dump.address; - name->lon = dump.lon; - name->lat = dump.lat; - name->wsd = name_list->wsd; - name_list->names = eina_list_append(name_list->names, name); - name->wsd->names = eina_list_append(name->wsd->names, name); - } - return EINA_TRUE; -} - -static void -_kml_parse(Elm_Map_Route *r) -{ - FILE *f; - char **str; - double lon, lat; - unsigned int ele, idx; - - EINA_SAFETY_ON_NULL_RETURN(r); - EINA_SAFETY_ON_NULL_RETURN(r->fname); - - Route_Dump dump = {0, r->fname, 0.0, NULL, NULL}; - - f = fopen(r->fname, "rb"); - if (f) - { - long sz; - - fseek(f, 0, SEEK_END); - sz = ftell(f); - if (sz > 0) - { - char *buf = malloc(sz + 1); - if (buf) - { - memset(buf, 0, sz + 1); - rewind(f); - if (fread(buf, 1, sz, f) == (size_t)sz) - { - eina_simple_xml_parse - (buf, sz, EINA_TRUE, _xml_route_dump_cb, &dump); - } - free(buf); - } - } - fclose(f); - - if (!EINA_DBL_EQ(dump.distance, 0)) r->info.distance = dump.distance; - if (dump.description) - { - eina_stringshare_replace(&r->info.waypoints, dump.description); - str = eina_str_split_full(dump.description, "\n", 0, &ele); - r->info.waypoint_count = ele; - for (idx = 0; idx < ele; idx++) - { - Path_Waypoint *wp = ELM_NEW(Path_Waypoint); - - if (wp) - { - wp->wsd = r->wsd; - wp->point = eina_stringshare_add(str[idx]); - DBG("%s", str[idx]); - r->waypoint = eina_list_append(r->waypoint, wp); - } - } - if (str && str[0]) - { - free(str[0]); - free(str); - } - free(dump.description); - } - else WRN("description is not found !"); - - if (dump.coordinates) - { - eina_stringshare_replace(&r->info.nodes, dump.coordinates); - str = eina_str_split_full(dump.coordinates, "\n", 0, &ele); - r->info.node_count = ele; - for (idx = 0; idx < ele; idx++) - { - Path_Node *n = ELM_NEW(Path_Node); - - sscanf(str[idx], "%lf,%lf", &lon, &lat); - if (n) - { - n->wsd = r->wsd; - n->pos.lon = lon; - n->pos.lat = lat; - n->idx = idx; - DBG("%lf:%lf", lon, lat); - n->pos.address = NULL; - r->nodes = eina_list_append(r->nodes, n); - } - } - if (str && str[0]) - { - free(str[0]); - free(str); - } - free(dump.coordinates); - } - } -} - -static void -_name_parse(Elm_Map_Name *n) -{ - FILE *f; - - EINA_SAFETY_ON_NULL_RETURN(n); - EINA_SAFETY_ON_NULL_RETURN(n->fname); - - Name_Dump dump = {0, NULL, 0.0, 0.0}; - - f = fopen(n->fname, "rb"); - if (f) - { - long sz; - - fseek(f, 0, SEEK_END); - sz = ftell(f); - if (sz > 0) - { - char *buf = malloc(sz + 1); - if (buf) - { - memset(buf, 0, sz + 1); - rewind(f); - if (fread(buf, 1, sz, f) == (size_t)sz) - { - eina_simple_xml_parse - (buf, sz, EINA_TRUE, _xml_name_dump_cb, &dump); - } - free(buf); - } - } - fclose(f); - - if (dump.address) - { - INF("[%lf : %lf] ADDRESS : %s", n->lon, n->lat, dump.address); - n->address = dump.address; - } - n->lon = dump.lon; - n->lat = dump.lat; - } -} - -static void -_name_list_parse(Elm_Map_Name_List *nl) -{ - FILE *f; - EINA_SAFETY_ON_NULL_RETURN(nl); - EINA_SAFETY_ON_NULL_RETURN(nl->fname); - - f = fopen(nl->fname, "rb"); - if (f) - { - long sz; - - fseek(f, 0, SEEK_END); - sz = ftell(f); - if (sz > 0) - { - char *buf = malloc(sz + 1); - if (buf) - { - memset(buf, 0, sz + 1); - rewind(f); - if (fread(buf, 1, sz, f) == (size_t)sz) - { - eina_simple_xml_parse - (buf, sz, EINA_TRUE, _xml_name_dump_list_cb, nl); - } - free(buf); - } - } - fclose(f); - } -} - -static void -_route_cb(void *data, - const char *file, - int status) -{ - Elm_Map_Route *route; - Elm_Map_Data *sd; - - EINA_SAFETY_ON_NULL_RETURN(data); - EINA_SAFETY_ON_NULL_RETURN(file); - - route = data; - sd = route->wsd; - ELM_WIDGET_DATA_GET_OR_RETURN(sd->obj, wd); - - route->job = NULL; - if (status == 200) - { - sd->src_route->route_parse_cb(route); - INF("Route request success from (%lf, %lf) to (%lf, %lf)", - route->flon, route->flat, route->tlon, route->tlat); - if (route->cb) route->cb(route->data, sd->obj, route); - efl_event_callback_legacy_call - (sd->obj, ELM_MAP_EVENT_ROUTE_LOADED, NULL); - } - else - { - ERR("Route request failed: %d", status); - if (route->cb) route->cb(route->data, sd->obj, NULL); - efl_event_callback_legacy_call - (sd->obj, ELM_MAP_EVENT_ROUTE_LOADED_FAIL, NULL); - } - - edje_object_signal_emit(wd->resize_obj, - "elm,state,busy,stop", "elm"); -} - -static void -_name_cb(void *data, - const char *file, - int status) -{ - Elm_Map_Name *name; - Elm_Map_Data *sd; - - EINA_SAFETY_ON_NULL_RETURN(data); - EINA_SAFETY_ON_NULL_RETURN(file); - - name = data; - sd = name->wsd; - ELM_WIDGET_DATA_GET_OR_RETURN(sd->obj, wd); - - name->job = NULL; - if (status == 200) - { - sd->src_name->name_parse_cb(name); - INF("Name request success address:%s, lon:%lf, lat:%lf", - name->address, name->lon, name->lat); - if (name->cb) name->cb(name->data, sd->obj, name); - efl_event_callback_legacy_call - (sd->obj, ELM_MAP_EVENT_NAME_LOADED, NULL); - } - else - { - ERR("Name request failed: %d", status); - if (name->cb) name->cb(name->data, sd->obj, NULL); - efl_event_callback_legacy_call - (sd->obj, ELM_MAP_EVENT_NAME_LOADED_FAIL, NULL); - } - edje_object_signal_emit(wd->resize_obj, - "elm,state,busy,stop", "elm"); -} - -static void -_name_list_cb(void *data, - const char *file, - int status) -{ - Elm_Map_Name_List *name_list; - Elm_Map_Data *sd; - - EINA_SAFETY_ON_NULL_RETURN(data); - EINA_SAFETY_ON_NULL_RETURN(file); - - name_list = data; - sd = name_list->wsd; - ELM_WIDGET_DATA_GET_OR_RETURN(sd->obj, wd); - - name_list->job = NULL; - if (status == 200) - { - sd->src_name->name_list_parse_cb(name_list); - INF("Name List request success address"); - if (name_list->cb) - name_list->cb(name_list->data, sd->obj, - name_list->names); - efl_event_callback_legacy_call - (sd->obj, ELM_MAP_EVENT_NAME_LOADED, NULL); - } - else - { - ERR("Name List request failed: %d", status); - if (name_list->cb) - name_list->cb(name_list->data, sd->obj, NULL); - efl_event_callback_legacy_call - (sd->obj, ELM_MAP_EVENT_NAME_LOADED_FAIL, NULL); - } - - edje_object_signal_emit(wd->resize_obj, - "elm,state,busy,stop", "elm"); - free(name_list->fname); - free(name_list); -} - -static char * -_prepare_download() -{ - char fname[PATH_MAX]; - - snprintf(fname, sizeof(fname), "%s" CACHE_NAME_ROOT, - efreet_cache_home_get()); - if (!ecore_file_exists(fname)) ecore_file_mkpath(fname); - return strdup(fname); -} - -static Elm_Map_Name * -_name_request(const Evas_Object *obj, - int method, - const char *address, - double lon, - double lat, - Elm_Map_Name_Cb name_cb, - void *data) -{ - char *url; - Elm_Map_Name *name; - char *fname, fname2[PATH_MAX + 128]; - - ELM_MAP_DATA_GET(obj, sd); - EINA_SAFETY_ON_NULL_RETURN_VAL(sd->src_name, NULL); - ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd, NULL); - - fname = _prepare_download(); - url = sd->src_name->url_cb - (sd->obj, method, address, lon, lat); - if (!url) - { - ERR("Name URL is NULL"); - free(fname); - return NULL; - } - - name = ELM_NEW(Elm_Map_Name); - name->wsd = sd; - snprintf(fname2, sizeof(fname2), "%s/%d", fname, rand()); - name->fname = strdup(fname2); - name->method = method; - if (method == ELM_MAP_NAME_METHOD_SEARCH) name->address = strdup(address); - else if (method == ELM_MAP_NAME_METHOD_REVERSE) - { - name->lon = lon; - name->lat = lat; - } - name->cb = name_cb; - name->data = data; - - if (!ecore_file_download_full(url, name->fname, _name_cb, NULL, name, - &(name->job), sd->ua) || !(name->job)) - { - ERR("Can't request Name from %s to %s", url, name->fname); - free(name->address); - free(name->fname); - free(name); - free(fname); - free(url); - return NULL; - } - INF("Name requested from %s to %s", url, name->fname); - free(url); - free(fname); - - sd->names = eina_list_append(sd->names, name); - efl_event_callback_legacy_call - (sd->obj, ELM_MAP_EVENT_NAME_LOAD, name); - edje_object_signal_emit(wd->resize_obj, - "elm,state,busy,start", "elm"); - return name; -} - -static Eina_List * -_name_list_request(const Evas_Object *obj, - int method, - const char *address, - double lon, - double lat, - Elm_Map_Name_List_Cb name_cb, - void *data) -{ - char *url; - Elm_Map_Name_List *name_list; - char *fname, fname2[PATH_MAX + 128]; - - ELM_MAP_DATA_GET(obj, sd); - EINA_SAFETY_ON_NULL_RETURN_VAL(sd->src_name, NULL); - ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd, NULL); - - fname = _prepare_download(); - url = sd->src_name->url_cb - (obj, method, address, lon, lat); - if (!url) - { - ERR("Name URL is NULL"); - free(fname); - return NULL; - } - name_list = ELM_NEW(Elm_Map_Name_List); - name_list->wsd = sd; - snprintf(fname2, sizeof(fname2), "%s/%d", fname, rand()); - name_list->fname = strdup(fname2); - name_list->cb = name_cb; - name_list->data = data; - if (!ecore_file_download_full(url, name_list->fname, _name_list_cb, - NULL, name_list, - &(name_list->job), sd->ua) || !(name_list->job)) - { - ERR("Can't request Name from %s to %s", url, name_list->fname); - free(name_list->fname); - free(name_list); - free(url); - free(fname); - return NULL; - } - INF("Name requested from %s to %s", url, name_list->fname); - free(url); - free(fname); - - efl_event_callback_legacy_call - ((Eo*)obj, ELM_MAP_EVENT_NAME_LOAD, name_list->names); - edje_object_signal_emit(wd->resize_obj, - "elm,state,busy,start", "elm"); - return name_list->names; -} - -static Evas_Event_Flags -_pinch_zoom_start_cb(void *data, - void *event_info EINA_UNUSED) -{ - ELM_MAP_DATA_GET(data, sd); - - EINA_SAFETY_ON_NULL_RETURN_VAL(data, EVAS_EVENT_FLAG_NONE); - - sd->pinch_zoom = sd->zoom_detail; - ELM_SAFE_FREE(sd->long_timer, ecore_timer_del); - - return EVAS_EVENT_FLAG_NONE; -} - -static Evas_Event_Flags -_pinch_zoom_cb(void *data, - void *event_info) -{ - ELM_MAP_DATA_GET(data, sd); - - EINA_SAFETY_ON_NULL_RETURN_VAL(sd, EVAS_EVENT_FLAG_NONE); - - if (!sd->paused) - { - Elm_Gesture_Zoom_Info *ei = event_info; - - _zoom_do(sd, sd->pinch_zoom + ei->zoom - 1); - } - - return EVAS_EVENT_FLAG_NONE; -} - -static Evas_Event_Flags -_pinch_rotate_cb(void *data, - void *event_info) -{ - ELM_MAP_DATA_GET(data, sd); - - EINA_SAFETY_ON_NULL_RETURN_VAL(sd, EVAS_EVENT_FLAG_NONE); - - if (!sd->paused) - { - int x, y, w, h; - Elm_Gesture_Rotate_Info *ei = event_info; - - evas_object_geometry_get(sd->obj, &x, &y, &w, &h); - - sd->rotate.d = sd->rotate.a + ei->angle - ei->base_angle; - sd->rotate.cx = x + ((double)w * 0.5); - sd->rotate.cy = y + ((double)h * 0.5); - - evas_object_smart_changed(sd->pan_obj); - } - ELM_SAFE_FREE(sd->long_timer, ecore_timer_del); - - return EVAS_EVENT_FLAG_NONE; -} - -static Evas_Event_Flags -_pinch_rotate_end_cb(void *data, - void *event_info EINA_UNUSED) -{ - ELM_MAP_DATA_GET(data, sd); - - EINA_SAFETY_ON_NULL_RETURN_VAL(sd, EVAS_EVENT_FLAG_NONE); - - sd->rotate.a = sd->rotate.d; - - return EVAS_EVENT_FLAG_NONE; -} - -static void -_source_tile_set(Elm_Map_Data *sd, - const char *source_name) -{ - Source_Tile *s; - Eina_List *l; - - EINA_SAFETY_ON_NULL_RETURN(source_name); - - if (sd->src_tile && !strcmp(sd->src_tile->name, source_name)) - return; - - EINA_LIST_FOREACH(sd->src_tiles, l, s) - { - if (!strcmp(s->name, source_name)) - { - sd->src_tile = s; - break; - } - } - if (!l) - { - ERR("source name (%s) is not found", source_name); - return; - } - - if (sd->src_tile->zoom_max < sd->zoom) - sd->zoom = sd->src_tile->zoom_max; - else if (sd->src_tile->zoom_min > sd->zoom) - sd->zoom = sd->src_tile->zoom_min; - - if (sd->src_tile->zoom_max < sd->zoom_max) - sd->zoom_max = sd->src_tile->zoom_max; - if (sd->src_tile->zoom_min > sd->zoom_min) - sd->zoom_min = sd->src_tile->zoom_min; - - ELM_SAFE_FREE(sd->copyright, evas_object_del); - if (sd->src_tile->copyright_cb) - { - sd->copyright = sd->src_tile->copyright_cb(sd->obj); - if (sd->copyright) - { - evas_object_smart_member_add(sd->copyright, sd->pan_obj); - evas_object_stack_above(sd->copyright, sd->sep_maps_overlays); - } - } - - _grid_all_clear(sd); - _grid_all_create(sd); - _zoom_do(sd, sd->zoom); -} - -static void -_source_route_set(Elm_Map_Data *sd, - const char *source_name) -{ - Source_Route *s; - Eina_List *l; - - EINA_SAFETY_ON_NULL_RETURN(source_name); - - if (sd->src_route && !strcmp(sd->src_route->name, source_name)) - return; - - EINA_LIST_FOREACH(sd->src_routes, l, s) - { - if (!strcmp(s->name, source_name)) - { - sd->src_route = s; - break; - } - } - if (!l) - { - ERR("source name (%s) is not found", source_name); - return; - } -} - -static void -_source_name_set(Elm_Map_Data *sd, - const char *source_name) -{ - Source_Name *s; - Eina_List *l; - - EINA_SAFETY_ON_NULL_RETURN(source_name); - - if (sd->src_name && !strcmp(sd->src_name->name, source_name)) - return; - - EINA_LIST_FOREACH(sd->src_names, l, s) - { - if (!strcmp(s->name, source_name)) - { - sd->src_name = s; - break; - } - } - if (!l) - { - ERR("source name (%s) is not found", source_name); - return; - } -} - -static Eina_Bool -_source_mod_cb(Eina_Module *m, - void *data) -{ - const char *file; - Elm_Map_Data *sd = data; - char *dir; - const char *subfile; - - Elm_Map_Module_Source_Name_Func name_cb; - Elm_Map_Module_Tile_Url_Func tile_url_cb; - Elm_Map_Module_Tile_Scale_Func scale_cb; - Elm_Map_Module_Tile_Copyright_Func copyright_cb; - Elm_Map_Module_Tile_Zoom_Min_Func zoom_min; - Elm_Map_Module_Tile_Zoom_Max_Func zoom_max; - Elm_Map_Module_Tile_Geo_to_Coord_Func geo_to_coord; - Elm_Map_Module_Tile_Coord_to_Geo_Func coord_to_geo; - Elm_Map_Module_Route_Url_Func route_url_cb; - Elm_Map_Module_Name_Url_Func name_url_cb; - - EINA_SAFETY_ON_NULL_RETURN_VAL(data, EINA_FALSE); - - file = eina_module_file_get(m); - if (!file) return EINA_FALSE; - - dir = ecore_file_dir_get(file); - if (!dir) return EINA_FALSE; - subfile = ecore_file_file_get(dir); - if (!subfile) - { - free(dir); - return EINA_FALSE; - } - if (strcmp(subfile, MODULE_ARCH)) - { - free(dir); - return EINA_FALSE; - } - free(dir); - if (!eina_module_load(m)) return EINA_FALSE; - - name_cb = eina_module_symbol_get(m, "map_module_source_name_get"); - if ((!name_cb)) - { - eina_module_unload(m); - return EINA_FALSE; - } - - // Find TILE module - tile_url_cb = eina_module_symbol_get(m, "map_module_tile_url_get"); - zoom_min = eina_module_symbol_get(m, "map_module_tile_zoom_min_get"); - zoom_max = eina_module_symbol_get(m, "map_module_tile_zoom_max_get"); - geo_to_coord = eina_module_symbol_get(m, "map_module_tile_geo_to_coord"); - coord_to_geo = eina_module_symbol_get(m, "map_module_tile_coord_to_geo"); - scale_cb = eina_module_symbol_get(m, "map_module_tile_scale_get"); - copyright_cb = eina_module_symbol_get(m, "map_module_tile_copyright_get"); - if (tile_url_cb && zoom_min && zoom_max && geo_to_coord && coord_to_geo && - scale_cb) - { - INF("Map TILE module is loaded \"%s\"", file); - Source_Tile *s; - s = ELM_NEW(Source_Tile); - s->name = name_cb(); - s->url_cb = tile_url_cb; - s->zoom_min = zoom_min(); - s->zoom_max = zoom_max(); - s->geo_to_coord = geo_to_coord; - s->coord_to_geo = coord_to_geo; - s->scale_cb = scale_cb; - s->copyright_cb = copyright_cb; - sd->src_tiles = eina_list_append(sd->src_tiles, s); - } - - // Find ROUTE module - route_url_cb = eina_module_symbol_get(m, "map_module_route_url_get"); - if (route_url_cb) - { - INF("Map ROUTE module is loaded \"%s\"", file); - Source_Route *s; - s = ELM_NEW(Source_Route); - s->name = name_cb(); - s->url_cb = route_url_cb; - s->route_parse_cb = eina_module_symbol_get(m, "map_module_route_source_parse"); - if (!s->route_parse_cb) - s->route_parse_cb = _kml_parse; - sd->src_routes = eina_list_append(sd->src_routes, s); - } - - // Find NAME module - name_url_cb = eina_module_symbol_get(m, "map_module_name_url_get"); - if (name_url_cb) - { - INF("Map NAME module is loaded \"%s\"", file); - Source_Name *s; - s = ELM_NEW(Source_Name); - s->name = name_cb(); - s->url_cb = name_url_cb; - s->name_parse_cb = eina_module_symbol_get(m, "map_module_name_source_parse"); - if (!s->name_parse_cb) - s->name_parse_cb = _name_parse; - s->name_list_parse_cb = eina_module_symbol_get(m, "map_module_name_list_source_parse"); - if (!s->name_list_parse_cb) - s->name_list_parse_cb = _name_list_parse; - sd->src_names = eina_list_append(sd->src_names, s); - } - return EINA_TRUE; -} - -static void -_source_all_unload(Elm_Map_Data *sd) -{ - int idx = 0; - Source_Tile *s; - - for (idx = 0; sd->src_tile_names[idx]; idx++) - eina_stringshare_del(sd->src_tile_names[idx]); - free(sd->src_tile_names); - - for (idx = 0; sd->src_route_names[idx]; idx++) - eina_stringshare_del(sd->src_route_names[idx]); - free(sd->src_route_names); - - for (idx = 0; sd->src_name_names[idx]; idx++) - eina_stringshare_del(sd->src_name_names[idx]); - free(sd->src_name_names); - - EINA_LIST_FREE(sd->src_tiles, s) - { - eina_stringshare_del(s->name); - free(s); - } - EINA_LIST_FREE(sd->src_routes, s) - { - eina_stringshare_del(s->name); - free(s); - } - EINA_LIST_FREE(sd->src_names, s) - { - eina_stringshare_del(s->name); - free(s); - } - - eina_module_list_free(sd->src_mods); - eina_array_free(sd->src_mods); -} - -static void -_source_all_load(Elm_Map_Data *sd) -{ - Source_Tile *src_tile; - Source_Route *src_route; - Source_Name *src_name; - unsigned int idx; - Eina_List *l; - - // Load hard coded TILE source - for (idx = 0; idx < (sizeof(src_tiles) / sizeof(Source_Tile)); idx++) - { - src_tile = ELM_NEW(Source_Tile); - src_tile->name = eina_stringshare_add(src_tiles[idx].name); - src_tile->zoom_min = src_tiles[idx].zoom_min; - src_tile->zoom_max = src_tiles[idx].zoom_max; - src_tile->url_cb = src_tiles[idx].url_cb; - src_tile->geo_to_coord = src_tiles[idx].geo_to_coord; - src_tile->coord_to_geo = src_tiles[idx].coord_to_geo; - src_tile->scale_cb = src_tiles[idx].scale_cb; - src_tile->copyright_cb = src_tiles[idx].copyright_cb; - sd->src_tiles = eina_list_append(sd->src_tiles, src_tile); - } - // Load hard coded ROUTE source - for (idx = 0; idx < (sizeof(src_routes) / sizeof(Source_Route)); idx++) - { - src_route = ELM_NEW(Source_Route); - src_route->name = eina_stringshare_add(src_routes[idx].name); - src_route->url_cb = src_routes[idx].url_cb; - src_route->route_parse_cb = src_routes[idx].route_parse_cb; - sd->src_routes = eina_list_append(sd->src_routes, src_route); - } - // Load from hard coded NAME source - for (idx = 0; idx < (sizeof(src_names) / sizeof(Source_Name)); idx++) - { - src_name = ELM_NEW(Source_Name); - src_name->name = eina_stringshare_add(src_names[idx].name); - src_name->url_cb = src_names[idx].url_cb; - src_name->name_parse_cb = src_names[idx].name_parse_cb; - src_name->name_list_parse_cb = src_names[idx].name_list_parse_cb; - sd->src_names = eina_list_append(sd->src_names, src_name); - } - - // Load from modules - sd->src_mods = eina_module_list_get(sd->src_mods, MODULES_PATH, 1, - &_source_mod_cb, sd); - - // Set default source - sd->src_tile = eina_list_nth(sd->src_tiles, 0); - sd->src_route = eina_list_nth(sd->src_routes, 0); - sd->src_name = eina_list_nth(sd->src_names, 0); - - // Make name string of sources - idx = 0; - sd->src_tile_names = calloc((eina_list_count(sd->src_tiles) + 1), - sizeof(const char *)); - EINA_LIST_FOREACH(sd->src_tiles, l, src_tile) - { - eina_stringshare_replace(&sd->src_tile_names[idx], src_tile->name); - INF("source : %s", sd->src_tile_names[idx]); - idx++; - } - idx = 0; - sd->src_route_names = calloc((eina_list_count(sd->src_routes) + 1), - sizeof(const char *)); - EINA_LIST_FOREACH(sd->src_routes, l, src_route) - { - eina_stringshare_replace(&sd->src_route_names[idx], src_route->name); - INF("source : %s", sd->src_route_names[idx]); - idx++; - } - idx = 0; - sd->src_name_names = calloc((eina_list_count(sd->src_names) + 1), - sizeof(const char *)); - EINA_LIST_FOREACH(sd->src_names, l, src_name) - { - eina_stringshare_replace(&sd->src_name_names[idx], src_name->name); - INF("source : %s", sd->src_name_names[idx]); - idx++; - } -} - -static void -_zoom_mode_set(Elm_Map_Data *sd, double zoom) -{ - EINA_SAFETY_ON_NULL_RETURN(sd); - - if (sd->mode == EFL_UI_ZOOM_MODE_MANUAL) - { - if (sd->paused) _zoom_do(sd, zoom); - else _zoom_with_animation(sd, zoom, 10); - } - else - { - double diff; - Evas_Coord w, h; - Evas_Coord vw, vh; - - w = sd->size.w; - h = sd->size.h; - _viewport_coord_get(sd, NULL, NULL, &vw, &vh); - - if (sd->mode == EFL_UI_ZOOM_MODE_AUTO_FIT) - { - if ((w < vw) && (h < vh)) - { - diff = 0.01; - while ((w < vw) && (h < vh)) - { - zoom += diff; - w = pow(2.0, zoom) * sd->tsize; - h = pow(2.0, zoom) * sd->tsize; - } - } - else - { - diff = -0.01; - while ((w > vw) || (h > vh)) - { - zoom += diff; - w = pow(2.0, zoom) * sd->tsize; - h = pow(2.0, zoom) * sd->tsize; - } - zoom -= diff; - } - } - else if (sd->mode == EFL_UI_ZOOM_MODE_AUTO_FILL) - { - if ((w < vw) || (h < vh)) - { - diff = 0.01; - while ((w < vw) || (h < vh)) - { - zoom += diff; - w = pow(2.0, zoom) * sd->tsize; - h = pow(2.0, zoom) * sd->tsize; - } - } - else - { - diff = -0.01; - while ((w > vw) && (h > vh)) - { - zoom += diff; - w = pow(2.0, zoom) * sd->tsize; - h = pow(2.0, zoom) * sd->tsize; - } - zoom -= diff; - } - } - _zoom_do(sd, zoom); - } -} - -static void -_region_show_bring_in(Elm_Map_Data *wsd, double lon, double lat, Eina_Bool bring_in) -{ - int x, y, w, h; - - EINA_SAFETY_ON_NULL_RETURN(wsd); - - _region_to_coord_convert - (wsd, lon, lat, wsd->size.w, &x, &y); - _viewport_coord_get(wsd, NULL, NULL, &w, &h); - x = x - (w / 2); - y = y - (h / 2); - - if (bring_in) elm_interface_scrollable_region_bring_in(wsd->obj, x, y, w, h); - else elm_interface_scrollable_content_region_show(wsd->obj, x, y, w, h); -} - -static void -_overlays_show(Elm_Map_Data *sd, Eina_List *overlays) -{ - double max_lon, min_lon, max_lat, min_lat, lon, lat; - int zoom, zoom_max; - Evas_Coord vw, vh; - - EINA_SAFETY_ON_NULL_RETURN(sd); - EINA_SAFETY_ON_NULL_RETURN(overlays); - - _region_max_min_get(overlays, &max_lon, &min_lon, &max_lat, &min_lat); - lon = (max_lon + min_lon) / 2; - lat = (max_lat + min_lat) / 2; - - zoom = sd->src_tile->zoom_min; - _viewport_coord_get(sd, NULL, NULL, &vw, &vh); - if (sd->src_tile->zoom_max < sd->zoom_max) - zoom_max = sd->src_tile->zoom_max; - else zoom_max = sd->zoom_max; - while (zoom <= zoom_max) - { - Evas_Coord size, max_x, max_y, min_x, min_y; - - size = pow(2.0, zoom) * sd->tsize; - _region_to_coord_convert - (sd, min_lon, max_lat, size, &min_x, &max_y); - _region_to_coord_convert - (sd, max_lon, min_lat, size, &max_x, &min_y); - if ((max_x - min_x) > vw || (max_y - min_y) > vh) break; - zoom++; - } - zoom--; - - _zoom_do(sd, zoom); - _region_show_bring_in(sd, lon, lat, EINA_FALSE); -} - EOLIAN static void _elm_map_pan_elm_pan_pos_set(Eo *obj, Elm_Map_Pan_Data *psd, Evas_Coord x, Evas_Coord y) { @@ -3915,74 +163,34 @@ _elm_map_pan_elm_pan_content_size_get(const Eo *obj EINA_UNUSED, Elm_Map_Pan_Dat } EOLIAN static void -_elm_map_pan_efl_gfx_entity_size_set(Eo *obj, Elm_Map_Pan_Data *psd, Eina_Size2D sz) +_elm_map_pan_efl_gfx_entity_size_set(Eo *obj, Elm_Map_Pan_Data *psd EINA_UNUSED, Eina_Size2D sz) { - if (_evas_object_intercept_call(obj, EVAS_OBJECT_INTERCEPT_CB_RESIZE, 0, sz.w, sz.h)) - return; - + if (_evas_object_intercept_call(obj, EVAS_OBJECT_INTERCEPT_CB_RESIZE, 0, sz.w, sz.h)) return; efl_gfx_entity_size_set(efl_super(obj, MY_PAN_CLASS), sz); - - _sizing_eval(psd->wsd->obj); - efl_ui_zoom_mode_set(psd->wobj, psd->wsd->mode); evas_object_smart_changed(obj); } EOLIAN static void -_elm_map_pan_efl_canvas_group_group_calculate(Eo *obj, Elm_Map_Pan_Data *psd) +_elm_map_pan_efl_canvas_group_group_calculate(Eo *obj, Elm_Map_Pan_Data *psd EINA_UNUSED) { - Evas_Coord w, h; - efl_canvas_group_need_recalculate_set(obj, EINA_FALSE); - evas_object_geometry_get(obj, NULL, NULL, &w, &h); - if (w <= 0 || h <= 0) return; - - _grid_place(psd->wsd); - if (psd->wsd->copyright) - _copyright_place(psd->wsd); - _overlay_place(psd->wsd); - _track_place(psd->wsd); - _calc_job(psd->wsd); } EOLIAN static void _elm_map_pan_efl_gfx_entity_position_set(Eo *obj, Elm_Map_Pan_Data *_pd EINA_UNUSED, Eina_Position2D pos) { - if (_evas_object_intercept_call(obj, EVAS_OBJECT_INTERCEPT_CB_MOVE, 0, pos.x, pos.y)) - return; - + if (_evas_object_intercept_call(obj, EVAS_OBJECT_INTERCEPT_CB_MOVE, 0, pos.x, pos.y)) return; efl_gfx_entity_position_set(efl_super(obj, MY_PAN_CLASS), pos); evas_object_smart_changed(obj); } EOLIAN static Eina_Bool -_elm_map_efl_ui_focus_object_on_focus_update(Eo *obj, Elm_Map_Data *_pd EINA_UNUSED) -{ - ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd, EINA_FALSE); - Eina_Bool int_ret = EINA_FALSE; - - int_ret = efl_ui_focus_object_on_focus_update(efl_super(obj, MY_CLASS)); - if (!int_ret) return EINA_FALSE; - - if (efl_ui_focus_object_focus_get(obj)) - { - edje_object_signal_emit - (wd->resize_obj, "elm,action,focus", "elm"); - evas_object_focus_set(wd->resize_obj, EINA_TRUE); - } - else - { - edje_object_signal_emit - (wd->resize_obj, "elm,action,unfocus", "elm"); - evas_object_focus_set(wd->resize_obj, EINA_FALSE); - } - - return EINA_TRUE; -} +_elm_map_efl_ui_focus_object_on_focus_update(Eo *obj EINA_UNUSED, Elm_Map_Data *_pd EINA_UNUSED) +{ return EINA_FALSE; } EOLIAN static void -_elm_map_pan_efl_object_destructor(Eo *obj, Elm_Map_Pan_Data *psd) +_elm_map_pan_efl_object_destructor(Eo *obj, Elm_Map_Pan_Data *psd EINA_UNUSED) { - efl_data_unref(psd->wobj, psd->wsd); efl_destructor(efl_super(obj, MY_PAN_CLASS)); } @@ -3995,303 +203,48 @@ _elm_map_pan_class_constructor(Efl_Class *klass) #include "elm_map_pan_eo.c" EOLIAN static Eina_Error -_elm_map_efl_ui_widget_theme_apply(Eo *obj, Elm_Map_Data *sd EINA_UNUSED) -{ - ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd, EFL_UI_THEME_APPLY_ERROR_GENERIC); - Eina_Error int_ret = EFL_UI_THEME_APPLY_ERROR_GENERIC; - int_ret = efl_ui_widget_theme_apply(efl_super(obj, MY_CLASS)); - if (int_ret == EFL_UI_THEME_APPLY_ERROR_GENERIC) return int_ret; - - elm_widget_theme_object_set - (obj, wd->resize_obj, "map", "base", elm_widget_style_get(obj)); - elm_interface_scrollable_reset_signals(obj); - _sizing_eval(obj); - - return int_ret; -} +_elm_map_efl_ui_widget_theme_apply(Eo *obj EINA_UNUSED, Elm_Map_Data *sd EINA_UNUSED) +{ return 0; } static Eina_Bool -_key_action_move(Evas_Object *obj, const char *params) -{ - const char *dir = params; - - Evas_Coord vh; - Evas_Coord x, y; - Evas_Coord step_x, step_y, page_x, page_y; - - elm_interface_scrollable_content_pos_get(obj, &x, &y); - elm_interface_scrollable_step_size_get(obj, &step_x, &step_y); - elm_interface_scrollable_page_size_get(obj, &page_x, &page_y); - elm_interface_scrollable_content_viewport_geometry_get - (obj, NULL, NULL, NULL, &vh); - - if (!strcmp(dir, "left")) - { - x -= step_x; - } - else if (!strcmp(dir, "right")) - { - x += step_x; - } - else if (!strcmp(dir, "up")) - { - y -= step_y; - } - else if (!strcmp(dir, "down")) - { - y += step_y; - } - else if (!strcmp(dir, "prior")) - { - if (page_y < 0) - y -= -(page_y * vh) / 100; - else - y -= page_y; - } - else if (!strcmp(dir, "next")) - { - if (page_y < 0) - y += -(page_y * vh) / 100; - else - y += page_y; - } - else return EINA_FALSE; - - elm_interface_scrollable_content_pos_set(obj, x, y, EINA_TRUE); - return EINA_TRUE; -} - -static Eina_Bool -_key_action_zoom(Evas_Object *obj, const char *params) -{ - ELM_MAP_DATA_GET(obj, sd); - const char *dir = params; - - if (!strcmp(dir, "in")) - { - _zoom_with_animation(sd, sd->zoom + 1, 10); - } - else if (!strcmp(dir, "out")) - { - _zoom_with_animation(sd, sd->zoom - 1, 10); - } - else return EINA_FALSE; - - return EINA_TRUE; -} +_key_action_move(Evas_Object *obj EINA_UNUSED, const char *params EINA_UNUSED) +{ return EINA_TRUE; } EOLIAN static void -_elm_map_efl_canvas_group_group_add(Eo *obj, Elm_Map_Data *priv) -{ - Evas_Coord minw, minh; - Elm_Map_Pan_Data *pan_data; - Evas_Object *edje; - - edje = edje_object_add(evas_object_evas_get(obj)); - elm_widget_resize_object_set(obj, edje); - - efl_canvas_group_add(efl_super(obj, MY_CLASS)); - - elm_widget_theme_object_set - (obj, edje, "map", "base", elm_widget_style_get(obj)); - - priv->hit_rect = evas_object_rectangle_add(evas_object_evas_get(obj)); - evas_object_smart_member_add(priv->hit_rect, obj); - elm_widget_sub_object_add(obj, priv->hit_rect); - - /* common scroller hit rectangle setup */ - evas_object_color_set(priv->hit_rect, 0, 0, 0, 0); - evas_object_show(priv->hit_rect); - evas_object_repeat_events_set(priv->hit_rect, EINA_TRUE); - - elm_widget_can_focus_set(obj, EINA_TRUE); - - evas_object_event_callback_add - (obj, EVAS_CALLBACK_MOUSE_DOWN, _mouse_down_cb, obj); - evas_object_event_callback_add - (obj, EVAS_CALLBACK_MOUSE_UP, _mouse_up_cb, obj); - evas_object_event_callback_add - (obj, EVAS_CALLBACK_MOUSE_WHEEL, _mouse_wheel_cb, obj); - - elm_interface_scrollable_objects_set(obj, edje, priv->hit_rect); - elm_interface_scrollable_wheel_disabled_set(obj, EINA_TRUE); - elm_interface_scrollable_bounce_allow_set(obj, _elm_config->thumbscroll_bounce_enable, _elm_config->thumbscroll_bounce_enable); - elm_interface_scrollable_single_direction_set(obj, ELM_SCROLLER_SINGLE_DIRECTION_NONE); - - evas_object_event_callback_add(obj, EVAS_CALLBACK_CHANGED_SIZE_HINTS, - _changed_size_hints_cb, obj); - - elm_interface_scrollable_animate_start_cb_set(obj, _scroll_animate_start_cb); - elm_interface_scrollable_animate_stop_cb_set(obj, _scroll_animate_stop_cb); - elm_interface_scrollable_scroll_cb_set(obj, _scroll_cb); - - priv->pan_obj = efl_add(MY_PAN_CLASS, obj); - pan_data = efl_data_scope_get(priv->pan_obj, MY_PAN_CLASS); - efl_data_ref(obj, MY_CLASS); - pan_data->wobj = obj; - pan_data->wsd = priv; - - elm_interface_scrollable_extern_pan_set(obj, priv->pan_obj); - - edje_object_size_min_calc(edje, &minw, &minh); - evas_object_size_hint_min_set(obj, minw, minh); - - priv->g_layer = elm_gesture_layer_add(obj); - if (!priv->g_layer) - ERR("elm_gesture_layer_add() failed"); - - elm_gesture_layer_attach(priv->g_layer, obj); - elm_gesture_layer_cb_set - (priv->g_layer, ELM_GESTURE_ZOOM, ELM_GESTURE_STATE_START, - _pinch_zoom_start_cb, obj); - elm_gesture_layer_cb_set - (priv->g_layer, ELM_GESTURE_ZOOM, ELM_GESTURE_STATE_MOVE, - _pinch_zoom_cb, obj); - elm_gesture_layer_cb_set - (priv->g_layer, ELM_GESTURE_ROTATE, ELM_GESTURE_STATE_MOVE, - _pinch_rotate_cb, obj); - elm_gesture_layer_cb_set - (priv->g_layer, ELM_GESTURE_ROTATE, ELM_GESTURE_STATE_END, - _pinch_rotate_end_cb, obj); - elm_gesture_layer_cb_set - (priv->g_layer, ELM_GESTURE_ROTATE, ELM_GESTURE_STATE_ABORT, - _pinch_rotate_end_cb, obj); - - priv->sep_maps_overlays = - evas_object_rectangle_add(evas_object_evas_get(obj)); - elm_widget_sub_object_add(obj, priv->sep_maps_overlays); - evas_object_smart_member_add(priv->sep_maps_overlays, priv->pan_obj); - - priv->map = evas_map_new(EVAS_MAP_POINT); - - _source_all_load(priv); - priv->zoom_min = priv->src_tile->zoom_min; - priv->zoom_max = priv->src_tile->zoom_max; - // FIXME: Tile Provider is better to provide tile size! - priv->tsize = DEFAULT_TILE_SIZE; - - priv->id = ((int)getpid() << 16) | id_num; - id_num++; - _grid_all_create(priv); - - priv->mode = EFL_UI_ZOOM_MODE_MANUAL; - - if (!elm_need_efreet()) - ERR("Efreet initialization failed!"); - - if (!ecore_file_download_protocol_available("http://")) - ERR("Ecore must be built with curl support for the map widget!"); - - if (priv->src_tile->copyright_cb) - { - priv->copyright = priv->src_tile->copyright_cb(obj); - if (priv->copyright) - { - evas_object_smart_member_add(priv->copyright, priv->pan_obj); - evas_object_stack_above(priv->copyright, priv->sep_maps_overlays); - } - } -} +_elm_map_efl_canvas_group_group_add(Eo *obj EINA_UNUSED, Elm_Map_Data *priv EINA_UNUSED) +{ } EOLIAN static void -_elm_map_efl_object_invalidate(Eo *obj, Elm_Map_Data *sd) +_elm_map_efl_object_invalidate(Eo *obj, Elm_Map_Data *sd EINA_UNUSED) { - Evas_Object *track; - - EINA_LIST_FREE(sd->track, track) - evas_object_del(track); - - ELM_SAFE_FREE(sd->copyright, evas_object_del); - - // pan_obj was created with efl_add and will die after invalidate. - // Technically it will bring down all the object above, and there is - // no need to explicitely destroy them, but we were doing that - // explicitely in the past, so keep it explicit. - sd->pan_obj = NULL; - efl_invalidate(efl_super(obj, MY_CLASS)); } EOLIAN static void -_elm_map_efl_canvas_group_group_del(Eo *obj, Elm_Map_Data *sd) +_elm_map_efl_canvas_group_group_del(Eo *obj, Elm_Map_Data *sd EINA_UNUSED) { - Elm_Map_Route *r; - Elm_Map_Name *na; - Eina_List *l, *ll; - Elm_Map_Overlay *overlay; - - EINA_LIST_FOREACH_SAFE(sd->routes, l, ll, r) - elm_map_route_del(r); - - eina_list_free(sd->routes); - - EINA_LIST_FOREACH_SAFE(sd->names, l, ll, na) - elm_map_name_del(na); - - eina_list_free(sd->names); - - EINA_LIST_FOREACH_SAFE(sd->overlays, l, ll, overlay) - elm_map_overlay_del(overlay); - - eina_list_free(sd->overlays); - eina_list_free(sd->group_overlays); - eina_list_free(sd->all_overlays); - - ecore_timer_del(sd->scr_timer); - ecore_timer_del(sd->long_timer); - eina_stringshare_del(sd->user_agent); - eina_hash_free(sd->ua); - ecore_timer_del(sd->zoom_timer); - _zoom_animator_set(sd, NULL); - - _grid_all_clear(sd); - // Removal of download list should be after grid clear. - ecore_idler_del(sd->download_idler); - eina_list_free(sd->download_list); - - _source_all_unload(sd); - - { - char buf[4096]; - - snprintf(buf, sizeof(buf), "%s" CACHE_ROOT, efreet_cache_home_get()); - ecore_file_recursive_rm(buf); - } - - ecore_timer_del(sd->loaded_timer); - if (sd->map) evas_map_free(sd->map); - efl_canvas_group_del(efl_super(obj, MY_CLASS)); } EOLIAN static void -_elm_map_efl_gfx_entity_position_set(Eo *obj, Elm_Map_Data *sd, Eina_Position2D pos) +_elm_map_efl_gfx_entity_position_set(Eo *obj, Elm_Map_Data *sd EINA_UNUSED, Eina_Position2D pos) { - if (_evas_object_intercept_call(obj, EVAS_OBJECT_INTERCEPT_CB_MOVE, 0, pos.x, pos.y)) - return; - + if (_evas_object_intercept_call(obj, EVAS_OBJECT_INTERCEPT_CB_MOVE, 0, pos.x, pos.y)) return; efl_gfx_entity_position_set(efl_super(obj, MY_CLASS), pos); - efl_gfx_entity_position_set(sd->hit_rect, pos); + evas_object_smart_changed(obj); } EOLIAN static void -_elm_map_efl_gfx_entity_size_set(Eo *obj, Elm_Map_Data *sd, Eina_Size2D sz) +_elm_map_efl_gfx_entity_size_set(Eo *obj, Elm_Map_Data *sd EINA_UNUSED, Eina_Size2D sz) { - if (_evas_object_intercept_call(obj, EVAS_OBJECT_INTERCEPT_CB_RESIZE, 0, sz.w, sz.h)) - return; - + if (_evas_object_intercept_call(obj, EVAS_OBJECT_INTERCEPT_CB_RESIZE, 0, sz.w, sz.h)) return; efl_gfx_entity_size_set(efl_super(obj, MY_CLASS), sz); - efl_gfx_entity_size_set(sd->hit_rect, sz); + evas_object_smart_changed(obj); } EOLIAN static void -_elm_map_efl_canvas_group_group_member_add(Eo *obj, Elm_Map_Data *sd, Evas_Object *member) -{ - efl_canvas_group_member_add(efl_super(obj, MY_CLASS), member); - - if (sd->hit_rect) - evas_object_raise(sd->hit_rect); -} +_elm_map_efl_canvas_group_group_member_add(Eo *obj EINA_UNUSED, Elm_Map_Data *sd EINA_UNUSED, Evas_Object *member EINA_UNUSED) +{ } EAPI Evas_Object * elm_map_add(Evas_Object *parent) @@ -4310,1380 +263,384 @@ _elm_map_efl_object_constructor(Eo *obj, Elm_Map_Data *sd) evas_object_smart_callbacks_descriptions_set(obj, _smart_callbacks); efl_access_object_role_set(obj, EFL_ACCESS_ROLE_IMAGE_MAP); legacy_object_focus_handle(obj); - _zoom_do(sd, 0); return obj; } EOLIAN static double -_elm_map_efl_ui_zoom_zoom_level_get(const Eo *obj EINA_UNUSED, Elm_Map_Data *sd) -{ - return sd->zoom; -} +_elm_map_efl_ui_zoom_zoom_level_get(const Eo *obj EINA_UNUSED, Elm_Map_Data *sd EINA_UNUSED) +{ return 0; } EOLIAN static void -_elm_map_efl_ui_zoom_zoom_level_set(Eo *obj, Elm_Map_Data *sd, double zoom) -{ - ELM_MAP_CHECK(obj); - EINA_SAFETY_ON_NULL_RETURN(sd->src_tile); - - if (sd->mode != EFL_UI_ZOOM_MODE_MANUAL) return; - if (zoom < 0) zoom = 0; - if (EINA_DBL_EQ(sd->zoom, zoom)) return; - - sd->calc_job.zoom = zoom; - sd->calc_job.zoom_mode_set = _zoom_mode_set; - - evas_object_smart_changed(sd->pan_obj); -} +_elm_map_efl_ui_zoom_zoom_level_set(Eo *obj EINA_UNUSED, Elm_Map_Data *sd EINA_UNUSED, double zoom EINA_UNUSED) +{ } EAPI void -elm_map_zoom_set(Eo *obj, int zoom) -{ - efl_ui_zoom_level_set(obj, zoom); -} +elm_map_zoom_set(Eo *obj EINA_UNUSED, int zoom EINA_UNUSED) +{ } EAPI int -elm_map_zoom_get(const Eo *obj) -{ - return efl_ui_zoom_level_get(obj); -} +elm_map_zoom_get(const Eo *obj EINA_UNUSED) +{ return 0; } EOLIAN static Efl_Ui_Zoom_Mode -_elm_map_efl_ui_zoom_zoom_mode_get(const Eo *obj EINA_UNUSED, Elm_Map_Data *sd) -{ - return sd->mode; -} +_elm_map_efl_ui_zoom_zoom_mode_get(const Eo *obj EINA_UNUSED, Elm_Map_Data *sd EINA_UNUSED) +{ return 0; } EOLIAN static void -_elm_map_efl_ui_zoom_zoom_mode_set(Eo *obj EINA_UNUSED, Elm_Map_Data *sd, Efl_Ui_Zoom_Mode mode) -{ - if ((mode == EFL_UI_ZOOM_MODE_MANUAL) && (sd->mode == !!mode)) return; - - sd->mode = mode; - sd->calc_job.zoom = sd->zoom_detail; - sd->calc_job.zoom_mode_set = _zoom_mode_set; - - evas_object_smart_changed(sd->pan_obj); -} - -static inline void -_convert_map_zoom_mode(Elm_Map_Zoom_Mode *legacy_mode, Efl_Ui_Zoom_Mode *mode, Eina_Bool to_legacy) -{ - #define CONVERT(LEGACY_MODE, NEW_MODE) \ - if (to_legacy && *mode == NEW_MODE) \ - { \ - *legacy_mode =LEGACY_MODE; \ - return; \ - } \ - if (!to_legacy && *legacy_mode == LEGACY_MODE) \ - { \ - *mode = NEW_MODE; \ - return; \ - } \ - - CONVERT(ELM_MAP_ZOOM_MODE_MANUAL, EFL_UI_ZOOM_MODE_MANUAL) - CONVERT(ELM_MAP_ZOOM_MODE_AUTO_FIT, EFL_UI_ZOOM_MODE_AUTO_FIT) - CONVERT(ELM_MAP_ZOOM_MODE_AUTO_FILL, EFL_UI_ZOOM_MODE_AUTO_FILL) - CONVERT(ELM_MAP_ZOOM_MODE_LAST, EFL_UI_ZOOM_MODE_LAST) - CONVERT(ELM_MAP_ZOOM_MODE_LAST, EFL_UI_ZOOM_MODE_AUTO_FIT_IN) - - #undef CONVERT -} +_elm_map_efl_ui_zoom_zoom_mode_set(Eo *obj EINA_UNUSED, Elm_Map_Data *sd EINA_UNUSED, Efl_Ui_Zoom_Mode mode EINA_UNUSED) +{ } EAPI void -elm_map_zoom_mode_set(Eo *obj, Elm_Map_Zoom_Mode mode) -{ - Efl_Ui_Zoom_Mode new_mode = EFL_UI_ZOOM_MODE_MANUAL; - - _convert_map_zoom_mode(&mode, &new_mode, EINA_FALSE); - - efl_ui_zoom_mode_set(obj, new_mode); -} +elm_map_zoom_mode_set(Eo *obj EINA_UNUSED, Elm_Map_Zoom_Mode mode EINA_UNUSED) +{ } EAPI Elm_Map_Zoom_Mode -elm_map_zoom_mode_get(const Eo *obj) -{ - Efl_Ui_Zoom_Mode new_mode = efl_ui_zoom_mode_get(obj); - Elm_Map_Zoom_Mode mode = ELM_MAP_ZOOM_MODE_MANUAL; - - _convert_map_zoom_mode(&mode, &new_mode, EINA_TRUE); - - return mode; -} +elm_map_zoom_mode_get(const Eo *obj EINA_UNUSED) +{ return 0; } EOLIAN static void -_elm_map_zoom_max_set(Eo *obj EINA_UNUSED, Elm_Map_Data *sd, int zoom) -{ - EINA_SAFETY_ON_NULL_RETURN(sd->src_tile); - - sd->zoom_max = zoom; -} +_elm_map_zoom_max_set(Eo *obj EINA_UNUSED, Elm_Map_Data *sd EINA_UNUSED, int zoom EINA_UNUSED) +{ } EOLIAN static int -_elm_map_zoom_max_get(const Eo *obj EINA_UNUSED, Elm_Map_Data *sd) -{ - EINA_SAFETY_ON_NULL_RETURN_VAL(sd->src_tile, -1); - - return sd->zoom_max; -} +_elm_map_zoom_max_get(const Eo *obj EINA_UNUSED, Elm_Map_Data *sd EINA_UNUSED) +{ return 0; } EOLIAN static void -_elm_map_zoom_min_set(Eo *obj EINA_UNUSED, Elm_Map_Data *sd, int zoom) -{ - EINA_SAFETY_ON_NULL_RETURN(sd->src_tile); - - sd->zoom_min = zoom; -} +_elm_map_zoom_min_set(Eo *obj EINA_UNUSED, Elm_Map_Data *sd EINA_UNUSED, int zoom EINA_UNUSED) +{ } EOLIAN static int -_elm_map_zoom_min_get(const Eo *obj EINA_UNUSED, Elm_Map_Data *sd) -{ - EINA_SAFETY_ON_NULL_RETURN_VAL(sd->src_tile, -1); - - return sd->zoom_min; -} +_elm_map_zoom_min_get(const Eo *obj EINA_UNUSED, Elm_Map_Data *sd EINA_UNUSED) +{ return 0; } EOLIAN static void -_elm_map_map_region_bring_in(Eo *obj EINA_UNUSED, Elm_Map_Data *sd, double lon, double lat) -{ - sd->calc_job.bring_in = EINA_TRUE; - sd->calc_job.lon = lon; - sd->calc_job.lat = lat; - sd->calc_job.region_show_bring_in = _region_show_bring_in; - - evas_object_smart_changed(sd->pan_obj); -} +_elm_map_map_region_bring_in(Eo *obj EINA_UNUSED, Elm_Map_Data *sd EINA_UNUSED, double lon EINA_UNUSED, double lat EINA_UNUSED) +{ } EOLIAN static void -_elm_map_region_show(Eo *obj EINA_UNUSED, Elm_Map_Data *sd, double lon, double lat) -{ - sd->calc_job.bring_in = EINA_FALSE; - sd->calc_job.lon = lon; - sd->calc_job.lat = lat; - sd->calc_job.region_show_bring_in = _region_show_bring_in; - - evas_object_smart_changed(sd->pan_obj); -} +_elm_map_region_show(Eo *obj EINA_UNUSED, Elm_Map_Data *sd EINA_UNUSED, double lon EINA_UNUSED, double lat EINA_UNUSED) +{ } EOLIAN static void -_elm_map_region_zoom_bring_in(Eo *obj EINA_UNUSED, Elm_Map_Data *sd, int zoom, double lon, double lat) -{ - _zoom_bring_with_animation(sd, zoom, lon, lat, ZOOM_ANIM_CNT, ZOOM_BRING_CNT); -} +_elm_map_region_zoom_bring_in(Eo *obj EINA_UNUSED, Elm_Map_Data *sd EINA_UNUSED, int zoom EINA_UNUSED, double lon EINA_UNUSED, double lat EINA_UNUSED) +{ } EOLIAN static void -_elm_map_region_get(const Eo *obj EINA_UNUSED, Elm_Map_Data *sd, double *lon, double *lat) -{ - double tlon, tlat; - Evas_Coord vx = 0, vy = 0, vw = 0, vh = 0; - - _viewport_coord_get(sd, &vx, &vy, &vw, &vh); - _coord_to_region_convert - (sd, vx + vw / 2, vy + vh / 2, sd->size.w, &tlon, &tlat); - if (lon) *lon = tlon; - if (lat) *lat = tlat; -} +_elm_map_region_get(const Eo *obj EINA_UNUSED, Elm_Map_Data *sd EINA_UNUSED, double *lon EINA_UNUSED, double *lat EINA_UNUSED) +{ } EOLIAN static void -_elm_map_efl_ui_zoom_zoom_animation_set(Eo *obj, Elm_Map_Data *sd, Eina_Bool paused) -{ - ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd); - - if (sd->paused == !!paused) return; - sd->paused = !!paused; - if (sd->paused) - { - if (_zoom_animator_set(sd, NULL)) - { - _zoom_do(sd, sd->zoom); - } - edje_object_signal_emit(wd->resize_obj, - "elm,state,busy,stop", "elm"); - } - else - { - if (sd->download_num >= 1) - edje_object_signal_emit(wd->resize_obj, - "elm,state,busy,start", "elm"); - } -} +_elm_map_efl_ui_zoom_zoom_animation_set(Eo *obj EINA_UNUSED, Elm_Map_Data *sd EINA_UNUSED, Eina_Bool paused EINA_UNUSED) +{ } EOLIAN static Eina_Bool -_elm_map_efl_ui_zoom_zoom_animation_get(const Eo *obj EINA_UNUSED, Elm_Map_Data *sd) -{ - return sd->paused; -} +_elm_map_efl_ui_zoom_zoom_animation_get(const Eo *obj EINA_UNUSED, Elm_Map_Data *sd EINA_UNUSED) +{ return EINA_FALSE; } EOLIAN static void -_elm_map_map_rotate_set(Eo *obj EINA_UNUSED, Elm_Map_Data *sd, double degree, Evas_Coord cx, Evas_Coord cy) -{ - sd->rotate.d = degree; - sd->rotate.cx = cx; - sd->rotate.cy = cy; - - evas_object_smart_changed(sd->pan_obj); -} +_elm_map_map_rotate_set(Eo *obj EINA_UNUSED, Elm_Map_Data *sd EINA_UNUSED, double degree EINA_UNUSED, Evas_Coord cx EINA_UNUSED, Evas_Coord cy EINA_UNUSED) +{ } EOLIAN static void -_elm_map_map_rotate_get(const Eo *obj EINA_UNUSED, Elm_Map_Data *sd, double *degree, Evas_Coord *cx, Evas_Coord *cy) -{ - if (degree) *degree = sd->rotate.d; - if (cx) *cx = sd->rotate.cx; - if (cy) *cy = sd->rotate.cy; -} +_elm_map_map_rotate_get(const Eo *obj EINA_UNUSED, Elm_Map_Data *sd EINA_UNUSED, double *degree EINA_UNUSED, Evas_Coord *cx EINA_UNUSED, Evas_Coord *cy EINA_UNUSED) +{ } EOLIAN static void -_elm_map_elm_interface_scrollable_wheel_disabled_set(Eo *obj, Elm_Map_Data *sd, Eina_Bool disabled) -{ - if ((!sd->wheel_disabled) && (disabled)) - evas_object_event_callback_del_full - (obj, EVAS_CALLBACK_MOUSE_WHEEL, _mouse_wheel_cb, obj); - else if ((sd->wheel_disabled) && (!disabled)) - evas_object_event_callback_add - (obj, EVAS_CALLBACK_MOUSE_WHEEL, _mouse_wheel_cb, obj); - sd->wheel_disabled = !!disabled; - elm_interface_scrollable_wheel_disabled_set(efl_super(obj, ELM_MAP_CLASS), disabled); -} +_elm_map_elm_interface_scrollable_wheel_disabled_set(Eo *obj EINA_UNUSED, Elm_Map_Data *sd EINA_UNUSED, Eina_Bool disabled EINA_UNUSED) +{ } EOLIAN static void -_elm_map_tile_load_status_get(const Eo *obj EINA_UNUSED, Elm_Map_Data *sd, int *try_num, int *finish_num) -{ - if (try_num) *try_num = sd->try_num; - if (finish_num) *finish_num = sd->finish_num; -} +_elm_map_tile_load_status_get(const Eo *obj EINA_UNUSED, Elm_Map_Data *sd EINA_UNUSED, int *try_num EINA_UNUSED, int *finish_num EINA_UNUSED) +{ } EOLIAN static void -_elm_map_canvas_to_region_convert(const Eo *obj EINA_UNUSED, Elm_Map_Data *sd, Evas_Coord x, Evas_Coord y, double *lon, double *lat) -{ - EINA_SAFETY_ON_NULL_RETURN(lon); - EINA_SAFETY_ON_NULL_RETURN(lat); - - _canvas_to_coord(sd, x, y, &x, &y); - _coord_to_region_convert(sd, x, y, sd->size.w, lon, lat); -} +_elm_map_canvas_to_region_convert(const Eo *obj EINA_UNUSED, Elm_Map_Data *sd EINA_UNUSED, Evas_Coord x EINA_UNUSED, Evas_Coord y EINA_UNUSED, double *lon EINA_UNUSED, double *lat EINA_UNUSED) +{ } EOLIAN static void -_elm_map_region_to_canvas_convert(const Eo *obj EINA_UNUSED, Elm_Map_Data *sd, double lon, double lat, Evas_Coord *x, Evas_Coord *y) -{ - EINA_SAFETY_ON_NULL_RETURN(x); - EINA_SAFETY_ON_NULL_RETURN(y); - - _region_to_coord_convert(sd, lon, lat, sd->size.w, x, y); - _coord_to_canvas(sd, *x, *y, x, y); -} +_elm_map_region_to_canvas_convert(const Eo *obj EINA_UNUSED, Elm_Map_Data *sd EINA_UNUSED, double lon EINA_UNUSED, double lat EINA_UNUSED, Evas_Coord *x EINA_UNUSED, Evas_Coord *y EINA_UNUSED) +{ } EOLIAN static void -_elm_map_user_agent_set(Eo *obj EINA_UNUSED, Elm_Map_Data *sd, const char *user_agent) -{ - EINA_SAFETY_ON_NULL_RETURN(user_agent); +_elm_map_user_agent_set(Eo *obj EINA_UNUSED, Elm_Map_Data *sd EINA_UNUSED, const char *user_agent EINA_UNUSED) +{ } - eina_stringshare_replace(&sd->user_agent, user_agent); - - if (!sd->ua) sd->ua = eina_hash_string_small_new(NULL); - eina_hash_set(sd->ua, "User-Agent", sd->user_agent); -} - -EOLIAN static const char* -_elm_map_user_agent_get(const Eo *obj EINA_UNUSED, Elm_Map_Data *sd) -{ - return sd->user_agent; -} +EOLIAN static const char * +_elm_map_user_agent_get(const Eo *obj EINA_UNUSED, Elm_Map_Data *sd EINA_UNUSED) +{ return NULL; } EOLIAN static void -_elm_map_source_set(Eo *obj EINA_UNUSED, Elm_Map_Data *sd, Elm_Map_Source_Type type, const char *source_name) -{ - EINA_SAFETY_ON_NULL_RETURN(source_name); +_elm_map_source_set(Eo *obj EINA_UNUSED, Elm_Map_Data *sd EINA_UNUSED, Elm_Map_Source_Type type EINA_UNUSED, const char *source_name EINA_UNUSED) +{ } - if (type == ELM_MAP_SOURCE_TYPE_TILE) _source_tile_set(sd, source_name); - else if (type == ELM_MAP_SOURCE_TYPE_ROUTE) - _source_route_set(sd, source_name); - else if (type == ELM_MAP_SOURCE_TYPE_NAME) - _source_name_set(sd, source_name); - else ERR("Not supported map source type: %d", type); +EOLIAN static const char * +_elm_map_source_get(const Eo *obj EINA_UNUSED, Elm_Map_Data *sd EINA_UNUSED, Elm_Map_Source_Type type EINA_UNUSED) +{ return NULL; } -} +EOLIAN static const char ** +_elm_map_sources_get(const Eo *obj EINA_UNUSED, Elm_Map_Data *sd EINA_UNUSED, Elm_Map_Source_Type type EINA_UNUSED) +{ return NULL; } -EOLIAN static const char* -_elm_map_source_get(const Eo *obj EINA_UNUSED, Elm_Map_Data *sd, Elm_Map_Source_Type type) -{ - EINA_SAFETY_ON_NULL_RETURN_VAL(sd->src_tile, NULL); - - if (type == ELM_MAP_SOURCE_TYPE_TILE) return sd->src_tile->name; - else if (type == ELM_MAP_SOURCE_TYPE_ROUTE) - return sd->src_route->name; - else if (type == ELM_MAP_SOURCE_TYPE_NAME) - return sd->src_name->name; - else ERR("Not supported map source type: %d", type); - return NULL; -} - -EOLIAN static const char** -_elm_map_sources_get(const Eo *obj EINA_UNUSED, Elm_Map_Data *sd, Elm_Map_Source_Type type) -{ - const char **ret; - ret = NULL; - - if (type == ELM_MAP_SOURCE_TYPE_TILE) ret = sd->src_tile_names; - else if (type == ELM_MAP_SOURCE_TYPE_ROUTE) - ret = sd->src_route_names; - else if (type == ELM_MAP_SOURCE_TYPE_NAME) - ret = sd->src_name_names; - else ERR("Not supported map source type: %d", type); - - return ret; -} - -EOLIAN static Elm_Map_Route* -_elm_map_route_add(Eo *obj, Elm_Map_Data *sd, Elm_Map_Route_Type type, Elm_Map_Route_Method method, double flon, double flat, double tlon, double tlat, Elm_Map_Route_Cb route_cb, void *data) -{ - Elm_Map_Route *ret; - ret = NULL; - char *url; - char *type_name; - Elm_Map_Route *route; - char fname[PATH_MAX], fname2[PATH_MAX + 128]; - - ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd, NULL); - - EINA_SAFETY_ON_NULL_RETURN_VAL(sd->src_route, NULL); - - { - snprintf(fname, sizeof(fname), "%s" CACHE_ROUTE_ROOT, - efreet_cache_home_get()); - if (!ecore_file_exists(fname)) ecore_file_mkpath(fname); - } - - if (type == ELM_MAP_ROUTE_TYPE_MOTOCAR) - type_name = strdup(ROUTE_TYPE_MOTORCAR); - else if (type == ELM_MAP_ROUTE_TYPE_BICYCLE) - type_name = strdup(ROUTE_TYPE_BICYCLE); - else if (type == ELM_MAP_ROUTE_TYPE_FOOT) - type_name = strdup(ROUTE_TYPE_FOOT); - else type_name = NULL; - - url = sd->src_route->url_cb(obj, type_name, method, flon, flat, tlon, tlat); - if (!url) - { - ERR("Route URL is NULL"); - free(type_name); - return ret; - } - free(type_name); - - route = ELM_NEW(Elm_Map_Route); - route->wsd = sd; - snprintf(fname2, sizeof(fname2), "%s/%d", fname, rand()); - route->fname = strdup(fname2); - route->type = type; - route->method = method; - route->flon = flon; - route->flat = flat; - route->tlon = tlon; - route->tlat = tlat; - route->cb = route_cb; - route->data = data; - - if (!ecore_file_download_full(url, route->fname, _route_cb, NULL, route, - &(route->job), sd->ua) || !(route->job)) - { - ERR("Can't request Route from %s to %s", url, route->fname); - free(route->fname); - free(route); - free(url); - return ret; - } - INF("Route requested from %s to %s", url, route->fname); - free(url); - - sd->routes = eina_list_append(sd->routes, route); - efl_event_callback_legacy_call - (sd->obj, ELM_MAP_EVENT_ROUTE_LOAD, route); - edje_object_signal_emit(wd->resize_obj, - "elm,state,busy,start", "elm"); - ret = route; - - return ret; -} +EOLIAN static Elm_Map_Route * +_elm_map_route_add(Eo *obj EINA_UNUSED, Elm_Map_Data *sd EINA_UNUSED, Elm_Map_Route_Type type EINA_UNUSED, Elm_Map_Route_Method method EINA_UNUSED, double flon EINA_UNUSED, double flat EINA_UNUSED, double tlon EINA_UNUSED, double tlat EINA_UNUSED, Elm_Map_Route_Cb route_cb EINA_UNUSED, void *data EINA_UNUSED) +{ return NULL; } EAPI void -elm_map_route_del(Elm_Map_Route *route) -{ - Path_Waypoint *w; - Path_Node *n; - - EINA_SAFETY_ON_NULL_RETURN(route); - EINA_SAFETY_ON_NULL_RETURN(route->wsd); - ELM_MAP_CHECK((route->wsd)->obj); - - if (route->job) ecore_file_download_abort(route->job); - - EINA_LIST_FREE(route->waypoint, w) - { - eina_stringshare_del(w->point); - free(w); - } - - EINA_LIST_FREE(route->nodes, n) - { - eina_stringshare_del(n->pos.address); - free(n); - } - - if (route->fname) - { - ecore_file_remove(route->fname); - free(route->fname); - } - - route->wsd->routes = eina_list_remove(route->wsd->routes, route); - free(route); -} +elm_map_route_del(Elm_Map_Route *route EINA_UNUSED) +{ } EAPI double -elm_map_route_distance_get(const Elm_Map_Route *route) -{ - EINA_SAFETY_ON_NULL_RETURN_VAL(route, 0.0); - return route->info.distance; -} +elm_map_route_distance_get(const Elm_Map_Route *route EINA_UNUSED) +{ return 0; } EAPI const char * -elm_map_route_node_get(const Elm_Map_Route *route) -{ - EINA_SAFETY_ON_NULL_RETURN_VAL(route, NULL); - return route->info.nodes; -} +elm_map_route_node_get(const Elm_Map_Route *route EINA_UNUSED) +{ return NULL; } EAPI const char * -elm_map_route_waypoint_get(const Elm_Map_Route *route) -{ - EINA_SAFETY_ON_NULL_RETURN_VAL(route, NULL); - return route->info.waypoints; -} +elm_map_route_waypoint_get(const Elm_Map_Route *route EINA_UNUSED) +{ return NULL; } -EOLIAN static Elm_Map_Name* -_elm_map_name_add(const Eo *obj, Elm_Map_Data *_pd EINA_UNUSED, const char *address, double lon, double lat, Elm_Map_Name_Cb name_cb, void *data) -{ - if (address) - return _name_request(obj, ELM_MAP_NAME_METHOD_SEARCH, address, 0, 0, - name_cb, data); - else - return _name_request(obj, ELM_MAP_NAME_METHOD_REVERSE, NULL, lon, lat, - name_cb, data); -} +EOLIAN static Elm_Map_Name * +_elm_map_name_add(const Eo *obj EINA_UNUSED, Elm_Map_Data *_pd EINA_UNUSED, const char *address EINA_UNUSED, double lon EINA_UNUSED, double lat EINA_UNUSED, Elm_Map_Name_Cb name_cb EINA_UNUSED, void *data EINA_UNUSED) +{ return NULL; } EOLIAN static void -_elm_map_name_search(const Eo *obj, Elm_Map_Data *_pd EINA_UNUSED, const char *address, Elm_Map_Name_List_Cb name_cb, void *data) -{ - if (address) - _name_list_request(obj, ELM_MAP_NAME_METHOD_SEARCH, address, 0, 0, - name_cb, data); -} +_elm_map_name_search(const Eo *obj EINA_UNUSED, Elm_Map_Data *_pd EINA_UNUSED, const char *address EINA_UNUSED, Elm_Map_Name_List_Cb name_cb EINA_UNUSED, void *data EINA_UNUSED) +{ } EAPI void -elm_map_name_del(Elm_Map_Name *name) -{ - EINA_SAFETY_ON_NULL_RETURN(name); - EINA_SAFETY_ON_NULL_RETURN(name->wsd); - ELM_MAP_CHECK((name->wsd)->obj); - - ecore_file_download_abort(name->job); - free(name->address); - if (name->fname) - { - ecore_file_remove(name->fname); - free(name->fname); - } - - name->wsd->names = eina_list_remove(name->wsd->names, name); - free(name); -} +elm_map_name_del(Elm_Map_Name *name EINA_UNUSED) +{ } EAPI const char * -elm_map_name_address_get(const Elm_Map_Name *name) -{ - EINA_SAFETY_ON_NULL_RETURN_VAL(name, NULL); - EINA_SAFETY_ON_NULL_RETURN_VAL(name->wsd, NULL); - ELM_MAP_CHECK((name->wsd)->obj) NULL; - - return name->address; -} +elm_map_name_address_get(const Elm_Map_Name *name EINA_UNUSED) +{ return NULL; } EAPI void -elm_map_name_region_get(const Elm_Map_Name *name, - double *lon, - double *lat) -{ - EINA_SAFETY_ON_NULL_RETURN(name); - EINA_SAFETY_ON_NULL_RETURN(name->wsd); - ELM_MAP_CHECK((name->wsd)->obj); +elm_map_name_region_get(const Elm_Map_Name *name EINA_UNUSED, + double *lon EINA_UNUSED, + double *lat EINA_UNUSED) +{ } - if (lon) *lon = name->lon; - if (lat) *lat = name->lat; -} - -EOLIAN static Elm_Map_Overlay* -_elm_map_overlay_add(Eo *obj EINA_UNUSED, Elm_Map_Data *sd, double lon, double lat) -{ - Elm_Map_Overlay *overlay; - - overlay = ELM_NEW(Elm_Map_Overlay); - overlay->wsd = sd; - overlay->type = ELM_MAP_OVERLAY_TYPE_DEFAULT; - overlay->c.r = 0xff; - overlay->c.g = 0xff; - overlay->c.b = 0xff; - overlay->c.a = 0xff; - overlay->ovl = _overlay_default_new(overlay, lon, lat, overlay->c, 1); - overlay->grp = _overlay_group_new(sd); - sd->overlays = eina_list_append(sd->overlays, overlay); - - evas_object_smart_changed(sd->pan_obj); - - return overlay; -} +EOLIAN static Elm_Map_Overlay * +_elm_map_overlay_add(Eo *obj EINA_UNUSED, Elm_Map_Data *sd EINA_UNUSED, double lon EINA_UNUSED, double lat EINA_UNUSED) +{ return NULL; } EOLIAN static Eina_List * -_elm_map_overlays_get(const Eo *obj EINA_UNUSED, Elm_Map_Data *sd) -{ - Eina_List *l; - Elm_Map_Overlay *ovl; - - sd->all_overlays = eina_list_free(sd->all_overlays); - - EINA_LIST_FOREACH(sd->overlays, l, ovl) - sd->all_overlays = eina_list_append(sd->all_overlays, ovl); - EINA_LIST_FOREACH(sd->group_overlays, l, ovl) - sd->all_overlays = eina_list_append(sd->all_overlays, ovl); - - return sd->all_overlays; -} +_elm_map_overlays_get(const Eo *obj EINA_UNUSED, Elm_Map_Data *sd EINA_UNUSED) +{ return NULL; } EAPI void -elm_map_overlay_del(Elm_Map_Overlay *overlay) -{ - EINA_SAFETY_ON_NULL_RETURN(overlay); - EINA_SAFETY_ON_NULL_RETURN(overlay->wsd); - ELM_MAP_CHECK((overlay->wsd)->obj); - - efl_event_callback_legacy_call - ((overlay->wsd)->obj, ELM_MAP_EVENT_OVERLAY_DEL, overlay); - if (overlay->del_cb) - overlay->del_cb - (overlay->del_cb_data, (overlay->wsd)->obj, overlay); - - if (overlay->grp) - { - if (overlay->grp->klass) - elm_map_overlay_class_remove(overlay->grp->klass, overlay); - _overlay_group_free(overlay->grp); - } - - if (overlay->type == ELM_MAP_OVERLAY_TYPE_DEFAULT) - _overlay_default_free(overlay->ovl); - else if (overlay->type == ELM_MAP_OVERLAY_TYPE_BUBBLE) - _overlay_bubble_free(overlay->ovl); - else if (overlay->type == ELM_MAP_OVERLAY_TYPE_CLASS) - _overlay_class_free(overlay->ovl); - else if (overlay->type == ELM_MAP_OVERLAY_TYPE_ROUTE) - _overlay_route_free(overlay->ovl); - else if (overlay->type == ELM_MAP_OVERLAY_TYPE_LINE) - _overlay_line_free(overlay->ovl); - else if (overlay->type == ELM_MAP_OVERLAY_TYPE_POLYGON) - _overlay_polygon_free(overlay->ovl); - else if (overlay->type == ELM_MAP_OVERLAY_TYPE_CIRCLE) - _overlay_circle_free(overlay->ovl); - else if (overlay->type == ELM_MAP_OVERLAY_TYPE_SCALE) - _overlay_scale_free(overlay->ovl); - else ERR("Invalid overlay type: %d", overlay->type); - - overlay->wsd->overlays = eina_list_remove(overlay->wsd->overlays, overlay); - evas_object_smart_changed(overlay->wsd->pan_obj); - - free(overlay); -} +elm_map_overlay_del(Elm_Map_Overlay *overlay EINA_UNUSED) +{ } EAPI Elm_Map_Overlay_Type -elm_map_overlay_type_get(const Elm_Map_Overlay *overlay) -{ - EINA_SAFETY_ON_NULL_RETURN_VAL(overlay, ELM_MAP_OVERLAY_TYPE_NONE); - EINA_SAFETY_ON_NULL_RETURN_VAL(overlay->wsd, ELM_MAP_OVERLAY_TYPE_NONE); - ELM_MAP_CHECK((overlay->wsd)->obj) ELM_MAP_OVERLAY_TYPE_NONE; - - return overlay->type; -} +elm_map_overlay_type_get(const Elm_Map_Overlay *overlay EINA_UNUSED) +{ return 0; } EAPI void -elm_map_overlay_data_set(Elm_Map_Overlay *overlay, - void *data) -{ - EINA_SAFETY_ON_NULL_RETURN(overlay); - EINA_SAFETY_ON_NULL_RETURN(overlay->wsd); - ELM_MAP_CHECK((overlay->wsd)->obj); - - overlay->data = data; -} +elm_map_overlay_data_set(Elm_Map_Overlay *overlay EINA_UNUSED, + void *data EINA_UNUSED) +{ } EAPI void * -elm_map_overlay_data_get(const Elm_Map_Overlay *overlay) -{ - EINA_SAFETY_ON_NULL_RETURN_VAL(overlay, NULL); - EINA_SAFETY_ON_NULL_RETURN_VAL(overlay->wsd, NULL); - ELM_MAP_CHECK((overlay->wsd)->obj) NULL; - - return overlay->data; -} +elm_map_overlay_data_get(const Elm_Map_Overlay *overlay EINA_UNUSED) +{ return NULL; } EAPI void -elm_map_overlay_hide_set(Elm_Map_Overlay *overlay, - Eina_Bool hide) -{ - EINA_SAFETY_ON_NULL_RETURN(overlay); - EINA_SAFETY_ON_NULL_RETURN(overlay->wsd); - ELM_MAP_CHECK((overlay->wsd)->obj); - - if (overlay->hide == !!hide) return; - overlay->hide = hide; - - evas_object_smart_changed(overlay->wsd->pan_obj); -} +elm_map_overlay_hide_set(Elm_Map_Overlay *overlay EINA_UNUSED, + Eina_Bool hide EINA_UNUSED) +{ } EAPI Eina_Bool -elm_map_overlay_hide_get(const Elm_Map_Overlay *overlay) -{ - EINA_SAFETY_ON_NULL_RETURN_VAL(overlay, EINA_FALSE); - EINA_SAFETY_ON_NULL_RETURN_VAL(overlay->wsd, EINA_FALSE); - ELM_MAP_CHECK((overlay->wsd)->obj) EINA_FALSE; - - return overlay->hide; -} +elm_map_overlay_hide_get(const Elm_Map_Overlay *overlay EINA_UNUSED) +{ return EINA_FALSE; } EAPI void -elm_map_overlay_displayed_zoom_min_set(Elm_Map_Overlay *overlay, - int zoom) -{ - EINA_SAFETY_ON_NULL_RETURN(overlay); - EINA_SAFETY_ON_NULL_RETURN(overlay->wsd); - ELM_MAP_CHECK((overlay->wsd)->obj); - - overlay->zoom_min = zoom; - evas_object_smart_changed(overlay->wsd->pan_obj); -} +elm_map_overlay_displayed_zoom_min_set(Elm_Map_Overlay *overlay EINA_UNUSED, + int zoom EINA_UNUSED) +{ } EAPI int -elm_map_overlay_displayed_zoom_min_get(const Elm_Map_Overlay *overlay) -{ - EINA_SAFETY_ON_NULL_RETURN_VAL(overlay, 0); - EINA_SAFETY_ON_NULL_RETURN_VAL(overlay->wsd, 0); - ELM_MAP_CHECK((overlay->wsd)->obj) 0; - - return overlay->zoom_min; -} +elm_map_overlay_displayed_zoom_min_get(const Elm_Map_Overlay *overlay EINA_UNUSED) +{ return 0; } EAPI void -elm_map_overlay_paused_set(Elm_Map_Overlay *overlay, - Eina_Bool paused) -{ - EINA_SAFETY_ON_NULL_RETURN(overlay); - EINA_SAFETY_ON_NULL_RETURN(overlay->wsd); - ELM_MAP_CHECK((overlay->wsd)->obj); - - if (overlay->paused == !!paused) return; - overlay->paused = paused; - - evas_object_smart_changed(overlay->wsd->pan_obj); -} +elm_map_overlay_paused_set(Elm_Map_Overlay *overlay EINA_UNUSED, + Eina_Bool paused EINA_UNUSED) +{ } EAPI Eina_Bool -elm_map_overlay_paused_get(const Elm_Map_Overlay *overlay) -{ - EINA_SAFETY_ON_NULL_RETURN_VAL(overlay, EINA_FALSE); - EINA_SAFETY_ON_NULL_RETURN_VAL(overlay->wsd, EINA_FALSE); - ELM_MAP_CHECK((overlay->wsd)->obj) EINA_FALSE; - - return overlay->paused; -} +elm_map_overlay_paused_get(const Elm_Map_Overlay *overlay EINA_UNUSED) +{ return EINA_FALSE; } EAPI Eina_Bool -elm_map_overlay_visible_get(const Elm_Map_Overlay *overlay) -{ - EINA_SAFETY_ON_NULL_RETURN_VAL(overlay, EINA_FALSE); - EINA_SAFETY_ON_NULL_RETURN_VAL(overlay->wsd, EINA_FALSE); - ELM_MAP_CHECK((overlay->wsd)->obj) EINA_FALSE; - - return overlay->visible; -} +elm_map_overlay_visible_get(const Elm_Map_Overlay *overlay EINA_UNUSED) +{ return EINA_FALSE; } EAPI void -elm_map_overlay_show(Elm_Map_Overlay *overlay) -{ - EINA_SAFETY_ON_NULL_RETURN(overlay); - EINA_SAFETY_ON_NULL_RETURN(overlay->wsd); - ELM_MAP_CHECK((overlay->wsd)->obj); - - if (overlay->type == ELM_MAP_OVERLAY_TYPE_DEFAULT) - { - Overlay_Default *ovl = overlay->ovl; - - elm_map_region_show - ((overlay->wsd)->obj, ovl->lon, ovl->lat); - } - else if (overlay->type == ELM_MAP_OVERLAY_TYPE_BUBBLE) - { - Overlay_Bubble *ovl = overlay->ovl; - - elm_map_region_show - ((overlay->wsd)->obj, ovl->lon, ovl->lat); - } - else if (overlay->type == ELM_MAP_OVERLAY_TYPE_CLASS) - { - Overlay_Class *ovl = overlay->ovl; - double lon, lat, max_lo, min_lo, max_la, min_la; - - _region_max_min_get(ovl->members, &max_lo, &min_lo, &max_la, &min_la); - lon = (max_lo + min_lo) / 2; - lat = (max_la + min_la) / 2; - elm_map_region_show((overlay->wsd)->obj, lon, lat); - } - else ERR("Not supported overlay type: %d", overlay->type); - - evas_object_smart_changed(overlay->wsd->pan_obj); -} +elm_map_overlay_show(Elm_Map_Overlay *overlay EINA_UNUSED) +{ } EAPI void -elm_map_overlays_show(Eina_List *overlays) -{ - Elm_Map_Overlay *overlay; - - EINA_SAFETY_ON_NULL_RETURN(overlays); - EINA_SAFETY_ON_FALSE_RETURN(eina_list_count(overlays)); - - overlay = eina_list_data_get(overlays); - - overlay->wsd->calc_job.overlays = overlays; - overlay->wsd->calc_job.overlays_show = _overlays_show; - - evas_object_smart_changed(overlay->wsd->pan_obj); -} +elm_map_overlays_show(Eina_List *overlays EINA_UNUSED) +{ } EAPI void -elm_map_overlay_region_set(Elm_Map_Overlay *overlay, - double lon, - double lat) -{ - EINA_SAFETY_ON_NULL_RETURN(overlay); - EINA_SAFETY_ON_NULL_RETURN(overlay->wsd); - ELM_MAP_CHECK((overlay->wsd)->obj); - - if (overlay->type == ELM_MAP_OVERLAY_TYPE_DEFAULT) - { - Overlay_Default *ovl = overlay->ovl; - - ovl->lon = lon; - ovl->lat = lat; - } - else if (overlay->type == ELM_MAP_OVERLAY_TYPE_BUBBLE) - { - Overlay_Bubble *ovl = overlay->ovl; - - ovl->pobj = NULL; - ovl->lon = lon; - ovl->lat = lat; - } - else ERR("Not supported overlay type: %d", overlay->type); - - evas_object_smart_changed(overlay->wsd->pan_obj); -} +elm_map_overlay_region_set(Elm_Map_Overlay *overlay EINA_UNUSED, + double lon EINA_UNUSED, + double lat EINA_UNUSED) +{ } EAPI void -elm_map_overlay_region_get(const Elm_Map_Overlay *overlay, - double *lon, - double *lat) -{ - EINA_SAFETY_ON_NULL_RETURN(overlay); - EINA_SAFETY_ON_NULL_RETURN(overlay->wsd); - ELM_MAP_CHECK((overlay->wsd)->obj); - - if (overlay->type == ELM_MAP_OVERLAY_TYPE_GROUP) - { - Overlay_Group *ovl = overlay->ovl; - - if (lon) *lon = ovl->lon; - if (lat) *lat = ovl->lat; - } - else if (overlay->type == ELM_MAP_OVERLAY_TYPE_DEFAULT) - { - const Overlay_Default *ovl = overlay->ovl; - - if (lon) *lon = ovl->lon; - if (lat) *lat = ovl->lat; - } - else if (overlay->type == ELM_MAP_OVERLAY_TYPE_BUBBLE) - { - const Overlay_Bubble *ovl = overlay->ovl; - - if (lon) *lon = ovl->lon; - if (lat) *lat = ovl->lat; - } - else ERR("Not supported overlay type: %d", overlay->type); -} +elm_map_overlay_region_get(const Elm_Map_Overlay *overlay EINA_UNUSED, + double *lon EINA_UNUSED, + double *lat EINA_UNUSED) +{ } EAPI void -elm_map_overlay_icon_set(Elm_Map_Overlay *overlay, - Evas_Object *icon) -{ - EINA_SAFETY_ON_NULL_RETURN(overlay); - EINA_SAFETY_ON_NULL_RETURN(overlay->wsd); - ELM_MAP_CHECK((overlay->wsd)->obj); - - if (overlay->type == ELM_MAP_OVERLAY_TYPE_DEFAULT) - _overlay_default_icon_update(overlay->ovl, icon); - else if (overlay->type == ELM_MAP_OVERLAY_TYPE_CLASS) - _overlay_class_icon_update(overlay->ovl, icon); - else ERR("Not supported overlay type: %d", overlay->type); - - evas_object_smart_changed(overlay->wsd->pan_obj); -} +elm_map_overlay_icon_set(Elm_Map_Overlay *overlay EINA_UNUSED, + Evas_Object *icon EINA_UNUSED) +{ } EAPI const Evas_Object * -elm_map_overlay_icon_get(const Elm_Map_Overlay *overlay) -{ - EINA_SAFETY_ON_NULL_RETURN_VAL(overlay, NULL); - EINA_SAFETY_ON_NULL_RETURN_VAL(overlay->wsd, NULL); - ELM_MAP_CHECK((overlay->wsd)->obj) NULL; - - if (overlay->type == ELM_MAP_OVERLAY_TYPE_DEFAULT) - { - const Overlay_Default *ovl = overlay->ovl; - - return ovl->icon; - } - else if (overlay->type == ELM_MAP_OVERLAY_TYPE_CLASS) - { - const Overlay_Class *ovl = overlay->ovl; - - return ovl->icon; - } - else - { - ERR("Not supported overlay type: %d", overlay->type); - return NULL; - } -} +elm_map_overlay_icon_get(const Elm_Map_Overlay *overlay EINA_UNUSED) +{ return NULL; } EAPI void -elm_map_overlay_content_set(Elm_Map_Overlay *overlay, - Evas_Object *content) -{ - EINA_SAFETY_ON_NULL_RETURN(overlay); - EINA_SAFETY_ON_NULL_RETURN(content); - EINA_SAFETY_ON_NULL_RETURN(overlay->wsd); - ELM_MAP_CHECK((overlay->wsd)->obj); - - if (overlay->type == ELM_MAP_OVERLAY_TYPE_DEFAULT) - _overlay_default_content_update(overlay->ovl, content, overlay); - else if (overlay->type == ELM_MAP_OVERLAY_TYPE_CLASS) - _overlay_class_content_update(overlay->ovl, content); - else ERR("Not supported overlay type: %d", overlay->type); - - evas_object_smart_changed(overlay->wsd->pan_obj); -} +elm_map_overlay_content_set(Elm_Map_Overlay *overlay EINA_UNUSED, + Evas_Object *content EINA_UNUSED) +{ } EAPI const Evas_Object * -elm_map_overlay_content_get(const Elm_Map_Overlay *overlay) -{ - EINA_SAFETY_ON_NULL_RETURN_VAL(overlay, NULL); - EINA_SAFETY_ON_NULL_RETURN_VAL(overlay->wsd, NULL); - - ELM_MAP_CHECK((overlay->wsd)->obj) NULL; - - if (overlay->type == ELM_MAP_OVERLAY_TYPE_DEFAULT) - { - const Overlay_Default *ovl = overlay->ovl; - return ovl->content; - } - else if (overlay->type == ELM_MAP_OVERLAY_TYPE_CLASS) - { - const Overlay_Class *ovl = overlay->ovl; - return ovl->content; - } - else - { - ERR("Not supported overlay type: %d", overlay->type); - return NULL; - } -} +elm_map_overlay_content_get(const Elm_Map_Overlay *overlay EINA_UNUSED) +{ return NULL; } EAPI void -elm_map_overlay_color_set(Elm_Map_Overlay *overlay, - int r, - int g, - int b, - int a) -{ - EINA_SAFETY_ON_NULL_RETURN(overlay); - EINA_SAFETY_ON_NULL_RETURN(overlay->wsd); - ELM_MAP_CHECK((overlay->wsd)->obj); - - overlay->c.r = r; - overlay->c.g = g; - overlay->c.b = b; - overlay->c.a = a; - - if (overlay->type == ELM_MAP_OVERLAY_TYPE_CLASS) - _overlay_class_color_update(overlay->ovl, overlay->c); - else if (overlay->type == ELM_MAP_OVERLAY_TYPE_DEFAULT) - _overlay_default_color_update(overlay->ovl, overlay->c); - else if (overlay->type == ELM_MAP_OVERLAY_TYPE_ROUTE) - _overlay_route_color_update(overlay->ovl, overlay->c); - else - { - ERR("Not supported overlay type: %d", overlay->type); - } -} +elm_map_overlay_color_set(Elm_Map_Overlay *overlay EINA_UNUSED, + int r EINA_UNUSED, + int g EINA_UNUSED, + int b EINA_UNUSED, + int a EINA_UNUSED) +{ } EAPI void -elm_map_overlay_color_get(const Elm_Map_Overlay *overlay, - int *r, - int *g, - int *b, - int *a) -{ - EINA_SAFETY_ON_NULL_RETURN(overlay); - EINA_SAFETY_ON_NULL_RETURN(overlay->wsd); - ELM_MAP_CHECK((overlay->wsd)->obj); - - switch (overlay->type) - { - case ELM_MAP_OVERLAY_TYPE_ROUTE: - case ELM_MAP_OVERLAY_TYPE_DEFAULT: - case ELM_MAP_OVERLAY_TYPE_CLASS: - if (r) *r = overlay->c.r; - if (g) *g = overlay->c.g; - if (b) *b = overlay->c.b; - if (a) *a = overlay->c.a; - break; - - default: - ERR("Not supported overlay type: %d", overlay->type); - break; - } -} +elm_map_overlay_color_get(const Elm_Map_Overlay *overlay EINA_UNUSED, + int *r EINA_UNUSED, + int *g EINA_UNUSED, + int *b EINA_UNUSED, + int *a EINA_UNUSED) +{ } EAPI void -elm_map_overlay_get_cb_set(Elm_Map_Overlay *overlay, - Elm_Map_Overlay_Get_Cb get_cb, - void *data) -{ - EINA_SAFETY_ON_NULL_RETURN(overlay); - EINA_SAFETY_ON_NULL_RETURN(overlay->wsd); - ELM_MAP_CHECK((overlay->wsd)->obj); - - overlay->cb = get_cb; - overlay->cb_data = data; - - if (overlay->type == ELM_MAP_OVERLAY_TYPE_CLASS) - _overlay_class_cb_set(overlay->ovl, get_cb, data); -} +elm_map_overlay_get_cb_set(Elm_Map_Overlay *overlay EINA_UNUSED, + Elm_Map_Overlay_Get_Cb get_cb EINA_UNUSED, + void *data EINA_UNUSED) +{ } EAPI void -elm_map_overlay_del_cb_set(Elm_Map_Overlay *overlay, - Elm_Map_Overlay_Del_Cb del_cb, - void *data) -{ - EINA_SAFETY_ON_NULL_RETURN(overlay); - EINA_SAFETY_ON_NULL_RETURN(overlay->wsd); - ELM_MAP_CHECK((overlay->wsd)->obj); +elm_map_overlay_del_cb_set(Elm_Map_Overlay *overlay EINA_UNUSED, + Elm_Map_Overlay_Del_Cb del_cb EINA_UNUSED, + void *data EINA_UNUSED) +{ } - overlay->del_cb = del_cb; - overlay->del_cb_data = data; -} - -EOLIAN static Elm_Map_Overlay* -_elm_map_overlay_class_add(Eo *obj EINA_UNUSED, Elm_Map_Data *sd) -{ - Elm_Map_Overlay *overlay; - - overlay = ELM_NEW(Elm_Map_Overlay); - overlay->wsd = sd; - overlay->type = ELM_MAP_OVERLAY_TYPE_CLASS; - overlay->ovl = _overlay_class_new(sd); - overlay->c.r = 0xff; - overlay->c.g = 0xff; - overlay->c.b = 0xff; - overlay->c.a = 0xff; - sd->overlays = eina_list_append(sd->overlays, overlay); - - evas_object_smart_changed(sd->pan_obj); - return overlay; -} +EOLIAN static Elm_Map_Overlay * +_elm_map_overlay_class_add(Eo *obj EINA_UNUSED, Elm_Map_Data *sd EINA_UNUSED) +{ return NULL; } EAPI void -elm_map_overlay_class_append(Elm_Map_Overlay *klass, - Elm_Map_Overlay *overlay) -{ - Overlay_Class *class_ovl; - - EINA_SAFETY_ON_NULL_RETURN(klass); - EINA_SAFETY_ON_NULL_RETURN(overlay); - EINA_SAFETY_ON_NULL_RETURN(klass->wsd); - ELM_MAP_CHECK((klass->wsd)->obj); - EINA_SAFETY_ON_FALSE_RETURN(klass->type == ELM_MAP_OVERLAY_TYPE_CLASS); - - class_ovl = klass->ovl; - if (eina_list_data_find(class_ovl->members, overlay)) - { - ERR("Already added overlay into clas"); - return; - } - class_ovl->members = eina_list_append(class_ovl->members, overlay); - - // Update group by class - overlay->grp->klass = klass; - _overlay_group_icon_update(overlay->grp, class_ovl->icon); - _overlay_group_content_update(overlay->grp, class_ovl->content, overlay); - _overlay_group_color_update(overlay->grp, klass->c); - _overlay_group_cb_set(overlay->grp, klass->cb, klass->data); - if (overlay->type == ELM_MAP_OVERLAY_TYPE_DEFAULT) - { - _overlay_default_class_icon_update(overlay->ovl, class_ovl->icon); - _overlay_default_class_content_update - (overlay->ovl, class_ovl->content); - } - - evas_object_smart_changed(klass->wsd->pan_obj); -} +elm_map_overlay_class_append(Elm_Map_Overlay *klass EINA_UNUSED, + Elm_Map_Overlay *overlay EINA_UNUSED) +{ } EAPI void -elm_map_overlay_class_remove(Elm_Map_Overlay *klass, - Elm_Map_Overlay *overlay) -{ - Overlay_Class *ovl; - - EINA_SAFETY_ON_NULL_RETURN(klass); - EINA_SAFETY_ON_NULL_RETURN(overlay); - EINA_SAFETY_ON_NULL_RETURN(klass->wsd); - ELM_MAP_CHECK((klass->wsd)->obj); - EINA_SAFETY_ON_FALSE_RETURN(klass->type == ELM_MAP_OVERLAY_TYPE_CLASS); - - ovl = klass->ovl; - ovl->members = eina_list_remove(ovl->members, overlay); - - overlay->grp->klass = NULL; - _overlay_group_icon_update(overlay->grp, NULL); - _overlay_group_content_update(overlay->grp, NULL, NULL); - if (overlay->type == ELM_MAP_OVERLAY_TYPE_DEFAULT) - { - _overlay_default_class_icon_update(overlay->ovl, NULL); - _overlay_default_class_content_update(overlay->ovl, NULL); - } - - evas_object_smart_changed(klass->wsd->pan_obj); -} +elm_map_overlay_class_remove(Elm_Map_Overlay *klass EINA_UNUSED, + Elm_Map_Overlay *overlay EINA_UNUSED) +{ } EAPI void -elm_map_overlay_class_zoom_max_set(Elm_Map_Overlay *klass, - int zoom) -{ - Overlay_Class *ovl; - - EINA_SAFETY_ON_NULL_RETURN(klass); - EINA_SAFETY_ON_NULL_RETURN(klass->wsd); - ELM_MAP_CHECK((klass->wsd)->obj); - EINA_SAFETY_ON_FALSE_RETURN(klass->type == ELM_MAP_OVERLAY_TYPE_CLASS); - - ovl = klass->ovl; - if (ovl->zoom_max == !!zoom) return; - ovl->zoom_max = zoom; - - evas_object_smart_changed(klass->wsd->pan_obj); -} +elm_map_overlay_class_zoom_max_set(Elm_Map_Overlay *klass EINA_UNUSED, + int zoom EINA_UNUSED) +{ } EAPI int -elm_map_overlay_class_zoom_max_get(const Elm_Map_Overlay *klass) -{ - const Overlay_Class *ovl; - - EINA_SAFETY_ON_NULL_RETURN_VAL(klass, OVERLAY_CLASS_ZOOM_MAX); - EINA_SAFETY_ON_NULL_RETURN_VAL(klass->wsd, OVERLAY_CLASS_ZOOM_MAX); - ELM_MAP_CHECK((klass->wsd)->obj) OVERLAY_CLASS_ZOOM_MAX; - - EINA_SAFETY_ON_FALSE_RETURN_VAL - (klass->type == ELM_MAP_OVERLAY_TYPE_CLASS, OVERLAY_CLASS_ZOOM_MAX); - - ovl = klass->ovl; - return ovl->zoom_max; -} +elm_map_overlay_class_zoom_max_get(const Elm_Map_Overlay *klass EINA_UNUSED) +{ return 0; } EAPI Eina_List * -elm_map_overlay_group_members_get(const Elm_Map_Overlay *grp) -{ - Overlay_Group *ovl; +elm_map_overlay_group_members_get(const Elm_Map_Overlay *grp EINA_UNUSED) +{ return NULL; } - EINA_SAFETY_ON_NULL_RETURN_VAL(grp, NULL); - EINA_SAFETY_ON_NULL_RETURN_VAL(grp->wsd, NULL); - ELM_MAP_CHECK((grp->wsd)->obj) NULL; - - EINA_SAFETY_ON_FALSE_RETURN_VAL - (grp->type == ELM_MAP_OVERLAY_TYPE_GROUP, NULL); - - ovl = grp->ovl; - return ovl->members; -} - -EOLIAN static Elm_Map_Overlay* -_elm_map_overlay_bubble_add(Eo *obj EINA_UNUSED, Elm_Map_Data *sd) -{ - Elm_Map_Overlay *overlay; - - overlay = ELM_NEW(Elm_Map_Overlay); - overlay->wsd = sd; - overlay->type = ELM_MAP_OVERLAY_TYPE_BUBBLE; - overlay->c.r = 0xff; - overlay->c.g = 0xff; - overlay->c.b = 0xff; - overlay->c.a = 0xff; - overlay->ovl = _overlay_bubble_new(overlay); - overlay->grp = _overlay_group_new(sd); - sd->overlays = eina_list_append(sd->overlays, overlay); - - evas_object_smart_changed(sd->pan_obj); - return overlay; -} +EOLIAN static Elm_Map_Overlay * +_elm_map_overlay_bubble_add(Eo *obj EINA_UNUSED, Elm_Map_Data *sd EINA_UNUSED) +{ return NULL; } EAPI void -elm_map_overlay_bubble_follow(Elm_Map_Overlay *bubble, - const Elm_Map_Overlay *parent) -{ - Overlay_Bubble *ovl; - Evas_Object *pobj; - - EINA_SAFETY_ON_NULL_RETURN(bubble); - EINA_SAFETY_ON_NULL_RETURN(parent); - ELM_MAP_CHECK((bubble->wsd)->obj); - EINA_SAFETY_ON_FALSE_RETURN(bubble->type == ELM_MAP_OVERLAY_TYPE_BUBBLE); - - ovl = bubble->ovl; - pobj = _overlay_obj_get(parent); - if (!pobj) return; - - ovl->pobj = pobj; - evas_object_smart_changed(bubble->wsd->pan_obj); -} +elm_map_overlay_bubble_follow(Elm_Map_Overlay *bubble EINA_UNUSED, + const Elm_Map_Overlay *parent EINA_UNUSED) +{ } EAPI void -elm_map_overlay_bubble_content_append(Elm_Map_Overlay *bubble, - Evas_Object *content) -{ - Overlay_Bubble *bb; - - EINA_SAFETY_ON_NULL_RETURN(bubble); - EINA_SAFETY_ON_NULL_RETURN(content); - ELM_MAP_CHECK((bubble->wsd)->obj); - EINA_SAFETY_ON_FALSE_RETURN(bubble->type == ELM_MAP_OVERLAY_TYPE_BUBBLE); - - bb = bubble->ovl; - elm_box_pack_end(bb->bx, content); - - evas_object_smart_changed(bubble->wsd->pan_obj); -} +elm_map_overlay_bubble_content_append(Elm_Map_Overlay *bubble EINA_UNUSED, + Evas_Object *content EINA_UNUSED) +{ } EAPI void -elm_map_overlay_bubble_content_clear(Elm_Map_Overlay *bubble) -{ - Overlay_Bubble *bb; - - EINA_SAFETY_ON_NULL_RETURN(bubble); - ELM_MAP_CHECK((bubble->wsd)->obj); - EINA_SAFETY_ON_FALSE_RETURN(bubble->type == ELM_MAP_OVERLAY_TYPE_BUBBLE); - - bb = bubble->ovl; - elm_box_clear(bb->bx); - - evas_object_smart_changed(bubble->wsd->pan_obj); -} +elm_map_overlay_bubble_content_clear(Elm_Map_Overlay *bubble EINA_UNUSED) +{ } EAPI void -elm_map_wheel_disabled_set(Evas_Object *obj, Eina_Bool disabled) -{ - elm_interface_scrollable_wheel_disabled_set(obj, disabled); -} +elm_map_wheel_disabled_set(Evas_Object *obj EINA_UNUSED, Eina_Bool disabled EINA_UNUSED) +{ } EAPI Eina_Bool -elm_map_wheel_disabled_get(const Evas_Object *obj) -{ - return elm_interface_scrollable_wheel_disabled_get(obj); -} +elm_map_wheel_disabled_get(const Evas_Object *obj EINA_UNUSED) +{ return EINA_FALSE; } EAPI void -elm_map_paused_set(Evas_Object *obj, Eina_Bool paused) -{ - efl_ui_zoom_animation_set(obj, paused); -} +elm_map_paused_set(Evas_Object *obj EINA_UNUSED, Eina_Bool paused EINA_UNUSED) +{ } EAPI Eina_Bool -elm_map_paused_get(const Evas_Object *obj) -{ - return efl_ui_zoom_animation_get(obj); -} +elm_map_paused_get(const Evas_Object *obj EINA_UNUSED) +{ return EINA_FALSE; } -EOLIAN static Elm_Map_Overlay* -_elm_map_overlay_route_add(Eo *obj, Elm_Map_Data *sd, const Elm_Map_Route *route) -{ - Elm_Map_Overlay *overlay; +EOLIAN static Elm_Map_Overlay * +_elm_map_overlay_route_add(Eo *obj EINA_UNUSED, Elm_Map_Data *sd EINA_UNUSED, const Elm_Map_Route *route EINA_UNUSED) +{ return NULL; } - EINA_SAFETY_ON_NULL_RETURN_VAL(route, NULL); - EINA_SAFETY_ON_NULL_RETURN_VAL(route->wsd, NULL); - EINA_SAFETY_ON_FALSE_RETURN_VAL - (obj == (route->wsd)->obj, NULL); +EOLIAN static Elm_Map_Overlay * +_elm_map_overlay_line_add(Eo *obj EINA_UNUSED, Elm_Map_Data *sd EINA_UNUSED, double flon EINA_UNUSED, double flat EINA_UNUSED, double tlon EINA_UNUSED, double tlat EINA_UNUSED) +{ return NULL; } - overlay = ELM_NEW(Elm_Map_Overlay); - overlay->wsd = sd; - overlay->type = ELM_MAP_OVERLAY_TYPE_ROUTE; - overlay->c.r = 0x11; - overlay->c.g = 0x11; - overlay->c.b = 0xcc; - overlay->c.a = 0xcc; - overlay->ovl = _overlay_route_new(sd, route, overlay->c); - overlay->grp = _overlay_group_new(sd); - sd->overlays = eina_list_append(sd->overlays, overlay); - - evas_object_smart_changed(sd->pan_obj); - return overlay; -} - -EOLIAN static Elm_Map_Overlay* -_elm_map_overlay_line_add(Eo *obj EINA_UNUSED, Elm_Map_Data *sd, double flon, double flat, double tlon, double tlat) -{ - Elm_Map_Overlay *overlay; - - overlay = ELM_NEW(Elm_Map_Overlay); - overlay->wsd = sd; - overlay->type = ELM_MAP_OVERLAY_TYPE_LINE; - overlay->c.r = 0x11; - overlay->c.g = 0xcc; - overlay->c.b = 0x11; - overlay->c.a = 0xcc; - overlay->ovl = _overlay_line_new(sd, flon, flat, tlon, tlat, overlay->c); - overlay->grp = _overlay_group_new(sd); - sd->overlays = eina_list_append(sd->overlays, overlay); - - evas_object_smart_changed(sd->pan_obj); - return overlay; -} - -EOLIAN static Elm_Map_Overlay* -_elm_map_overlay_polygon_add(Eo *obj EINA_UNUSED, Elm_Map_Data *sd) -{ - Elm_Map_Overlay *overlay; - - overlay = ELM_NEW(Elm_Map_Overlay); - overlay->wsd = sd; - overlay->type = ELM_MAP_OVERLAY_TYPE_POLYGON; - overlay->c.r = 0xcc; - overlay->c.g = 0x77; - overlay->c.b = 0x11; - overlay->c.a = 0xcc; - overlay->ovl = _overlay_polygon_new(sd, overlay->c); - overlay->grp = _overlay_group_new(sd); - sd->overlays = eina_list_append(sd->overlays, overlay); - evas_object_smart_changed(sd->pan_obj); - return overlay; -} +EOLIAN static Elm_Map_Overlay * +_elm_map_overlay_polygon_add(Eo *obj EINA_UNUSED, Elm_Map_Data *sd EINA_UNUSED) +{ return NULL; } EAPI void -elm_map_overlay_polygon_region_add(Elm_Map_Overlay *overlay, - double lon, - double lat) -{ - Overlay_Polygon *ovl; - Region *r; - - EINA_SAFETY_ON_NULL_RETURN(overlay); - ELM_MAP_CHECK((overlay->wsd)->obj); - EINA_SAFETY_ON_FALSE_RETURN(overlay->type == ELM_MAP_OVERLAY_TYPE_POLYGON); - - ovl = overlay->ovl; - r = ELM_NEW(Region); - r->lon = lon; - r->lat = lat; - ovl->regions = eina_list_append(ovl->regions, r); - - evas_object_smart_changed(ovl->wsd->pan_obj); -} +elm_map_overlay_polygon_region_add(Elm_Map_Overlay *overlay EINA_UNUSED, + double lon EINA_UNUSED, + double lat EINA_UNUSED) +{ } EOLIAN static Elm_Map_Overlay* -_elm_map_overlay_circle_add(Eo *obj EINA_UNUSED, Elm_Map_Data *sd, double lon, double lat, double radius) -{ - Elm_Map_Overlay *overlay; +_elm_map_overlay_circle_add(Eo *obj EINA_UNUSED, Elm_Map_Data *sd EINA_UNUSED, double lon EINA_UNUSED, double lat EINA_UNUSED, double radius EINA_UNUSED) +{ return NULL; } - overlay = ELM_NEW(Elm_Map_Overlay); - overlay->wsd = sd; - overlay->type = ELM_MAP_OVERLAY_TYPE_CIRCLE; - overlay->c.r = 0xcc; - overlay->c.g = 0x11; - overlay->c.b = 0x11; - overlay->c.a = 0xcc; - overlay->ovl = _overlay_circle_new(sd, lon, lat, radius, overlay->c); - overlay->grp = _overlay_group_new(sd); - sd->overlays = eina_list_append(sd->overlays, overlay); +EOLIAN static Elm_Map_Overlay * +_elm_map_overlay_scale_add(Eo *obj EINA_UNUSED, Elm_Map_Data *sd EINA_UNUSED, Evas_Coord x EINA_UNUSED, Evas_Coord y EINA_UNUSED) +{ return NULL; } - evas_object_smart_changed(sd->pan_obj); - return overlay; -} - -EOLIAN static Elm_Map_Overlay* -_elm_map_overlay_scale_add(Eo *obj EINA_UNUSED, Elm_Map_Data *sd, Evas_Coord x, Evas_Coord y) -{ - Elm_Map_Overlay *overlay; - - overlay = ELM_NEW(Elm_Map_Overlay); - overlay->wsd = sd; - overlay->type = ELM_MAP_OVERLAY_TYPE_SCALE; - overlay->c.r = 0xff; - overlay->c.g = 0xff; - overlay->c.b = 0xff; - overlay->c.a = 0xff; - overlay->ovl = _overlay_scale_new(sd, x, y, overlay->c); - overlay->grp = _overlay_group_new(sd); - sd->overlays = eina_list_append(sd->overlays, overlay); - - evas_object_smart_changed(sd->pan_obj); - return overlay; -} - -EOLIAN static Evas_Object* -_elm_map_track_add(Eo *obj, Elm_Map_Data *sd, void *emap) -{ -#ifdef ELM_EMAP - EMap_Route *emapr = emap; - Evas_Object *route; - - route = elm_route_add(obj); - elm_route_emap_set(route, emapr); - sd->track = eina_list_append(sd->track, route); - - return route; -#else - (void)obj; - (void)sd; - (void)emap; - return NULL; -#endif -} +EOLIAN static Evas_Object * +_elm_map_track_add(Eo *obj EINA_UNUSED, Elm_Map_Data *sd EINA_UNUSED, void *emap EINA_UNUSED) +{ return NULL; } EOLIAN static void -_elm_map_track_remove(Eo *obj EINA_UNUSED, Elm_Map_Data *sd, Evas_Object *route) -{ -#ifdef ELM_EMAP - sd->track = eina_list_remove(sd->track, route); - evas_object_del(route); -#else - (void)obj; - (void)sd; - (void)route; -#endif -} +_elm_map_track_remove(Eo *obj EINA_UNUSED, Elm_Map_Data *sd EINA_UNUSED, Evas_Object *route EINA_UNUSED) +{} static void _elm_map_class_constructor(Efl_Class *klass) @@ -5694,15 +651,15 @@ _elm_map_class_constructor(Efl_Class *klass) EOLIAN const Efl_Access_Action_Data * _elm_map_efl_access_widget_action_elm_actions_get(const Eo *obj EINA_UNUSED, Elm_Map_Data *pd EINA_UNUSED) { - static Efl_Access_Action_Data atspi_actions[] = { + static const Efl_Access_Action_Data atspi_actions[] = { { "move,prior", "move", "prior", _key_action_move}, { "move,next", "move", "next", _key_action_move}, { "move,left", "move", "left", _key_action_move}, { "move,right", "move", "right", _key_action_move}, { "move,up", "move", "up", _key_action_move}, { "move,down", "move", "down", _key_action_move}, - { "zoom,in", "zoom", "in", _key_action_zoom}, - { "zoom,out", "zoom", "out", _key_action_zoom}, + { "zoom,in", "zoom", "in", _key_action_move}, + { "zoom,out", "zoom", "out", _key_action_move}, { NULL, NULL, NULL, NULL } }; return &atspi_actions[0]; diff --git a/src/lib/elementary/elm_map_common.h b/src/lib/elementary/elm_map_common.h index 3fa3dcc34b..038409ab5c 100644 --- a/src/lib/elementary/elm_map_common.h +++ b/src/lib/elementary/elm_map_common.h @@ -6,9 +6,7 @@ /** - * Set the name search method. - * - * This is for name module interface. + * Widget is broken due to on-line service API breaks */ typedef enum { @@ -18,14 +16,7 @@ typedef enum } Elm_Map_Name_Method; /** - * Set overlay type to be used. This type is resolved - * when the overlay is created. - * You can get this value by elm_map_overlay_type_get(). - * - * @see elm_map_overlay_type_get() - * @see elm_map_overlay_add() - * @see elm_map_overlay_class_add() - * @see elm_map_overlay_bubble_add() + * Widget is broken due to on-line service API breaks */ typedef enum { @@ -61,544 +52,197 @@ typedef void (*Elm_Map_Name_List_Cb)(void *data, Evas_Obje typedef void (*Elm_Map_Route_Cb)(void *data, Evas_Object *map, Elm_Map_Route *route); /**< Async-callback function for the route request. */ /** - * Delete a overlay from the map. This function can delete all types - * of overlays. - * - * @param overlay The overlay to be deleted. - * - * @see elm_map_overlay_add() - * @see elm_map_overlay_class_add() - * @see elm_map_overlay_bubble_add() + * Widget is broken due to on-line service API breaks */ EAPI void elm_map_overlay_del(Elm_Map_Overlay *overlay); /** - * Get the overlay type. - * - * @param overlay The overlay to return type. - * @return Return the overlay type. - * - * This type is resolved when the overlay is created. - * - * @see elm_map_overlay_add() - * @see elm_map_overlay_class_add() - * @see elm_map_overlay_bubble_add() + * Widget is broken due to on-line service API breaks */ EAPI Elm_Map_Overlay_Type elm_map_overlay_type_get(const Elm_Map_Overlay *overlay); - /** - * Set a pointer of user data for a overlay. - * - * @param overlay The overlay to own the user data. - * @param data A pointer of user data - * - * @see elm_map_overlay_data_get() +/** + * Widget is broken due to on-line service API breaks */ EAPI void elm_map_overlay_data_set(Elm_Map_Overlay *overlay, void *data); /** - * Get the user data stored on a overlay. - * - * @param overlay The overlay to return the user data. - * @return A pointer to data stored using elm_map_overlay_data_set(), - * or @c NULL, if none has been set. - * - * @see elm_map_overlay_data_set() + * Widget is broken due to on-line service API breaks */ EAPI void * elm_map_overlay_data_get(const Elm_Map_Overlay *overlay); /** - * Set if the overlay is hidden or not. - * - * @param overlay The overlay to be hidden. - * @param hide Use @c EINA_TRUE to hide the overlay or @c EINA_FALSE to show. - * - * @see elm_map_overlay_hide_get() + * Widget is broken due to on-line service API breaks */ EAPI void elm_map_overlay_hide_set(Elm_Map_Overlay *overlay, Eina_Bool hide); /** - * Get a value whether the overlay is hidden or not. - * - * @param overlay The overlay to return the hidden state. - * @return @c EINA_TRUE means the overlay is hidden. @c EINA_FALSE indicates - * it is not. - * - * This gets the current hidden state for the overlay. - * - * @see elm_map_overlay_hide_set() + * Widget is broken due to on-line service API breaks */ EAPI Eina_Bool elm_map_overlay_hide_get(const Elm_Map_Overlay *overlay); /** - * Set the minimum zoom from where the overlay is displayed. - * - * @param overlay The overlay to be set the minimum zoom. - * @param zoom The minimum zoom. - * - * The overlay only will be displayed when the map is displayed at @p zoom - * or bigger. - * - * @see elm_map_overlay_displayed_zoom_min_get() + * Widget is broken due to on-line service API breaks */ EAPI void elm_map_overlay_displayed_zoom_min_set(Elm_Map_Overlay *overlay, int zoom); /** - * Get the minimum zoom from where the overlay is displayed. - * - * @param overlay The overlay to return the minimum zoom. - * @return zoom The minimum zoom. - * - * @see elm_map_overlay_displayed_zoom_min_set() + * Widget is broken due to on-line service API breaks */ EAPI int elm_map_overlay_displayed_zoom_min_get(const Elm_Map_Overlay *overlay); /** - * Pause or unpause the overlay. - * - * @param overlay The overlay to be paused. - * @param paused Use @c EINA_TRUE to pause the @p overlay or @c EINA_FALSE - * to unpause it. - * - * This sets the paused state to on (@c EINA_TRUE) or off (@c EINA_FALSE) - * for the overlay. - * - * The default is off. - * - * This will stop moving the overlay coordinates instantly. - * even if map being scrolled or zoomed. - * - * @see elm_map_overlay_paused_get() + * Widget is broken due to on-line service API breaks */ EAPI void elm_map_overlay_paused_set(Elm_Map_Overlay *overlay, Eina_Bool paused); /** - * Get a value whether the overlay is paused or not. - * - * @param overlay The overlay to return paused state. - * @return @c EINA_TRUE means overlay is paused. @c EINA_FALSE indicates - * it is not. - * - * This gets the current paused state for the overlay. - * - * @see elm_map_overlay_paused_set() + * Widget is broken due to on-line service API breaks */ 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 - * - * @since 1.7 + * Widget is broken due to on-line service API breaks */ EAPI Eina_Bool elm_map_overlay_visible_get(const Elm_Map_Overlay *overlay); /** - * Set the content object of the overlay. - * - * @param overlay The overlay to be set the content. - * @param obj The evas object will be used to display the overlay. - * - * Only default and class type overlay support this function. - * - * The content should be resized or set size hints before set to the overlay. - * Do not modify this object (move, show, hide, del, etc.), - * after set. - * You can only resize this. - * - * This content is what will be inside the overlay that will be displayed. - * If a content is set, icon and default style layout are no more used before - * the content is deleted. - * - * If @p obj is @c NULL, content inside the overlay is deleted. - * - * @see elm_map_overlay_content_get() + * Widget is broken due to on-line service API breaks */ EAPI void elm_map_overlay_content_set(Elm_Map_Overlay *overlay, Evas_Object *obj); /** - * Get the content object. - * - * @param overlay The overlay to return the content. - * @return Return the evas object if it exists, else @c NULL. - * - * Only default and class type overlay support this function. - * - * Returned content is what being inside the overlay that being displayed. - * - * Do not modify this object (move, show, hide, del, etc.). - * You can only resize this. - * - * The content can be set by elm_map_overlay_content_set(). - * - * @see elm_map_overlay_content_set() + * Widget is broken due to on-line service API breaks */ EAPI const Evas_Object * elm_map_overlay_content_get(const Elm_Map_Overlay *overlay); /** - * Set a icon of the overlay. - * - * @param overlay The overlay to be set the icon. - * @param icon The icon will be used to display the overlay. - * - * Only default and class type overlay support this function. - * - * Do not modify this object (move, show, hide, resize, del, etc.), - * after set. - * - * If icon is set, default style layout will not be used. - * - * If @p icon is @c NULL, icon inside the overlay will be deleted. - * - * @see elm_map_overlay_icon_get() + * Widget is broken due to on-line service API breaks */ EAPI void elm_map_overlay_icon_set(Elm_Map_Overlay *overlay, Evas_Object *icon); /** - * Get the icon object. - * - * @param overlay The overlay to return the icon. - * @return Return the icon object if it exists, else @c NULL. - * - * Only default and class type overlay support this function. - * - * Returned icon is what being inside the overlay that being displayed. - * - * Do not modify this icon (move, show, hide, resize, del, etc.). - * - * The icon can be set by elm_map_overlay_icon_set(). - * - * @see elm_map_overlay_icon_set() + * Widget is broken due to on-line service API breaks */ EAPI const Evas_Object * elm_map_overlay_icon_get(const Elm_Map_Overlay *overlay); /** - * Set the geographic coordinates of the overlay. - * - * @param overlay The overlay to be set geographic coordinates. - * @param lon Longitude to be set. - * @param lat Latitude to be set. - * - * Only default and bubble type overlay support this function. - * - * This sets the center coordinates of the overlay. It can be - * get by elm_map_overlay_region_get(). - * - * @see elm_map_overlay_region_get() + * Widget is broken due to on-line service API breaks */ EAPI void elm_map_overlay_region_set(Elm_Map_Overlay *overlay, double lon, double lat); /** - * Get the geographic coordinates of the overlay. - * - * @param overlay The overlay to return geographic coordinates. - * @param lon Pointer to store longitude. - * @param lat Pointer to store latitude. - * - * Only default and bubble type overlay support this function. - * - * This returns the center coordinates of the overlay. It can be - * set by elm_map_overlay_region_set(). - * - * @see elm_map_overlay_region_set() + * Widget is broken due to on-line service API breaks */ EAPI void elm_map_overlay_region_get(const Elm_Map_Overlay *overlay, double *lon, double *lat); - /** - * Set the object color of the overlay. - * - * @param overlay The overlay to be set color. - * @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 - * absence 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 overlay. 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. - * - * Function supports only ELM_MAP_OVERLAY_TYPE_CLASS, ELM_MAP_OVERLAY_TYPE_DEFAULT - * and ELM_MAP_OVERLAY_TYPE_ROUTE Elm_Map_Overlay_Type types. - * - * @see elm_map_overlay_color_get() + * Widget is broken due to on-line service API breaks */ EAPI void elm_map_overlay_color_set(Elm_Map_Overlay *overlay, int r, int g, int b, int a); /** - * Get the object color of the overlay. - * - * @param overlay The overlay to return color. - * @param r Pointer to store the red channel value. - * @param g Pointer to store the green channel value. - * @param b Pointer to store the blue channel value. - * @param a Pointer to store the alpha channel value. - * - * @see elm_map_overlay_color_set() + * Widget is broken due to on-line service API breaks */ EAPI void elm_map_overlay_color_get(const Elm_Map_Overlay *overlay, int *r, int *g, int *b, int *a); /** - * Show the given overlay at the center of the map, immediately. - * - * @param overlay The overlay to be center at. - * - * This causes map to @b redraw its viewport's contents to the - * region containing the given @p overlay's coordinates, that will be - * moved to the center of the map. - * - * @see elm_map_overlays_show() if more than one overlay need to be displayed. + * Widget is broken due to on-line service API breaks */ EAPI void elm_map_overlay_show(Elm_Map_Overlay *overlay); /** - * Move and zoom the map to display a list of overlays. - * - * @param overlays A list of #Elm_Map_Overlay handles. - * - * The map will be centered on the center point of the overlays in the list. - * Then the map will be zoomed in order to fit the overlays using the maximum - * zoom which allows display of all the overlays. - * - * @warning All the overlays should belong to the same map object. - * - * @see elm_map_overlay_show() to show a single overlay. + * Widget is broken due to on-line service API breaks */ EAPI void elm_map_overlays_show(Eina_List *overlays); /** - * Set the get callback function of the overlay. - * - * @param overlay The overlay to own the get callback function. - * @param get_cb The callback function. - * @param data The user callback data. - * - * If the overlay is clicked, the callback wll be called. - * The clicked overlay is returned by callback. - * - * You can add callback to the class overlay. If one of the group overlays in this class - * is clicked, callback will be called and return a virtual group overlays. - * - * You can delete this callback function by setting @c NULL. + * Widget is broken due to on-line service API breaks */ EAPI void elm_map_overlay_get_cb_set(Elm_Map_Overlay *overlay, Elm_Map_Overlay_Get_Cb get_cb, void *data); /** - * Set the del callback function to call when the overlay is deleted. - * - * @param overlay The overlay to own the del callback function. - * @param del_cb The callback function. - * @param data The user callback data. - * - * If the overlay is deleted, the callback wll be called. - * The deleted overlay is returned by callback. - * - * You can delete this callback function by setting @c NULL. - * - * @since 1.7 + * Widget is broken due to on-line service API breaks */ EAPI void elm_map_overlay_del_cb_set(Elm_Map_Overlay *overlay, Elm_Map_Overlay_Del_Cb del_cb, void *data); /** - * Add a new overlay member to the class overlay. - * - * @param clas The class overlay to add a new overlay. - * @param overlay The overlay to be added to the class overlay. - * - * @see elm_map_overlay_class_remove() + * Widget is broken due to on-line service API breaks */ EAPI void elm_map_overlay_class_append(Elm_Map_Overlay *clas, Elm_Map_Overlay *overlay); /** - * Remove a overlay from the class. - * - * @param clas The class overlay to delete the overlay. - * @param overlay The overlay to be deleted from the class overlay. - * - * @see elm_map_overlay_class_append() + * Widget is broken due to on-line service API breaks */ EAPI void elm_map_overlay_class_remove(Elm_Map_Overlay *clas, Elm_Map_Overlay *overlay); /** - * Set the maximum zoom from where the overlay members in the class can be - * grouped. - * - * @param clas The overlay class has overlay members. - * @param zoom The maximum zoom. - * - * Overlay members in the class only will be grouped when the map - * is displayed at less than @p zoom. - * - * @see elm_map_overlay_class_zoom_max_get() + * Widget is broken due to on-line service API breaks */ EAPI void elm_map_overlay_class_zoom_max_set(Elm_Map_Overlay *clas, int zoom); /** - * Get the maximum zoom from where the overlay members in the class can be - * grouped. - * - * @param clas The overlay class has overlay members. - * - * @return The maximum zoom. - * - * @see elm_map_overlay_class_zoom_max_set() + * Widget is broken due to on-line service API breaks */ EAPI int elm_map_overlay_class_zoom_max_get(const Elm_Map_Overlay *clas); /** - * Get the overlay members of the group overlay. - * - * @param grp The group overlay has overlay members. - * - * @return The list of group overlay members. - * - * The group overlays are virtual overlays. Those are shown and hidden dynamically. - * You can add callback to the class overlay. If one of the group overlays in this class - * is clicked, callback will be called and return a virtual group overlays. - * - * You can change the state (hidden, paused, etc.) or set the content - * or icon of the group overlays by changing the state of the class overlay. - * Do not modify the group overlay itself. - * - * @see elm_map_overlay_class_add() + * Widget is broken due to on-line service API breaks */ EAPI Eina_List * elm_map_overlay_group_members_get(const Elm_Map_Overlay *grp); /** - * Follow a other overlay. - * - * @param bubble The bubble overlay to follow a parent overlay. - * @param parent The parent overlay to be followed by the bubble overlay. - * - * Bubble overlay will follow the parent overlay's movement (hide, show, move). - * - * @see elm_map_overlay_bubble_add() + * Widget is broken due to on-line service API breaks */ EAPI void elm_map_overlay_bubble_follow(Elm_Map_Overlay *bubble, const Elm_Map_Overlay *parent); /** - * Add a content object to the bubble overlay. - * - * @param bubble The bubble overlay to add a content. - * @param content The content to be added to the bubble overlay. - * - * Added contents will be displayed inside the bubble overlay. - * - * @see elm_map_overlay_bubble_content_clear() + * Widget is broken due to on-line service API breaks */ EAPI void elm_map_overlay_bubble_content_append(Elm_Map_Overlay *bubble, Evas_Object *content); /** - * Clear all contents inside the bubble overlay. - * - * @param bubble The bubble overlay to clear the contents. - * - * This will delete all contents inside the bubble overlay. - * - * @see elm_map_overlay_bubble_content_append() + * Widget is broken due to on-line service API breaks */ EAPI void elm_map_overlay_bubble_content_clear(Elm_Map_Overlay *bubble); /** - * Add a geographic coordinates to the polygon overlay. - * - * @param overlay The polygon overlay to get a region. - * @param lon The longitude. - * @param lat The latitude. - * - * At least 3 regions should be added to show the polygon overlay. - * - * Overlay created with this method can be deleted with elm_map_overlay_del(). - * - * @see elm_map_overlay_polygon_add() - * @see elm_map_overlay_del() + * Widget is broken due to on-line service API breaks */ EAPI void elm_map_overlay_polygon_region_add(Elm_Map_Overlay *overlay, double lon, double lat); /** - * Remove a route from the map. - * - * @param route The route to remove. - * - * @see elm_map_route_add() + * Widget is broken due to on-line service API breaks */ EAPI void elm_map_route_del(Elm_Map_Route *route); /** - * Get the route distance in kilometers. - * - * @param route The route object. - * @return The distance of route (unit : km). + * Widget is broken due to on-line service API breaks */ 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. + * Widget is broken due to on-line service API breaks */ 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. + * Widget is broken due to on-line service API breaks */ 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_name_add() + * Widget is broken due to on-line service API breaks */ 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 to store the latitude. - * @param lon Pointer to store The longitude. - * - * This gets the coordinates of the @p name, created with one of the - * conversion functions. - * - * @see elm_map_name_add() + * Widget is broken due to on-line service API breaks */ 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 conversions - * between address and coordinates will be lost. - * - * @see elm_map_name_add() + * Widget is broken due to on-line service API breaks */ EAPI void elm_map_name_del(Elm_Map_Name *name); diff --git a/src/lib/elementary/elm_map_eo.legacy.h b/src/lib/elementary/elm_map_eo.legacy.h index 4e8968a578..fb7fb45c25 100644 --- a/src/lib/elementary/elm_map_eo.legacy.h +++ b/src/lib/elementary/elm_map_eo.legacy.h @@ -12,10 +12,9 @@ typedef Eo Elm_Map; #define _ELM_MAP_EO_TYPES /** - * @brief Set type of a external source (provider). + * @brief Widget is broken due to on-line service API breaks * - * See @ref elm_map_sources_get() See @ref elm_map_source_get() See - * @ref elm_map_source_set() + * Widget is broken due to on-line service API breaks * * @ingroup Elm_Map_Group */ @@ -29,10 +28,8 @@ typedef enum } Elm_Map_Source_Type; /** - * @brief Set type of transport used on route. - * - * See @ref elm_map_route_add() - * + * @brief Widget is broken due to on-line service API breaks + * * @ingroup Elm_Map_Group */ typedef enum @@ -47,10 +44,8 @@ typedef enum } Elm_Map_Route_Type; /** - * @brief Set the routing method, what should be prioritized, time or distance. - * - * See @ref elm_map_route_add() - * + * @brief Widget is broken due to on-line service API breaks + * * @ingroup Elm_Map_Group */ typedef enum @@ -65,550 +60,225 @@ typedef enum #endif /** - * @brief Set the minimum zoom of the source. - * - * @param[in] obj The object. - * @param[in] zoom Minimum zoom value to be used. - * + * @brief Widget is broken due to on-line service API breaks + * * @ingroup Elm_Map_Group */ EAPI void elm_map_zoom_min_set(Elm_Map *obj, int zoom); /** - * @brief Get the minimum zoom of the source. - * - * @param[in] obj The object. - * - * @return Minimum zoom value to be used. - * + * @brief Widget is broken due to on-line service API breaks + * * @ingroup Elm_Map_Group */ EAPI int elm_map_zoom_min_get(const Elm_Map *obj); /** - * @brief Rotate the map. - * - * @param[in] obj The object. - * @param[in] degree Angle from 0.0 to 360.0 to rotate around Z axis. - * @param[in] cx Rotation's center horizontal position. - * @param[in] cy Rotation's center vertical position. - * + * @brief Widget is broken due to on-line service API breaks + * * @ingroup Elm_Map_Group */ EAPI void elm_map_rotate_set(Elm_Map *obj, double degree, int cx, int cy); /** - * @brief Get the rotate degree of the map. - * - * @param[in] obj The object. - * @param[out] degree Angle from 0.0 to 360.0 to rotate around Z axis. - * @param[out] cx Rotation's center horizontal position. - * @param[out] cy Rotation's center vertical position. - * + * @brief Widget is broken due to on-line service API breaks + * * @ingroup Elm_Map_Group */ EAPI void elm_map_rotate_get(const Elm_Map *obj, double *degree, int *cx, int *cy); /** - * @brief Set the user agent used by the map object to access routing services. - * - * User agent is a client application implementing a network protocol used in - * communications within a clientserver distributed computing system - * - * The @c user_agent identification string will transmitted in a header field - * @c User-Agent. - * - * @param[in] obj The object. - * @param[in] user_agent The user agent to be used by the map. - * + * @brief Widget is broken due to on-line service API breaks + * * @ingroup Elm_Map_Group */ EAPI void elm_map_user_agent_set(Elm_Map *obj, const char *user_agent); /** - * @brief Get the user agent used by the map object. - * - * @param[in] obj The object. - * - * @return The user agent to be used by the map. - * + * @brief Widget is broken due to on-line service API breaks + * * @ingroup Elm_Map_Group */ EAPI const char *elm_map_user_agent_get(const Elm_Map *obj); /** - * @brief Set the maximum zoom of the source. - * - * @param[in] obj The object. - * @param[in] zoom Maximum zoom value to be used. - * + * @brief Widget is broken due to on-line service API breaks + * * @ingroup Elm_Map_Group */ EAPI void elm_map_zoom_max_set(Elm_Map *obj, int zoom); /** - * @brief Get the maximum zoom of the source. - * - * @param[in] obj The object. - * - * @return Maximum zoom value to be used. - * + * @brief Widget is broken due to on-line service API breaks + * * @ingroup Elm_Map_Group */ EAPI int elm_map_zoom_max_get(const Elm_Map *obj); /** - * @brief Get the current geographic coordinates of the map. - * - * This gets the current center coordinates of the map object. It can be set by - * @ref elm_map_region_bring_in and @ref elm_map_region_show. - * - * @param[in] obj The object. - * @param[out] lon Pointer to store longitude. - * @param[out] lat Pointer to store latitude. - * + * @brief Widget is broken due to on-line service API breaks + * * @ingroup Elm_Map_Group */ EAPI void elm_map_region_get(const Elm_Map *obj, double *lon, double *lat); /** - * @brief Return all overlays in the map object. - * - * This list includes group overlays also. So this can be changed dynamically - * while zooming and panning. - * - * @param[in] obj The object. - * - * @return The list of all overlays or @c null upon failure. - * - * @since 1.7 - * + * @brief Widget is broken due to on-line service API breaks + * * @ingroup Elm_Map_Group */ EAPI Eina_List *elm_map_overlays_get(const Elm_Map *obj); /** - * @brief Get the information of tile load status. - * - * This gets the current tile loaded status for the map object. - * - * @param[in] obj The object. - * @param[out] try_num Pointer to store number of tiles download requested. - * @param[out] finish_num Pointer to store number of tiles successfully - * downloaded. - * + * @brief Widget is broken due to on-line service API breaks + * * @ingroup Elm_Map_Group */ EAPI void elm_map_tile_load_status_get(const Elm_Map *obj, int *try_num, int *finish_num); /** - * @brief Set the current source of the map for a specific type. - * - * Map widget retrieves tile images that composes the map from a web service. - * This web service can be set with this method for #ELM_MAP_SOURCE_TYPE_TILE - * type. A different service can return a different maps with different - * information and it can use different zoom values. - * - * Map widget provides route data based on a external web service. This web - * service can be set with this method for #ELM_MAP_SOURCE_TYPE_ROUTE type. - * - * Map widget also provide geoname data based on a external web service. This - * web service can be set with this method for #ELM_MAP_SOURCE_TYPE_NAME type. - * - * The @c source_name need to match one of the names provided by - * @ref elm_map_sources_get. - * - * The current source can be get using @ref elm_map_source_get. - * - * @param[in] obj The object. - * @param[in] type Source type. - * @param[in] source_name The source to be used. - * + * @brief Widget is broken due to on-line service API breaks + * * @ingroup Elm_Map_Group */ EAPI void elm_map_source_set(Elm_Map *obj, Elm_Map_Source_Type type, const char *source_name); /** - * @brief Get the name of currently used source for a specific type. - * - * @param[in] obj The object. - * @param[in] type Source type. - * - * @return The name of the source in use. - * + * @brief Widget is broken due to on-line service API breaks + * * @ingroup Elm_Map_Group */ EAPI const char *elm_map_source_get(const Elm_Map *obj, Elm_Map_Source_Type type); /** - * @brief Add a new route to the map object. - * - * A route will be traced by point on coordinates ($flat, @c flon) to point on - * coordinates ($tlat, @c tlon), using the route service set with - * @ref elm_map_source_set. - * - * It will take @c 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 prioritize, the minor distance or - * the less time to be spend on the route. So @c 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 @ref elm_map_route_del - * and distance can be get with @ref elm_map_route_distance_get. - * - * @param[in] obj The object. - * @param[in] type The type of transport to be considered when tracing a route. - * @param[in] method The routing method, what should be prioritized. - * @param[in] flon The start longitude. - * @param[in] flat The start latitude. - * @param[in] tlon The destination longitude. - * @param[in] tlat The destination latitude. - * @param[in] route_cb The route to be traced. - * @param[in] data A pointer of user data. - * - * @return The created route or @c null upon failure. - * + * @brief Widget is broken due to on-line service API breaks + * * @ingroup Elm_Map_Group */ EAPI Elm_Map_Route *elm_map_route_add(Elm_Map *obj, Elm_Map_Route_Type type, Elm_Map_Route_Method method, double flon, double flat, double tlon, double tlat, Elm_Map_Route_Cb route_cb, void *data); /** - * @brief Add a track on the map. - * - * @param[in] obj The object. - * @param[in] emap The emap route object. - * - * @return The route object. This is an elm object of type Route. - * + * @brief Widget is broken due to on-line service API breaks + * * @ingroup Elm_Map_Group */ EAPI Efl_Canvas_Object *elm_map_track_add(Elm_Map *obj, void *emap); /** - * @brief Convert geographic coordinates (longitude, latitude) into canvas - * coordinates. - * - * This gets canvas x, y coordinates from longitude and latitude. The canvas - * coordinates mean x, y coordinate from current viewport. - * - * @param[in] obj The object. - * @param[in] lon The longitude to convert. - * @param[in] lat The latitude to convert. - * @param[out] x A pointer to horizontal coordinate. - * @param[out] y A pointer to vertical coordinate. - * + * @brief Widget is broken due to on-line service API breaks + * * @ingroup Elm_Map_Group */ EAPI void elm_map_region_to_canvas_convert(const Elm_Map *obj, double lon, double lat, int *x, int *y); /** - * @brief Add a new circle overlay to the map object. This overlay has a circle - * type. - * - * Overlay created with this method can be deleted with @ref - * elm_map_overlay_del. - * - * @param[in] obj The object. - * @param[in] lon The center longitude. - * @param[in] lat The center latitude. - * @param[in] radius The pixel length of radius. - * - * @return The created overlay or @c null upon failure. - * + * @brief Widget is broken due to on-line service API breaks + * * @ingroup Elm_Map_Group */ EAPI Elm_Map_Overlay *elm_map_overlay_circle_add(Elm_Map *obj, double lon, double lat, double radius); /** - * @brief Add a new class overlay to the map object. This overlay has a class - * type. - * - * This overlay is not shown before overlay members are appended. if overlay - * members in the same class are close, group overlays are created. If they are - * far away, group overlays are hidden. When group overlays are shown, they - * have default style layouts at first. - * - * You can change the state (hidden, paused, etc.) or set the content or icon - * of the group overlays by changing the state of the class overlay. Do not - * modify the group overlay itself. - * - * Also these changes have a influence on the overlays in the same class even - * if each overlay is alone and is not grouped. - * - * @param[in] obj The object. - * - * @return The created overlay or @c null upon failure. - * + * @brief Widget is broken due to on-line service API breaks + * * @ingroup Elm_Map_Group */ EAPI Elm_Map_Overlay *elm_map_overlay_class_add(Elm_Map *obj); /** - * @brief Add a new bubble overlay to the map object. This overlay has a bubble - * type. - * - * A bubble will not be displayed before geographic coordinates are set or any - * other overlays are followed. - * - * This overlay has a bubble style layout and icon or content can not be set. - * - * Overlay created with this method can be deleted with @ref - * elm_map_overlay_del. - * - * @param[in] obj The object. - * - * @return The created overlay or @c null upon failure. - * + * @brief Widget is broken due to on-line service API breaks + * * @ingroup Elm_Map_Group */ EAPI Elm_Map_Overlay *elm_map_overlay_bubble_add(Elm_Map *obj); /** - * @brief Get the names of available sources for a specific type. - * - * It will provide a list with all available sources. Current source can be set - * by @ref elm_map_source_set, or get with @ref elm_map_source_get. - * - * At least available sources of tile type are "Mapnik", "Osmarender", - * "CycleMap" and "Maplint". - * - * At least available sources of route type are "Yours". - * - * At least available sources of name type are "Nominatim". - * - * @param[in] obj The object. - * @param[in] type Source type. - * - * @return The char pointer array of source names. - * + * @brief Widget is broken due to on-line service API breaks + * * @ingroup Elm_Map_Group */ EAPI const char **elm_map_sources_get(const Elm_Map *obj, Elm_Map_Source_Type type); /** - * @brief Add a new polygon overlay to the map object. This overlay has a - * polygon type. - * - * At least 3 regions should be added to show the polygon overlay. - * - * Overlay created with this method can be deleted with @ref - * elm_map_overlay_del. - * - * @param[in] obj The object. - * - * @return The created overlay or @c null upon failure. - * + * @brief Widget is broken due to on-line service API breaks + * * @ingroup Elm_Map_Group */ EAPI Elm_Map_Overlay *elm_map_overlay_polygon_add(Elm_Map *obj); /** - * @brief Add a new line overlay to the map object. This overlay has a line - * type. - * - * Overlay created with this method can be deleted with @ref - * elm_map_overlay_del. - * - * @param[in] obj The object. - * @param[in] flon The start longitude. - * @param[in] flat The start latitude. - * @param[in] tlon The destination longitude. - * @param[in] tlat The destination latitude. - * - * @return The created overlay or @c null upon failure. - * + * @brief Widget is broken due to on-line service API breaks + * * @ingroup Elm_Map_Group */ EAPI Elm_Map_Overlay *elm_map_overlay_line_add(Elm_Map *obj, double flon, double flat, double tlon, double tlat); /** - * @brief Show the given coordinates at the center of the map, immediately. - * - * This causes map to redraw its viewport's contents to the region containing - * the given @c lat and @c lon, that will be moved to the center of the map. - * - * See @ref elm_map_region_bring_in for a function to move with animation. - * - * @param[in] obj The object. - * @param[in] lon Longitude to center at. - * @param[in] lat Latitude to center at. - * + * @brief Widget is broken due to on-line service API breaks + * * @ingroup Elm_Map_Group */ EAPI void elm_map_region_show(Elm_Map *obj, double lon, double lat); /** - * @brief Request a address or geographic coordinates(longitude, latitude) from - * a given address or geographic coordinate(longitude, latitude). - * - * If you want to get address from geographic coordinates, set input @c address - * as @c null and set @c lon, @c lat as you want to convert. If address is set - * except NULL, @c lon and @c lat are checked. - * - * To get the string for this address, @ref elm_map_name_address_get should be - * used after callback or "name,loaded" signal is called. - * - * To get the longitude and latitude, @ref elm_map_region_get should be used. - * - * @param[in] obj The object. - * @param[in] address The address. - * @param[in] lon The longitude. - * @param[in] lat The latitude. - * @param[in] name_cb The callback function. - * @param[in] data The user callback data. - * - * @return A #Elm_Map_Name handle for this coordinate. - * + * @brief Widget is broken due to on-line service API breaks + * * @ingroup Elm_Map_Group */ EAPI Elm_Map_Name *elm_map_name_add(const Elm_Map *obj, const char *address, double lon, double lat, Elm_Map_Name_Cb name_cb, void *data); /** - * @brief Requests a list of addresses corresponding to a given name. - * - * @internal - * - * @param[in] obj The object. - * @param[in] address The address. - * @param[in] name_cb The callback function. - * @param[in] data The user callback data. - * - * @since 1.8 - * + * @brief Widget is broken due to on-line service API breaks + * * @ingroup Elm_Map_Group */ EAPI void elm_map_name_search(const Elm_Map *obj, const char *address, Elm_Map_Name_List_Cb name_cb, void *data); /** - * @brief Animatedly bring in given coordinates to the center of the map. - * - * This causes map to jump to the given @c lat and @c 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 @ref elm_map_region_show for a function to avoid animation. - * - * @param[in] obj The object. - * @param[in] lon Longitude to center at. - * @param[in] lat Latitude to center at. - * + * @brief Widget is broken due to on-line service API breaks + * * @ingroup Elm_Map_Group */ EAPI void elm_map_region_bring_in(Elm_Map *obj, double lon, double lat); /** - * @brief Animatedly set the zoom level of the map and bring in given - * coordinates to the center of the map. - * - * This causes map to zoom into specific zoom level and also move to the given - * @c lat and @c lon coordinates and show it (by scrolling) in the center of - * the viewport concurrently. - * - * See also @ref elm_map_region_bring_in. - * - * @param[in] obj The object. - * @param[in] zoom The zoom level to set. - * @param[in] lon Longitude to center at. - * @param[in] lat Latitude to center at. - * - * @since 1.11 - * + * @brief Widget is broken due to on-line service API breaks + * * @ingroup Elm_Map_Group */ EAPI void elm_map_region_zoom_bring_in(Elm_Map *obj, int zoom, double lon, double lat); /** - * @brief Remove a track from the map. - * - * @param[in] obj The object. - * @param[in] route The track to remove. - * + * @brief Widget is broken due to on-line service API breaks + * * @ingroup Elm_Map_Group */ EAPI void elm_map_track_remove(Elm_Map *obj, Efl_Canvas_Object *route); /** - * @brief Add a new route overlay to the map object. This overlay has a route - * type. - * - * This overlay has a route style layout and icon or content can not be set. - * - * The color scheme can be changed by @ref elm_map_overlay_content_set. - * - * Overlay created with this method can be deleted with @ref - * elm_map_overlay_del. - * - * @param[in] obj The object. - * @param[in] route The route object to make a overlay. - * - * @return The created overlay or @c null upon failure. - * + * @brief Widget is broken due to on-line service API breaks + * * @ingroup Elm_Map_Group */ EAPI Elm_Map_Overlay *elm_map_overlay_route_add(Elm_Map *obj, const Elm_Map_Route *route); /** - * @brief Add a new scale overlay to the map object. This overlay has a scale - * type. - * - * The scale overlay shows the ratio of a distance on the map to the - * corresponding distance. - * - * Overlay created with this method can be deleted with @ref - * elm_map_overlay_del. - * - * @param[in] obj The object. - * @param[in] x horizontal pixel coordinate. - * @param[in] y vertical pixel coordinate. - * - * @return The created overlay or @c null upon failure. - * + * @brief Widget is broken due to on-line service API breaks + * * @ingroup Elm_Map_Group */ EAPI Elm_Map_Overlay *elm_map_overlay_scale_add(Elm_Map *obj, int x, int y); /** - * @brief Add a new overlay to the map object. This overlay has a default type. - * - * A overlay will be created and shown in a specific point of the map, defined - * by @c lon and @c lat. - * - * The created overlay has a default style layout before content or icon is - * set. If content or icon is set, those are displayed instead of default style - * layout. - * - * You can set by using @ref elm_map_overlay_content_set or @ref - * elm_map_overlay_icon_set. If @c null is set, default style is shown again. - * - * Overlay created with this method can be deleted by @ref elm_map_overlay_del. - * - * @param[in] obj The object. - * @param[in] lon The longitude of the overlay. - * @param[in] lat The latitude of the overlay. - * - * @return The created overlay or @c null upon failure. - * + * @brief Widget is broken due to on-line service API breaks + * * @ingroup Elm_Map_Group */ EAPI Elm_Map_Overlay *elm_map_overlay_add(Elm_Map *obj, double lon, double lat); /** - * @brief Convert canvas coordinates into geographic coordinates (longitude, - * latitude). - * - * This gets longitude and latitude from canvas x, y coordinates. The canvas - * coordinates mean x, y coordinate from current viewport. - * - * @param[in] obj The object. - * @param[in] x Horizontal coordinate of the point to convert. - * @param[in] y Vertical coordinate of the point to convert. - * @param[out] lon A pointer to the longitude. - * @param[out] lat A pointer to the latitude. - * + * @brief Widget is broken due to on-line service API breaks + * * @ingroup Elm_Map_Group */ EAPI void elm_map_canvas_to_region_convert(const Elm_Map *obj, int x, int y, double *lon, double *lat); diff --git a/src/lib/elementary/elm_map_legacy.h b/src/lib/elementary/elm_map_legacy.h index 309b56076b..517bc951d9 100644 --- a/src/lib/elementary/elm_map_legacy.h +++ b/src/lib/elementary/elm_map_legacy.h @@ -1,16 +1,6 @@ /** - * @brief 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 chosen. - * - * Valid sizes are 2^zoom, consequently the map may be smaller than the - * scroller view. - * - * See @ref elm_map_zoom_mode_set() See @ref elm_map_zoom_mode_get() - * + * @brief Widget is broken due to on-line service API breaks * @ingroup Elm_Map_Group */ typedef enum @@ -26,148 +16,64 @@ typedef enum } Elm_Map_Zoom_Mode; /** - * 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. - * + * Widget is broken due to on-line service API breaks * @ingroup Elm_Map_Group */ EAPI Evas_Object *elm_map_add(Evas_Object *parent); /** - * @brief Set the zoom level of the map. - * - * This sets the zoom level. - * - * It will respect limits defined by @ref elm_map_zoom_min_set and - * @ref elm_map_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 - * @ref elm_map_zoom_mode_set. - * - * @param[in] obj The object. - * @param[in] zoom The zoom level. - * + * @brief Widget is broken due to on-line service API breaks + * Widget is broken due to on-line service API breaks * @ingroup Elm_Map_Group */ EAPI void elm_map_zoom_set(Evas_Object *obj, int zoom); /** - * @brief Get the zoom level of the map. - * - * 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. - * - * @param[in] obj The object. - * - * @return The zoom level. - * + * @brief Widget is broken due to on-line service API breaks + * Widget is broken due to on-line service API breaks * @ingroup Elm_Map_Group */ EAPI int elm_map_zoom_get(const Evas_Object *obj); - /** - * @brief Set the zoom mode used by the map object. - * - * 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 - * @ref elm_map_zoom_mode_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. - * - * @param[in] obj The object. - * @param[in] 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. - * + * @brief Widget is broken due to on-line service API breaks + * Widget is broken due to on-line service API breaks * @ingroup Elm_Map_Group */ EAPI void elm_map_zoom_mode_set(Evas_Object *obj, Elm_Map_Zoom_Mode mode); /** - * @brief Get the zoom mode used by the map object. - * - * This function returns the current zoom mode used by the ma object. - * - * @param[in] obj The 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. - * + * @brief Widget is broken due to on-line service API breaks + * Widget is broken due to on-line service API breaks * @ingroup Elm_Map_Group */ EAPI Elm_Map_Zoom_Mode elm_map_zoom_mode_get(const Evas_Object *obj); /** - * @brief Enable or disable mouse wheel to be used to zoom in / out the map. - * - * Wheel is enabled by default. - * - * @param[in] obj The object. - * @param[in] disabled Use @c true to disable mouse wheel or @c false to enable - * it. - * + * @brief Widget is broken due to on-line service API breaks + * Widget is broken due to on-line service API breaks * @ingroup Elm_Map_Group */ EAPI void elm_map_wheel_disabled_set(Evas_Object *obj, Eina_Bool disabled); /** - * @brief Get a value whether mouse wheel is enabled or not. - * - * Mouse wheel can be used for the user to zoom in or zoom out the map. - * - * @param[in] obj The object. - * - * @return Use @c true to disable mouse wheel or @c false to enable it. - * + * @brief Widget is broken due to on-line service API breaks + * Widget is broken due to on-line service API breaks * @ingroup Elm_Map_Group */ EAPI Eina_Bool elm_map_wheel_disabled_get(const Evas_Object *obj); /** - * @brief Pause or unpause the map. - * - * This sets the paused state to on @c true or off @c 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. - * - * @param[in] obj The object. - * @param[in] paused Use @c true to pause the map @c obj or @c false to unpause - * it. - * + * @brief Widget is broken due to on-line service API breaks + * Widget is broken due to on-line service API breaks * @ingroup Elm_Map_Group */ EAPI void elm_map_paused_set(Evas_Object *obj, Eina_Bool paused); /** - * @brief Get a value whether map is paused or not. - * - * This gets the current paused state for the map object. - * - * @param[in] obj The object. - * - * @return Use @c true to pause the map @c obj or @c false to unpause it. - * + * @brief Widget is broken due to on-line service API breaks + * Widget is broken due to on-line service API breaks * @ingroup Elm_Map_Group */ EAPI Eina_Bool elm_map_paused_get(const Evas_Object *obj);