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 char *_strcasestr(char *str1, char *str2)
70 int len1 = 0, len2 = 0;
82 if (!strncasecmp(str1, str2, len2))
91 static void _update_searchlist(Evas_Object *searchlist, const char *str, main_view_s *main_view_info)
93 Evas_Object *predict_item = NULL;
94 city_s *city_info = NULL;
100 _clean_searchlist(searchlist);
102 city_info = city_get();
105 /* This is the padding before the search list */
106 predict_item = item_create_padding(searchlist);
108 _append_item_to_searchlist(searchlist, predict_item);
111 for (; i < CITY_SYDNEY; i++) {
113 if (city_info[i].name && str && _strcasestr(city_info[i].name, str))
115 else if (city_info[i].nation && str && _strcasestr(city_info[i].nation, str))
119 predict_item = item_create_typing(searchlist, i, main_view_info);
121 _append_item_to_searchlist(searchlist, predict_item);
125 elm_object_signal_emit(main_view_info->main_view, "show", "entry_result");
127 count = scroller_count_item(searchlist);
131 predict_item = item_create_typing(searchlist, -1, main_view_info);
133 _append_item_to_searchlist(searchlist, predict_item);
137 static void _change_entry_cb(void *data, Evas_Object *obj, void *event_info)
139 main_view_s *main_view_info = data;
140 Evas_Object *entry = obj;
141 const char *str = NULL;
143 ret_if(!main_view_info);
145 _D("Entry is changed");
147 str = elm_entry_entry_get(entry);
149 || (str && !strlen(str))) {
150 _clean_searchlist(main_view_info->searchlist);
151 elm_object_signal_emit(main_view_info->main_view, "momentic,state,searchlist,hide", "");
155 _update_searchlist(main_view_info->searchlist, str, main_view_info);
156 elm_object_signal_emit(main_view_info->main_view, "momentic,state,searchlist,show", "");
159 static void _focus_entry_cb(void *data, Evas_Object *obj, void *event_info)
161 main_view_s *main_view_info = data;
162 Evas_Object *entry = obj;
163 const char *str = NULL;
165 ret_if(!main_view_info);
167 _D("Entry is focused");
169 str = elm_entry_entry_get(entry);
173 _update_searchlist(main_view_info->searchlist, str, main_view_info);
176 static void _unfocus_entry_cb(void *data, Evas_Object *obj, void *event_info)
178 main_view_s *main_view_info = data;
180 ret_if(!main_view_info);
181 ret_if(!main_view_info->searchlist);
183 _D("Entry is unfocused");
185 elm_object_signal_emit(main_view_info->main_view, "hide", "entry_result");
186 //_clean_searchlist(main_view_info->searchlist);
189 static void _resize_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
192 evas_object_geometry_get(obj, &x, &y, &w, &h);
193 _D("%s (%d:%d:%d:%d)", data, x, y, w, h);
196 static void _delete_down_cb(void *data, Evas_Object *obj, const char *emission, const char *source)
198 _D("Delete button is down");
201 static void _delete_up_cb(void *data, Evas_Object *obj, const char *emission, const char *source)
203 Evas_Object *searchbar = obj;
204 Evas_Object *entry_obj = NULL;
205 main_view_s *main_view_info = data;
208 ret_if(!main_view_info);
209 ret_if(!main_view_info->searchlist);
211 _D("Delete button is up");
213 entry_obj = elm_object_part_content_get(searchbar, "entry");
215 elm_entry_entry_set(entry_obj, "");
217 _clean_searchlist(main_view_info->searchlist);
220 static Evas_Object *_create_searchbar(Evas_Object *parent, main_view_s *main_view_info)
222 Evas_Object *searchbar = NULL;
223 Evas_Object *entry_obj = NULL;
226 char full_path[PATH_LEN] = {0, };
228 retv_if(!parent, NULL);
230 path = app_get_resource_path();
231 retv_if(!path, NULL);
233 snprintf(full_path, sizeof(full_path), "%s/edje/%s", path, ENTRY_EDJE);
236 searchbar = elm_layout_add(parent);
237 retv_if(!searchbar, NULL);
239 elm_layout_file_set(searchbar, full_path, "main");
240 elm_object_signal_callback_add(searchbar, "delete,down", "entry", _delete_down_cb, main_view_info);
241 elm_object_signal_callback_add(searchbar, "delete,up", "entry", _delete_up_cb, main_view_info);
243 evas_object_size_hint_weight_set(searchbar, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
244 evas_object_size_hint_align_set(searchbar, EVAS_HINT_FILL, EVAS_HINT_FILL);
245 evas_object_show(searchbar);
247 entry_obj = elm_entry_add(parent);
248 retv_if(!entry_obj, NULL);
250 elm_entry_single_line_set(entry_obj, EINA_TRUE);
251 /* This makes the text upper */
252 elm_entry_scrollable_set(entry_obj, EINA_FALSE);
253 elm_entry_text_style_user_push(entry_obj, "DEFAULT='font_size=20'");
254 elm_entry_context_menu_disabled_set(entry_obj, EINA_TRUE);
255 elm_object_part_text_set(entry_obj, "elm.guide", "<font_size=20>Search</font_size>");
257 evas_object_size_hint_weight_set(entry_obj, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
258 evas_object_size_hint_align_set(entry_obj, 0.0, 0.5);
260 evas_object_smart_callback_add(entry_obj, "changed", _change_entry_cb, main_view_info);
261 evas_object_smart_callback_add(entry_obj, "focused", _focus_entry_cb, main_view_info);
262 evas_object_smart_callback_add(entry_obj, "unfocused", _unfocus_entry_cb, main_view_info);
264 evas_object_show(entry_obj);
265 elm_object_part_content_set(searchbar, "entry", entry_obj);
270 static void _destroy_searchbar(Evas_Object *searchbar)
272 Evas_Object *entry_obj = NULL;
276 entry_obj = elm_object_part_content_unset(searchbar, "entry");
278 evas_object_del(entry_obj);
280 evas_object_del(searchbar);
283 static void _set_time_range(Evas_Object *item, int i, int base_city, int cur_city, double *matched_start, double *matched_end)
285 double start1 = 0.0f;
287 double start2 = 0.0f;
290 city_s *city_info = NULL;
298 city_info = city_get();
301 start = city_info[cur_city].timezone - city_info[base_city].timezone + (double) BEST_START_TIME;
306 if (matched_start && matched_end) {
307 /* This end is only for the matched end */
308 end = start + BEST_DURING_TIME;
309 if (*matched_start < (double) start)
310 *matched_start = (double) start;
312 if (*matched_end > (double) end)
317 if (tmp != start) half = 0.5f;
322 start = ((double) tmp) + half;
323 end = start + BEST_DURING_TIME;
326 start1 = (double) start;
332 if (tmp != end) half = 0.5f;
335 end2 = (double) (tmp % 24) + half;
337 start1 = (double) start;
341 _D("HELLO, %s %f:%f:%f:%f", city_info[cur_city].name, start1, end1, start2, end2);
343 if (set_time_range(item, i, start1, end1, start2, end2) == EINA_FALSE)
344 _E("cannot set time range");
347 typedef struct part_info
354 void main_view_click_next_btn_cb(void *data, Evas_Object *obj, void *event_info)
356 main_view_s *main_view_info = data;
357 Evas_Object *box = NULL;
358 Evas_Object *item = NULL;
359 Eina_List *list = NULL;
360 struct tm *global_time = NULL;
361 struct tm *local_time = NULL;
363 city_s *city_info = NULL;
364 int cur_timezone = 0;
367 double matched_start = 0.0f;
368 double matched_end = 100.0f; /* We have to initialize this variable as 100.0f */
370 ret_if(!main_view_info);
371 ret_if(!main_view_info->city_list);
373 _D("result button is clicked");
375 city_info = city_get();
379 global_time = gmtime(&t);
380 local_time = localtime(&t);
382 cur_timezone = (int) local_time->tm_gmtoff / 3600l;
384 box = elm_object_content_get(main_view_info->city_list);
387 list = elm_box_children_get(box);
390 EINA_LIST_FREE(list, item) {
391 selecting_info_s *selecting_info = evas_object_data_get(item, DATA_KEY_SELECTING);
392 continue_if(!selecting_info);
394 elm_object_signal_emit(item, "momentic,item,state,result", "");
395 elm_object_part_text_set(item, "time", "");
398 base_city = selecting_info->city;
399 _set_time_range(item, selecting_info->color, base_city, base_city, &matched_start, &matched_end);
402 _set_time_range(item, selecting_info->color, base_city, selecting_info->city, &matched_start, &matched_end);
405 _D("HELLO, match!! %f, %f", matched_start, matched_end);
406 item = item_create_best_time(main_view_info->city_list, matched_start, matched_end);
408 elm_object_signal_emit(item, "momentic,item,state,show", "");
409 scroller_append_item(main_view_info->city_list, item);
411 _E("cannot append an item");
413 elm_object_signal_emit(main_view_info->main_view, "momentic,state,page2", "");
417 void main_view_go_result(void *data)
419 main_view_s *main_view_info = data;
420 Evas_Object *box = NULL;
421 Evas_Object *item = NULL;
422 Eina_List *list = NULL;
423 struct tm *global_time = NULL;
424 struct tm *local_time = NULL;
426 city_s *city_info = NULL;
427 int cur_timezone = 0;
430 double matched_start = 0.0f;
431 double matched_end = 100.0f; /* We have to initialize this variable as 100.0f */
433 ret_if(!main_view_info);
434 ret_if(!main_view_info->city_list);
436 city_info = city_get();
440 global_time = gmtime(&t);
441 local_time = localtime(&t);
443 cur_timezone = (int) local_time->tm_gmtoff / 3600l;
445 box = elm_object_content_get(main_view_info->city_list);
448 list = elm_box_children_get(box);
451 EINA_LIST_FREE(list, item) {
452 selecting_info_s *selecting_info = evas_object_data_get(item, DATA_KEY_SELECTING);
453 continue_if(!selecting_info);
455 elm_object_signal_emit(item, "momentic,item,state,result", "");
456 elm_object_part_text_set(item, "time", "");
459 base_city = selecting_info->city;
460 _set_time_range(item, selecting_info->color, base_city, base_city, &matched_start, &matched_end);
463 _set_time_range(item, selecting_info->color, base_city, selecting_info->city, &matched_start, &matched_end);
466 _D("HELLO, match!! %f, %f", matched_start, matched_end);
467 item = item_create_best_time(main_view_info->city_list, matched_start, matched_end);
469 elm_object_signal_emit(item, "momentic,item,state,show", "");
470 scroller_append_item(main_view_info->city_list, item);
472 _E("cannot append an item");
477 static Evas_Object *_create_next_btn(Evas_Object *parent, main_view_s *main_view_info)
479 Evas_Object *next_btn = NULL;
480 Evas_Object *icon = NULL;
482 char full_path[PATH_LEN] = {0, };
484 retv_if(!parent, NULL);
486 path = app_get_resource_path();
487 retv_if(!path, NULL);
489 snprintf(full_path, sizeof(full_path), "%s/images/next_btn.png", path);
492 next_btn = elm_button_add(parent);
493 retv_if(!next_btn, NULL);
494 elm_object_style_set(next_btn, "transparent");
495 evas_object_smart_callback_add(next_btn, "clicked", main_view_click_next_btn_cb, main_view_info);
497 icon = elm_image_add(next_btn);
499 elm_image_file_set(icon, full_path, NULL);
500 elm_object_content_set(next_btn, icon);
503 button_effect(next_btn);
508 static void _destroy_next_btn(Evas_Object *next_btn)
511 evas_object_del(next_btn);
514 static void _append_here_to_city_list(Evas_Object *city_list, main_view_s *main_view_info)
516 Evas_Object *item = NULL;
517 struct tm *local_time = NULL;
518 city_s *city_info = NULL;
522 city_info = city_get();
526 local_time = localtime(&t);
528 for (i = 0; i < CITY_SYDNEY; i++) {
529 if (city_info[i].timezone == ((double) (local_time->tm_gmtoff / 3600l)))
533 item = item_create_selecting(city_list, i, local_time, main_view_info);
535 scroller_append_item(city_list, item);
539 _append_here_city_anim_cb(void *data)
541 main_view_s *main_view_info = data;
543 _append_here_to_city_list(main_view_info->city_list, main_view_info);
544 return ECORE_CALLBACK_CANCEL;
547 static Evas_Object *_create_city_list(Evas_Object *parent, main_view_s *main_view_info)
549 Evas_Object *city_list = NULL;
551 retv_if(!parent, NULL);
553 city_list = scroller_create(parent);
554 retv_if(!city_list, NULL);
556 ecore_timer_add(1, _append_here_city_anim_cb, main_view_info);
561 static void _destroy_city_list(Evas_Object *city_list)
563 Evas_Object *box = NULL;
564 Evas_Object *item = NULL;
565 Eina_List *list = NULL;
569 box = elm_object_content_get(city_list);
572 list = elm_box_children_get(box);
575 EINA_LIST_FREE(list, item) {
576 evas_object_del(item);
579 evas_object_del(box);
580 evas_object_del(city_list);
583 void main_view_click_add_btn_cb(void *data, Evas_Object *obj, void *event_info)
585 main_view_s *main_view_info = data;
587 _D("Add button is clicked");
589 ret_if(!main_view_info);
590 ret_if(!main_view_info->main_view);
592 elm_object_signal_emit(main_view_info->main_view, "momentic,state,page1", "");
595 static void _page1_done_cb(void *data, Evas_Object *obj, const char *signal, const char *source)
597 elm_object_focus_set(data, EINA_TRUE);
600 static Evas_Object *_create_add_btn(Evas_Object *parent, main_view_s *main_view_info)
602 Evas_Object *add_btn = NULL;
603 Evas_Object *icon = NULL;
605 char full_path[PATH_LEN] = {0, };
607 retv_if(!parent, NULL);
609 path = app_get_resource_path();
610 retv_if(!path, NULL);
612 snprintf(full_path, sizeof(full_path), "%s/images/add_btn.png", path);
615 add_btn = elm_button_add(parent);
616 retv_if(!add_btn, NULL);
617 elm_object_style_set(add_btn, "transparent");
618 evas_object_smart_callback_add(add_btn, "clicked", main_view_click_add_btn_cb, main_view_info);
620 icon = elm_image_add(add_btn);
622 elm_image_file_set(icon, full_path, NULL);
623 elm_object_content_set(add_btn, icon);
626 button_effect(add_btn);
631 static void _destroy_add_btn(Evas_Object *add_btn)
634 evas_object_del(add_btn);
637 static void _click_save_button_cb(void *data, Evas_Object *obj, void *event_info)
639 main_view_s *main_view_info = data;
640 moment_info_s *moment_info = main_view_info->moment_info;
641 Evas_Object *box = NULL;
642 Evas_Object *item = NULL;
643 Eina_List *list = NULL;
644 group_info_s *group_info = NULL;
645 //int city[MAXIMUM_SELECTED_CITY] = {0, };
646 int city[5] = {0, }; /* FIXME : for compatibility */
648 char group_title[PATH_LEN] = {0, };
649 city_s *city_info = NULL;
650 char message[PATH_LEN] = {0, };
652 city_info = city_get();
655 _D("Save button is clicked");
657 ret_if(!main_view_info);
659 box = elm_object_content_get(main_view_info->city_list);
662 list = elm_box_children_get(box);
665 EINA_LIST_FREE(list, item) {
666 selecting_info_s *selecting_info = NULL;
668 selecting_info = evas_object_data_get(item, DATA_KEY_SELECTING);
669 break_if(!selecting_info);
672 strcat(group_title, ", ");
674 city[i] = selecting_info->city;
675 _D("HELLO, city[%d] - %d", i, selecting_info->city);
676 strcat(group_title, city_info[city[i]].name);
680 int id = db_insert_group(moment_info->db
687 group_info = group_info_create(id
694 moment_info->group_list = eina_list_append(moment_info->group_list, group_info);
696 Evas_Object *item_group = item_create_group(main_view_info->group_scroller
699 scroller_append_item(main_view_info->group_scroller, item_group);
700 elm_object_signal_emit(main_view_info->main_view, "momentic,state,drawer,noresult,hide", "");
702 snprintf(message, sizeof(message), "Create a group named <br>'%s'", group_title);
703 notification_status_message_post(message);
707 static void _click_save_button_cb(void *data, Evas_Object *obj, void *event_info)
709 main_view_s *main_view_info = data;
710 elm_object_signal_emit(main_view_info->save_button, "momentic,state,activate", "");
711 elm_object_signal_emit(main_view_info->main_view, "momentic,state,save_group,activate", "");
714 static void _click_cancel_button_cb(void *data, Evas_Object *obj, void *event_info)
716 main_view_s *main_view_info = data;
717 elm_object_signal_emit(main_view_info->save_button, "momentic,state,deactivate", "");
718 elm_object_signal_emit(main_view_info->main_view, "momentic,state,save_group,deactivate", "");
723 static Evas_Object *_create_save_button(Evas_Object *parent, main_view_s *main_view_info)
725 Evas_Object *popup_button = NULL;
726 Evas_Object *save_button = NULL;
729 char full_path[PATH_LEN] = {0, };
731 retv_if(!parent, NULL);
733 path = app_get_resource_path();
734 retv_if(!path, NULL);
736 snprintf(full_path, sizeof(full_path), "%s/edje/popup.edj", path);
739 popup_button = elm_layout_add(parent);
740 retv_if(!popup_button, NULL);
742 elm_layout_file_set(popup_button, full_path, "save_as_group");
743 evas_object_size_hint_weight_set(popup_button, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
744 evas_object_size_hint_align_set(popup_button, EVAS_HINT_FILL, EVAS_HINT_FILL);
745 evas_object_show(popup_button);
747 save_button = elm_button_add(parent);
748 retv_if(!save_button, NULL);
749 elm_object_style_set(save_button, "transparent");
750 elm_object_part_content_set(popup_button, "button", save_button);
751 evas_object_smart_callback_add(save_button, "clicked", _click_save_button_cb, main_view_info);
754 Evas_Object *create_button = NULL;
755 Evas_Object *cancel_button = NULL;
757 create_button = elm_button_add(parent);
758 retv_if(!create_button, NULL);
759 //elm_object_style_set(create_button, "transparent");
760 elm_object_part_content_set(popup_button, "create_btn", create_button);
761 //evas_object_smart_callback_add(create_button, "clicked", _click_create_button_cb, main_view_info);
763 cancel_button = elm_button_add(parent);
764 retv_if(!cancel_button, NULL);
765 //elm_object_style_set(cancel_button, "transparent");
766 elm_object_part_content_set(popup_button, "cancel_btn", cancel_button);
767 evas_object_smart_callback_add(cancel_button, "clicked", _click_cancel_button_cb, main_view_info);
773 static void _destroy_save_button(Evas_Object *save_button)
775 ret_if(!save_button);
776 evas_object_del(save_button);
779 static Evas_Object *_create_searchlist(Evas_Object *parent)
781 Evas_Object *searchlist = NULL;
783 retv_if(!parent, NULL);
785 searchlist = scroller_create(parent);
786 retv_if(!searchlist, NULL);
791 static void _destroy_searchlist(Evas_Object *searchlist)
793 Evas_Object *box = NULL;
794 Evas_Object *item = NULL;
795 Eina_List *list = NULL;
799 box = elm_object_content_get(searchlist);
802 list = elm_box_children_get(box);
805 EINA_LIST_FREE(list, item) {
806 evas_object_del(item);
809 evas_object_del(box);
810 evas_object_del(searchlist);
813 static Evas_Object *_create_result_list(Evas_Object *parent)
815 Evas_Object *result_list = NULL;
817 retv_if(!parent, NULL);
819 result_list = scroller_create(parent);
820 retv_if(!result_list, NULL);
825 static void _destroy_result_list(Evas_Object *result_list)
827 Evas_Object *box = NULL;
828 Evas_Object *item = NULL;
829 Eina_List *list = NULL;
831 ret_if(!result_list);
833 box = elm_object_content_get(result_list);
836 list = elm_box_children_get(box);
839 EINA_LIST_FREE(list, item) {
840 evas_object_del(item);
843 evas_object_del(box);
844 evas_object_del(result_list);
847 static Evas_Object *_create_group_scroller(Evas_Object *parent, Eina_List *list, main_view_s *main_view_info)
849 Evas_Object *group_scroller = NULL;
850 group_info_s *group_info = NULL;
851 const Eina_List *l = NULL;
853 retv_if(!parent, NULL);
855 group_scroller = scroller_create(parent);
856 retv_if(!group_scroller, NULL);
858 EINA_LIST_FOREACH(list, l, group_info) {
859 Evas_Object *item_group = item_create_group(group_scroller
862 scroller_append_item(group_scroller, item_group);
865 int count = scroller_count_item(group_scroller);
867 elm_object_signal_emit(main_view_info->main_view, "momentic,state,drawer,noresult,hide", "");
869 elm_object_signal_emit(main_view_info->main_view, "momentic,state,drawer,noresult,show", "");
871 return group_scroller;
874 static void _destroy_group_scroller(Evas_Object *group_scroller)
876 Evas_Object *box = NULL;
877 Evas_Object *item = NULL;
878 Eina_List *list = NULL;
880 ret_if(!group_scroller);
882 box = elm_object_content_get(group_scroller);
885 list = elm_box_children_get(box);
888 EINA_LIST_FREE(list, item) {
889 evas_object_del(item);
892 evas_object_del(box);
893 evas_object_del(group_scroller);
896 static void _main_view_back_cb(void *data, Evas_Object *obj, void *event_info)
898 main_view_s *main_view_info = data;
899 static time_t prev_t;
904 if (prev_t + 2 > cur_t) {
905 _D("wait a sec to process the back key event");
910 elm_object_signal_emit(obj, "momentic,state,page,back", "");
913 Eina_List *list = NULL;
914 Evas_Object *item = NULL;
915 Evas_Object *tmp = NULL;
916 Evas_Object *box = NULL;
919 _D("Page 0 [Initial page] -> Out : elm_win_lower()");
921 elm_win_lower(main_view_info->moment_info->win);
924 _D("Page 1 [Entry page] -> Page 0 [Initial page] : Initial city list");
926 item_reset_color_index();
927 scroller_clear_item(main_view_info->city_list);
928 _append_here_to_city_list(main_view_info->city_list, main_view_info);
929 elm_object_focus_set(main_view_info->searchbar, EINA_FALSE);
933 _D("Page 2 [Best time page] -> Page 1 [Entry page] : Remove the best item");
935 box = elm_object_content_get(main_view_info->city_list);
938 list = elm_box_children_get(box);
941 EINA_LIST_FREE(list, item) {
942 elm_object_signal_emit(item, "momentic,item,state,default", "");
943 unset_time_range(item);
947 scroller_remove_item(main_view_info->city_list, tmp);
948 item_destroy_best_time(tmp);
952 _D("Page 3 [Best time page] -> Page 0[Initial page]");
954 scroller_clear_item(main_view_info->city_list);
955 _append_here_to_city_list(main_view_info->city_list, main_view_info);
956 elm_object_signal_emit(main_view_info->main_view, "load", "");
957 elm_object_signal_emit(main_view_info->main_view, "momentic,state,add_description,show", "");
961 _E("cannot reach here");
966 Evas_Object *main_view_create(Evas_Object *parent, moment_info_s *moment_info)
968 main_view_s *main_view_info = NULL;
970 char full_path[PATH_LEN] = {0, };
972 retv_if(!parent, NULL);
974 path = app_get_resource_path();
975 retv_if(!path, NULL);
977 snprintf(full_path, sizeof(full_path), "%s/edje/%s", path, MAIN_VIEW_EDJE);
980 _D("main_view is created with %s", full_path);
982 main_view_info = calloc(1, sizeof(main_view_s));
983 retv_if(!main_view_info, NULL);
984 main_view_info->moment_info = moment_info;
986 main_view_info->main_view = create_momentic_layout(parent, full_path);
987 if (!main_view_info->main_view) {
988 free(main_view_info);
992 eext_object_event_callback_add(main_view_info->main_view, EEXT_CALLBACK_BACK, _main_view_back_cb, main_view_info);
994 elm_layout_file_set(main_view_info->main_view, full_path, "main");
995 evas_object_size_hint_weight_set(main_view_info->main_view, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
996 evas_object_size_hint_align_set(main_view_info->main_view, EVAS_HINT_FILL, EVAS_HINT_FILL);
997 evas_object_show(main_view_info->main_view);
998 evas_object_data_set(main_view_info->main_view, DATA_KEY_INFO, main_view_info);
999 evas_object_event_callback_add(main_view_info->main_view, EVAS_CALLBACK_RESIZE, _resize_cb, "main_view");
1001 elm_object_part_text_set(main_view_info->main_view, "title", "No cities");
1002 elm_object_part_text_set(main_view_info->main_view, "description", "After you add cities, they will be shown here.");
1004 main_view_info->searchbar = _create_searchbar(main_view_info->main_view, main_view_info);
1005 if (main_view_info->searchbar)
1006 elm_object_part_content_set(main_view_info->main_view, "searchbar", main_view_info->searchbar);
1008 main_view_info->next_btn = _create_next_btn(main_view_info->main_view, main_view_info);
1009 if (main_view_info->next_btn)
1010 elm_object_part_content_set(main_view_info->main_view, "next_btn", main_view_info->next_btn);
1012 main_view_info->city_list = _create_city_list(main_view_info->main_view, main_view_info);
1013 if (main_view_info->city_list)
1014 elm_object_part_content_set(main_view_info->main_view, "city_list", main_view_info->city_list);
1016 main_view_info->add_btn = _create_add_btn(main_view_info->main_view, main_view_info);
1017 if (main_view_info->add_btn)
1018 elm_object_part_content_set(main_view_info->main_view, "add_btn", main_view_info->add_btn);
1020 main_view_info->searchlist = _create_searchlist(main_view_info->main_view);
1021 if (main_view_info->searchlist)
1022 elm_object_part_content_set(main_view_info->main_view, "searchlist", main_view_info->searchlist);
1024 db_list_group(moment_info->db, &moment_info->group_list);
1026 main_view_info->group_scroller = _create_group_scroller(main_view_info->main_view, moment_info->group_list, main_view_info);
1027 if (main_view_info->group_scroller)
1028 elm_object_part_content_set(main_view_info->main_view, "drawer_content", main_view_info->group_scroller);
1030 main_view_info->save_button = _create_save_button(main_view_info->main_view, main_view_info);
1031 if (main_view_info->save_button)
1032 elm_object_part_content_set(main_view_info->main_view, "save_group_btn", main_view_info->save_button);
1034 elm_object_signal_callback_add(main_view_info->main_view, "momentic,page1,done", "", _page1_done_cb, main_view_info->searchbar);
1036 return main_view_info->main_view;
1039 void main_view_destroy(Evas_Object *main_view)
1041 Evas_Object *button = NULL;
1042 main_view_s *main_view_info = NULL;
1046 main_view_info = evas_object_data_del(main_view_info->main_view, DATA_KEY_INFO);
1047 ret_if(!main_view_info);
1049 if (main_view_info->save_button)
1050 _destroy_save_button(main_view_info->save_button);
1052 if (main_view_info->group_scroller)
1053 _destroy_group_scroller(main_view_info->group_scroller);
1055 if (main_view_info->searchlist)
1056 _destroy_searchlist(main_view_info->searchlist);
1058 if (main_view_info->add_btn)
1059 _destroy_add_btn(main_view_info->add_btn);
1061 if (main_view_info->city_list)
1062 _destroy_city_list(main_view_info->city_list);
1064 if (main_view_info->next_btn)
1065 _destroy_next_btn(button);
1067 if (main_view_info->searchbar)
1068 _destroy_searchbar(main_view_info->searchbar);
1070 free(main_view_info);
1072 evas_object_del(main_view);
1075 static void _get_best_time(double *timezone, int size, double *start, double *end)
1083 *start = timezone[0];
1084 *end = timezone[0] + BEST_DURING_TIME;
1086 for (; i < size; i++) {
1087 double tmp = timezone[i];
1090 if (tmp + BEST_DURING_TIME <= *start) {
1091 _D("No matched time");
1096 *end = tmp + BEST_DURING_TIME;
1098 } else if (tmp > *start) {
1100 _D("No matched time");
1112 static void _reply_cb(app_control_h request, app_control_h reply, app_control_result_e result, void *user_data)
1114 _D("Result callback is called");
1117 static void _launch_calendar_edit(int start, int end)
1119 app_control_h app_control = NULL;
1121 struct tm *local_time = NULL;
1124 char start_str[PATH_LEN] = {0, };
1125 char end_str[PATH_LEN] = {0, };
1127 ret = app_control_create(&app_control);
1128 ret_if(APP_CONTROL_ERROR_NONE != ret);
1131 local_time = localtime(&t);
1133 snprintf(start_str, sizeof(start_str), "%4d-%2d-%2d %2d:%2d:%2d"
1134 , local_time->tm_year + 1900
1135 , local_time->tm_mon + 1
1136 , local_time->tm_mday
1141 snprintf(start_str, sizeof(start_str), "%4d-%2d-%2d %2d:%2d:%2d"
1142 , local_time->tm_year + 1900
1143 , local_time->tm_mon + 1
1144 , local_time->tm_mday
1149 app_control_set_app_id(app_control, "com.samsung.calendar-lite-edit");
1150 app_control_set_operation(app_control, "http://tizen.org/appcontrol/operation/edit");
1151 app_control_add_extra_data(app_control, "start_time", start_str);
1152 app_control_add_extra_data(app_control, "end_time", end_str);
1154 app_control_send_launch_request(app_control, _reply_cb, NULL);
1155 app_control_destroy(app_control);