Version : 0813
[apps/native/sample/adventure.git] / src / main_view.c
index 84b52b2..b8cca81 100644 (file)
@@ -17,6 +17,7 @@
 const char *const MAIN_VIEW_EDJE = "momentic.edj";
 const char *const ENTRY_EDJE = "entry.edj";
 const char *const PREDICT_ITEM_EDJE = "predict_item.edj";
+static int cur_page = 0;
 
 static void _append_item_to_searchlist(Evas_Object *searchlist, Evas_Object *item)
 {
@@ -83,11 +84,11 @@ static void _update_searchlist(Evas_Object *searchlist, const char *str, main_vi
                _append_item_to_searchlist(searchlist, predict_item);
        }
 
-       for (; i < CITY_MAX; i++) {
+       for (; i < CITY_SYDNEY; i++) {
                int matched = 0;
-               if (city_info[i].name && strstr(city_info[i].name, str))
+               if (city_info[i].name && str && strstr(city_info[i].name, str))
                        matched = 1;
-               else if (city_info[i].nation && strstr(city_info[i].nation, str))
+               else if (city_info[i].nation && str && strstr(city_info[i].nation, str))
                        matched = 1;
 
                if (matched) {
@@ -225,7 +226,7 @@ static Evas_Object *_create_searchbar(Evas_Object *parent, main_view_s *main_vie
        elm_entry_single_line_set(entry_obj, EINA_TRUE);
        /* This makes the text upper */
        elm_entry_scrollable_set(entry_obj, EINA_FALSE);
-       elm_entry_cnp_mode_set(entry_obj, ELM_CNP_MODE_PLAINTEXT);
+       //elm_entry_cnp_mode_set(entry_obj, ELM_CNP_MODE_PLAINTEXT);
        elm_entry_text_style_user_push(entry_obj, "DEFAULT='font_size=20'");
        elm_object_part_text_set(entry_obj, "elm.guide", "<font_size=20>Search</font_size>");
 
@@ -255,6 +256,53 @@ static void _destroy_searchbar(Evas_Object *searchbar)
        evas_object_del(searchbar);
 }
 
+static void _set_time_range(Evas_Object *item, int i, int base_city, int cur_city)
+{
+       double start1 = 0.0f;
+       double end1 = 0.0f;
+       double start2 = 0.0f;
+       double end2 = 0.0f;
+
+       city_s *city_info = NULL;
+
+       int start = 0;
+       int end = 0;
+
+       city_info = city_get();
+       ret_if(!city_info);
+
+       start = (int) city_info[cur_city].timezone - city_info[base_city].timezone + (double) BEST_START_TIME;
+
+       if (start < 0)
+               start += 24;
+
+       start %= 24;
+       end = start + BEST_DURING_TIME;
+
+       if (end > 24.0f) {
+               start1 = (double) start;
+               end1 = 24.0f;
+
+               start2 = 0.0f;
+               end2 = (double) (end % 24);
+       } else {
+               start1 = (double) start;
+               end1 = (double) end;
+       }
+
+       _D("O, %s %f:%f:%f:%f", city_info[cur_city].name, start1, end1, start2, end2);
+
+       if (set_time_range(item, i, start1, end1, start2, end2) == EINA_FALSE)
+               _E("cannot set time range");
+}
+
+typedef struct part_info
+{
+       double p1, p2;
+
+} part_info_s;
+
+
 static void _click_next_btn_cb(void *data, Evas_Object *obj, void *event_info)
 {
        main_view_s *main_view_info = data;
@@ -266,15 +314,13 @@ static void _click_next_btn_cb(void *data, Evas_Object *obj, void *event_info)
        time_t t;
        city_s *city_info = NULL;
        int cur_timezone = 0;
+       int base_city = 0;
 
        ret_if(!main_view_info);
        ret_if(!main_view_info->city_list);
-       ret_if(!main_view_info->result_list);
 
        _D("result button is clicked");
 
-       scroller_clear_item(main_view_info->result_list);
-
        city_info = city_get();
        ret_if(!city_info);
 
@@ -282,7 +328,7 @@ static void _click_next_btn_cb(void *data, Evas_Object *obj, void *event_info)
        global_time = gmtime(&t);
        local_time = localtime(&t);
 
-       cur_timezone = (int) local_time->tm_gmtoff / 3600;
+       cur_timezone = (int) local_time->tm_gmtoff / 3600l;
 
        box = elm_object_content_get(main_view_info->city_list);
        ret_if(!box);
@@ -291,8 +337,21 @@ static void _click_next_btn_cb(void *data, Evas_Object *obj, void *event_info)
        ret_if(!list);
 
        EINA_LIST_FREE(list, item) {
+               selecting_info_s *selecting_info = evas_object_data_get(item, DATA_KEY_SELECTING);
+               continue_if(!selecting_info);
+
+               elm_object_signal_emit(item, "momentic,item,state,result", "");
+               elm_object_part_content_set(item, "time", "");
+
+               if (!base_city) {
+                       base_city = selecting_info->city;
+                       _set_time_range(item, selecting_info->color, base_city, base_city);
+                       continue;
+               } else
+                       _set_time_range(item, selecting_info->color, base_city, selecting_info->city);
+
+#if 0
                selecting_info_s *selecting_info = NULL;
-               Evas_Object *item_result = NULL;
                int start = 0, end = 0;
                int tmp_timezone = 0;
 
@@ -305,18 +364,52 @@ static void _click_next_btn_cb(void *data, Evas_Object *obj, void *event_info)
 
                start = tmp_timezone - cur_timezone + BEST_START_TIME;
                end = (start + (BEST_END_TIME - BEST_START_TIME)) % 24;
+#endif
+       }
 
-               item_result = item_create_result(main_view_info->result_list
-                               , selecting_info->city
-                               , selecting_info->color
-                               , start
-                               , end
-                               , global_time);
+       item = item_create_best_time(main_view_info->city_list);
+       if (item) {
+               elm_object_signal_emit(item, "momentic,item,state,show", "");
+               scroller_append_item(main_view_info->city_list, item);
+#if 0
+        //decide best time range
+               list = elm_box_children_get(box);
+               double r1 = 0, r2 = 24, r3 = 0, r4 = 24;
+               Eina_Bool best_time = EINA_TRUE;
+           Evas_Object *it;    
+               EINA_LIST_FREE(list, it) {
+                 Evas_Object *rect1 = evas_object_data_get(it, "part1");
+                 Evas_Object *rect2 = evas_object_data_get(it, "part2");
+
+                 if (rect1)
+                 {
+                         part_info_s *pi = evas_object_data_get(rect1, "part_info");
+                         if ((pi->p1 * 24) > r1) r1 = pi->p1 * 24;
+                         else best_time = EINA_FALSE;
+                         if ((pi->p2 * 24) < r2) r2 = pi->p2 * 24;
+                         else best_time = EINA_FALSE;
+                 }
+
+                 if (rect2)
+                 {
+                         part_info_s *pi = evas_object_data_get(rect2, "part_info");
+                         if ((pi->p1 *24) > r1) r1 = pi->p1 * 24;
+                         else best_time = EINA_FALSE;
+                         if ((pi->p2 *24) < r2) r2 = pi->p2 * 24;
+                         else best_time = EINA_FALSE;
+                 }
+               }
 
-               scroller_append_item(main_view_info->result_list, item_result);
-       }
+               if (best_time){
+_D("AQAAA %f %f %f %f", r1, r2, r3, r4);
+          set_time_range(item, 5, r1, r2, r3, r4);
+               }
+#endif
+       } else
+               _E("cannot append an item");
 
        elm_object_signal_emit(main_view_info->main_view, "momentic,state,page2", "");
+       cur_page = 2;
 }
 
 static Evas_Object *_create_next_btn(Evas_Object *parent, main_view_s *main_view_info)
@@ -400,6 +493,7 @@ static void _click_add_btn_cb(void *data, Evas_Object *obj, void *event_info)
        ret_if(!main_view_info->main_view);
 
        elm_object_signal_emit(main_view_info->main_view, "momentic,state,page1", "");
+       cur_page = 1;
 }
 
 static void _page1_done_cb(void *data, Evas_Object *obj, const char *signal, const char *source)
@@ -630,6 +724,7 @@ static void _destroy_group_scroller(Evas_Object *group_scroller)
 
 static void _main_view_back_cb(void *data, Evas_Object *obj, void *event_info)
 {
+       main_view_s *main_view_info = data;
        static time_t prev_t;
        time_t cur_t;
 
@@ -642,6 +737,34 @@ static void _main_view_back_cb(void *data, Evas_Object *obj, void *event_info)
 
        prev_t = cur_t;
        elm_object_signal_emit(obj, "momentic,state,page,back", "");
+       
+       if (1 == cur_page) {
+               item_reset_color_index();
+               scroller_clear_item(main_view_info->city_list);
+
+               elm_object_focus_set(main_view_info->searchbar, EINA_FALSE);
+               cur_page = 0;
+       } else if (2 == cur_page) {
+               Eina_List *list = NULL;
+               Evas_Object *item = NULL;
+               Evas_Object *tmp = NULL;
+               Evas_Object *box = elm_object_content_get(main_view_info->city_list);
+
+               ret_if(!box);
+
+               list = elm_box_children_get(box);
+               ret_if(!list);
+
+               EINA_LIST_FREE(list, item) {
+                       elm_object_signal_emit(item, "momentic,item,state,default", "");
+                       tmp = item;
+               }
+               scroller_remove_item(main_view_info->city_list, tmp);
+               item_destroy_best_time(tmp);
+               cur_page = 1;
+       } else if (0 == cur_page) {
+               elm_win_lower(main_view_info->moment_info->win);
+       }
 }
 
 Evas_Object *main_view_create(Evas_Object *parent, moment_info_s *moment_info)
@@ -702,10 +825,6 @@ Evas_Object *main_view_create(Evas_Object *parent, moment_info_s *moment_info)
        if (main_view_info->searchlist)
                elm_object_part_content_set(main_view_info->main_view, "searchlist", main_view_info->searchlist);
 
-       main_view_info->result_list = _create_result_list(main_view_info->main_view);
-       if (main_view_info->result_list)
-               elm_object_part_content_set(main_view_info->main_view, "result_list", main_view_info->result_list);
-
        main_view_info->group_scroller = _create_group_scroller(main_view_info->main_view, moment_info->group_list, main_view_info);
        if (main_view_info->group_scroller)
                evas_object_hide(main_view_info->group_scroller);
@@ -729,9 +848,6 @@ void main_view_destroy(Evas_Object *main_view)
        if (main_view_info->group_scroller)
                _destroy_group_scroller(main_view_info->group_scroller);
 
-       if (main_view_info->result_list)
-               _destroy_result_list(main_view_info->result_list);
-
        if (main_view_info->searchlist)
                _destroy_searchlist(main_view_info->searchlist);