Initialize Tizen 2.3
[framework/uifw/elementary.git] / wearable / src / examples / map_example_02.c
1 /**
2  * Simple Elementary's <b>map widget</b> example, illustrating overlays
3  * usage.
4  *
5  * See stdout/stderr for output. Compile with:
6  *
7  * @verbatim
8  * gcc -g map_example_02.c -o map_example_02 `pkg-config --cflags --libs elementary`
9  * @endverbatim
10  */
11
12 #include <Elementary.h>
13
14 typedef struct _Overlay_Data
15 {
16    const char *name;
17    const char *file;
18 } Overlay_Data;
19
20 Overlay_Data data_argentina = {"Argentina", NULL};
21 Overlay_Data data_chile = {"Chile", NULL};
22 Overlay_Data data_sampa = {"São Paulo", NULL};
23 Overlay_Data data_rio = {"Rio de Janeiro", NULL};
24 Overlay_Data data_brasilia = {"Brasília", NULL};
25
26 static Elm_Map_Overlay *bubble;
27 const char *data_dir;
28
29 static Evas_Object *
30 _icon_get(Evas_Object *obj, const char *file)
31 {
32    Evas_Object *icon = elm_icon_add(obj);
33    elm_image_file_set(icon, file, NULL);
34    evas_object_show(icon);
35    return icon;
36 }
37
38 static Evas_Object *
39 _city_icon_get(Evas_Object *obj)
40 {
41    char buf[256];
42    snprintf(buf, sizeof(buf), "%s/images/icon_07.png", data_dir);
43    return _icon_get(obj, buf);
44 }
45
46 static Evas_Object *
47 _clas_city_icon_get(Evas_Object *obj)
48 {
49    char buf[256];
50    snprintf(buf, sizeof(buf), "%s/images/icon_05.png", data_dir);
51    return _icon_get(obj, buf);
52 }
53
54 static Evas_Object *
55 _country_icon_get(Evas_Object *obj)
56 {
57    char buf[256];
58    snprintf(buf, sizeof(buf), "%s/images/icon_06.png", data_dir);
59    return _icon_get(obj, buf);
60 }
61
62 static Evas_Object *
63 _clas_country_icon_get(Evas_Object *obj)
64 {
65    char buf[256];
66    snprintf(buf, sizeof(buf), "%s/images/icon_04.png", data_dir);
67    return _icon_get(obj, buf);
68 }
69
70 static Evas_Object *
71 _box_get(Evas_Object *obj, Overlay_Data *data)
72 {
73    Evas_Object *bx, *img, *label;
74    bx = elm_box_add(obj);
75    evas_object_show(bx);
76
77    img = evas_object_image_add(evas_object_evas_get(obj));
78    evas_object_image_file_set(img, data->file, NULL);
79    evas_object_image_filled_set(img, EINA_TRUE);
80    evas_object_size_hint_min_set(img, 64, 64);
81    evas_object_show(img);
82    elm_box_pack_end(bx, img);
83
84    label = elm_label_add(obj);
85    elm_object_text_set(label, data->name);
86    evas_object_show(label);
87    elm_box_pack_end(bx, label);
88    return bx;
89 }
90
91 static void
92 _overlay_cb(void *data, Evas_Object *map, void *ev)
93 {
94    printf("Overlay clicked\n");
95    Elm_Map_Overlay *overlay = ev;
96    Evas_Object *bx;
97
98    // prevent duplication
99    if (!bubble)  bubble = elm_map_overlay_bubble_add(map);
100
101    elm_map_overlay_bubble_follow(bubble, overlay);
102    elm_map_overlay_bubble_content_clear(bubble);
103    bx = _box_get(map, elm_map_overlay_data_get(overlay));
104    elm_map_overlay_bubble_content_append(bubble, bx);
105 }
106
107 static void
108 _bt_zoom_in(void *data, Evas_Object *obj, void *ev)
109 {
110    Evas_Object *map = data;
111    int zoom;
112
113    elm_map_zoom_mode_set(map, ELM_MAP_ZOOM_MODE_MANUAL);
114    zoom = elm_map_zoom_get(map);
115    elm_map_zoom_set(map, zoom + 1);
116 }
117
118 static void
119 _bt_zoom_out(void *data, Evas_Object *obj, void *ev)
120 {
121    Evas_Object *map = data;
122    int zoom;
123
124    elm_map_zoom_mode_set(map, ELM_MAP_ZOOM_MODE_MANUAL);
125    zoom = elm_map_zoom_get(map);
126    elm_map_zoom_set(map, zoom - 1);
127 }
128
129 static void
130 _bt_zoom_fit(void *data, Evas_Object *obj, void *event_info)
131 {
132    Evas_Object *map = data;
133    elm_map_zoom_mode_set(map, ELM_MAP_ZOOM_MODE_AUTO_FIT);
134 }
135
136 static void
137 _bt_zoom_fill(void *data, Evas_Object *obj, void *event_info)
138 {
139    Evas_Object *map = data;
140    elm_map_zoom_mode_set(map, ELM_MAP_ZOOM_MODE_AUTO_FILL);
141 }
142
143 static void
144 _on_done(void *data, Evas_Object *obj, void *event_info)
145 {
146    elm_exit();
147 }
148
149 /* FIXME: it shouldn't be required. For unknown reason map won't call
150  * pan_calculate until shot delay time, but then it will take a screenshot
151  * when the map isn't loaded yet (actually it won't be downloaded, because
152  * after the SS it will kill the example). */
153 static Eina_Bool
154 _nasty_hack(void *data)
155 {
156    Evas_Object *o = data;
157    Evas *e = evas_object_evas_get(o);
158    evas_smart_objects_calculate(e);
159    return ECORE_CALLBACK_CANCEL;
160 }
161
162 EAPI_MAIN int
163 elm_main(int argc, char **argv)
164 {
165    Evas_Object *win, *bg, *map, *box, *bt;
166    Eina_List *ovls = NULL;
167    Elm_Map_Overlay *ovl, *city_clas, *country_clas;
168    char buf[255];
169
170    elm_app_info_set(elm_main, "elementary", "images");
171    data_dir = elm_app_data_dir_get();
172
173    snprintf(buf, sizeof(buf), "%s/images/rock_01.jpg", "sdf");
174    data_argentina.file = strdup(buf);
175    snprintf(buf, sizeof(buf), "%s/images/rock_02.jpg", "sdf");
176    data_chile.file = strdup(buf);
177    snprintf(buf, sizeof(buf), "%s/images/sky_01.jpg", "sdf");
178    data_sampa.file = strdup(buf);
179    snprintf(buf, sizeof(buf), "%s/images/sky_02.jpg", "sdf");
180    data_rio.file = strdup(buf);
181    snprintf(buf, sizeof(buf), "%s/images/sky_03.jpg", "sdf");
182    data_brasilia.file = strdup(buf);
183
184    win = elm_win_add(NULL, "map", ELM_WIN_BASIC);
185    elm_win_title_set(win, "Map Overlay Example");
186    evas_object_smart_callback_add(win, "delete,request", _on_done, NULL);
187
188    bg = elm_bg_add(win);
189    elm_win_resize_object_add(win, bg);
190    evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
191    evas_object_show(bg);
192
193    map = elm_map_add(win);
194    elm_win_resize_object_add(win, map);
195    evas_object_size_hint_weight_set(map, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
196    evas_object_show(map);
197
198    box = elm_box_add(win);
199    evas_object_show(box);
200
201    bt = elm_button_add(win);
202    elm_object_text_set(bt, "+");
203    elm_box_pack_end(box, bt);
204    evas_object_show(bt);
205    evas_object_smart_callback_add(bt, "clicked", _bt_zoom_in, map);
206
207    bt = elm_button_add(win);
208    elm_object_text_set(bt, "-");
209    elm_box_pack_end(box, bt);
210    evas_object_show(bt);
211    evas_object_smart_callback_add(bt, "clicked", _bt_zoom_out, map);
212
213    bt = elm_button_add(win);
214    elm_object_text_set(bt, "X");
215    elm_box_pack_end(box, bt);
216    evas_object_show(bt);
217    evas_object_smart_callback_add(bt, "clicked", _bt_zoom_fit, map);
218
219    bt = elm_button_add(win);
220    elm_object_text_set(bt, "#");
221    elm_box_pack_end(box, bt);
222    evas_object_show(bt);
223    evas_object_smart_callback_add(bt, "clicked", _bt_zoom_fill, map);
224
225    evas_object_smart_callback_add(map, "overlay,clicked", _overlay_cb, NULL);
226
227    city_clas = elm_map_overlay_class_add(map);
228    elm_map_overlay_displayed_zoom_min_set(city_clas, 3);
229    elm_map_overlay_icon_set(city_clas, _clas_city_icon_get(map));
230
231    country_clas = elm_map_overlay_class_add(map);
232    elm_map_overlay_displayed_zoom_min_set(country_clas, 1);
233    elm_map_overlay_icon_set(country_clas, _clas_country_icon_get(map));
234
235    ovl = elm_map_overlay_add(map, -43.2, -22.9);
236    elm_map_overlay_icon_set(ovl, _city_icon_get(map));
237    elm_map_overlay_data_set(ovl, &data_rio);
238    elm_map_overlay_class_append(city_clas, ovl);
239    ovls = eina_list_append(ovls, ovl);
240
241    ovl = elm_map_overlay_add(map, -46.63, -23.55);
242    elm_map_overlay_icon_set(ovl, _city_icon_get(map));
243    elm_map_overlay_data_set(ovl, &data_sampa);
244    elm_map_overlay_class_append(city_clas, ovl);
245    ovls = eina_list_append(ovls, ovl);
246
247    ovl = elm_map_overlay_add(map, -47.88, -15.78);
248    elm_map_overlay_icon_set(ovl, _city_icon_get(map));
249    elm_map_overlay_data_set(ovl, &data_brasilia);
250    elm_map_overlay_class_append(city_clas, ovl);
251    ovls = eina_list_append(ovls, ovl);
252
253    ovl = elm_map_overlay_add(map, -65.23, -35.1);
254    elm_map_overlay_icon_set(ovl, _country_icon_get(map));
255    elm_map_overlay_data_set(ovl, &data_argentina);
256    elm_map_overlay_class_append(country_clas, ovl);
257    ovls = eina_list_append(ovls, ovl);
258
259    ovl = elm_map_overlay_add(map, -71.3, -31.75);
260    elm_map_overlay_icon_set(ovl, _country_icon_get(map));
261    elm_map_overlay_data_set(ovl, &data_chile);
262    elm_map_overlay_class_append(country_clas, ovl);
263    ovls = eina_list_append(ovls, ovl);
264
265    elm_map_overlays_show(ovls);
266
267    evas_object_resize(win, 512, 512);
268    evas_object_show(win);
269
270    ecore_timer_add(1, _nasty_hack, win);
271
272    elm_run();
273    elm_shutdown();
274
275    return 0;
276 }
277 ELM_MAIN()