From: Bluezery <ohpowel@gmail.com>

Subject: [E-devel] [Patch][elm_map] Map overlay color & grouping &
route Fix

This is patch for elm_map

1. Default and Class overlay can be set color by
elm_map_overlay_color_set().
2. Fix test application  for map API testing more.
3. Fix grouping for enabling group callbacks. If overlay group is
clicked, callback will be called.
And elm_map_overlay_group_members_set() API will be added later to get
list of overlays in the group.
4. Simplify route overlay: Previously, many polygon objects are needed
for one route overlay.
But now  just one is needed.



SVN revision: 69554
This commit is contained in:
Bluezery 2012-03-22 05:23:19 +00:00 committed by Carsten Haitzler
parent 084dbf5845
commit 6309c07b04
4 changed files with 914 additions and 714 deletions

View File

@ -497,7 +497,7 @@ group { name: "elm/map/marker/radio/default";
item: size_max_h 58;
}
images {
image: "map_item.png" COMP;
image: "radio2.png" COMP;
}
parts {
part { name: "whole";
@ -508,7 +508,7 @@ group { name: "elm/map/marker/radio/default";
part { name: "base";
ignore_flags: ON_HOLD;
description { state: "default" 0.0;
image.normal: "map_item.png";
image.normal: "radio2.png";
}
}
part { name: "elm.icon";

View File

@ -16,6 +16,7 @@ typedef struct Overlay_Data
typedef struct Map_Source
{
Evas_Object *map;
Elm_Map_Source_Type type;
char *source_name;
} Map_Source;
@ -42,10 +43,11 @@ static Evas_Object *menu, *fs_win;
static Elm_Map_Route *route;
static Elm_Map_Name *name;
static Evas_Object *track;
static const char **source_names = NULL;
static Evas_Coord old_x, old_y;
static Evas_Coord old_d;
static Map_Source ms[SOURCE_MAX];
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
@ -79,6 +81,22 @@ _route_icon_get(Evas_Object *obj)
return icon;
}
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
_map_clicked(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
{
@ -157,6 +175,7 @@ _map_scroll(void *data __UNUSED__, Evas_Object *obj, void *event_info __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
@ -195,6 +214,7 @@ static void
_map_zoom_stop(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
{
printf("zoom,stop\n");
_bubble_parking_follow(obj);
}
static void
@ -249,7 +269,6 @@ _map_route_loaded(void *data __UNUSED__, Evas_Object *obj, void *event_info __UN
if (route_ovl) elm_map_overlay_del(route_ovl);
route_ovl = elm_map_overlay_route_add(obj, route);
elm_map_overlay_color_set(route_ovl, 255, 0, 0, 255);
}
static void
@ -313,19 +332,19 @@ map_bring_seoul(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUS
}
static void
map_paused_set(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
_paused_set(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
{
elm_map_paused_set(data, EINA_TRUE);
}
static void
map_paused_unset(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
_paused_unset(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
{
elm_map_paused_set(data, EINA_FALSE);
}
static void
map_zoom_in(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
_zoom_in(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
{
int zoom;
@ -335,7 +354,7 @@ map_zoom_in(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__
}
static void
map_zoom_out(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
_zoom_out(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
{
int zoom;
@ -345,19 +364,25 @@ map_zoom_out(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED_
}
static void
map_zoom_fit(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
_zoom_fit(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
{
elm_map_zoom_mode_set(data, ELM_MAP_ZOOM_MODE_AUTO_FIT);
}
static void
map_zoom_fill(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
_zoom_fill(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
{
elm_map_zoom_mode_set(data, ELM_MAP_ZOOM_MODE_AUTO_FILL);
}
static void
map_track_add(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
_zoom_manual(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
{
elm_map_zoom_mode_set(data, ELM_MAP_ZOOM_MODE_MANUAL);
}
static void
_track_add(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
{
Evas_Object *fs, *bg, *vbox, *hbox, *sep;
char *path = NULL;
@ -407,13 +432,13 @@ map_track_add(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED
static void
map_track_remove(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
_track_remove(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
{
elm_map_track_remove(data, track);
}
static void
map_rotate_cw(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
_rotate_cw(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
{
double d;
Evas_Coord x, y, w, h;
@ -428,7 +453,7 @@ map_rotate_cw(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED
}
static void
map_rotate_ccw(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
_rotate_ccw(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
{
double d;
Evas_Coord x, y, w, h;
@ -443,7 +468,7 @@ map_rotate_ccw(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSE
}
static void
map_rotate_reset(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
_rotate_reset(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
{
Evas_Coord x, y, w, h;
float half_w, half_h;
@ -455,103 +480,44 @@ map_rotate_reset(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNU
}
static void
map_zoom_min_set(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
_wheel_disable(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
{
elm_map_wheel_disabled_set(data, EINA_TRUE);
}
static void
_wheel_enable(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
{
elm_map_wheel_disabled_set(data, EINA_FALSE);
}
static void
_zoom_min_set(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
{
elm_map_zoom_min_set(data, 1);
}
static void
map_zoom_max_set(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
_zoom_max_set(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
{
elm_map_zoom_max_set(data, 10);
}
static void
map_source(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
src_set(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
{
Map_Source *s = data;
if (!s) return;
elm_map_source_set(s->map, ELM_MAP_SOURCE_TYPE_TILE, s->source_name);
elm_map_source_set(s->map, s->type, s->source_name);
}
/*
static void
map_marker_add(void *data)
{
int i;
Elm_Map_Group_Class *g_clas;
Elm_Map_Marker_Class *m_clas;
Overlay_Data *d = &data7;
if (*markers) return;
for (i =0; i<MARKER_MAX; i++)
{
d = &data7;
int r1 = rand() % (180*2*100);
if (r1<=180) r1 = -r1;
else r1 = r1 - 180*100;
int r2 = rand() % (85*2*100);
if (r2<=85) r2 = -r2;
else r2 = r2 - 85*100;
int style = rand() % 3;
if (!style) m_clas = itc1;
else if (style == 1) m_clas = itc2;
else
{
m_clas = itc_parking;
d = &parking;
}
style = rand() % 2;
if (!style) g_clas = itc_group1;
else g_clas = itc_group2;
markers[i] = elm_map_marker_add(data, r1/100., r2/100., m_clas, g_clas, d);
}
nb_elts += 1000;
printf("nb elements: %d\n", nb_elts);
}
static void
map_marker_remove(void *data __UNUSED__)
{
int i;
for (i = 0; i<MARKER_MAX; i++)
{
if (markers[i])
{
elm_map_marker_remove(markers[i]);
markers[i] = NULL;
}
}
}
static void
my_map_entry_focused(void *data __UNUSED__, Evas_Object *obj, void *event_info __UNUSED__)
{
const char *s = elm_scrolled_entry_entry_get(obj);
if (!strcmp(s, NAME_ENTRY_TEXT)) elm_scrolled_entry_entry_set(obj, "");
}
static void
my_map_entry_activated(void *data, Evas_Object *obj, void *event_info __UNUSED__)
{
const char *s = elm_scrolled_entry_entry_get(obj);
char *addr = strdup(s);
name = elm_map_name_add(data, addr, 0, 0, NULL, NULL);
if (addr) free (addr);
}
*/
static Evas_Object *
_box_get(Evas_Object *obj, Overlay_Data *data)
_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);
@ -562,13 +528,83 @@ _box_get(Evas_Object *obj, Overlay_Data *data)
evas_object_show(img);
elm_box_pack_end(bx, img);
label = elm_label_add(obj);
elm_object_text_set(label, "Wolves go!!");
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
_overlay_hide(void *data, Evas_Object *obj __UNUSED__, void *ev __UNUSED__)
{
elm_map_overlay_hide_set(data, EINA_TRUE);
}
static void
_overlay_pause(void *data, Evas_Object *obj __UNUSED__, void *ev __UNUSED__)
{
elm_map_overlay_paused_set(data, EINA_TRUE);
}
static void
_overlay_unpause(void *data, Evas_Object *obj __UNUSED__, void *ev __UNUSED__)
{
elm_map_overlay_paused_set(data, EINA_FALSE);
}
static void
_overlay_show(void *data, Evas_Object *obj __UNUSED__, void *ev __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 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.");
return label;
}
static Evas_Object *
_icon_get(Evas_Object *obj, Overlay_Data *data)
{
@ -580,19 +616,86 @@ _icon_get(Evas_Object *obj, Overlay_Data *data)
}
static void
_populate(void *data, Elm_Object_Item *menu_it)
_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) || (!menu_it) || (!source_names)) return;
for (idx = 0; source_names[idx]; idx++)
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;
ms[idx].map = data;
ms[idx].source_name = strdup(source_names[idx]);
elm_menu_item_add(menu, menu_it, "", source_names[idx], map_source,
&ms[idx]);
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", map_show_urmatt, data);
elm_menu_item_add(menu, parent, NULL, "Bring Seoul", map_bring_seoul, 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
@ -610,25 +713,19 @@ _map_mouse_down(void *data, Evas *evas __UNUSED__, Evas_Object *obj, void *event
}
else if (down->button == 3)
{
down_x = down->canvas.x;
down_y = down->canvas.y;
menu = elm_menu_add(obj);
menu_it = elm_menu_item_add(menu, NULL, NULL, "Source", NULL, NULL);
_populate(data, menu_it);
elm_menu_item_add(menu, NULL, NULL, "Show Urmatt", map_show_urmatt, data);
elm_menu_item_add(menu, NULL, NULL, "Bring Seoul", map_bring_seoul, data);
elm_menu_item_add(menu, NULL, NULL, "Paused Set", map_paused_set, data);
elm_menu_item_add(menu, NULL, NULL, "Paused Unset", map_paused_unset, data);
elm_menu_item_add(menu, NULL, NULL, "Zoom +", map_zoom_in, data);
elm_menu_item_add(menu, NULL, NULL, "Zoom -", map_zoom_out, data);
elm_menu_item_add(menu, NULL, NULL, "Zoom Fit", map_zoom_fit, data);
elm_menu_item_add(menu, NULL, NULL, "Zoom Fill", map_zoom_fill, data);
elm_menu_item_add(menu, NULL, NULL, "Add Track", map_track_add, data);
elm_menu_item_add(menu, NULL, NULL, "Remove Track", map_track_remove, data);
elm_menu_item_add(menu, NULL, NULL, "Add Marker", NULL, NULL);
elm_menu_item_add(menu, NULL, NULL, "Rotate CW", map_rotate_cw, data);
elm_menu_item_add(menu, NULL, NULL, "Rotate CCW", map_rotate_ccw, data);
elm_menu_item_add(menu, NULL, NULL, "Reset Rotate", map_rotate_reset, data);
elm_menu_item_add(menu, NULL, NULL, "Set Zoom Min to 1", map_zoom_min_set, data);
elm_menu_item_add(menu, NULL, NULL, "Set Zoom Max to 10", map_zoom_max_set, data);
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);
elm_menu_move(menu, down->canvas.x, down->canvas.y);
evas_object_show(menu);
@ -691,29 +788,25 @@ _overlay_cb(void *data __UNUSED__, Evas_Object *map, void *ev)
{
printf("Overlay clicked: ");
Elm_Map_Overlay *overlay = ev;
Evas_Object *bx;
Overlay_Data *od;
Elm_Map_Overlay_Type type = elm_map_overlay_type_get(overlay);
Overlay_Data *od = elm_map_overlay_data_get(overlay);
if (!od)
{
printf("No overlay data\n");
}
else if (elm_map_overlay_type_get(overlay) == ELM_MAP_OVERLAY_TYPE_DEFAULT)
{
// prevent duplication
if (!bubble_img) bubble_img = elm_map_overlay_bubble_add(map);
if (type != ELM_MAP_OVERLAY_TYPE_DEFAULT) return;
elm_map_overlay_bubble_follow(bubble_img, overlay);
bx = _box_get(map, od);
elm_map_overlay_bubble_content_clear(bubble_img);
elm_map_overlay_bubble_content_append(bubble_img, bx);
printf("overlay rendered\n");
}
else printf("not default type\n");
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);
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 __UNUSED__, Evas_Object *map, const Elm_Map_Overlay *ovl)
_parking_cb(void *data __UNUSED__, Evas_Object *map, Elm_Map_Overlay *ovl)
{
if (elm_map_overlay_type_get(ovl) != ELM_MAP_OVERLAY_TYPE_DEFAULT) return;
@ -723,11 +816,12 @@ _parking_cb(void *data __UNUSED__, Evas_Object *map, const Elm_Map_Overlay *ovl)
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_BOTTOM_LEFT);
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");
@ -739,10 +833,11 @@ _parking_cb(void *data __UNUSED__, Evas_Object *map, const Elm_Map_Overlay *ovl)
evas_object_resize(bubble, 125, 50);
evas_object_show(bubble);
bubble_parking = elm_map_overlay_add(map, lon + 0.0006, lat + 0.0006);
bubble_parking = elm_map_overlay_add(map, lon, lat);
elm_map_overlay_content_set(bubble_parking, bubble);
}
elm_map_overlay_region_set(bubble_parking, lon + 0.0006, lat + 0.0006);
else elm_map_overlay_region_set(bubble_parking, lon, lat);
elm_map_overlay_data_set(bubble_parking, ovl);
}
static void
@ -772,6 +867,9 @@ test_map(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __
{
Evas_Object *win, *bg, *map;
int idx = 0;
const char **tile_srcs;
const char **route_srcs;
const char **name_srcs;
win = elm_win_add(NULL, "map", ELM_WIN_BASIC);
elm_win_title_set(win, "Map");
@ -785,7 +883,7 @@ test_map(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __
map = elm_map_add(win);
if (map)
{
Elm_Map_Overlay *ovl_1, *ovl_2, *ovl_3, *ovl_4, *ovl_5, *ovl6;
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;
@ -794,11 +892,21 @@ test_map(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __
srand(time(NULL));
source_names = elm_map_sources_get(map, ELM_MAP_SOURCE_TYPE_TILE);
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 (!source_names) return;
printf("map sources [ ");
for (idx = 0; source_names[idx] ; idx++) printf("%s, ", source_names[idx]);
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);
@ -837,11 +945,16 @@ test_map(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __
// 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);
ovl6 = elm_map_overlay_add(map, 7.31432, 48.856785);
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);
@ -852,7 +965,7 @@ test_map(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __
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(ovl6, &data6);
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);
@ -861,17 +974,17 @@ test_map(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __
// Append overlays to groups
grp1 = elm_map_overlay_class_add(map);
elm_map_overlay_displayed_zoom_min_set(grp1, 3);
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, ovl6);
evas_object_smart_callback_add(map, "overlay,clicked", _overlay_cb, map);
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);
@ -883,8 +996,9 @@ test_map(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __
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);
parking5 = elm_map_overlay_add(map, 127.05431, 37.25873);
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);
@ -894,6 +1008,7 @@ test_map(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __
// 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);

File diff suppressed because it is too large Load Diff

View File

@ -166,7 +166,8 @@ typedef enum _Elm_Map_Overlay_Type
ELM_MAP_OVERLAY_TYPE_DEFAULT,
ELM_MAP_OVERLAY_TYPE_CLASS,
ELM_MAP_OVERLAY_TYPE_BUBBLE,
ELM_MAP_OVERLAY_TYPE_ROUTE
ELM_MAP_OVERLAY_TYPE_ROUTE,
ELM_MAP_OVERLAY_TYPE_GROUP
} Elm_Map_Overlay_Type;
typedef struct _Elm_Map_Marker Elm_Map_Marker; /**< A marker to be shown in a specific point of the map. Can be created with elm_map_marker_add() and deleted with elm_map_marker_remove(). */
@ -181,9 +182,9 @@ typedef void (*Elm_Map_Marker_Del_Func)(Evas_Object *obj,
typedef Evas_Object *(*Elm_Map_Marker_Icon_Get_Func)(Evas_Object *obj, Elm_Map_Marker *marker, void *data); /**< Icon fetching class function for marker classes. */
typedef Evas_Object *(*Elm_Map_Group_Icon_Get_Func)(Evas_Object *obj, void *data); /**< Icon fetching class function for markers group classes. */
typedef void (*Elm_Map_Overlay_Get_Cb)(void *data, Evas_Object *map, const Elm_Map_Overlay *overlay); /**< Get callback function for the overlay. */
typedef void (*Elm_Map_Name_Cb)(void *data, Evas_Object *map, const Elm_Map_Name *name); /**< Async-callback function for the name request. */
typedef void (*Elm_Map_Route_Cb)(void *data, Evas_Object *map, const Elm_Map_Route *route); /**< Async-callback function for the route request. */
typedef void (*Elm_Map_Overlay_Get_Cb)(void *data, Evas_Object *map, Elm_Map_Overlay *overlay); /**< Get callback function for the overlay. */
typedef void (*Elm_Map_Name_Cb)(void *data, Evas_Object *map, Elm_Map_Name *name); /**< Async-callback function for the name request. */
typedef void (*Elm_Map_Route_Cb)(void *data, Evas_Object *map, Elm_Map_Route *route); /**< Async-callback function for the route request. */
/**
* Add a new map widget to the given parent Elementary (container) object.
@ -288,7 +289,7 @@ EAPI Elm_Map_Zoom_Mode elm_map_zoom_mode_get(const Evas_Object *obj);
* @param obj The map object.
* @param zoom New minimum zoom value to be used.
*
* By default, it's 0.
* @see elm_map_zoom_min_get() for details.
*
* @ingroup Map
*/
@ -312,7 +313,7 @@ EAPI int elm_map_zoom_min_get(const Evas_Object *obj);
* @param obj The map object.
* @param zoom New maximum zoom value to be used.
*
* By default, it's 18.
* @see elm_map_zoom_max_get() for details.
*
* @ingroup Map
*/
@ -324,7 +325,7 @@ EAPI void elm_map_zoom_max_set(Evas_Object *obj, int zoom);
* @param obj The map object.
* @return Returns the maximum zoom of the source.
*
* @see elm_map_zoom_min_set() for details.
* @see elm_map_zoom_max_set() for details.
*
* @ingroup Map
*/
@ -932,6 +933,8 @@ EAPI void elm_map_overlays_show(Eina_List *overlays);
* @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 delete this callback function by setting @c NULL.
*
* @ingroup Map
@ -951,8 +954,10 @@ EAPI void elm_map_overlay_get_cb_set(Elm_Map_Overlay *overlay, Elm_Map_Overlay_G
* 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 changed the state (hidden, paused, etc.) or set the content
* or icon of the group overlays.
* You can change the state (hidden, paused, etc.) or set the content
* or icon of the group overlays by chaning the state of the class overlay.
* Do not control 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.
*
@ -1005,7 +1010,8 @@ EAPI void elm_map_overlay_class_remove(Elm_Map_Overlay *clas, E
EAPI void elm_map_overlay_class_zoom_max_set(Elm_Map_Overlay *clas, int zoom);
/**
* Get the zoom from where the overlay members in the class are no more grouped.
* Get the maximum zoom from where the overlay members in the class can be
* grouped.
*
* @param clas The overlay class has overlay members.
*
@ -1054,7 +1060,7 @@ EAPI Elm_Map_Overlay * elm_map_overlay_bubble_add(Evas_Object *obj);
*
* @ingroup Map
*/
EAPI void elm_map_overlay_bubble_follow(Elm_Map_Overlay *bubble, Elm_Map_Overlay *parent);
EAPI void elm_map_overlay_bubble_follow(Elm_Map_Overlay *bubble, const Elm_Map_Overlay *parent);
/**
* Add a content object to the bubble overlay.
@ -1081,7 +1087,6 @@ EAPI void elm_map_overlay_bubble_content_append(Elm_Map_Overlay
*
* @ingroup Map
*/
EAPI void elm_map_overlay_bubble_content_clear(Elm_Map_Overlay *bubble);
/**
@ -1225,7 +1230,7 @@ EAPI const char *elm_map_source_get(const Evas_Object *obj, Elm_Map_So
* of #ELM_MAP_ROUTE_METHOD_SHORTEST or #ELM_MAP_ROUTE_METHOD_FASTEST.
*
* Routes created with this method can be deleted with
* elm_map_route_remove(),
* elm_map_route_remove(),
* and distance can be get with elm_map_route_distance_get().
*
* @see elm_map_route_remove()