2 * Simple Elementary's <b>map widget</b> example, illustrating overlays
5 * See stdout/stderr for output. Compile with:
8 * gcc -g `pkg-config --cflags --libs elementary` map_example_02.c -o map_example_02
12 #include <Elementary.h>
14 typedef struct _Overlay_Data
20 Overlay_Data data_argentina = {"Argentina",
21 PACKAGE_DATA_DIR"/images/rock_01.jpg"};
22 Overlay_Data data_chile = {"Chile",
23 PACKAGE_DATA_DIR"/images/rock_02.jpg"};
24 Overlay_Data data_sampa = {"São Paulo",
25 PACKAGE_DATA_DIR"/images/sky_01.jpg"};
26 Overlay_Data data_rio = {"Rio de Janeiro",
27 PACKAGE_DATA_DIR"/images/sky_02.jpg"};
28 Overlay_Data data_brasilia = {"Brasília",
29 PACKAGE_DATA_DIR"/images/sky_03.jpg"};
31 static Elm_Map_Overlay *bubble;
34 _icon_get(Evas_Object *obj, const char *file)
36 Evas_Object *icon = elm_icon_add(obj);
37 elm_icon_file_set(icon, file, NULL);
38 evas_object_show(icon);
43 _city_icon_get(Evas_Object *obj)
45 return _icon_get(obj, PACKAGE_DATA_DIR"/images/icon_07.png");
49 _clas_city_icon_get(Evas_Object *obj)
51 return _icon_get(obj, PACKAGE_DATA_DIR"/images/icon_05.png");
55 _country_icon_get(Evas_Object *obj)
57 return _icon_get(obj, PACKAGE_DATA_DIR"/images/icon_06.png");
61 _clas_country_icon_get(Evas_Object *obj)
63 return _icon_get(obj, PACKAGE_DATA_DIR"/images/icon_04.png");
67 _box_get(Evas_Object *obj, Overlay_Data *data)
69 Evas_Object *bx, *img, *label;
70 bx = elm_box_add(obj);
73 img = evas_object_image_add(evas_object_evas_get(obj));
74 evas_object_image_file_set(img, data->file, NULL);
75 evas_object_image_filled_set(img, EINA_TRUE);
76 evas_object_size_hint_min_set(img, 64, 64);
77 evas_object_show(img);
78 elm_box_pack_end(bx, img);
80 label = elm_label_add(obj);
81 elm_object_text_set(label, data->name);
82 evas_object_show(label);
83 elm_box_pack_end(bx, label);
88 _overlay_cb(void *data, Evas_Object *map, void *ev)
90 printf("Overlay clicked\n");
91 Elm_Map_Overlay *overlay = ev;
94 // prevent duplication
95 if (!bubble) bubble = elm_map_overlay_bubble_add(map);
97 elm_map_overlay_bubble_follow(bubble, overlay);
98 elm_map_overlay_bubble_content_clear(bubble);
99 bx = _box_get(map, elm_map_overlay_data_get(overlay));
100 elm_map_overlay_bubble_content_append(bubble, bx);
104 _bt_zoom_in(void *data, Evas_Object *obj, void *ev)
106 Evas_Object *map = data;
109 elm_map_zoom_mode_set(map, ELM_MAP_ZOOM_MODE_MANUAL);
110 zoom = elm_map_zoom_get(map);
111 elm_map_zoom_set(map, zoom + 1);
115 _bt_zoom_out(void *data, Evas_Object *obj, void *ev)
117 Evas_Object *map = data;
120 elm_map_zoom_mode_set(map, ELM_MAP_ZOOM_MODE_MANUAL);
121 zoom = elm_map_zoom_get(map);
122 elm_map_zoom_set(map, zoom - 1);
126 _bt_zoom_fit(void *data, Evas_Object *obj, void *event_info)
128 Evas_Object *map = data;
129 elm_map_zoom_mode_set(map, ELM_MAP_ZOOM_MODE_AUTO_FIT);
133 _bt_zoom_fill(void *data, Evas_Object *obj, void *event_info)
135 Evas_Object *map = data;
136 elm_map_zoom_mode_set(map, ELM_MAP_ZOOM_MODE_AUTO_FILL);
140 _on_done(void *data, Evas_Object *obj, void *event_info)
145 /* FIXME: it shouldn't be required. For unknown reason map won't call
146 * pan_calculate until shot delay time, but then it will take a screenshot
147 * when the map isn't loaded yet (actually it won't be downloaded, because
148 * after the SS it will kill the example). */
150 _nasty_hack(void *data)
152 Evas_Object *o = data;
153 Evas *e = evas_object_evas_get(o);
154 evas_smart_objects_calculate(e);
155 return ECORE_CALLBACK_CANCEL;
159 elm_main(int argc, char **argv)
161 Evas_Object *win, *bg, *map, *box, *bt;
162 Eina_List *ovls = NULL;
163 Elm_Map_Overlay *ovl, *city_clas, *country_clas;
165 win = elm_win_add(NULL, "map", ELM_WIN_BASIC);
166 elm_win_title_set(win, "Map Overlay Example");
167 evas_object_smart_callback_add(win, "delete,request", _on_done, NULL);
169 bg = elm_bg_add(win);
170 elm_win_resize_object_add(win, bg);
171 evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
172 evas_object_show(bg);
174 map = elm_map_add(win);
175 elm_win_resize_object_add(win, map);
176 evas_object_size_hint_weight_set(map, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
177 evas_object_show(map);
179 box = elm_box_add(win);
180 evas_object_show(box);
182 bt = elm_button_add(win);
183 elm_object_text_set(bt, "+");
184 elm_box_pack_end(box, bt);
185 evas_object_show(bt);
186 evas_object_smart_callback_add(bt, "clicked", _bt_zoom_in, map);
188 bt = elm_button_add(win);
189 elm_object_text_set(bt, "-");
190 elm_box_pack_end(box, bt);
191 evas_object_show(bt);
192 evas_object_smart_callback_add(bt, "clicked", _bt_zoom_out, map);
194 bt = elm_button_add(win);
195 elm_object_text_set(bt, "X");
196 elm_box_pack_end(box, bt);
197 evas_object_show(bt);
198 evas_object_smart_callback_add(bt, "clicked", _bt_zoom_fit, map);
200 bt = elm_button_add(win);
201 elm_object_text_set(bt, "#");
202 elm_box_pack_end(box, bt);
203 evas_object_show(bt);
204 evas_object_smart_callback_add(bt, "clicked", _bt_zoom_fill, map);
206 evas_object_smart_callback_add(map, "overlay,clicked", _overlay_cb, NULL);
208 city_clas = elm_map_overlay_class_add(map);
209 elm_map_overlay_displayed_zoom_min_set(city_clas, 3);
210 elm_map_overlay_icon_set(city_clas, _clas_city_icon_get(map));
212 country_clas = elm_map_overlay_class_add(map);
213 elm_map_overlay_displayed_zoom_min_set(country_clas, 1);
214 elm_map_overlay_icon_set(country_clas, _clas_country_icon_get(map));
216 ovl = elm_map_overlay_add(map, -43.2, -22.9);
217 elm_map_overlay_icon_set(ovl, _city_icon_get(map));
218 elm_map_overlay_data_set(ovl, &data_rio);
219 elm_map_overlay_class_append(city_clas, ovl);
220 ovls = eina_list_append(ovls, ovl);
222 ovl = elm_map_overlay_add(map, -46.63, -23.55);
223 elm_map_overlay_icon_set(ovl, _city_icon_get(map));
224 elm_map_overlay_data_set(ovl, &data_sampa);
225 elm_map_overlay_class_append(city_clas, ovl);
226 ovls = eina_list_append(ovls, ovl);
228 ovl = elm_map_overlay_add(map, -47.88, -15.78);
229 elm_map_overlay_icon_set(ovl, _city_icon_get(map));
230 elm_map_overlay_data_set(ovl, &data_brasilia);
231 elm_map_overlay_class_append(city_clas, ovl);
232 ovls = eina_list_append(ovls, ovl);
234 ovl = elm_map_overlay_add(map, -65.23, -35.1);
235 elm_map_overlay_icon_set(ovl, _country_icon_get(map));
236 elm_map_overlay_data_set(ovl, &data_argentina);
237 elm_map_overlay_class_append(country_clas, ovl);
238 ovls = eina_list_append(ovls, ovl);
240 ovl = elm_map_overlay_add(map, -71.3, -31.75);
241 elm_map_overlay_icon_set(ovl, _country_icon_get(map));
242 elm_map_overlay_data_set(ovl, &data_chile);
243 elm_map_overlay_class_append(country_clas, ovl);
244 ovls = eina_list_append(ovls, ovl);
246 elm_map_overlays_show(ovls);
248 evas_object_resize(win, 512, 512);
249 evas_object_show(win);
251 ecore_timer_add(1, _nasty_hack, win);