1 #include <Elementary.h>
7 const char *const MAIN_VIEW_EDJE = "main_view.edj";
8 const char *const PREDICT_ITEM_EDJE = "predict_item.edj";
10 static void _change_entry_cb(void *data, Evas_Object *obj, void *event_info)
12 main_view_s *main_view_info = data;
13 Evas_Object *entry = obj;
14 const char *str = NULL;
18 str = elm_entry_entry_get(obj);
22 _update_predict_scroller(main_view_info->predict_scroller, str);
25 static void _focus_entry_cb(void *data, Evas_Object *obj, void *event_info)
29 static void _unfocus_entry_cb(void *data, Evas_Object *obj, void *event_info)
33 static Evas_Object *_create_search_entry(Evas_Object *parent, moment_info_s *moment_info)
35 Evas_Object *entry = NULL;
37 retv_if(!parent, NULL);
39 entry = elm_entry_add(parent);
40 retv_if(!entry, NULL);
42 elm_entry_single_line_set(entry, EINA_TRUE);
43 elm_entry_scrollable_set(entry, EINA_TRUE);
44 elm_entry_cnp_mode_set(entry, ELM_CNP_MODE_PLAINTEXT);
45 elm_object_part_text_set(entry, "elm.guide", "Search");
47 evas_object_size_hint_weight_set(entry, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
48 evas_object_size_hint_align_set(entry, EVAS_HINT_FILL, EVAS_HINT_FILL);
50 evas_object_smart_callback_add(entry, "changed", _change_entry_cb, main_view_info);
51 evas_object_smart_callback_add(entry, "focused", _focus_entry_cb, main_view_info);
52 evas_object_smart_callback_add(entry, "unfocused", _unfocus_entry_cb, main_view_info);
54 evas_object_show(entry);
59 static void _destroy_search_entry(Evas_Object *entry)
62 evas_object_del(entry);
65 static Evas_Object *_create_map(Evas_Object *parent)
67 Evas_Object *map = NULL;
70 retv_if(!parent, NULL);
72 e = evas_object_evas_get(parent);
75 map = evas_object_rectangle_add(e);
78 evas_object_color_set(map, 200, 200, 0, 255);
79 evas_object_size_hint_min_set(map, 480, 400);
80 evas_object_show(map);
85 static void _destroy_map(Evas_Object *map)
92 static _click_result_button_cb(void *data, Evas_Object *obj, void *event_info)
94 moment_info_s *moment_info = data;
96 _D("Add button is clicked");
100 moment_info->result_view = result_view_create(moment_info->ui_manager);
101 ret_if(!moment_info->result_view);
104 static Evas_Object *_create_result_button(Evas_Object *parent, main_view_s *main_view_info)
106 Evas_Object *result_button = NULL;
108 result_button = elm_button_add(parent);
109 retv_if(!result_button, NULL);
111 elm_object_part_text_set(result_button, "Result");
112 evas_object_size_hint_weight_set(button, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
113 evas_object_size_hint_align_set(button, EVAS_HINT_FILL, EVAS_HINT_FILL);
114 evas_object_smart_callback_add(button, "clicked", _click_result_button_cb, moment_info);
116 return result_button;
119 static void _destroy_result_button(Evas_Object *result_button)
121 ret_if(!result_button);
122 evas_object_del(result_button);
125 static Evas_Object *_create_selected_scroller(Evas_Object *parent)
127 Evas_Object *selected_scroller = NULL;
129 retv_if(!parent, NULL);
131 selected_scroller = scroller_create(parent);
132 retv_if(!selected_scroller, NULL);
134 return selected_scroller;
137 static void _destroy_selected_scroller(Evas_Object *selected_scroller)
139 ret_if(!selected_scroller);
141 evas_object_del(selected_scroller);
144 static _click_plus_button_cb(void *data, Evas_Object *obj, void *event_info)
146 moment_info_s *moment_info = data;
148 _D("Add button is clicked");
150 ret_if(!moment_info);
155 static Evas_Object *_create_plus_button(Evas_Object *parent, main_view_s *main_view_info)
157 Evas_Object *plus_button = NULL;
159 retv_if(!parent, NULL);
161 plus_button = elm_button_add(parent);
162 retv_if(!plus_button, NULL);
164 elm_object_part_text_set(plus_button, "+Add");
165 evas_object_size_hint_weight_set(plus_button, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
166 evas_object_size_hint_align_set(plus_button, EVAS_HINT_FILL, EVAS_HINT_FILL);
167 evas_object_smart_callback_add(plus_button, "clicked", _click_plus_button_cb, main_view_info);
172 static void _destroy_plus_button(Evas_Object *plus_button)
174 ret_if(!plus_button);
175 evas_object_del(plus_button);
178 static Evas_Object *_create_predict_item(Evas_Object *parent, const char *city, const char *nation)
180 Evas_Object *predict_item = NULL;
183 char full_path[PATH_LEN] = {0, };
184 char city_name[PATH_LEN] = {0, };
186 retv_if(!parent, NULL);
188 path = app_get_resource_path();
189 retv_if(!path, NULL);
191 snprintf(full_path, sizeof(full_path), "%s/edje/%s", path, PREDICT_ITEM_EDJE);
194 predict_item = elm_layout_add(parent);
195 retv_if(!predict_item, NULL);
197 elm_layout_file_set(predict_item, full_path, "main");
198 evas_object_size_hint_weight_set(predict_item, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
199 evas_object_size_hint_align_set(predict_item, EVAS_HINT_FILL, EVAS_HINT_FILL);
200 evas_object_show(predict_item);
202 snprintf(city_name, sizeof(city_name), "%s, %s", city, nation);
203 elm_object_part_text_set(predict_item, "city", city_name);
208 static void _destroy_predict_item(Evas_Object *predict_item)
210 ret_if(!predict_item);
211 evas_object_del(predict_item);
214 static Evas_Object *_create_predict_scroller(Evas_Object *parent)
216 Evas_Object *predict_scroller = NULL;
218 retv_if(!parent, NULL);
220 predict_scroller = scroller_create(parent);
221 retv_if(!predict_scroller, NULL);
223 return predict_scroller;
226 static void _destroy_predict_scroller(Evas_Object *predict_scroller)
228 ret_if(!predict_scroller);
230 evas_object_del(predict_scroller);
233 static void _clean_predict_scroller(Evas_Object *predict_scroller)
235 Evas_Object *box = NULL;
236 Evas_Object *predict_item = NULL;
237 Eina_List *list = NULL;
239 ret_if(!predict_scroller);
241 box = elm_object_content_get(predict_scroller);
244 list = elm_box_children_get(box);
247 EINA_LIST_FREE(list, predict_item) {
248 _destroy_predict_item(predict_item);
252 static void _append_item_to_predict_scroller(Evas_Object *predict_scroller, Evas_Object *item)
254 Evas_Object *box = NULL;
256 ret_if(!predict_scroller);
259 box = elm_object_content_get(predict_scroller);
262 elm_box_pack_end(box, item);
265 static void _remove_item_in_predict_scroller(Evas_Object *predict_scroller, Evas_Object *item)
267 Evas_Object *box = NULL;
268 Evas_Object *item = NULL;
270 ret_if(!predict_scroller);
273 box = elm_object_content_get(predict_scroller);
276 elm_box_unpack(box, item);
279 static void _update_predict_scroller(Evas_Object *predict_scroller, const char *str)
281 city_s *city_info = NULL;
284 ret_if(!predict_scroller);
287 _clean_predict_scroller(predict_scroller);
289 city_info = city_get();
292 for (; i < CITY_MAX; i++) {
294 if (city_info[i]->name && strstr(city_info[i]->name, str))
296 else if (city_info[i]->nation && strstr(city_info[i]->nation, str))
300 Evas_Object *predict_item = NULL;
301 predict_item = _create_predict_item(predict_scroller, city_info[i]->name, city_info[i]->nation);
303 _append_item_to_predict_scroller(predict_scroller);
308 Evas_Object *main_view_create(Evas_Object *parent, moment_info_s *moment_info)
310 Evas_Object *button = NULL;
311 main_view_s *main_view_info = NULL;
313 char full_path[] = {0, };
315 retv_if(!parent, NULL);
317 path = app_get_resource_path();
318 retv_if(!path, NULL);
320 snprintf(full_path, sizeof(full_path), "%s/edje/%s", path, MAIN_VIEW_EDJE);
323 main_view_info = calloc(1, sizeof(main_view_s));
324 retv_if(!main_view_info, NULL);
326 main_view_info->main_view = elm_layout_add(parent);
327 if (!main_view_info->main_view) {
328 free(main_view_info);
332 elm_layout_file_set(main_view_info->main_view, full_path, "main");
333 evas_object_size_hint_weight_set(main_view_info->main_view, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
334 evas_object_size_hint_align_set(main_view_info->main_view, EVAS_HINT_FILL, EVAS_HINT_FILL);
335 evas_object_show(main_view);
336 evas_object_data_set(main_view_info->main_view, DATA_KEY_INFO, main_view_info);
338 elm_object_part_text_set(main_view_info->main_view, "title", "No cities");
339 elm_object_part_text_set(main_view_info->main_view, "description", "After you add cities, they will be shown here.");
341 main_view_info->entry = _create_search_entry(main_view_info->main_view, moment_info);
342 if (main_view_info->entry)
343 elm_object_part_content_set(main_view_info->main_view, "entry", main_view_info->entry);
345 main_view_info->map = _create_map(main_view_info->main_view);
346 if (main_view_info->map)
347 elm_object_part_content_set(main_view_info->main_view, "map", main_view_info->map);
349 main_view_info->result_button = _create_result_button(main_view_info->main_view, main_view_info);
350 if (main_view_info->result_button)
351 elm_object_part_content_set(main_view_info->main_view, "result_button", main_view_info->result_button);
353 main_view_info->selected_scroller = _create_selected_scroller(main_view_info->main_view);
354 if (main_view_info->selected_scroller)
355 elm_object_part_content_set(main_view_info->main_view, "selected_scroller", main_view_info->selected_scroller);
357 main_view_info->plus_button = _create_plus_button(main_view_info->main_view, main_view_info);
358 if (main_view_info->plus_button)
359 elm_object_part_content_set(main_view_info->main_view, "plus_button", main_view_info->plus_button);
361 main_view_info->predict_scroller = _create_predict_scroller(main_view_info->main_view);
362 if (main_view_info->predict_scroller)
363 elm_object_part_content_set(main_view_info->main_view, "predict_scroller", main_view_info->predict_scroller);
368 void main_view_destroy(Evas_Object *main_view)
370 Evas_Object *button = NULL;
371 main_view_s *main_view_info = NULL;
375 main_view_info = evas_object_data_del(main_view_info->main_view, DATA_KEY_INFO);
376 ret_if(!main_view_info);
378 if (main_view_info->predict_scroller)
379 _destroy_predict_scroller(main_view_info->predict_scroller);
381 if (main_view_info->plus_button)
382 _destroy_plus_button(main_view_info->plus_button);
384 if (main_view_info->selected_scroller)
385 _destroy_selected_scroller(main_view_info->selected_scroller);
387 if (main_view_info->result_button)
388 _destroy_result_button(button);
390 if (main_view_info->map)
391 _destroy_map(main_view_info->map);
393 if (main_view_info->entry)
394 _destroy_search_entry(main_view_info->entry);
396 free(main_view_info);
398 evas_object_del(main_view);