2 * Simple Elementary's <b>map widget</b> example, illustrating markers
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 # include "elementary_config.h"
19 typedef struct _Marker_Data
25 Marker_Data data_argentina = {"Argentina",
26 PACKAGE_DATA_DIR"/images/rock_01.jpg"};
27 Marker_Data data_chile = {"Chile",
28 PACKAGE_DATA_DIR"/images/rock_02.jpg"};
29 Marker_Data data_sampa = {"São Paulo",
30 PACKAGE_DATA_DIR"/images/sky_01.jpg"};
31 Marker_Data data_rio = {"Rio de Janeiro",
32 PACKAGE_DATA_DIR"/images/sky_02.jpg"};
33 Marker_Data data_brasilia = {"Brasília",
34 PACKAGE_DATA_DIR"/images/sky_03.jpg"};
37 _marker_get(Evas_Object *obj, Elm_Map_Marker *marker __UNUSED__, void *data)
39 Evas_Object *bx, *im, *lbl;
40 Marker_Data *md = data;
42 bx = elm_box_add(obj);
45 im = elm_image_add(obj);
46 elm_image_file_set(im, md->file, NULL);
47 evas_object_size_hint_min_set(im, 64, 64);
49 elm_box_pack_end(bx, im);
51 lbl = elm_label_add(obj);
52 elm_object_text_set(lbl, md->name);
53 evas_object_show(lbl);
54 elm_box_pack_end(bx, lbl);
60 _marker_city_icon_get(Evas_Object *obj, Elm_Map_Marker *marker __UNUSED__, void *data __UNUSED__)
62 Evas_Object *icon = elm_icon_add(obj);
63 elm_icon_file_set(icon, PACKAGE_DATA_DIR"/images/icon_07.png", NULL);
64 evas_object_show(icon);
70 _group_city_icon_get(Evas_Object *obj, void *data __UNUSED__)
72 Evas_Object *icon = elm_icon_add(obj);
73 elm_icon_file_set(icon, PACKAGE_DATA_DIR"/images/icon_05.png", NULL);
74 evas_object_show(icon);
79 _marker_country_icon_get(Evas_Object *obj, Elm_Map_Marker *marker __UNUSED__, void *data __UNUSED__)
81 Evas_Object *icon = elm_icon_add(obj);
82 elm_icon_file_set(icon, PACKAGE_DATA_DIR"/images/icon_06.png", NULL);
83 evas_object_show(icon);
88 _group_country_icon_get(Evas_Object *obj, void *data __UNUSED__)
90 Evas_Object *icon = elm_icon_add(obj);
91 elm_icon_file_set(icon, PACKAGE_DATA_DIR"/images/icon_04.png", NULL);
92 evas_object_show(icon);
97 _map_downloaded(void *data __UNUSED__, Evas_Object *obj, void *ev __UNUSED__)
99 elm_map_zoom_set(obj, 3);
100 evas_object_smart_callback_del(obj, "downloaded", _map_downloaded);
104 _bt_zoom_in(void *data, Evas_Object *obj __UNUSED__, void *ev __UNUSED__)
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 __UNUSED__, void *ev __UNUSED__)
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 __UNUSED__, void *event_info __UNUSED__)
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 __UNUSED__, void *event_info __UNUSED__)
135 Evas_Object *map = data;
136 elm_map_zoom_mode_set(map, ELM_MAP_ZOOM_MODE_AUTO_FILL);
140 _on_done(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
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 __UNUSED__, char **argv __UNUSED__)
161 Evas_Object *win, *bg, *map, *box, *bt;
162 static Elm_Map_Marker_Class *mc_city, *mc_country;
163 static Elm_Map_Group_Class *gc_city, *gc_country;
164 Eina_List *markers = NULL;
167 win = elm_win_add(NULL, "map", ELM_WIN_BASIC);
168 elm_win_title_set(win, "Map Markers Example");
169 evas_object_smart_callback_add(win, "delete,request", _on_done, NULL);
171 bg = elm_bg_add(win);
172 elm_win_resize_object_add(win, bg);
173 evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
174 evas_object_show(bg);
176 map = elm_map_add(win);
177 elm_win_resize_object_add(win, map);
178 evas_object_size_hint_weight_set(map, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
179 evas_object_show(map);
181 box = elm_box_add(win);
182 evas_object_show(box);
184 bt = elm_button_add(win);
185 elm_object_text_set(bt, "+");
186 elm_box_pack_end(box, bt);
187 evas_object_show(bt);
188 evas_object_smart_callback_add(bt, "clicked", _bt_zoom_in, map);
190 bt = elm_button_add(win);
191 elm_object_text_set(bt, "-");
192 elm_box_pack_end(box, bt);
193 evas_object_show(bt);
194 evas_object_smart_callback_add(bt, "clicked", _bt_zoom_out, map);
196 bt = elm_button_add(win);
197 elm_object_text_set(bt, "X");
198 elm_box_pack_end(box, bt);
199 evas_object_show(bt);
200 evas_object_smart_callback_add(bt, "clicked", _bt_zoom_fit, map);
202 bt = elm_button_add(win);
203 elm_object_text_set(bt, "#");
204 elm_box_pack_end(box, bt);
205 evas_object_show(bt);
206 evas_object_smart_callback_add(bt, "clicked", _bt_zoom_fill, map);
208 mc_city = elm_map_marker_class_new(map);
209 elm_map_marker_class_get_cb_set(mc_city, _marker_get);
210 elm_map_marker_class_icon_cb_set(mc_city, _marker_city_icon_get);
211 elm_map_marker_class_style_set(mc_city, "radio");
213 gc_city = elm_map_group_class_new(map);
214 elm_map_group_class_style_set(gc_city, "radio2");
215 elm_map_group_class_icon_cb_set(gc_city, _group_city_icon_get);
216 elm_map_group_class_zoom_displayed_set(gc_city, 3);
218 mc_country = elm_map_marker_class_new(map);
219 elm_map_marker_class_get_cb_set(mc_country, _marker_get);
220 elm_map_marker_class_icon_cb_set(mc_country, _marker_country_icon_get);
221 elm_map_marker_class_style_set(mc_country, "empty");
223 gc_country = elm_map_group_class_new(map);
224 elm_map_group_class_style_set(gc_country, "empty");
225 elm_map_group_class_icon_cb_set(gc_country, _group_country_icon_get);
226 elm_map_group_class_zoom_displayed_set(gc_country, 1);
228 m = elm_map_marker_add(map, -43.2, -22.9, mc_city, gc_city, &data_rio);
229 markers = eina_list_append(markers, m);
230 m = elm_map_marker_add(map, -46.63, -23.55, mc_city, gc_city, &data_sampa);
231 markers = eina_list_append(markers, m);
232 m = elm_map_marker_add(map, -47.88, -15.78, mc_city, gc_city,
234 markers = eina_list_append(markers, m);
236 m = elm_map_marker_add(map, -65.23, -35.1, mc_country, gc_country,
238 markers = eina_list_append(markers, m);
239 m = elm_map_marker_add(map, -71.3, -31.75, mc_country, gc_country,
241 markers = eina_list_append(markers, m);
243 elm_map_markers_list_show(markers);
244 evas_object_smart_callback_add(map, "downloaded", _map_downloaded, NULL);
246 evas_object_resize(win, 512, 512);
247 evas_object_show(win);
249 ecore_timer_add(1, _nasty_hack, win);