upstream merge: removed all custom enum & url callback of elm_map
[framework/uifw/elementary.git] / src / bin / test_map.c
1 #include <Elementary.h>
2 #ifdef HAVE_CONFIG_H
3 # include "elementary_config.h"
4 #endif
5 #ifndef ELM_LIB_QUICKLAUNCH
6
7 #define SOURCE_MAX 10
8 #define MARKER_MAX 1000
9 #define NAME_ENTRY_TEXT "Enter freeform address"
10
11 typedef struct Marker_Data
12 {
13    const char *file;
14 } Marker_Data;
15
16 typedef struct Map_Source
17 {
18    Evas_Object *map;
19    char *source_name;
20 } Map_Source;
21
22 static Elm_Map_Marker_Class *itc1, *itc2, *itc_parking;
23 static Elm_Map_Group_Class *itc_group1, *itc_group2, *itc_group_parking;
24
25 static Evas_Object *rect, *menu;
26 static int nb_elts;
27 /*static Elm_Map_Marker *markers[MARKER_MAX];*/
28 static Elm_Map_Marker *route_from, *route_to;
29 static Elm_Map_Route *route;
30 static Elm_Map_Name *name;
31 static const char **source_names = NULL;
32 static Evas_Coord old_x, old_y;
33 static Evas_Coord old_d;
34 static Map_Source ms[SOURCE_MAX];
35
36 Marker_Data data1 = {PACKAGE_DATA_DIR"/images/logo.png"};
37 Marker_Data data2 = {PACKAGE_DATA_DIR"/images/logo_small.png"};
38 Marker_Data data3 = {PACKAGE_DATA_DIR"/images/panel_01.jpg"};
39 Marker_Data data4 = {PACKAGE_DATA_DIR"/images/plant_01.jpg"};
40 Marker_Data data5 = {PACKAGE_DATA_DIR"/images/rock_01.jpg"};
41 Marker_Data data6 = {PACKAGE_DATA_DIR"/images/rock_02.jpg"};
42 Marker_Data data7 = {PACKAGE_DATA_DIR"/images/sky_01.jpg"};
43 Marker_Data data8 = {PACKAGE_DATA_DIR"/images/sky_02.jpg"};
44 Marker_Data data9 = {PACKAGE_DATA_DIR"/images/sky_03.jpg"};
45 Marker_Data data10 = {PACKAGE_DATA_DIR"/images/sky_03.jpg"};
46 Marker_Data data11= {PACKAGE_DATA_DIR"/images/wood_01.jpg"};
47
48 Marker_Data data_parking= {PACKAGE_DATA_DIR"/images/parking.png"};
49
50 static Evas_Object * _marker_get(Evas_Object *obj, Elm_Map_Marker *marker __UNUSED__, void *data);
51 static Evas_Object * _group_icon_get(Evas_Object *obj, void *data);
52
53 static void
54 my_map_clicked(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
55 {
56    printf("clicked\n");
57 }
58
59 static void
60 my_map_press(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
61 {
62    printf("press\n");
63 }
64
65 static void
66 my_map_longpressed(void *data, Evas_Object *obj __UNUSED__, void *event_info)
67 {
68    double lon, lat;
69    Evas_Coord ox, oy, x, y, w, h;
70    int zoom;
71    Evas_Event_Mouse_Down *down = (Evas_Event_Mouse_Down *)event_info;
72    if (!down) return;
73
74    evas_object_geometry_get(data, &ox, &oy, &w, &h);
75    zoom = elm_map_zoom_get(data);
76    elm_map_geo_region_get(obj, &lon, &lat);
77    elm_map_utils_convert_geo_into_coord(obj, lon, lat, pow(2.0, zoom) * 256, &x, &y);
78    x += down->output.x - (w / 2) - ox;
79    y += down->output.y - (h / 2) - oy;
80    elm_map_utils_convert_coord_into_geo(obj, x, y, pow(2.0, zoom) * 256, &lon, &lat);
81
82    name = elm_map_utils_convert_coord_into_name(data, lon, lat);
83 }
84
85 static void
86 my_map_clicked_double(void *data, Evas_Object *obj, void *event_info)
87 {
88    double lon, lat;
89    double flon, flat, tlon, tlat;
90    Evas_Coord ox, oy, x, y, w, h, rx, ry, tx, ty;
91    double d;
92    int zoom;
93    Evas_Coord size;
94    Evas_Event_Mouse_Down *down = (Evas_Event_Mouse_Down *)event_info;
95    if (!down) return;
96
97    evas_object_geometry_get(data, &ox, &oy, &w, &h);
98    zoom = elm_map_zoom_get(data);
99    if (zoom < 5) return;
100    size = pow(2.0, zoom) * 256;
101    elm_map_geo_region_get(obj, &lon, &lat);
102    elm_map_utils_convert_geo_into_coord(obj, lon, lat, size, &x, &y);
103
104    rx = x;
105    ry = y;
106    x += down->output.x - ((float)w * 0.5) - ox;
107    y += down->output.y - ((float)h * 0.5) - oy;
108    elm_map_rotate_get(data, &d, NULL, NULL);
109    elm_map_utils_rotate_coord(data, x, y, rx, ry, -d, &tx, &ty);
110    elm_map_utils_convert_coord_into_geo(obj, tx, ty, size, &lon, &lat);
111
112    itc1 = elm_map_marker_class_new(data);
113
114    elm_map_marker_class_del_cb_set(itc1, NULL);
115
116    itc_group1 = elm_map_group_class_new(data);
117    elm_map_group_class_icon_cb_set(itc_group1, _group_icon_get);
118    elm_map_group_class_data_set(itc_group1, (void *)PACKAGE_DATA_DIR"/images/bubble.png");
119    elm_map_group_class_style_set(itc_group1, "empty");
120    elm_map_group_class_zoom_displayed_set(itc_group1, 5);
121
122    if (route_from && route_to)
123      {
124         elm_map_marker_remove(route_from);
125         route_from = NULL;
126         elm_map_marker_remove(route_to);
127         route_to = NULL;
128         elm_map_route_remove(route);
129      }
130
131    if (!route_from) route_from = elm_map_marker_add(data, lon, lat, itc1, itc_group1, NULL);
132    else route_to = elm_map_marker_add(data, lon, lat, itc1, itc_group1, NULL);
133
134    if (route_from && route_to)
135      {
136         elm_map_marker_region_get(route_from, &flon, &flat);
137         elm_map_marker_region_get(route_to, &tlon, &tlat);
138         route = elm_map_route_add(data, ELM_MAP_ROUTE_TYPE_MOTOCAR, ELM_MAP_ROUTE_METHOD_FASTEST, flon, flat, tlon, tlat);
139         elm_map_route_color_set(route, 255, 0, 0, 255);
140      }
141 }
142
143 static void
144 my_map_load_detail(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
145 {
146    printf("load,detail\n");
147 }
148
149 static void
150 my_map_loaded_detail(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
151 {
152    printf("loaded,detail\n");
153 }
154
155 static void
156 my_map_zoom_start(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
157 {
158    printf("zoom,start\n");
159 }
160
161 static void
162 my_map_zoom_stop(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
163 {
164    printf("zoom,stop\n");
165 }
166
167 static void
168 my_map_zoom_change(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
169 {
170    printf("zoom,change\n");
171 }
172
173 static void
174 my_map_anim_start(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
175 {
176    printf("anim,start\n");
177 }
178
179 static void
180 my_map_anim_stop(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
181 {
182    printf("anim,stop\n");
183 }
184
185 static void
186 my_map_drag_start(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
187 {
188    evas_object_smart_callback_del(data, "longpressed", my_map_longpressed);
189 }
190
191 static void
192 my_map_drag_stop(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
193 {
194    evas_object_smart_callback_add(data, "longpressed", my_map_longpressed, data);
195 }
196
197 static void
198 my_map_scroll(void *data __UNUSED__, Evas_Object *obj, void *event_info __UNUSED__)
199 {
200    double lon, lat;
201    elm_map_geo_region_get(obj, &lon, &lat);
202    printf("scroll longitude : %f latitude : %f\n", lon, lat);
203 }
204
205 static void
206 my_map_downloaded(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
207 {
208    int try_num, finish_num;
209    elm_map_utils_downloading_status_get(data, &try_num, &finish_num);
210    printf("downloaded : %d / %d\n", finish_num, try_num);
211 }
212
213 static void
214 my_map_route_load(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
215 {
216    printf("route_load\n");
217 }
218
219 static void
220 my_map_route_loaded(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
221 {
222    double d;
223    const char *w, *n;
224    d = elm_map_route_distance_get(route);
225    printf("route distance = %lf km\n", d);
226
227    w = elm_map_route_waypoint_get(route);
228    if (w) printf("[waypoints]\n%s\n", w);
229
230    n = elm_map_route_node_get(route);
231    if (n) printf("[nodes]\n%s\n", n);
232 }
233
234 static void
235 my_map_name_load(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
236 {
237    printf("name_load\n");
238 }
239
240 static void
241 my_map_name_loaded(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
242 {
243    if (!name) return;
244    double lon, lat;
245    const char *addr = elm_map_name_address_get(name);
246    elm_map_name_region_get(name, &lon, &lat);
247    if (addr)
248      {
249         printf("name of [lon = %lf, lat = %lf] is %s\n", lon, lat, addr);
250         if ((lon != 0.0) && (lat !=0.0))
251           {
252              Eina_Bool b = elm_map_paused_get(data);
253              elm_map_paused_set(data, EINA_TRUE);
254              elm_map_zoom_mode_set(data, ELM_MAP_ZOOM_MODE_MANUAL);
255              elm_map_geo_region_show(data, lon, lat);
256              elm_map_zoom_set(data, 18);
257              elm_map_paused_set(data, b);
258           }
259      }
260    elm_map_name_remove(name);
261 }
262
263 static void
264 map_show_seoul(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
265 {
266    Eina_Bool b = elm_map_paused_get(data);
267    elm_map_paused_set(data, EINA_TRUE);
268    elm_map_zoom_mode_set(data, ELM_MAP_ZOOM_MODE_MANUAL);
269    elm_map_geo_region_show(data, 126.977969, 37.566535);
270    elm_map_zoom_set(data, 18);
271    elm_map_paused_set(data, b);
272 }
273
274 static void
275 map_bring_seoul(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
276 {
277    elm_map_geo_region_bring_in(data, 126.977969, 37.566535);
278 }
279
280 static void
281 map_paused_set(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
282 {
283    elm_map_paused_set(data, EINA_TRUE);
284 }
285
286 static void
287 map_paused_unset(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
288 {
289    elm_map_paused_set(data, EINA_FALSE);
290 }
291
292 static void
293 map_zoom_in(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
294 {
295    int zoom;
296
297    zoom = elm_map_zoom_get(data) + 1;
298    elm_map_zoom_mode_set(data, ELM_MAP_ZOOM_MODE_MANUAL);
299    elm_map_zoom_set(data, zoom);
300 }
301
302 static void
303 map_zoom_out(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
304 {
305    int zoom;
306
307    zoom = elm_map_zoom_get(data) - 1;
308    elm_map_zoom_mode_set(data, ELM_MAP_ZOOM_MODE_MANUAL);
309    elm_map_zoom_set(data, zoom);
310 }
311
312 static void
313 map_zoom_fit(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
314 {
315    elm_map_zoom_mode_set(data, ELM_MAP_ZOOM_MODE_AUTO_FIT);
316 }
317
318 static void
319 map_zoom_fill(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
320 {
321    elm_map_zoom_mode_set(data, ELM_MAP_ZOOM_MODE_AUTO_FILL);
322 }
323
324 static void
325 map_rotate_cw(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
326 {
327    double d;
328    Evas_Coord x, y, w, h;
329    float half_w, half_h;
330    evas_object_geometry_get(data, &x, &y, &w, &h);
331    half_w = (float)w * 0.5;
332    half_h = (float)h * 0.5;
333
334    elm_map_rotate_get(data, &d, NULL, NULL);
335    d += 15.0;
336    elm_map_rotate_set(data, d, x + half_w, y + half_h);
337 }
338
339 static void
340 map_rotate_ccw(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
341 {
342    double d;
343    Evas_Coord x, y, w, h;
344    float half_w, half_h;
345    evas_object_geometry_get(data, &x, &y, &w, &h);
346    half_w = (float)w * 0.5;
347    half_h = (float)h * 0.5;
348
349    elm_map_rotate_get(data, &d, NULL, NULL);
350    d -= 15.0;
351    elm_map_rotate_set(data, d, x + half_w, y + half_h);
352 }
353
354 static void
355 map_rotate_reset(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
356 {
357    Evas_Coord x, y, w, h;
358    float half_w, half_h;
359    evas_object_geometry_get(data, &x, &y, &w, &h);
360    half_w = (float)w * 0.5;
361    half_h = (float)h * 0.5;
362
363    elm_map_rotate_set(data, 0.0, x + half_w, y + half_h);
364 }
365
366 static void
367 map_source(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
368 {
369    Map_Source *ms = data;
370
371    if (!ms) return;
372    elm_map_source_name_set(ms->map, ms->source_name);
373 }
374
375 /*
376 static void
377 map_marker_add(void *data)
378 {
379    int i;
380    Elm_Map_Group_Class *g_clas;
381    Elm_Map_Marker_Class *m_clas;
382    Marker_Data *d = &data7;
383
384    if (*markers) return;
385    for (i =0; i<MARKER_MAX; i++)
386      {
387         d = &data7;
388
389         int r1 = rand() % (180*2*100);
390         if (r1<=180) r1 = -r1;
391         else r1 = r1 - 180*100;
392
393         int r2 = rand() % (85*2*100);
394         if (r2<=85) r2 = -r2;
395         else r2 = r2 - 85*100;
396
397         int style = rand() % 3;
398         if (!style) m_clas = itc1;
399         else if (style == 1) m_clas = itc2;
400         else
401           {
402              m_clas = itc_parking;
403              d = &data_parking;
404           }
405
406         style = rand() % 2;
407         if (!style) g_clas = itc_group1;
408         else g_clas = itc_group2;
409
410         markers[i] = elm_map_marker_add(data, r1/100., r2/100., m_clas, g_clas, d);
411      }
412    nb_elts += 1000;
413    printf("nb elements: %d\n", nb_elts);
414 }
415
416 static void
417 map_marker_remove(void *data __UNUSED__)
418 {
419    int i;
420
421    for (i = 0; i<MARKER_MAX; i++)
422      {
423         if (markers[i])
424           {
425              elm_map_marker_remove(markers[i]);
426              markers[i] = NULL;
427           }
428      }
429 }
430
431 static void
432 my_map_entry_focused(void *data __UNUSED__, Evas_Object *obj, void *event_info __UNUSED__)
433 {
434    const char *s = elm_scrolled_entry_entry_get(obj);
435    if (!strcmp(s, NAME_ENTRY_TEXT)) elm_scrolled_entry_entry_set(obj, "");
436 }
437
438 static void
439 my_map_entry_activated(void *data, Evas_Object *obj, void *event_info __UNUSED__)
440 {
441    const char *s = elm_scrolled_entry_entry_get(obj);
442    char *addr = strdup(s);
443    name = elm_map_utils_convert_name_into_coord(data, addr);
444    if (addr) free (addr);
445 }
446 */
447
448 static Evas_Object *
449 _marker_get(Evas_Object *obj, Elm_Map_Marker *marker __UNUSED__, void *data)
450 {
451    Marker_Data *d = data;
452
453    Evas_Object *bx = elm_box_add(obj);
454    evas_object_show(bx);
455
456    if (d == &data3)
457      {
458         Evas_Object *icon = elm_icon_add(obj);
459         elm_icon_file_set(icon, d->file, NULL);
460         evas_object_show(icon);
461
462         Evas_Object *o = elm_button_add(obj);
463         elm_button_icon_set(o, icon);
464         evas_object_show(o);
465         elm_box_pack_end(bx, o);
466      }
467    else
468      {
469         Evas_Object *o = evas_object_image_add(evas_object_evas_get(obj));
470         evas_object_image_file_set(o, d->file, NULL);
471         evas_object_image_filled_set(o, EINA_TRUE);
472         evas_object_size_hint_min_set(o, 64, 64);
473         evas_object_show(o);
474         elm_box_pack_end(bx, o);
475
476         Evas_Object *lbl = elm_label_add(obj);
477         elm_label_label_set(lbl, "Wolves Go !");
478         evas_object_show(lbl);
479         elm_box_pack_end(bx, lbl);
480      }
481
482    return bx;
483 }
484
485 static Evas_Object *
486 _icon_get(Evas_Object *obj, Elm_Map_Marker *marker __UNUSED__, void *data)
487 {
488    Marker_Data *d = data;
489
490    Evas_Object *icon = elm_icon_add(obj);
491    elm_icon_file_set(icon, d->file, NULL);
492    evas_object_show(icon);
493
494    return icon;
495 }
496
497 static Evas_Object *
498 _group_icon_get(Evas_Object *obj, void *data)
499 {
500    char *file = data;
501
502    Evas_Object *icon = elm_icon_add(obj);
503    elm_icon_file_set(icon, file, NULL);
504    evas_object_show(icon);
505
506    return icon;
507 }
508
509 static void
510 _map_move_resize_cb(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
511 {
512    int x,y,w,h;
513
514    evas_object_geometry_get(data,&x,&y,&w,&h);
515    evas_object_resize(rect,w,h);
516    evas_object_move(rect,x,y);
517 }
518
519 static void
520 _populate(void *data, Elm_Menu_Item *item)
521 {
522    int idx;
523
524    if ((!data) || (!item) || (!source_names)) return;
525    for (idx = 0; source_names[idx]; idx++)
526      {
527         if (idx >= SOURCE_MAX) break;
528         ms[idx].map = data;
529         ms[idx].source_name = strdup(source_names[idx]);
530         elm_menu_item_add(menu, item, "", source_names[idx], map_source, &ms[idx]);
531      }
532 }
533
534 static void
535 _map_mouse_down(void *data, Evas *evas __UNUSED__, Evas_Object *obj, void *event_info)
536 {
537    Evas_Event_Mouse_Down *down = event_info;
538    Elm_Menu_Item *item;
539    if (!down) return;
540
541    if (down->button == 2)
542      {
543         old_x = down->output.x;
544         old_y = down->output.y;
545         old_d = 0.0;
546      }
547    else if (down->button == 3)
548      {
549         menu = elm_menu_add(obj);
550         item = elm_menu_item_add(menu, NULL, NULL, "Source", NULL, NULL);
551         _populate(data, item);
552         elm_menu_item_add(menu, NULL, NULL, "Show Seoul", map_show_seoul, data);
553         elm_menu_item_add(menu, NULL, NULL, "Bring Seoul", map_bring_seoul, data);
554         elm_menu_item_add(menu, NULL, NULL, "Paused Set", map_paused_set, data);
555         elm_menu_item_add(menu, NULL, NULL, "Paused Unset", map_paused_unset, data);
556         elm_menu_item_add(menu, NULL, NULL, "Zoom +", map_zoom_in, data);
557         elm_menu_item_add(menu, NULL, NULL, "Zoom -", map_zoom_out, data);
558         elm_menu_item_add(menu, NULL, NULL, "Zoom Fit", map_zoom_fit, data);
559         elm_menu_item_add(menu, NULL, NULL, "Zoom Fill", map_zoom_fill, data);
560         elm_menu_item_add(menu, NULL, NULL, "Add Marker", NULL, NULL);
561         elm_menu_item_add(menu, NULL, NULL, "Rotate CW", map_rotate_cw, data);
562         elm_menu_item_add(menu, NULL, NULL, "Rotate CCW", map_rotate_ccw, data);
563         elm_menu_item_add(menu, NULL, NULL, "Reset Rotate", map_rotate_reset, data);
564
565         elm_menu_move(menu, down->canvas.x, down->canvas.y);
566         evas_object_show(menu);
567      }
568 }
569
570 static void
571 _map_mouse_move(void *data, Evas *evas __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info)
572 {
573    Evas_Event_Mouse_Move *move = event_info;
574    Evas_Coord x, y, w, h;
575    float half_w, half_h;
576    int d, d_diff;
577    double cur_d;
578    if (!move) return;
579
580    if (move->buttons == 2)
581      {
582         evas_object_geometry_get(data, &x, &y, &w, &h);
583         half_w = (float)w * 0.5;
584         half_h = (float)h * 0.5;
585         elm_map_rotate_get(data, &cur_d, NULL, NULL);
586
587         d = move->cur.output.x - old_x;
588         if (!old_d) old_d = d;
589         else
590           {
591              d_diff = old_d - d;
592              if (d_diff > 0)
593                {
594                   old_d --;
595                   cur_d += 1.0;
596                }
597              else if (d_diff < 0)
598                {
599                   old_d ++;
600                   cur_d -= 1.0;
601                }
602              old_d = d;
603              elm_map_rotate_set(data, cur_d, x + half_w, y + half_h);
604           }
605      }
606 }
607
608 static void
609 _map_mouse_up(void *data __UNUSED__, Evas *evas __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info)
610 {
611    Evas_Event_Mouse_Up *up = event_info;
612    if (!up) return;
613
614    if (up->button == 2)
615      {
616         old_x = 0;
617         old_y = 0;
618      }
619 }
620
621 void
622 test_map(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
623 {
624    Evas_Object *win, *bg, *map;
625    int idx = 0;
626
627    win = elm_win_add(NULL, "map", ELM_WIN_BASIC);
628    elm_win_title_set(win, "Map");
629    elm_win_autodel_set(win, 1);
630
631    bg = elm_bg_add(win);
632    evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
633    elm_win_resize_object_add(win, bg);
634    evas_object_show(bg);
635
636    map = elm_map_add(win);
637    if (map)
638      {
639         srand(time(NULL));
640
641         source_names = elm_map_source_names_get(map);
642
643         if (!source_names) return;
644         printf("map sources [ ");
645         for (idx = 0; source_names[idx] ; idx++) printf("%s ", source_names[idx]);
646         printf("]\n");
647
648         evas_object_size_hint_weight_set(map, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
649         elm_win_resize_object_add(win, map);
650         evas_object_data_set(map, "window", win);
651
652         //
653         itc1 = elm_map_marker_class_new(map);
654         elm_map_marker_class_get_cb_set(itc1, _marker_get);
655         elm_map_marker_class_del_cb_set(itc1, NULL);
656
657         itc2 = elm_map_marker_class_new(map);
658         elm_map_marker_class_get_cb_set(itc2, _marker_get);
659         elm_map_marker_class_del_cb_set(itc2, NULL);
660         elm_map_marker_class_style_set(itc2, "radio2");
661
662         itc_parking = elm_map_marker_class_new(map);
663         elm_map_marker_class_get_cb_set(itc_parking, _marker_get);
664         elm_map_marker_class_del_cb_set(itc_parking, NULL);
665         elm_map_marker_class_icon_cb_set(itc_parking, _icon_get);
666         elm_map_marker_class_style_set(itc_parking, "empty");
667         //
668
669         //
670         itc_group1 = elm_map_group_class_new(map);
671         elm_map_group_class_data_set(itc_group1, (void *)PACKAGE_DATA_DIR"/images/plant_01.jpg");
672
673         itc_group2 = elm_map_group_class_new(map);
674         elm_map_group_class_style_set(itc_group2, "radio2");
675         elm_map_group_class_zoom_displayed_set(itc_group1, 3);
676
677         itc_group_parking = elm_map_group_class_new(map);
678         elm_map_group_class_icon_cb_set(itc_group_parking, _group_icon_get);
679         elm_map_group_class_data_set(itc_group_parking, (void *)PACKAGE_DATA_DIR"/images/parking.png");
680         elm_map_group_class_style_set(itc_group_parking, "empty");
681         elm_map_group_class_zoom_displayed_set(itc_group_parking, 5);
682         //
683
684         rect = evas_object_rectangle_add(evas_object_evas_get(win));
685         evas_object_color_set(rect, 0, 0, 0, 0);
686         evas_object_repeat_events_set(rect,1);
687         evas_object_show(rect);
688         evas_object_raise(rect);
689
690         evas_object_event_callback_add(map, EVAS_CALLBACK_RESIZE,
691                                        _map_move_resize_cb, map);
692         evas_object_event_callback_add(map, EVAS_CALLBACK_MOVE,
693                                        _map_move_resize_cb, map);
694         evas_object_event_callback_add(map, EVAS_CALLBACK_MOUSE_DOWN,
695                                        _map_mouse_down, map);
696         evas_object_event_callback_add(map, EVAS_CALLBACK_MOUSE_MOVE,
697                                        _map_mouse_move, map);
698         evas_object_event_callback_add(map, EVAS_CALLBACK_MOUSE_UP,
699                                        _map_mouse_up, map);
700
701         elm_map_marker_add(map, 2.352, 48.857, itc1, itc_group1, &data1);
702         elm_map_marker_add(map, 2.355, 48.857, itc1, itc_group1, &data3);
703         elm_map_marker_add(map, 3, 48.857, itc2, itc_group1, &data2);
704         elm_map_marker_add(map, 2.352, 49, itc2, itc_group1, &data1);
705
706         elm_map_marker_add(map, 7.31451, 48.857127, itc1, itc_group1, &data10);
707         elm_map_marker_add(map, 7.314704, 48.857119, itc1, itc_group1, &data4);
708         elm_map_marker_add(map, 7.314704, 48.857119, itc2, itc_group1, &data5);
709         elm_map_marker_add(map, 7.31432, 48.856785, itc2, itc_group1, &data6);
710         elm_map_marker_add(map, 7.3148, 48.85725, itc1, itc_group2, &data7);
711         elm_map_marker_add(map, 7.316445, 48.8572210000694, itc1, itc_group1, &data8);
712         elm_map_marker_add(map, 7.316527000125, 48.85609, itc2, itc_group2, &data9);
713         elm_map_marker_add(map, 7.3165409990833, 48.856078, itc2, itc_group1, &data11);
714         elm_map_marker_add(map, 7.319812, 48.856561, itc2, itc_group2, &data10);
715
716         nb_elts = 13;
717
718         evas_object_smart_callback_add(map, "clicked", my_map_clicked, win);
719         evas_object_smart_callback_add(map, "press", my_map_press, win);
720         evas_object_smart_callback_add(map, "longpressed", my_map_longpressed, map);
721         evas_object_smart_callback_add(map, "clicked,double", my_map_clicked_double, map);
722         evas_object_smart_callback_add(map, "load,detail", my_map_load_detail, win);
723         evas_object_smart_callback_add(map, "loaded,detail", my_map_loaded_detail, win);
724         evas_object_smart_callback_add(map, "zoom,start", my_map_zoom_start, win);
725         evas_object_smart_callback_add(map, "zoom,stop", my_map_zoom_stop, win);
726         evas_object_smart_callback_add(map, "zoom,change", my_map_zoom_change, win);
727         evas_object_smart_callback_add(map, "scroll,anim,start", my_map_anim_start, win);
728         evas_object_smart_callback_add(map, "scroll,anim,stop", my_map_anim_stop, win);
729         evas_object_smart_callback_add(map, "scroll,drag,start", my_map_drag_start, map);
730         evas_object_smart_callback_add(map, "scroll,drag,stop", my_map_drag_stop, map);
731         evas_object_smart_callback_add(map, "scroll", my_map_scroll, win);
732         evas_object_smart_callback_add(map, "downloaded", my_map_downloaded, map);
733         evas_object_smart_callback_add(map, "route,load", my_map_route_load, map);
734         evas_object_smart_callback_add(map, "route,loaded", my_map_route_loaded, map);
735         evas_object_smart_callback_add(map, "name,load", my_map_name_load, map);
736         evas_object_smart_callback_add(map, "name,loaded", my_map_name_loaded, map);
737
738         evas_object_show(map);
739      }
740
741    evas_object_resize(win, 800, 800);
742    evas_object_show(win);
743 }
744 #endif