1 #include <Elementary.h>
10 const char *const MAIN_VIEW_EDJE = "main_view.edj";
11 const char *const ENTRY_EDJE = "entry.edj";
12 const char *const PREDICT_ITEM_EDJE = "predict_item.edj";
14 static void _update_predict_scroller(Evas_Object *predict_scroller, const char *str);
16 static void _change_entry_cb(void *data, Evas_Object *obj, void *event_info)
18 main_view_s *main_view_info = data;
19 Evas_Object *entry = obj;
20 const char *str = NULL;
22 ret_if(!main_view_info);
24 str = elm_entry_entry_get(entry);
28 _update_predict_scroller(main_view_info->predict_scroller, str);
31 static void _focus_entry_cb(void *data, Evas_Object *obj, void *event_info)
35 static void _unfocus_entry_cb(void *data, Evas_Object *obj, void *event_info)
40 _resize_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
43 evas_object_geometry_get(obj, &x, &y, &w, &h);
44 _D("%s (%d:%d:%d:%d)", data, x, y, w, h);
47 static void _delete_down_cb(void *data, Evas_Object *obj, const char *emission, const char *source)
49 _D("Delete button is down");
52 static void _delete_up_cb(void *data, Evas_Object *obj, const char *emission, const char *source)
54 Evas_Object *entry = obj;
55 Evas_Object *entry_obj = NULL;
59 entry_obj = elm_object_part_content_get(entry, "entry");
61 elm_entry_entry_set(entry_obj, "");
64 static Evas_Object *_create_search_entry(Evas_Object *parent, main_view_s *main_view_info)
66 Evas_Object *entry = NULL;
67 Evas_Object *entry_obj = NULL;
70 char full_path[PATH_LEN] = {0, };
72 retv_if(!parent, NULL);
74 path = app_get_resource_path();
77 snprintf(full_path, sizeof(full_path), "%s/edje/%s", path, ENTRY_EDJE);
80 entry = elm_layout_add(parent);
81 retv_if(!entry, NULL);
83 elm_layout_file_set(entry, full_path, "main");
84 elm_object_signal_callback_add(entry, "delete,down", "entry", _delete_down_cb, entry);
85 elm_object_signal_callback_add(entry, "delete,up", "entry", _delete_up_cb, entry);
87 evas_object_size_hint_weight_set(entry, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
88 evas_object_size_hint_align_set(entry, EVAS_HINT_FILL, EVAS_HINT_FILL);
89 evas_object_show(entry);
91 entry_obj = elm_entry_add(parent);
92 retv_if(!entry_obj, NULL);
94 elm_entry_single_line_set(entry_obj, EINA_TRUE);
95 elm_entry_scrollable_set(entry_obj, EINA_TRUE);
96 elm_entry_cnp_mode_set(entry_obj, ELM_CNP_MODE_PLAINTEXT);
97 elm_entry_text_style_user_push(entry_obj, "DEFAULT='font_size=20'");
98 elm_object_part_text_set(entry_obj, "elm.guide", "<font_size=20>Search</font_size>");
100 evas_object_size_hint_weight_set(entry_obj, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
101 evas_object_size_hint_align_set(entry_obj, EVAS_HINT_FILL, EVAS_HINT_FILL);
103 evas_object_smart_callback_add(entry_obj, "changed", _change_entry_cb, main_view_info);
104 evas_object_smart_callback_add(entry_obj, "focused", _focus_entry_cb, main_view_info);
105 evas_object_smart_callback_add(entry_obj, "unfocused", _unfocus_entry_cb, main_view_info);
107 evas_object_show(entry_obj);
108 elm_object_part_content_set(entry, "entry", entry_obj);
113 static void _destroy_search_entry(Evas_Object *entry)
115 Evas_Object *entry_obj = NULL;
119 entry_obj = elm_object_part_content_unset(entry, "entry");
121 evas_object_del(entry_obj);
123 evas_object_del(entry);
126 static Evas_Object *_create_map(Evas_Object *parent)
128 Evas_Object *map = NULL;
131 retv_if(!parent, NULL);
133 e = evas_object_evas_get(parent);
136 map = evas_object_rectangle_add(e);
139 evas_object_color_set(map, 0, 0, 200, 255);
140 evas_object_size_hint_min_set(map, 480, 400);
141 evas_object_show(map);
146 static void _destroy_map(Evas_Object *map)
150 evas_object_del(map);
153 static void _click_result_button_cb(void *data, Evas_Object *obj, void *event_info)
155 main_view_s *main_view_info = data;
157 _D("result button is clicked");
159 ret_if(!main_view_info);
162 static Evas_Object *_create_result_button(Evas_Object *parent, main_view_s *main_view_info)
164 Evas_Object *result_button = NULL;
166 retv_if(!parent, NULL);
168 result_button = elm_button_add(parent);
169 retv_if(!result_button, NULL);
171 elm_object_text_set(result_button, "Result");
172 evas_object_size_hint_weight_set(result_button, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
173 evas_object_size_hint_align_set(result_button, EVAS_HINT_FILL, EVAS_HINT_FILL);
174 evas_object_smart_callback_add(result_button, "clicked", _click_result_button_cb, main_view_info);
176 return result_button;
179 static void _destroy_result_button(Evas_Object *result_button)
181 ret_if(!result_button);
182 evas_object_del(result_button);
185 static Evas_Object *_create_selected_scroller(Evas_Object *parent)
187 Evas_Object *selected_scroller = NULL;
189 retv_if(!parent, NULL);
191 selected_scroller = scroller_create(parent);
192 retv_if(!selected_scroller, NULL);
194 return selected_scroller;
197 static void _destroy_selected_scroller(Evas_Object *selected_scroller)
199 ret_if(!selected_scroller);
201 evas_object_del(selected_scroller);
204 static void _click_plus_button_cb(void *data, Evas_Object *obj, void *event_info)
206 moment_info_s *moment_info = data;
208 _D("Add button is clicked");
210 ret_if(!moment_info);
215 static Evas_Object *_create_plus_button(Evas_Object *parent, main_view_s *main_view_info)
217 Evas_Object *plus_button = NULL;
219 retv_if(!parent, NULL);
221 plus_button = elm_button_add(parent);
222 retv_if(!plus_button, NULL);
224 elm_object_text_set(plus_button, "+Add");
225 evas_object_size_hint_weight_set(plus_button, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
226 evas_object_size_hint_align_set(plus_button, EVAS_HINT_FILL, EVAS_HINT_FILL);
227 evas_object_smart_callback_add(plus_button, "clicked", _click_plus_button_cb, main_view_info);
232 static void _destroy_plus_button(Evas_Object *plus_button)
234 ret_if(!plus_button);
235 evas_object_del(plus_button);
238 static Evas_Object *_create_predict_item(Evas_Object *parent, const char *city, const char *nation)
240 Evas_Object *predict_item = NULL;
243 char full_path[PATH_LEN] = {0, };
244 char city_name[PATH_LEN] = {0, };
246 retv_if(!parent, NULL);
248 path = app_get_resource_path();
249 retv_if(!path, NULL);
251 snprintf(full_path, sizeof(full_path), "%s/edje/%s", path, PREDICT_ITEM_EDJE);
254 predict_item = elm_layout_add(parent);
255 retv_if(!predict_item, NULL);
257 elm_layout_file_set(predict_item, full_path, "main");
258 evas_object_size_hint_weight_set(predict_item, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
259 evas_object_size_hint_align_set(predict_item, EVAS_HINT_FILL, EVAS_HINT_FILL);
260 evas_object_show(predict_item);
262 snprintf(city_name, sizeof(city_name), "%s, %s", city, nation);
263 elm_object_part_text_set(predict_item, "city", city_name);
268 static void _destroy_predict_item(Evas_Object *predict_item)
270 ret_if(!predict_item);
271 evas_object_del(predict_item);
274 static Evas_Object *_create_predict_scroller(Evas_Object *parent)
276 Evas_Object *predict_scroller = NULL;
278 retv_if(!parent, NULL);
280 predict_scroller = scroller_create(parent);
281 retv_if(!predict_scroller, NULL);
283 return predict_scroller;
286 static void _destroy_predict_scroller(Evas_Object *predict_scroller)
288 ret_if(!predict_scroller);
290 evas_object_del(predict_scroller);
293 static void _clean_predict_scroller(Evas_Object *predict_scroller)
295 Evas_Object *box = NULL;
296 Evas_Object *predict_item = NULL;
297 Eina_List *list = NULL;
299 ret_if(!predict_scroller);
301 box = elm_object_content_get(predict_scroller);
304 list = elm_box_children_get(box);
307 EINA_LIST_FREE(list, predict_item) {
308 _destroy_predict_item(predict_item);
312 static void _append_item_to_predict_scroller(Evas_Object *predict_scroller, Evas_Object *item)
314 Evas_Object *box = NULL;
316 ret_if(!predict_scroller);
319 box = elm_object_content_get(predict_scroller);
322 elm_box_pack_end(box, item);
325 static void _remove_item_in_predict_scroller(Evas_Object *predict_scroller, Evas_Object *item)
327 Evas_Object *box = NULL;
329 ret_if(!predict_scroller);
332 box = elm_object_content_get(predict_scroller);
335 elm_box_unpack(box, item);
338 static void _update_predict_scroller(Evas_Object *predict_scroller, const char *str)
340 city_s *city_info = NULL;
343 ret_if(!predict_scroller);
346 _clean_predict_scroller(predict_scroller);
348 city_info = city_get();
351 for (; i < CITY_MAX; i++) {
353 if (city_info[i].name && strstr(city_info[i].name, str))
355 else if (city_info[i].nation && strstr(city_info[i].nation, str))
359 Evas_Object *predict_item = NULL;
360 predict_item = _create_predict_item(predict_scroller, city_info[i].name, city_info[i].nation);
362 _append_item_to_predict_scroller(predict_scroller, predict_item);
367 Evas_Object *main_view_create(Evas_Object *parent, moment_info_s *moment_info)
369 main_view_s *main_view_info = NULL;
371 char full_path[PATH_LEN] = {0, };
373 retv_if(!parent, NULL);
375 path = app_get_resource_path();
376 retv_if(!path, NULL);
378 snprintf(full_path, sizeof(full_path), "%s/edje/%s", path, MAIN_VIEW_EDJE);
381 _D("main_view is created with %s", full_path);
383 main_view_info = calloc(1, sizeof(main_view_s));
384 retv_if(!main_view_info, NULL);
386 main_view_info->main_view = elm_layout_add(parent);
387 if (!main_view_info->main_view) {
388 free(main_view_info);
392 elm_layout_file_set(main_view_info->main_view, full_path, "main");
393 evas_object_size_hint_weight_set(main_view_info->main_view, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
394 evas_object_size_hint_align_set(main_view_info->main_view, EVAS_HINT_FILL, EVAS_HINT_FILL);
395 evas_object_show(main_view_info->main_view);
396 evas_object_data_set(main_view_info->main_view, DATA_KEY_INFO, main_view_info);
397 evas_object_event_callback_add(main_view_info->main_view, EVAS_CALLBACK_RESIZE, _resize_cb, "main_view");
399 elm_object_part_text_set(main_view_info->main_view, "title", "No cities");
400 elm_object_part_text_set(main_view_info->main_view, "description", "After you add cities, they will be shown here.");
402 main_view_info->entry = _create_search_entry(main_view_info->main_view, main_view_info);
403 if (main_view_info->entry)
404 elm_object_part_content_set(main_view_info->main_view, "entry", main_view_info->entry);
406 main_view_info->map = _create_map(main_view_info->main_view);
407 if (main_view_info->map)
408 elm_object_part_content_set(main_view_info->main_view, "map", main_view_info->map);
410 main_view_info->result_button = _create_result_button(main_view_info->main_view, main_view_info);
411 if (main_view_info->result_button)
412 elm_object_part_content_set(main_view_info->main_view, "result_button", main_view_info->result_button);
414 main_view_info->selected_scroller = _create_selected_scroller(main_view_info->main_view);
415 if (main_view_info->selected_scroller)
416 elm_object_part_content_set(main_view_info->main_view, "selected_scroller", main_view_info->selected_scroller);
418 main_view_info->plus_button = _create_plus_button(main_view_info->main_view, main_view_info);
419 if (main_view_info->plus_button)
420 elm_object_part_content_set(main_view_info->main_view, "plus_button", main_view_info->plus_button);
422 main_view_info->predict_scroller = _create_predict_scroller(main_view_info->main_view);
423 if (main_view_info->predict_scroller)
424 elm_object_part_content_set(main_view_info->main_view, "predict_scroller", main_view_info->predict_scroller);
426 return main_view_info->main_view;
429 void main_view_destroy(Evas_Object *main_view)
431 Evas_Object *button = NULL;
432 main_view_s *main_view_info = NULL;
436 main_view_info = evas_object_data_del(main_view_info->main_view, DATA_KEY_INFO);
437 ret_if(!main_view_info);
439 if (main_view_info->predict_scroller)
440 _destroy_predict_scroller(main_view_info->predict_scroller);
442 if (main_view_info->plus_button)
443 _destroy_plus_button(main_view_info->plus_button);
445 if (main_view_info->selected_scroller)
446 _destroy_selected_scroller(main_view_info->selected_scroller);
448 if (main_view_info->result_button)
449 _destroy_result_button(button);
451 if (main_view_info->map)
452 _destroy_map(main_view_info->map);
454 if (main_view_info->entry)
455 _destroy_search_entry(main_view_info->entry);
457 free(main_view_info);
459 evas_object_del(main_view);