[JungWooHyun] doing merge job ~
[framework/uifw/elementary.git] / src / examples / map_example_03.c
1 /**
2  * Simple Elementary's <b>map widget</b> example, illustrating route and
3  * name usage.
4  *
5  * See stdout/stderr for output. Compile with:
6  *
7  * @verbatim
8  * gcc -g `pkg-config --cflags --libs elementary` map_example_03.c -o map_example_03
9  * @endverbatim
10  */
11
12 #include <Elementary.h>
13 #ifdef HAVE_CONFIG_H
14 # include "elementary_config.h"
15 #else
16 # define __UNUSED__
17 #endif
18
19 typedef struct _Example_Data
20 {
21    Evas_Object *map, *entry;
22    Elm_Map_Route *route;
23    double start_lon, start_lat, dest_lon, dest_lat;
24    Elm_Map_Name *name;
25 <<<<<<< HEAD
26 =======
27    Elm_Map_Overlay *route_ovl;
28 >>>>>>> remotes/origin/upstream
29 } Example_Data;
30
31 static Example_Data example_data;
32
33 static void
34 <<<<<<< HEAD
35 =======
36 _route_loaded(void *data, Evas_Object *obj, void *ev __UNUSED__)
37 {
38    Example_Data *example_data = data;
39
40    example_data->route_ovl = elm_map_overlay_route_add(obj, example_data->route);
41    elm_map_overlay_color_set(example_data->route_ovl, 0, 255, 0, 255);
42 }
43
44 static void
45 >>>>>>> remotes/origin/upstream
46 _name_loaded(void *data, Evas_Object *obj, void *ev __UNUSED__)
47 {
48    Example_Data *example_data = data;
49    Evas_Object *map = obj;
50
51    if (example_data->route)
52      elm_map_route_remove(example_data->route);
53
54    elm_map_name_region_get(example_data->name, &(example_data->dest_lon),
55                            &(example_data->dest_lat));
56
57    example_data->route = elm_map_route_add(map, ELM_MAP_ROUTE_TYPE_FOOT,
58                      ELM_MAP_ROUTE_METHOD_SHORTEST,
59                      example_data->start_lon, example_data->start_lat,
60 <<<<<<< HEAD
61                      example_data->dest_lon, example_data->dest_lat);
62    elm_map_route_color_set(example_data->route, 0, 255, 0, 255);
63 =======
64                      example_data->dest_lon, example_data->dest_lat,
65                      NULL, NULL);
66 >>>>>>> remotes/origin/upstream
67 }
68
69 static void
70 _bt_route(void *data, Evas_Object *obj __UNUSED__, void *ev __UNUSED__)
71 {
72    Example_Data *example_data = data;
73    Evas_Object *map;
74    char *address;
75
76    map = example_data->map;
77    address = (char *)elm_object_text_get(example_data->entry);
78
79 <<<<<<< HEAD
80    example_data->name = elm_map_utils_convert_name_into_coord(map, address);
81
82    evas_object_smart_callback_add(map, "name,loaded", _name_loaded, data);
83 =======
84    example_data->name = elm_map_name_add(map, address, 0, 0, NULL, NULL);
85
86    evas_object_smart_callback_add(map, "name,loaded", _name_loaded, data);
87    evas_object_smart_callback_add(map, "route,loaded", _route_loaded, data);
88 >>>>>>> remotes/origin/upstream
89 }
90
91 static void
92 _bt_zoom_in(void *data, Evas_Object *obj __UNUSED__, void *ev __UNUSED__)
93 {
94 <<<<<<< HEAD
95    Evas_Object *map = data;
96    int zoom;
97
98    elm_map_zoom_mode_set(map, ELM_MAP_ZOOM_MODE_MANUAL);
99    zoom = elm_map_zoom_get(map);
100    elm_map_zoom_set(map, zoom + 1);
101 =======
102    int zoom;
103    elm_map_zoom_mode_set(data, ELM_MAP_ZOOM_MODE_MANUAL);
104    zoom = elm_map_zoom_get(data);
105    elm_map_zoom_set(data, zoom + 1);
106 >>>>>>> remotes/origin/upstream
107 }
108
109 static void
110 _bt_zoom_out(void *data, Evas_Object *obj __UNUSED__, void *ev __UNUSED__)
111 {
112 <<<<<<< HEAD
113    Evas_Object *map = data;
114    int zoom;
115
116    elm_map_zoom_mode_set(map, ELM_MAP_ZOOM_MODE_MANUAL);
117    zoom = elm_map_zoom_get(map);
118    elm_map_zoom_set(map, zoom - 1);
119 =======
120    int zoom;
121    elm_map_zoom_mode_set(data, ELM_MAP_ZOOM_MODE_MANUAL);
122    zoom = elm_map_zoom_get(data);
123    elm_map_zoom_set(data, zoom - 1);
124 >>>>>>> remotes/origin/upstream
125 }
126
127 static void
128 _bt_zoom_fit(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
129 {
130 <<<<<<< HEAD
131    Evas_Object *map = data;
132    elm_map_zoom_mode_set(map, ELM_MAP_ZOOM_MODE_AUTO_FIT);
133 =======
134    elm_map_zoom_mode_set(data, ELM_MAP_ZOOM_MODE_AUTO_FIT);
135 >>>>>>> remotes/origin/upstream
136 }
137
138 static void
139 _bt_zoom_fill(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
140 {
141 <<<<<<< HEAD
142    Evas_Object *map = data;
143    elm_map_zoom_mode_set(map, ELM_MAP_ZOOM_MODE_AUTO_FILL);
144 =======
145    elm_map_zoom_mode_set(data, ELM_MAP_ZOOM_MODE_AUTO_FILL);
146 >>>>>>> remotes/origin/upstream
147 }
148
149 static void
150 _on_done(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
151 {
152    elm_exit();
153 }
154
155 /* FIXME: it shouldn't be required. For unknown reason map won't call
156  * pan_calculate until shot delay time, but then it will take a screenshot
157  * when the map isn't loaded yet (actually it won't be downloaded, because
158  * after the SS it will kill the example). */
159 static Eina_Bool
160 _nasty_hack(void *data)
161 {
162    Evas_Object *o = data;
163    Evas *e = evas_object_evas_get(o);
164    evas_smart_objects_calculate(e);
165    return ECORE_CALLBACK_CANCEL;
166 }
167
168 EAPI_MAIN int
169 elm_main(int argc __UNUSED__, char **argv __UNUSED__)
170 {
171    Evas_Object *win, *bg, *map, *box, *bt, *entry;
172
173    win = elm_win_add(NULL, "map", ELM_WIN_BASIC);
174    elm_win_title_set(win, "Map Route Example");
175    evas_object_smart_callback_add(win, "delete,request", _on_done, NULL);
176
177    bg = elm_bg_add(win);
178    elm_win_resize_object_add(win, bg);
179    evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
180    evas_object_show(bg);
181
182    map = elm_map_add(win);
183    elm_win_resize_object_add(win, map);
184    evas_object_size_hint_weight_set(map, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
185    evas_object_show(map);
186
187    box = elm_box_add(win);
188    evas_object_show(box);
189
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_in, map);
195    evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, 0);
196
197    bt = elm_button_add(win);
198    elm_object_text_set(bt, "-");
199    elm_box_pack_end(box, bt);
200    evas_object_show(bt);
201    evas_object_smart_callback_add(bt, "clicked", _bt_zoom_out, map);
202    evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, 0);
203
204    bt = elm_button_add(win);
205    elm_object_text_set(bt, "X");
206    elm_box_pack_end(box, bt);
207    evas_object_show(bt);
208    evas_object_smart_callback_add(bt, "clicked", _bt_zoom_fit, map);
209    evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, 0);
210
211    bt = elm_button_add(win);
212    elm_object_text_set(bt, "#");
213    elm_box_pack_end(box, bt);
214    evas_object_show(bt);
215    evas_object_smart_callback_add(bt, "clicked", _bt_zoom_fill, map);
216    evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, 0);
217
218    elm_box_horizontal_set(box, EINA_TRUE);
219    elm_win_resize_object_add(win, box);
220    evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
221    evas_object_size_hint_align_set(box, EVAS_HINT_FILL, 0);
222
223    entry = elm_entry_add(win);
224    elm_entry_scrollable_set(entry, EINA_TRUE);
225    elm_entry_single_line_set(entry, EINA_TRUE);
226    elm_object_text_set(entry, "Jockey Club Brasileiro");
227    evas_object_size_hint_weight_set(entry, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
228    evas_object_size_hint_align_set(entry, EVAS_HINT_FILL, 0);
229    elm_box_pack_end(box, entry);
230    evas_object_show(entry);
231
232    bt = elm_button_add(win);
233    elm_object_text_set(bt, "Route");
234    elm_box_pack_end(box, bt);
235    evas_object_show(bt);
236    evas_object_smart_callback_add(bt, "clicked", _bt_route, &example_data);
237    evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, 0);
238
239    example_data.map = map;
240    example_data.entry = entry;
241    example_data.route = NULL;
242    example_data.start_lon = -43.175;
243    example_data.start_lat = -22.97;
244
245 <<<<<<< HEAD
246    elm_map_geo_region_show(map, example_data.start_lon, example_data.start_lat);
247    elm_map_zoom_set(map, 12);
248 =======
249    elm_map_zoom_set(map, 12);
250    elm_map_region_show(map, example_data.start_lon, example_data.start_lat);
251 >>>>>>> remotes/origin/upstream
252
253    evas_object_resize(win, 512, 512);
254    evas_object_show(win);
255
256    ecore_timer_add(0.5, _nasty_hack, win);
257
258    elm_run();
259    return 0;
260 }
261 ELM_MAIN()