1 #include <Elementary.h>
3 #include <app_control.h>
4 #include <notification.h>
14 #include "group_info.h"
18 const char *const MAIN_VIEW_EDJE = "momentic.edj";
19 const char *const ENTRY_EDJE = "entry.edj";
20 const char *const PREDICT_ITEM_EDJE = "predict_item.edj";
21 static int cur_page = 0;
23 static void _append_item_to_searchlist(Evas_Object *searchlist, Evas_Object *item)
25 Evas_Object *box = NULL;
30 box = elm_object_content_get(searchlist);
33 elm_box_pack_end(box, item);
36 static void _remove_item_in_searchlist(Evas_Object *searchlist, Evas_Object *item)
38 Evas_Object *box = NULL;
43 box = elm_object_content_get(searchlist);
46 elm_box_unpack(box, item);
49 static void _clean_searchlist(Evas_Object *searchlist)
51 Evas_Object *box = NULL;
52 Evas_Object *predict_item = NULL;
53 Eina_List *list = NULL;
57 box = elm_object_content_get(searchlist);
60 list = elm_box_children_get(box);
63 EINA_LIST_FREE(list, predict_item) {
64 item_destroy_typing(predict_item);
68 static void _update_searchlist(Evas_Object *searchlist, const char *str, main_view_s *main_view_info)
70 Evas_Object *predict_item = NULL;
71 city_s *city_info = NULL;
77 _clean_searchlist(searchlist);
79 city_info = city_get();
82 /* This is the padding before the search list */
83 predict_item = item_create_padding(searchlist);
85 _append_item_to_searchlist(searchlist, predict_item);
88 for (; i < CITY_SYDNEY; i++) {
90 if (city_info[i].name && str && strstr(city_info[i].name, str))
92 else if (city_info[i].nation && str && strstr(city_info[i].nation, str))
96 predict_item = item_create_typing(searchlist, i, main_view_info);
98 _append_item_to_searchlist(searchlist, predict_item);
102 elm_object_signal_emit(main_view_info->main_view, "show", "entry_result");
104 count = scroller_count_item(searchlist);
108 predict_item = item_create_typing(searchlist, -1, main_view_info);
110 _append_item_to_searchlist(searchlist, predict_item);
114 static void _change_entry_cb(void *data, Evas_Object *obj, void *event_info)
116 main_view_s *main_view_info = data;
117 Evas_Object *entry = obj;
118 const char *str = NULL;
120 ret_if(!main_view_info);
122 _D("Entry is changed");
124 str = elm_entry_entry_get(entry);
126 || (str && !strlen(str))) {
127 _clean_searchlist(main_view_info->searchlist);
128 elm_object_signal_emit(main_view_info->main_view, "momentic,state,searchlist,hide", "");
132 _update_searchlist(main_view_info->searchlist, str, main_view_info);
133 elm_object_signal_emit(main_view_info->main_view, "momentic,state,searchlist,show", "");
136 static void _focus_entry_cb(void *data, Evas_Object *obj, void *event_info)
138 main_view_s *main_view_info = data;
139 Evas_Object *entry = obj;
140 const char *str = NULL;
142 ret_if(!main_view_info);
144 _D("Entry is focused");
146 str = elm_entry_entry_get(entry);
150 _update_searchlist(main_view_info->searchlist, str, main_view_info);
153 static void _unfocus_entry_cb(void *data, Evas_Object *obj, void *event_info)
155 main_view_s *main_view_info = data;
157 ret_if(!main_view_info);
158 ret_if(!main_view_info->searchlist);
160 _D("Entry is unfocused");
162 elm_object_signal_emit(main_view_info->main_view, "hide", "entry_result");
163 //_clean_searchlist(main_view_info->searchlist);
166 static void _resize_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
169 evas_object_geometry_get(obj, &x, &y, &w, &h);
170 _D("%s (%d:%d:%d:%d)", data, x, y, w, h);
173 static void _delete_down_cb(void *data, Evas_Object *obj, const char *emission, const char *source)
175 _D("Delete button is down");
178 static void _delete_up_cb(void *data, Evas_Object *obj, const char *emission, const char *source)
180 Evas_Object *searchbar = obj;
181 Evas_Object *entry_obj = NULL;
182 main_view_s *main_view_info = data;
185 ret_if(!main_view_info);
186 ret_if(!main_view_info->searchlist);
188 _D("Delete button is up");
190 entry_obj = elm_object_part_content_get(searchbar, "entry");
192 elm_entry_entry_set(entry_obj, "");
194 _clean_searchlist(main_view_info->searchlist);
197 static Evas_Object *_create_searchbar(Evas_Object *parent, main_view_s *main_view_info)
199 Evas_Object *searchbar = NULL;
200 Evas_Object *entry_obj = NULL;
203 char full_path[PATH_LEN] = {0, };
205 retv_if(!parent, NULL);
207 path = app_get_resource_path();
208 retv_if(!path, NULL);
210 snprintf(full_path, sizeof(full_path), "%s/edje/%s", path, ENTRY_EDJE);
213 searchbar = elm_layout_add(parent);
214 retv_if(!searchbar, NULL);
216 elm_layout_file_set(searchbar, full_path, "main");
217 elm_object_signal_callback_add(searchbar, "delete,down", "entry", _delete_down_cb, main_view_info);
218 elm_object_signal_callback_add(searchbar, "delete,up", "entry", _delete_up_cb, main_view_info);
220 evas_object_size_hint_weight_set(searchbar, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
221 evas_object_size_hint_align_set(searchbar, EVAS_HINT_FILL, EVAS_HINT_FILL);
222 evas_object_show(searchbar);
224 entry_obj = elm_entry_add(parent);
225 retv_if(!entry_obj, NULL);
227 elm_entry_single_line_set(entry_obj, EINA_TRUE);
228 /* This makes the text upper */
229 elm_entry_scrollable_set(entry_obj, EINA_FALSE);
230 elm_entry_text_style_user_push(entry_obj, "DEFAULT='font_size=20'");
231 elm_entry_context_menu_disabled_set(entry_obj, EINA_TRUE);
232 elm_object_part_text_set(entry_obj, "elm.guide", "<font_size=20>Search</font_size>");
234 evas_object_size_hint_weight_set(entry_obj, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
235 evas_object_size_hint_align_set(entry_obj, 0.0, 0.5);
237 evas_object_smart_callback_add(entry_obj, "changed", _change_entry_cb, main_view_info);
238 evas_object_smart_callback_add(entry_obj, "focused", _focus_entry_cb, main_view_info);
239 evas_object_smart_callback_add(entry_obj, "unfocused", _unfocus_entry_cb, main_view_info);
241 evas_object_show(entry_obj);
242 elm_object_part_content_set(searchbar, "entry", entry_obj);
247 static void _destroy_searchbar(Evas_Object *searchbar)
249 Evas_Object *entry_obj = NULL;
253 entry_obj = elm_object_part_content_unset(searchbar, "entry");
255 evas_object_del(entry_obj);
257 evas_object_del(searchbar);
260 static void _set_time_range(Evas_Object *item, int i, int base_city, int cur_city, double *matched_start, double *matched_end)
262 double start1 = 0.0f;
264 double start2 = 0.0f;
267 city_s *city_info = NULL;
275 city_info = city_get();
278 start = city_info[cur_city].timezone - city_info[base_city].timezone + (double) BEST_START_TIME;
283 if (matched_start && matched_end) {
284 /* This end is only for the matched end */
285 end = start + BEST_DURING_TIME;
286 if (*matched_start < (double) start)
287 *matched_start = (double) start;
289 if (*matched_end > (double) end)
294 if (tmp != start) half = 0.5f;
299 start = ((double) tmp) + half;
300 end = start + BEST_DURING_TIME;
303 start1 = (double) start;
309 if (tmp != end) half = 0.5f;
312 end2 = (double) (tmp % 24) + half;
314 start1 = (double) start;
318 _D("HELLO, %s %f:%f:%f:%f", city_info[cur_city].name, start1, end1, start2, end2);
320 if (set_time_range(item, i, start1, end1, start2, end2) == EINA_FALSE)
321 _E("cannot set time range");
324 typedef struct part_info
331 void main_view_click_next_btn_cb(void *data, Evas_Object *obj, void *event_info)
333 main_view_s *main_view_info = data;
334 Evas_Object *box = NULL;
335 Evas_Object *item = NULL;
336 Eina_List *list = NULL;
337 struct tm *global_time = NULL;
338 struct tm *local_time = NULL;
340 city_s *city_info = NULL;
341 int cur_timezone = 0;
344 double matched_start = 0.0f;
345 double matched_end = 100.0f; /* We have to initialize this variable as 100.0f */
347 ret_if(!main_view_info);
348 ret_if(!main_view_info->city_list);
350 _D("result button is clicked");
352 city_info = city_get();
356 global_time = gmtime(&t);
357 local_time = localtime(&t);
359 cur_timezone = (int) local_time->tm_gmtoff / 3600l;
361 box = elm_object_content_get(main_view_info->city_list);
364 list = elm_box_children_get(box);
367 EINA_LIST_FREE(list, item) {
368 selecting_info_s *selecting_info = evas_object_data_get(item, DATA_KEY_SELECTING);
369 continue_if(!selecting_info);
371 elm_object_signal_emit(item, "momentic,item,state,result", "");
372 elm_object_part_text_set(item, "time", "");
375 base_city = selecting_info->city;
376 _set_time_range(item, selecting_info->color, base_city, base_city, &matched_start, &matched_end);
379 _set_time_range(item, selecting_info->color, base_city, selecting_info->city, &matched_start, &matched_end);
382 _D("HELLO, match!! %f, %f", matched_start, matched_end);
383 item = item_create_best_time(main_view_info->city_list, matched_start, matched_end);
385 elm_object_signal_emit(item, "momentic,item,state,show", "");
386 scroller_append_item(main_view_info->city_list, item);
388 _E("cannot append an item");
390 elm_object_signal_emit(main_view_info->main_view, "momentic,state,page2", "");
394 void main_view_go_result(void *data)
396 main_view_s *main_view_info = data;
397 Evas_Object *box = NULL;
398 Evas_Object *item = NULL;
399 Eina_List *list = NULL;
400 struct tm *global_time = NULL;
401 struct tm *local_time = NULL;
403 city_s *city_info = NULL;
404 int cur_timezone = 0;
407 double matched_start = 0.0f;
408 double matched_end = 100.0f; /* We have to initialize this variable as 100.0f */
410 ret_if(!main_view_info);
411 ret_if(!main_view_info->city_list);
413 city_info = city_get();
417 global_time = gmtime(&t);
418 local_time = localtime(&t);
420 cur_timezone = (int) local_time->tm_gmtoff / 3600l;
422 box = elm_object_content_get(main_view_info->city_list);
425 list = elm_box_children_get(box);
428 EINA_LIST_FREE(list, item) {
429 selecting_info_s *selecting_info = evas_object_data_get(item, DATA_KEY_SELECTING);
430 continue_if(!selecting_info);
432 elm_object_signal_emit(item, "momentic,item,state,result", "");
433 elm_object_part_text_set(item, "time", "");
436 base_city = selecting_info->city;
437 _set_time_range(item, selecting_info->color, base_city, base_city, &matched_start, &matched_end);
440 _set_time_range(item, selecting_info->color, base_city, selecting_info->city, &matched_start, &matched_end);
443 _D("HELLO, match!! %f, %f", matched_start, matched_end);
444 item = item_create_best_time(main_view_info->city_list, matched_start, matched_end);
446 elm_object_signal_emit(item, "momentic,item,state,show", "");
447 scroller_append_item(main_view_info->city_list, item);
449 _E("cannot append an item");
454 static Evas_Object *_create_next_btn(Evas_Object *parent, main_view_s *main_view_info)
456 Evas_Object *next_btn = NULL;
457 Evas_Object *icon = NULL;
459 char full_path[PATH_LEN] = {0, };
461 retv_if(!parent, NULL);
463 path = app_get_resource_path();
464 retv_if(!path, NULL);
466 snprintf(full_path, sizeof(full_path), "%s/images/next_btn.png", path);
469 next_btn = elm_button_add(parent);
470 retv_if(!next_btn, NULL);
471 elm_object_style_set(next_btn, "transparent");
472 evas_object_smart_callback_add(next_btn, "clicked", main_view_click_next_btn_cb, main_view_info);
474 icon = elm_image_add(next_btn);
476 elm_image_file_set(icon, full_path, NULL);
477 elm_object_content_set(next_btn, icon);
480 button_effect(next_btn);
485 static void _destroy_next_btn(Evas_Object *next_btn)
488 evas_object_del(next_btn);
491 static void _append_here_to_city_list(Evas_Object *city_list, main_view_s *main_view_info)
493 Evas_Object *item = NULL;
494 struct tm *local_time = NULL;
495 city_s *city_info = NULL;
499 city_info = city_get();
503 local_time = localtime(&t);
505 for (i = 0; i < CITY_SYDNEY; i++) {
506 if (city_info[i].timezone == ((double) (local_time->tm_gmtoff / 3600l)))
510 item = item_create_selecting(city_list, i, local_time, main_view_info);
512 scroller_append_item(city_list, item);
516 _append_here_city_anim_cb(void *data)
518 main_view_s *main_view_info = data;
520 _append_here_to_city_list(main_view_info->city_list, main_view_info);
521 return ECORE_CALLBACK_CANCEL;
524 static Evas_Object *_create_city_list(Evas_Object *parent, main_view_s *main_view_info)
526 Evas_Object *city_list = NULL;
528 retv_if(!parent, NULL);
530 city_list = scroller_create(parent);
531 retv_if(!city_list, NULL);
533 ecore_timer_add(1, _append_here_city_anim_cb, main_view_info);
538 static void _destroy_city_list(Evas_Object *city_list)
540 Evas_Object *box = NULL;
541 Evas_Object *item = NULL;
542 Eina_List *list = NULL;
546 box = elm_object_content_get(city_list);
549 list = elm_box_children_get(box);
552 EINA_LIST_FREE(list, item) {
553 evas_object_del(item);
556 evas_object_del(box);
557 evas_object_del(city_list);
560 void main_view_click_add_btn_cb(void *data, Evas_Object *obj, void *event_info)
562 main_view_s *main_view_info = data;
564 _D("Add button is clicked");
566 ret_if(!main_view_info);
567 ret_if(!main_view_info->main_view);
569 elm_object_signal_emit(main_view_info->main_view, "momentic,state,page1", "");
572 static void _page1_done_cb(void *data, Evas_Object *obj, const char *signal, const char *source)
574 elm_object_focus_set(data, EINA_TRUE);
577 static Evas_Object *_create_add_btn(Evas_Object *parent, main_view_s *main_view_info)
579 Evas_Object *add_btn = NULL;
580 Evas_Object *icon = NULL;
582 char full_path[PATH_LEN] = {0, };
584 retv_if(!parent, NULL);
586 path = app_get_resource_path();
587 retv_if(!path, NULL);
589 snprintf(full_path, sizeof(full_path), "%s/images/add_btn.png", path);
592 add_btn = elm_button_add(parent);
593 retv_if(!add_btn, NULL);
594 elm_object_style_set(add_btn, "transparent");
595 evas_object_smart_callback_add(add_btn, "clicked", main_view_click_add_btn_cb, main_view_info);
597 icon = elm_image_add(add_btn);
599 elm_image_file_set(icon, full_path, NULL);
600 elm_object_content_set(add_btn, icon);
603 button_effect(add_btn);
608 static void _destroy_add_btn(Evas_Object *add_btn)
611 evas_object_del(add_btn);
614 static void _click_save_button_cb(void *data, Evas_Object *obj, void *event_info)
616 main_view_s *main_view_info = data;
617 moment_info_s *moment_info = main_view_info->moment_info;
618 Evas_Object *box = NULL;
619 Evas_Object *item = NULL;
620 Eina_List *list = NULL;
621 group_info_s *group_info = NULL;
622 //int city[MAXIMUM_SELECTED_CITY] = {0, };
623 int city[5] = {0, }; /* FIXME : for compatibility */
625 char group_title[PATH_LEN] = {0, };
626 city_s *city_info = NULL;
627 char message[PATH_LEN] = {0, };
629 city_info = city_get();
632 _D("Save button is clicked");
634 ret_if(!main_view_info);
636 box = elm_object_content_get(main_view_info->city_list);
639 list = elm_box_children_get(box);
642 EINA_LIST_FREE(list, item) {
643 selecting_info_s *selecting_info = NULL;
645 selecting_info = evas_object_data_get(item, DATA_KEY_SELECTING);
646 break_if(!selecting_info);
649 strcat(group_title, ", ");
651 city[i] = selecting_info->city;
652 _D("HELLO, city[%d] - %d", i, selecting_info->city);
653 strcat(group_title, city_info[city[i]].name);
657 int id = db_insert_group(moment_info->db
664 group_info = group_info_create(id
671 moment_info->group_list = eina_list_append(moment_info->group_list, group_info);
673 Evas_Object *item_group = item_create_group(main_view_info->group_scroller
676 scroller_append_item(main_view_info->group_scroller, item_group);
677 elm_object_signal_emit(main_view_info->main_view, "momentic,state,drawer,noresult,hide", "");
679 snprintf(message, sizeof(message), "Create a group named <br>'%s'", group_title);
680 notification_status_message_post(message);
684 static void _click_save_button_cb(void *data, Evas_Object *obj, void *event_info)
686 main_view_s *main_view_info = data;
687 elm_object_signal_emit(main_view_info->save_button, "momentic,state,activate", "");
688 elm_object_signal_emit(main_view_info->main_view, "momentic,state,save_group,activate", "");
691 static void _click_cancel_button_cb(void *data, Evas_Object *obj, void *event_info)
693 main_view_s *main_view_info = data;
694 elm_object_signal_emit(main_view_info->save_button, "momentic,state,deactivate", "");
695 elm_object_signal_emit(main_view_info->main_view, "momentic,state,save_group,deactivate", "");
700 static Evas_Object *_create_save_button(Evas_Object *parent, main_view_s *main_view_info)
702 Evas_Object *popup_button = NULL;
703 Evas_Object *save_button = NULL;
706 char full_path[PATH_LEN] = {0, };
708 retv_if(!parent, NULL);
710 path = app_get_resource_path();
711 retv_if(!path, NULL);
713 snprintf(full_path, sizeof(full_path), "%s/edje/popup.edj", path);
716 popup_button = elm_layout_add(parent);
717 retv_if(!popup_button, NULL);
719 elm_layout_file_set(popup_button, full_path, "save_as_group");
720 evas_object_size_hint_weight_set(popup_button, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
721 evas_object_size_hint_align_set(popup_button, EVAS_HINT_FILL, EVAS_HINT_FILL);
722 evas_object_show(popup_button);
724 save_button = elm_button_add(parent);
725 retv_if(!save_button, NULL);
726 elm_object_style_set(save_button, "transparent");
727 elm_object_part_content_set(popup_button, "button", save_button);
728 evas_object_smart_callback_add(save_button, "clicked", _click_save_button_cb, main_view_info);
731 Evas_Object *create_button = NULL;
732 Evas_Object *cancel_button = NULL;
734 create_button = elm_button_add(parent);
735 retv_if(!create_button, NULL);
736 //elm_object_style_set(create_button, "transparent");
737 elm_object_part_content_set(popup_button, "create_btn", create_button);
738 //evas_object_smart_callback_add(create_button, "clicked", _click_create_button_cb, main_view_info);
740 cancel_button = elm_button_add(parent);
741 retv_if(!cancel_button, NULL);
742 //elm_object_style_set(cancel_button, "transparent");
743 elm_object_part_content_set(popup_button, "cancel_btn", cancel_button);
744 evas_object_smart_callback_add(cancel_button, "clicked", _click_cancel_button_cb, main_view_info);
750 static void _destroy_save_button(Evas_Object *save_button)
752 ret_if(!save_button);
753 evas_object_del(save_button);
756 static Evas_Object *_create_searchlist(Evas_Object *parent)
758 Evas_Object *searchlist = NULL;
760 retv_if(!parent, NULL);
762 searchlist = scroller_create(parent);
763 retv_if(!searchlist, NULL);
768 static void _destroy_searchlist(Evas_Object *searchlist)
770 Evas_Object *box = NULL;
771 Evas_Object *item = NULL;
772 Eina_List *list = NULL;
776 box = elm_object_content_get(searchlist);
779 list = elm_box_children_get(box);
782 EINA_LIST_FREE(list, item) {
783 evas_object_del(item);
786 evas_object_del(box);
787 evas_object_del(searchlist);
790 static Evas_Object *_create_result_list(Evas_Object *parent)
792 Evas_Object *result_list = NULL;
794 retv_if(!parent, NULL);
796 result_list = scroller_create(parent);
797 retv_if(!result_list, NULL);
802 static void _destroy_result_list(Evas_Object *result_list)
804 Evas_Object *box = NULL;
805 Evas_Object *item = NULL;
806 Eina_List *list = NULL;
808 ret_if(!result_list);
810 box = elm_object_content_get(result_list);
813 list = elm_box_children_get(box);
816 EINA_LIST_FREE(list, item) {
817 evas_object_del(item);
820 evas_object_del(box);
821 evas_object_del(result_list);
824 static Evas_Object *_create_group_scroller(Evas_Object *parent, Eina_List *list, main_view_s *main_view_info)
826 Evas_Object *group_scroller = NULL;
827 group_info_s *group_info = NULL;
828 const Eina_List *l = NULL;
830 retv_if(!parent, NULL);
832 group_scroller = scroller_create(parent);
833 retv_if(!group_scroller, NULL);
835 EINA_LIST_FOREACH(list, l, group_info) {
836 Evas_Object *item_group = item_create_group(group_scroller
839 scroller_append_item(group_scroller, item_group);
842 int count = scroller_count_item(group_scroller);
844 elm_object_signal_emit(main_view_info->main_view, "momentic,state,drawer,noresult,hide", "");
846 elm_object_signal_emit(main_view_info->main_view, "momentic,state,drawer,noresult,show", "");
848 return group_scroller;
851 static void _destroy_group_scroller(Evas_Object *group_scroller)
853 Evas_Object *box = NULL;
854 Evas_Object *item = NULL;
855 Eina_List *list = NULL;
857 ret_if(!group_scroller);
859 box = elm_object_content_get(group_scroller);
862 list = elm_box_children_get(box);
865 EINA_LIST_FREE(list, item) {
866 evas_object_del(item);
869 evas_object_del(box);
870 evas_object_del(group_scroller);
873 static void _main_view_back_cb(void *data, Evas_Object *obj, void *event_info)
875 main_view_s *main_view_info = data;
876 static time_t prev_t;
881 if (prev_t + 2 > cur_t) {
882 _D("wait a sec to process the back key event");
887 elm_object_signal_emit(obj, "momentic,state,page,back", "");
890 item_reset_color_index();
891 scroller_clear_item(main_view_info->city_list);
892 _append_here_to_city_list(main_view_info->city_list, main_view_info);
893 elm_object_focus_set(main_view_info->searchbar, EINA_FALSE);
895 } else if (2 == cur_page) {
896 Eina_List *list = NULL;
897 Evas_Object *item = NULL;
898 Evas_Object *tmp = NULL;
899 Evas_Object *box = elm_object_content_get(main_view_info->city_list);
903 list = elm_box_children_get(box);
906 EINA_LIST_FREE(list, item) {
907 elm_object_signal_emit(item, "momentic,item,state,default", "");
910 scroller_remove_item(main_view_info->city_list, tmp);
911 item_destroy_best_time(tmp);
913 } else if (0 == cur_page) {
914 elm_win_lower(main_view_info->moment_info->win);
915 } else if (4 == cur_page) {
916 scroller_clear_item(main_view_info->city_list);
917 _append_here_to_city_list(main_view_info->city_list, main_view_info);
918 elm_object_signal_emit(main_view_info->main_view, "load", "");
919 elm_object_signal_emit(main_view_info->main_view, "momentic,state,add_description,show", "");
923 Evas_Object *main_view_create(Evas_Object *parent, moment_info_s *moment_info)
925 main_view_s *main_view_info = NULL;
927 char full_path[PATH_LEN] = {0, };
929 retv_if(!parent, NULL);
931 path = app_get_resource_path();
932 retv_if(!path, NULL);
934 snprintf(full_path, sizeof(full_path), "%s/edje/%s", path, MAIN_VIEW_EDJE);
937 _D("main_view is created with %s", full_path);
939 main_view_info = calloc(1, sizeof(main_view_s));
940 retv_if(!main_view_info, NULL);
941 main_view_info->moment_info = moment_info;
943 main_view_info->main_view = create_momentic_layout(parent, full_path);
944 if (!main_view_info->main_view) {
945 free(main_view_info);
949 eext_object_event_callback_add(main_view_info->main_view, EEXT_CALLBACK_BACK, _main_view_back_cb, main_view_info);
951 elm_layout_file_set(main_view_info->main_view, full_path, "main");
952 evas_object_size_hint_weight_set(main_view_info->main_view, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
953 evas_object_size_hint_align_set(main_view_info->main_view, EVAS_HINT_FILL, EVAS_HINT_FILL);
954 evas_object_show(main_view_info->main_view);
955 evas_object_data_set(main_view_info->main_view, DATA_KEY_INFO, main_view_info);
956 evas_object_event_callback_add(main_view_info->main_view, EVAS_CALLBACK_RESIZE, _resize_cb, "main_view");
958 elm_object_part_text_set(main_view_info->main_view, "title", "No cities");
959 elm_object_part_text_set(main_view_info->main_view, "description", "After you add cities, they will be shown here.");
961 main_view_info->searchbar = _create_searchbar(main_view_info->main_view, main_view_info);
962 if (main_view_info->searchbar)
963 elm_object_part_content_set(main_view_info->main_view, "searchbar", main_view_info->searchbar);
965 main_view_info->next_btn = _create_next_btn(main_view_info->main_view, main_view_info);
966 if (main_view_info->next_btn)
967 elm_object_part_content_set(main_view_info->main_view, "next_btn", main_view_info->next_btn);
969 main_view_info->city_list = _create_city_list(main_view_info->main_view, main_view_info);
970 if (main_view_info->city_list)
971 elm_object_part_content_set(main_view_info->main_view, "city_list", main_view_info->city_list);
973 main_view_info->add_btn = _create_add_btn(main_view_info->main_view, main_view_info);
974 if (main_view_info->add_btn)
975 elm_object_part_content_set(main_view_info->main_view, "add_btn", main_view_info->add_btn);
977 main_view_info->searchlist = _create_searchlist(main_view_info->main_view);
978 if (main_view_info->searchlist)
979 elm_object_part_content_set(main_view_info->main_view, "searchlist", main_view_info->searchlist);
981 db_list_group(moment_info->db, &moment_info->group_list);
983 main_view_info->group_scroller = _create_group_scroller(main_view_info->main_view, moment_info->group_list, main_view_info);
984 if (main_view_info->group_scroller)
985 elm_object_part_content_set(main_view_info->main_view, "drawer_content", main_view_info->group_scroller);
987 main_view_info->save_button = _create_save_button(main_view_info->main_view, main_view_info);
988 if (main_view_info->save_button)
989 elm_object_part_content_set(main_view_info->main_view, "save_group_btn", main_view_info->save_button);
991 elm_object_signal_callback_add(main_view_info->main_view, "momentic,page1,done", "", _page1_done_cb, main_view_info->searchbar);
993 return main_view_info->main_view;
996 void main_view_destroy(Evas_Object *main_view)
998 Evas_Object *button = NULL;
999 main_view_s *main_view_info = NULL;
1003 main_view_info = evas_object_data_del(main_view_info->main_view, DATA_KEY_INFO);
1004 ret_if(!main_view_info);
1006 if (main_view_info->save_button)
1007 _destroy_save_button(main_view_info->save_button);
1009 if (main_view_info->group_scroller)
1010 _destroy_group_scroller(main_view_info->group_scroller);
1012 if (main_view_info->searchlist)
1013 _destroy_searchlist(main_view_info->searchlist);
1015 if (main_view_info->add_btn)
1016 _destroy_add_btn(main_view_info->add_btn);
1018 if (main_view_info->city_list)
1019 _destroy_city_list(main_view_info->city_list);
1021 if (main_view_info->next_btn)
1022 _destroy_next_btn(button);
1024 if (main_view_info->searchbar)
1025 _destroy_searchbar(main_view_info->searchbar);
1027 free(main_view_info);
1029 evas_object_del(main_view);
1032 static void _get_best_time(double *timezone, int size, double *start, double *end)
1040 *start = timezone[0];
1041 *end = timezone[0] + BEST_DURING_TIME;
1043 for (; i < size; i++) {
1044 double tmp = timezone[i];
1047 if (tmp + BEST_DURING_TIME <= *start) {
1048 _D("No matched time");
1053 *end = tmp + BEST_DURING_TIME;
1055 } else if (tmp > *start) {
1057 _D("No matched time");
1069 static void _reply_cb(app_control_h request, app_control_h reply, app_control_result_e result, void *user_data)
1071 _D("Result callback is called");
1074 static void _launch_calendar_edit(int start, int end)
1076 app_control_h app_control = NULL;
1078 struct tm *local_time = NULL;
1081 char start_str[PATH_LEN] = {0, };
1082 char end_str[PATH_LEN] = {0, };
1084 ret = app_control_create(&app_control);
1085 ret_if(APP_CONTROL_ERROR_NONE != ret);
1088 local_time = localtime(&t);
1090 snprintf(start_str, sizeof(start_str), "%4d-%2d-%2d %2d:%2d:%2d"
1091 , local_time->tm_year + 1900
1092 , local_time->tm_mon + 1
1093 , local_time->tm_mday
1098 snprintf(start_str, sizeof(start_str), "%4d-%2d-%2d %2d:%2d:%2d"
1099 , local_time->tm_year + 1900
1100 , local_time->tm_mon + 1
1101 , local_time->tm_mday
1106 app_control_set_app_id(app_control, "com.samsung.calendar-lite-edit");
1107 app_control_set_operation(app_control, "http://tizen.org/appcontrol/operation/edit");
1108 app_control_add_extra_data(app_control, "start_time", start_str);
1109 app_control_add_extra_data(app_control, "end_time", end_str);
1111 app_control_send_launch_request(app_control, _reply_cb, NULL);
1112 app_control_destroy(app_control);