2 * Simple Elementary's <b>map widget</b> example, illustrating overlays
5 * See stdout/stderr for output. Compile with:
8 * gcc -g map_example_02.c -o map_example_02 `pkg-config --cflags --libs elementary`
12 #include <Elementary.h>
14 # define DATA_DIR "/usr/share/elementary"
17 typedef struct _Overlay_Data
23 Overlay_Data data_argentina = {"Argentina",
24 DATA_DIR"/images/rock_01.jpg"};
25 Overlay_Data data_chile = {"Chile",
26 DATA_DIR"/images/rock_02.jpg"};
27 Overlay_Data data_sampa = {"São Paulo",
28 DATA_DIR"/images/sky_01.jpg"};
29 Overlay_Data data_rio = {"Rio de Janeiro",
30 DATA_DIR"/images/sky_02.jpg"};
31 Overlay_Data data_brasilia = {"Brasília",
32 DATA_DIR"/images/sky_03.jpg"};
34 static Elm_Map_Overlay *bubble;
37 _icon_get(Evas_Object *obj, const char *file)
39 Evas_Object *icon = elm_icon_add(obj);
40 elm_icon_file_set(icon, file, NULL);
41 evas_object_show(icon);
46 _city_icon_get(Evas_Object *obj)
48 return _icon_get(obj, DATA_DIR"/images/icon_07.png");
52 _clas_city_icon_get(Evas_Object *obj)
54 return _icon_get(obj, DATA_DIR"/images/icon_05.png");
58 _country_icon_get(Evas_Object *obj)
60 return _icon_get(obj, DATA_DIR"/images/icon_06.png");
64 _clas_country_icon_get(Evas_Object *obj)
66 return _icon_get(obj, DATA_DIR"/images/icon_04.png");
70 _box_get(Evas_Object *obj, Overlay_Data *data)
72 Evas_Object *bx, *img, *label;
73 bx = elm_box_add(obj);
76 img = evas_object_image_add(evas_object_evas_get(obj));
77 evas_object_image_file_set(img, data->file, NULL);
78 evas_object_image_filled_set(img, EINA_TRUE);
79 evas_object_size_hint_min_set(img, 64, 64);
80 evas_object_show(img);
81 elm_box_pack_end(bx, img);
83 label = elm_label_add(obj);
84 elm_object_text_set(label, data->name);
85 evas_object_show(label);
86 elm_box_pack_end(bx, label);
91 _overlay_cb(void *data, Evas_Object *map, void *ev)
93 printf("Overlay clicked\n");
94 Elm_Map_Overlay *overlay = ev;
97 // prevent duplication
98 if (!bubble) bubble = elm_map_overlay_bubble_add(map);
100 elm_map_overlay_bubble_follow(bubble, overlay);
101 elm_map_overlay_bubble_content_clear(bubble);
102 bx = _box_get(map, elm_map_overlay_data_get(overlay));
103 elm_map_overlay_bubble_content_append(bubble, bx);
107 _bt_zoom_in(void *data, Evas_Object *obj, void *ev)
109 Evas_Object *map = data;
112 elm_map_zoom_mode_set(map, ELM_MAP_ZOOM_MODE_MANUAL);
113 zoom = elm_map_zoom_get(map);
114 elm_map_zoom_set(map, zoom + 1);
118 _bt_zoom_out(void *data, Evas_Object *obj, void *ev)
120 Evas_Object *map = data;
123 elm_map_zoom_mode_set(map, ELM_MAP_ZOOM_MODE_MANUAL);
124 zoom = elm_map_zoom_get(map);
125 elm_map_zoom_set(map, zoom - 1);
129 _bt_zoom_fit(void *data, Evas_Object *obj, void *event_info)
131 Evas_Object *map = data;
132 elm_map_zoom_mode_set(map, ELM_MAP_ZOOM_MODE_AUTO_FIT);
136 _bt_zoom_fill(void *data, Evas_Object *obj, void *event_info)
138 Evas_Object *map = data;
139 elm_map_zoom_mode_set(map, ELM_MAP_ZOOM_MODE_AUTO_FILL);
143 _on_done(void *data, Evas_Object *obj, void *event_info)
148 /* FIXME: it shouldn't be required. For unknown reason map won't call
149 * pan_calculate until shot delay time, but then it will take a screenshot
150 * when the map isn't loaded yet (actually it won't be downloaded, because
151 * after the SS it will kill the example). */
153 _nasty_hack(void *data)
155 Evas_Object *o = data;
156 Evas *e = evas_object_evas_get(o);
157 evas_smart_objects_calculate(e);
158 return ECORE_CALLBACK_CANCEL;
162 elm_main(int argc, char **argv)
164 Evas_Object *win, *bg, *map, *box, *bt;
165 Eina_List *ovls = NULL;
166 Elm_Map_Overlay *ovl, *city_clas, *country_clas;
168 win = elm_win_add(NULL, "map", ELM_WIN_BASIC);
169 elm_win_title_set(win, "Map Overlay Example");
170 evas_object_smart_callback_add(win, "delete,request", _on_done, NULL);
172 bg = elm_bg_add(win);
173 elm_win_resize_object_add(win, bg);
174 evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
175 evas_object_show(bg);
177 map = elm_map_add(win);
178 elm_win_resize_object_add(win, map);
179 evas_object_size_hint_weight_set(map, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
180 evas_object_show(map);
182 box = elm_box_add(win);
183 evas_object_show(box);
185 bt = elm_button_add(win);
186 elm_object_text_set(bt, "+");
187 elm_box_pack_end(box, bt);
188 evas_object_show(bt);
189 evas_object_smart_callback_add(bt, "clicked", _bt_zoom_in, map);
191 bt = elm_button_add(win);
192 elm_object_text_set(bt, "-");
193 elm_box_pack_end(box, bt);
194 evas_object_show(bt);
195 evas_object_smart_callback_add(bt, "clicked", _bt_zoom_out, map);
197 bt = elm_button_add(win);
198 elm_object_text_set(bt, "X");
199 elm_box_pack_end(box, bt);
200 evas_object_show(bt);
201 evas_object_smart_callback_add(bt, "clicked", _bt_zoom_fit, map);
203 bt = elm_button_add(win);
204 elm_object_text_set(bt, "#");
205 elm_box_pack_end(box, bt);
206 evas_object_show(bt);
207 evas_object_smart_callback_add(bt, "clicked", _bt_zoom_fill, map);
209 evas_object_smart_callback_add(map, "overlay,clicked", _overlay_cb, NULL);
211 city_clas = elm_map_overlay_class_add(map);
212 elm_map_overlay_displayed_zoom_min_set(city_clas, 3);
213 elm_map_overlay_icon_set(city_clas, _clas_city_icon_get(map));
215 country_clas = elm_map_overlay_class_add(map);
216 elm_map_overlay_displayed_zoom_min_set(country_clas, 1);
217 elm_map_overlay_icon_set(country_clas, _clas_country_icon_get(map));
219 ovl = elm_map_overlay_add(map, -43.2, -22.9);
220 elm_map_overlay_icon_set(ovl, _city_icon_get(map));
221 elm_map_overlay_data_set(ovl, &data_rio);
222 elm_map_overlay_class_append(city_clas, ovl);
223 ovls = eina_list_append(ovls, ovl);
225 ovl = elm_map_overlay_add(map, -46.63, -23.55);
226 elm_map_overlay_icon_set(ovl, _city_icon_get(map));
227 elm_map_overlay_data_set(ovl, &data_sampa);
228 elm_map_overlay_class_append(city_clas, ovl);
229 ovls = eina_list_append(ovls, ovl);
231 ovl = elm_map_overlay_add(map, -47.88, -15.78);
232 elm_map_overlay_icon_set(ovl, _city_icon_get(map));
233 elm_map_overlay_data_set(ovl, &data_brasilia);
234 elm_map_overlay_class_append(city_clas, ovl);
235 ovls = eina_list_append(ovls, ovl);
237 ovl = elm_map_overlay_add(map, -65.23, -35.1);
238 elm_map_overlay_icon_set(ovl, _country_icon_get(map));
239 elm_map_overlay_data_set(ovl, &data_argentina);
240 elm_map_overlay_class_append(country_clas, ovl);
241 ovls = eina_list_append(ovls, ovl);
243 ovl = elm_map_overlay_add(map, -71.3, -31.75);
244 elm_map_overlay_icon_set(ovl, _country_icon_get(map));
245 elm_map_overlay_data_set(ovl, &data_chile);
246 elm_map_overlay_class_append(country_clas, ovl);
247 ovls = eina_list_append(ovls, ovl);
249 elm_map_overlays_show(ovls);
251 evas_object_resize(win, 512, 512);
252 evas_object_show(win);
254 ecore_timer_add(1, _nasty_hack, win);