1 #include <Elementary.h>
10 const char *const MAIN_VIEW_EDJE = "main_view.edj";
11 const char *const PREDICT_ITEM_EDJE = "predict_item.edj";
13 static void _update_predict_scroller(Evas_Object *predict_scroller, const char *str);
15 static void _change_entry_cb(void *data, Evas_Object *obj, void *event_info)
17 main_view_s *main_view_info = data;
18 Evas_Object *entry = obj;
19 const char *str = NULL;
21 ret_if(!main_view_info);
23 str = elm_entry_entry_get(entry);
27 _update_predict_scroller(main_view_info->predict_scroller, str);
30 static void _focus_entry_cb(void *data, Evas_Object *obj, void *event_info)
34 static void _unfocus_entry_cb(void *data, Evas_Object *obj, void *event_info)
39 _resize_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
42 evas_object_geometry_get(obj, &x, &y, &w, &h);
43 _D("%s (%d:%d:%d:%d)", data, x, y, w, h);
46 static Evas_Object *_create_search_entry(Evas_Object *parent, main_view_s *main_view_info)
48 Evas_Object *entry = NULL;
50 retv_if(!parent, NULL);
52 entry = elm_entry_add(parent);
53 retv_if(!entry, NULL);
55 elm_entry_single_line_set(entry, EINA_TRUE);
56 elm_entry_scrollable_set(entry, EINA_TRUE);
57 elm_entry_cnp_mode_set(entry, ELM_CNP_MODE_PLAINTEXT);
58 elm_object_part_text_set(entry, "elm.guide", "Search");
60 evas_object_size_hint_weight_set(entry, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
61 evas_object_size_hint_align_set(entry, EVAS_HINT_FILL, EVAS_HINT_FILL);
63 evas_object_smart_callback_add(entry, "changed", _change_entry_cb, main_view_info);
64 evas_object_smart_callback_add(entry, "focused", _focus_entry_cb, main_view_info);
65 evas_object_smart_callback_add(entry, "unfocused", _unfocus_entry_cb, main_view_info);
67 evas_object_show(entry);
72 static void _destroy_search_entry(Evas_Object *entry)
75 evas_object_del(entry);
78 static Evas_Object *_create_map(Evas_Object *parent)
80 Evas_Object *map = NULL;
83 retv_if(!parent, NULL);
85 e = evas_object_evas_get(parent);
88 map = evas_object_rectangle_add(e);
91 evas_object_color_set(map, 0, 0, 200, 255);
92 evas_object_size_hint_min_set(map, 480, 400);
93 evas_object_show(map);
98 static void _destroy_map(Evas_Object *map)
102 evas_object_del(map);
105 static void _click_result_button_cb(void *data, Evas_Object *obj, void *event_info)
107 main_view_s *main_view_info = data;
109 _D("result button is clicked");
111 ret_if(!main_view_info);
114 static Evas_Object *_create_result_button(Evas_Object *parent, main_view_s *main_view_info)
116 Evas_Object *result_button = NULL;
118 retv_if(!parent, NULL);
120 result_button = elm_button_add(parent);
121 retv_if(!result_button, NULL);
123 elm_object_text_set(result_button, "Result");
124 evas_object_size_hint_weight_set(result_button, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
125 evas_object_size_hint_align_set(result_button, EVAS_HINT_FILL, EVAS_HINT_FILL);
126 evas_object_smart_callback_add(result_button, "clicked", _click_result_button_cb, main_view_info);
128 return result_button;
131 static void _destroy_result_button(Evas_Object *result_button)
133 ret_if(!result_button);
134 evas_object_del(result_button);
137 static Evas_Object *_create_selected_scroller(Evas_Object *parent)
139 Evas_Object *selected_scroller = NULL;
141 retv_if(!parent, NULL);
143 selected_scroller = scroller_create(parent);
144 retv_if(!selected_scroller, NULL);
146 return selected_scroller;
149 static void _destroy_selected_scroller(Evas_Object *selected_scroller)
151 ret_if(!selected_scroller);
153 evas_object_del(selected_scroller);
156 static void _click_plus_button_cb(void *data, Evas_Object *obj, void *event_info)
158 moment_info_s *moment_info = data;
160 _D("Add button is clicked");
162 ret_if(!moment_info);
167 static Evas_Object *_create_plus_button(Evas_Object *parent, main_view_s *main_view_info)
169 Evas_Object *plus_button = NULL;
171 retv_if(!parent, NULL);
173 plus_button = elm_button_add(parent);
174 retv_if(!plus_button, NULL);
176 elm_object_text_set(plus_button, "+Add");
177 evas_object_size_hint_weight_set(plus_button, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
178 evas_object_size_hint_align_set(plus_button, EVAS_HINT_FILL, EVAS_HINT_FILL);
179 evas_object_smart_callback_add(plus_button, "clicked", _click_plus_button_cb, main_view_info);
184 static void _destroy_plus_button(Evas_Object *plus_button)
186 ret_if(!plus_button);
187 evas_object_del(plus_button);
190 static Evas_Object *_create_predict_item(Evas_Object *parent, const char *city, const char *nation)
192 Evas_Object *predict_item = NULL;
195 char full_path[PATH_LEN] = {0, };
196 char city_name[PATH_LEN] = {0, };
198 retv_if(!parent, NULL);
200 path = app_get_resource_path();
201 retv_if(!path, NULL);
203 snprintf(full_path, sizeof(full_path), "%s/edje/%s", path, PREDICT_ITEM_EDJE);
206 predict_item = elm_layout_add(parent);
207 retv_if(!predict_item, NULL);
209 elm_layout_file_set(predict_item, full_path, "main");
210 evas_object_size_hint_weight_set(predict_item, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
211 evas_object_size_hint_align_set(predict_item, EVAS_HINT_FILL, EVAS_HINT_FILL);
212 evas_object_show(predict_item);
214 snprintf(city_name, sizeof(city_name), "%s, %s", city, nation);
215 elm_object_part_text_set(predict_item, "city", city_name);
220 static void _destroy_predict_item(Evas_Object *predict_item)
222 ret_if(!predict_item);
223 evas_object_del(predict_item);
226 static Evas_Object *_create_predict_scroller(Evas_Object *parent)
228 Evas_Object *predict_scroller = NULL;
230 retv_if(!parent, NULL);
232 predict_scroller = scroller_create(parent);
233 retv_if(!predict_scroller, NULL);
235 return predict_scroller;
238 static void _destroy_predict_scroller(Evas_Object *predict_scroller)
240 ret_if(!predict_scroller);
242 evas_object_del(predict_scroller);
245 static void _clean_predict_scroller(Evas_Object *predict_scroller)
247 Evas_Object *box = NULL;
248 Evas_Object *predict_item = NULL;
249 Eina_List *list = NULL;
251 ret_if(!predict_scroller);
253 box = elm_object_content_get(predict_scroller);
256 list = elm_box_children_get(box);
259 EINA_LIST_FREE(list, predict_item) {
260 _destroy_predict_item(predict_item);
264 static void _append_item_to_predict_scroller(Evas_Object *predict_scroller, Evas_Object *item)
266 Evas_Object *box = NULL;
268 ret_if(!predict_scroller);
271 box = elm_object_content_get(predict_scroller);
274 elm_box_pack_end(box, item);
277 static void _remove_item_in_predict_scroller(Evas_Object *predict_scroller, Evas_Object *item)
279 Evas_Object *box = NULL;
281 ret_if(!predict_scroller);
284 box = elm_object_content_get(predict_scroller);
287 elm_box_unpack(box, item);
290 static void _update_predict_scroller(Evas_Object *predict_scroller, const char *str)
292 city_s *city_info = NULL;
295 ret_if(!predict_scroller);
298 _clean_predict_scroller(predict_scroller);
300 city_info = city_get();
303 for (; i < CITY_MAX; i++) {
305 if (city_info[i].name && strstr(city_info[i].name, str))
307 else if (city_info[i].nation && strstr(city_info[i].nation, str))
311 Evas_Object *predict_item = NULL;
312 predict_item = _create_predict_item(predict_scroller, city_info[i].name, city_info[i].nation);
314 _append_item_to_predict_scroller(predict_scroller, predict_item);
319 Evas_Object *main_view_create(Evas_Object *parent, moment_info_s *moment_info)
321 main_view_s *main_view_info = NULL;
323 char full_path[PATH_LEN] = {0, };
325 retv_if(!parent, NULL);
327 path = app_get_resource_path();
328 retv_if(!path, NULL);
330 snprintf(full_path, sizeof(full_path), "%s/edje/%s", path, MAIN_VIEW_EDJE);
333 _D("main_view is created with %s", full_path);
335 main_view_info = calloc(1, sizeof(main_view_s));
336 retv_if(!main_view_info, NULL);
338 main_view_info->main_view = elm_layout_add(parent);
339 if (!main_view_info->main_view) {
340 free(main_view_info);
344 elm_layout_file_set(main_view_info->main_view, full_path, "main");
345 evas_object_size_hint_weight_set(main_view_info->main_view, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
346 evas_object_size_hint_align_set(main_view_info->main_view, EVAS_HINT_FILL, EVAS_HINT_FILL);
347 evas_object_show(main_view_info->main_view);
348 evas_object_data_set(main_view_info->main_view, DATA_KEY_INFO, main_view_info);
349 evas_object_event_callback_add(main_view_info->main_view, EVAS_CALLBACK_RESIZE, _resize_cb, "main_view");
351 elm_object_part_text_set(main_view_info->main_view, "title", "No cities");
352 elm_object_part_text_set(main_view_info->main_view, "description", "After you add cities, they will be shown here.");
354 main_view_info->entry = _create_search_entry(main_view_info->main_view, main_view_info);
355 if (main_view_info->entry)
356 elm_object_part_content_set(main_view_info->main_view, "entry", main_view_info->entry);
358 main_view_info->map = _create_map(main_view_info->main_view);
359 if (main_view_info->map)
360 elm_object_part_content_set(main_view_info->main_view, "map", main_view_info->map);
362 main_view_info->result_button = _create_result_button(main_view_info->main_view, main_view_info);
363 if (main_view_info->result_button)
364 elm_object_part_content_set(main_view_info->main_view, "result_button", main_view_info->result_button);
366 main_view_info->selected_scroller = _create_selected_scroller(main_view_info->main_view);
367 if (main_view_info->selected_scroller)
368 elm_object_part_content_set(main_view_info->main_view, "selected_scroller", main_view_info->selected_scroller);
370 main_view_info->plus_button = _create_plus_button(main_view_info->main_view, main_view_info);
371 if (main_view_info->plus_button)
372 elm_object_part_content_set(main_view_info->main_view, "plus_button", main_view_info->plus_button);
374 main_view_info->predict_scroller = _create_predict_scroller(main_view_info->main_view);
375 if (main_view_info->predict_scroller)
376 elm_object_part_content_set(main_view_info->main_view, "predict_scroller", main_view_info->predict_scroller);
378 return main_view_info->main_view;
381 void main_view_destroy(Evas_Object *main_view)
383 Evas_Object *button = NULL;
384 main_view_s *main_view_info = NULL;
388 main_view_info = evas_object_data_del(main_view_info->main_view, DATA_KEY_INFO);
389 ret_if(!main_view_info);
391 if (main_view_info->predict_scroller)
392 _destroy_predict_scroller(main_view_info->predict_scroller);
394 if (main_view_info->plus_button)
395 _destroy_plus_button(main_view_info->plus_button);
397 if (main_view_info->selected_scroller)
398 _destroy_selected_scroller(main_view_info->selected_scroller);
400 if (main_view_info->result_button)
401 _destroy_result_button(button);
403 if (main_view_info->map)
404 _destroy_map(main_view_info->map);
406 if (main_view_info->entry)
407 _destroy_search_entry(main_view_info->entry);
409 free(main_view_info);
411 evas_object_del(main_view);