#include <Elementary.h>
#include <time.h>
#include <app_control.h>
+#include <notification.h>
#include "main.h"
#include "main_view.h"
}
}
+static char *_strcasestr(char *str1, char *str2)
+{
+ int len1 = 0, len2 = 0;
+
+ retv_if(!str1, NULL);
+ retv_if(!str2, NULL);
+
+ len1 = strlen(str1);
+ retv_if(!len1, NULL);
+
+ len2 = strlen(str2);
+ retv_if(!len2, NULL);
+
+ while (*str1) {
+ if (!strncasecmp(str1, str2, len2))
+ return str1;
+ str1++;
+ }
+
+ return NULL;
+}
+
+
static void _update_searchlist(Evas_Object *searchlist, const char *str, main_view_s *main_view_info)
{
Evas_Object *predict_item = NULL;
for (; i < CITY_SYDNEY; i++) {
int matched = 0;
- if (city_info[i].name && str && strstr(city_info[i].name, str))
+ if (city_info[i].name && str && _strcasestr(city_info[i].name, str))
matched = 1;
- else if (city_info[i].nation && str && strstr(city_info[i].nation, str))
+ else if (city_info[i].nation && str && _strcasestr(city_info[i].nation, str))
matched = 1;
if (matched) {
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_text_style_user_push(entry_obj, "DEFAULT='font_size=20'");
+ elm_entry_context_menu_disabled_set(entry_obj, EINA_TRUE);
elm_object_part_text_set(entry_obj, "elm.guide", "<font_size=20>Search</font_size>");
evas_object_size_hint_weight_set(entry_obj, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_del(searchbar);
}
-static void _set_time_range(Evas_Object *item, int i, int base_city, int cur_city)
+static void _set_time_range(Evas_Object *item, int i, int base_city, int cur_city, double *matched_start, double *matched_end)
{
double start1 = 0.0f;
double end1 = 0.0f;
city_s *city_info = NULL;
- int start = 0;
- int end = 0;
+ double start = 0;
+ double end = 0;
+ double half = 0.0f;
+
+ int tmp = 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;
+ start = city_info[cur_city].timezone - city_info[base_city].timezone + (double) BEST_START_TIME;
- if (start < 0)
- start += 24;
+ if (start < 0.0f)
+ start += 24.0f;
- start %= 24;
+ if (matched_start && matched_end) {
+ /* This end is only for the matched end */
+ end = start + BEST_DURING_TIME;
+ if (*matched_start < (double) start)
+ *matched_start = (double) start;
+
+ if (*matched_end > (double) end)
+ *matched_end = end;
+ }
+
+ tmp = start;
+ if (tmp != start) half = 0.5f;
+ else half = 0.0f;
+
+ tmp %= 24;
+
+ start = ((double) tmp) + half;
end = start + BEST_DURING_TIME;
if (end > 24.0f) {
end1 = 24.0f;
start2 = 0.0f;
- end2 = (double) (end % 24);
+
+ tmp = end;
+ if (tmp != end) half = 0.5f;
+ else half = 0.0f;
+
+ end2 = (double) (tmp % 24) + half;
} else {
start1 = (double) start;
end1 = (double) end;
}
- _D("O, %s %f:%f:%f:%f", city_info[cur_city].name, start1, end1, start2, end2);
+ _D("HELLO, %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");
} part_info_s;
-static void _click_next_btn_cb(void *data, Evas_Object *obj, void *event_info)
+void main_view_click_next_btn_cb(void *data, Evas_Object *obj, void *event_info)
{
main_view_s *main_view_info = data;
Evas_Object *box = NULL;
int cur_timezone = 0;
int base_city = 0;
+ double matched_start = 0.0f;
+ double matched_end = 100.0f; /* We have to initialize this variable as 100.0f */
+
ret_if(!main_view_info);
ret_if(!main_view_info->city_list);
continue_if(!selecting_info);
elm_object_signal_emit(item, "momentic,item,state,result", "");
- elm_object_part_content_set(item, "time", "");
+ elm_object_part_text_set(item, "time", "");
if (!base_city) {
base_city = selecting_info->city;
- _set_time_range(item, selecting_info->color, base_city, base_city);
+ _set_time_range(item, selecting_info->color, base_city, base_city, &matched_start, &matched_end);
continue;
} else
- _set_time_range(item, selecting_info->color, base_city, selecting_info->city);
+ _set_time_range(item, selecting_info->color, base_city, selecting_info->city, &matched_start, &matched_end);
+ }
-#if 0
- selecting_info_s *selecting_info = NULL;
- int start = 0, end = 0;
- int tmp_timezone = 0;
+ _D("HELLO, match!! %f, %f", matched_start, matched_end);
+ item = item_create_best_time(main_view_info->city_list, matched_start, matched_end);
+ if (item) {
+ elm_object_signal_emit(item, "momentic,item,state,show", "");
+ scroller_append_item(main_view_info->city_list, item);
+ } else
+ _E("cannot append an item");
- selecting_info = evas_object_data_get(item, DATA_KEY_SELECTING);
+ elm_object_signal_emit(main_view_info->main_view, "momentic,state,page2", "");
+ cur_page = 2;
+}
+
+void main_view_go_result(void *data)
+{
+ main_view_s *main_view_info = data;
+ Evas_Object *box = NULL;
+ Evas_Object *item = NULL;
+ Eina_List *list = NULL;
+ struct tm *global_time = NULL;
+ struct tm *local_time = NULL;
+ time_t t;
+ city_s *city_info = NULL;
+ int cur_timezone = 0;
+ int base_city = 0;
+
+ double matched_start = 0.0f;
+ double matched_end = 100.0f; /* We have to initialize this variable as 100.0f */
+
+ ret_if(!main_view_info);
+ ret_if(!main_view_info->city_list);
+
+ city_info = city_get();
+ ret_if(!city_info);
+
+ time(&t);
+ global_time = gmtime(&t);
+ local_time = localtime(&t);
+
+ cur_timezone = (int) local_time->tm_gmtoff / 3600l;
+
+ 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) {
+ selecting_info_s *selecting_info = evas_object_data_get(item, DATA_KEY_SELECTING);
continue_if(!selecting_info);
- tmp_timezone = city_info[selecting_info->city].timezone;
- if (tmp_timezone < cur_timezone)
- tmp_timezone += 24;
+ elm_object_signal_emit(item, "momentic,item,state,result", "");
+ elm_object_part_text_set(item, "time", "");
- start = tmp_timezone - cur_timezone + BEST_START_TIME;
- end = (start + (BEST_END_TIME - BEST_START_TIME)) % 24;
-#endif
+ if (!base_city) {
+ base_city = selecting_info->city;
+ _set_time_range(item, selecting_info->color, base_city, base_city, &matched_start, &matched_end);
+ continue;
+ } else
+ _set_time_range(item, selecting_info->color, base_city, selecting_info->city, &matched_start, &matched_end);
}
- item = item_create_best_time(main_view_info->city_list);
+ _D("HELLO, match!! %f, %f", matched_start, matched_end);
+ item = item_create_best_time(main_view_info->city_list, matched_start, matched_end);
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;
- }
- }
-
- 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;
+ cur_page = 4;
}
static Evas_Object *_create_next_btn(Evas_Object *parent, main_view_s *main_view_info)
next_btn = elm_button_add(parent);
retv_if(!next_btn, NULL);
elm_object_style_set(next_btn, "transparent");
- evas_object_smart_callback_add(next_btn, "clicked", _click_next_btn_cb, main_view_info);
+ evas_object_smart_callback_add(next_btn, "clicked", main_view_click_next_btn_cb, main_view_info);
icon = elm_image_add(next_btn);
if (icon) {
evas_object_del(next_btn);
}
-static Evas_Object *_create_city_list(Evas_Object *parent)
+static void _append_here_to_city_list(Evas_Object *city_list, main_view_s *main_view_info)
+{
+ Evas_Object *item = NULL;
+ struct tm *local_time = NULL;
+ city_s *city_info = NULL;
+ time_t t;
+ int i = 0;
+
+ city_info = city_get();
+ ret_if(!city_info);
+
+ time(&t);
+ local_time = localtime(&t);
+
+ for (i = 0; i < CITY_SYDNEY; i++) {
+ if (city_info[i].timezone == ((double) (local_time->tm_gmtoff / 3600l)))
+ break;
+ }
+
+ item = item_create_selecting(city_list, i, local_time, main_view_info);
+ if (item)
+ scroller_append_item(city_list, item);
+}
+
+static Eina_Bool
+_append_here_city_anim_cb(void *data)
+{
+ main_view_s *main_view_info = data;
+
+ _append_here_to_city_list(main_view_info->city_list, main_view_info);
+ return ECORE_CALLBACK_CANCEL;
+}
+
+static Evas_Object *_create_city_list(Evas_Object *parent, main_view_s *main_view_info)
{
Evas_Object *city_list = NULL;
city_list = scroller_create(parent);
retv_if(!city_list, NULL);
+ ecore_timer_add(1, _append_here_city_anim_cb, main_view_info);
+
return city_list;
}
evas_object_del(city_list);
}
-static void _click_add_btn_cb(void *data, Evas_Object *obj, void *event_info)
+void main_view_click_add_btn_cb(void *data, Evas_Object *obj, void *event_info)
{
main_view_s *main_view_info = data;
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)
add_btn = elm_button_add(parent);
retv_if(!add_btn, NULL);
elm_object_style_set(add_btn, "transparent");
- evas_object_smart_callback_add(add_btn, "clicked", _click_add_btn_cb, main_view_info);
+ evas_object_smart_callback_add(add_btn, "clicked", main_view_click_add_btn_cb, main_view_info);
icon = elm_image_add(add_btn);
if (icon) {
Evas_Object *item = NULL;
Eina_List *list = NULL;
group_info_s *group_info = NULL;
- int city[MAXIMUM_SELECTED_CITY] = {0, };
+ //int city[MAXIMUM_SELECTED_CITY] = {0, };
+ int city[5] = {0, }; /* FIXME : for compatibility */
int i = 0;
- long time = 0l;
+ char group_title[PATH_LEN] = {0, };
+ city_s *city_info = NULL;
+ char message[PATH_LEN] = {0, };
+
+ city_info = city_get();
+ ret_if(!city_info);
_D("Save button is clicked");
ret_if(!main_view_info);
- ret_if(!main_view_info->result_list);
- box = elm_object_content_get(main_view_info->result_list);
+ 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) {
- result_info_s *result_info = NULL;
+ selecting_info_s *selecting_info = NULL;
- result_info = evas_object_data_get(item, DATA_KEY_RESULT);
- continue_if(!result_info);
+ selecting_info = evas_object_data_get(item, DATA_KEY_SELECTING);
+ break_if(!selecting_info);
+
+ if (i != 0)
+ strcat(group_title, ", ");
- city[i] = result_info->city;
+ city[i] = selecting_info->city;
+ _D("HELLO, city[%d] - %d", i, selecting_info->city);
+ strcat(group_title, city_info[city[i]].name);
i++;
}
- time = db_insert_group(moment_info->db
- , "Momentic time"
+ int id = db_insert_group(moment_info->db
+ , group_title
, city[0]
, city[1]
, city[2]
, city[3]
, city[4]);
- group_info = group_info_create(time
- , "Momentic time"
+ group_info = group_info_create(id
+ , group_title
, city[0]
, city[1]
, city[2]
, city[3]
, city[4]);
moment_info->group_list = eina_list_append(moment_info->group_list, group_info);
+
+ Evas_Object *item_group = item_create_group(main_view_info->group_scroller
+ , group_info
+ , main_view_info);
+ scroller_append_item(main_view_info->group_scroller, item_group);
+ elm_object_signal_emit(main_view_info->main_view, "momentic,state,drawer,noresult,hide", "");
+
+ snprintf(message, sizeof(message), "Create a group named <br>'%s'", group_title);
+ notification_status_message_post(message);
}
-static Evas_Object *_create_save_button(Evas_Object *parent, moment_info_s *moment_info)
+#if 0
+static void _click_save_button_cb(void *data, Evas_Object *obj, void *event_info)
{
+ main_view_s *main_view_info = data;
+ elm_object_signal_emit(main_view_info->save_button, "momentic,state,activate", "");
+ elm_object_signal_emit(main_view_info->main_view, "momentic,state,save_group,activate", "");
+}
+
+static void _click_cancel_button_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ main_view_s *main_view_info = data;
+ elm_object_signal_emit(main_view_info->save_button, "momentic,state,deactivate", "");
+ elm_object_signal_emit(main_view_info->main_view, "momentic,state,save_group,deactivate", "");
+}
+#endif
+
+
+static Evas_Object *_create_save_button(Evas_Object *parent, main_view_s *main_view_info)
+{
+ Evas_Object *popup_button = NULL;
Evas_Object *save_button = NULL;
+ char *path = NULL;
+ char full_path[PATH_LEN] = {0, };
+
retv_if(!parent, NULL);
+ path = app_get_resource_path();
+ retv_if(!path, NULL);
+
+ snprintf(full_path, sizeof(full_path), "%s/edje/popup.edj", path);
+ free(path);
+
+ popup_button = elm_layout_add(parent);
+ retv_if(!popup_button, NULL);
+
+ elm_layout_file_set(popup_button, full_path, "save_as_group");
+ evas_object_size_hint_weight_set(popup_button, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ evas_object_size_hint_align_set(popup_button, EVAS_HINT_FILL, EVAS_HINT_FILL);
+ evas_object_show(popup_button);
+
save_button = elm_button_add(parent);
retv_if(!save_button, NULL);
+ elm_object_style_set(save_button, "transparent");
+ elm_object_part_content_set(popup_button, "button", save_button);
+ evas_object_smart_callback_add(save_button, "clicked", _click_save_button_cb, main_view_info);
- elm_object_text_set(save_button, "Save");
- evas_object_size_hint_weight_set(save_button, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
- evas_object_size_hint_align_set(save_button, EVAS_HINT_FILL, EVAS_HINT_FILL);
- evas_object_smart_callback_add(save_button, "clicked", _click_save_button_cb, moment_info);
+#if 0
+ Evas_Object *create_button = NULL;
+ Evas_Object *cancel_button = NULL;
+
+ create_button = elm_button_add(parent);
+ retv_if(!create_button, NULL);
+ //elm_object_style_set(create_button, "transparent");
+ elm_object_part_content_set(popup_button, "create_btn", create_button);
+ //evas_object_smart_callback_add(create_button, "clicked", _click_create_button_cb, main_view_info);
+
+ cancel_button = elm_button_add(parent);
+ retv_if(!cancel_button, NULL);
+ //elm_object_style_set(cancel_button, "transparent");
+ elm_object_part_content_set(popup_button, "cancel_btn", cancel_button);
+ evas_object_smart_callback_add(cancel_button, "clicked", _click_cancel_button_cb, main_view_info);
+#endif
- return save_button;
+ return popup_button;
}
static void _destroy_save_button(Evas_Object *save_button)
EINA_LIST_FOREACH(list, l, group_info) {
Evas_Object *item_group = item_create_group(group_scroller
- , group_info->title
+ , group_info
, main_view_info);
scroller_append_item(group_scroller, item_group);
}
+ int count = scroller_count_item(group_scroller);
+ if (count)
+ elm_object_signal_emit(main_view_info->main_view, "momentic,state,drawer,noresult,hide", "");
+ else
+ elm_object_signal_emit(main_view_info->main_view, "momentic,state,drawer,noresult,show", "");
+
return group_scroller;
}
time(&cur_t);
- if (prev_t + 1 > cur_t) {
+ if (prev_t + 2 > cur_t) {
_D("wait a sec to process the back key event");
return;
}
prev_t = cur_t;
elm_object_signal_emit(obj, "momentic,state,page,back", "");
- if (1 == cur_page) {
+ switch (cur_page) {
+ Eina_List *list = NULL;
+ Evas_Object *item = NULL;
+ Evas_Object *tmp = NULL;
+ Evas_Object *box = NULL;
+
+ case 0:
+ _D("Page 0 [Initial page] -> Out : elm_win_lower()");
+
+ elm_win_lower(main_view_info->moment_info->win);
+ break;
+ case 1:
+ _D("Page 1 [Entry page] -> Page 0 [Initial page] : Initial city list");
+
item_reset_color_index();
scroller_clear_item(main_view_info->city_list);
-
+ _append_here_to_city_list(main_view_info->city_list, main_view_info);
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);
+ break;
+ case 2:
+ _D("Page 2 [Best time page] -> Page 1 [Entry page] : Remove the best item");
+ box = elm_object_content_get(main_view_info->city_list);
ret_if(!box);
list = elm_box_children_get(box);
EINA_LIST_FREE(list, item) {
elm_object_signal_emit(item, "momentic,item,state,default", "");
+ unset_time_range(item);
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);
+ break;
+ case 4:
+ _D("Page 3 [Best time page] -> Page 0[Initial page]");
+
+ scroller_clear_item(main_view_info->city_list);
+ _append_here_to_city_list(main_view_info->city_list, main_view_info);
+ elm_object_signal_emit(main_view_info->main_view, "load", "");
+ elm_object_signal_emit(main_view_info->main_view, "momentic,state,add_description,show", "");
+ cur_page = 0;
+ break;
+ default:
+ _E("cannot reach here");
+ break;
}
}
if (main_view_info->next_btn)
elm_object_part_content_set(main_view_info->main_view, "next_btn", main_view_info->next_btn);
- main_view_info->city_list = _create_city_list(main_view_info->main_view);
+ main_view_info->city_list = _create_city_list(main_view_info->main_view, main_view_info);
if (main_view_info->city_list)
elm_object_part_content_set(main_view_info->main_view, "city_list", main_view_info->city_list);
if (main_view_info->searchlist)
elm_object_part_content_set(main_view_info->main_view, "searchlist", main_view_info->searchlist);
+ db_list_group(moment_info->db, &moment_info->group_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);
- //elm_object_part_content_set(main_view_info->main_view, "group_scroller", main_view_info->group_scroller);
+ elm_object_part_content_set(main_view_info->main_view, "drawer_content", main_view_info->group_scroller);
+
+ main_view_info->save_button = _create_save_button(main_view_info->main_view, main_view_info);
+ if (main_view_info->save_button)
+ elm_object_part_content_set(main_view_info->main_view, "save_group_btn", main_view_info->save_button);
elm_object_signal_callback_add(main_view_info->main_view, "momentic,page1,done", "", _page1_done_cb, main_view_info->searchbar);
main_view_info = evas_object_data_del(main_view_info->main_view, DATA_KEY_INFO);
ret_if(!main_view_info);
+ if (main_view_info->save_button)
+ _destroy_save_button(main_view_info->save_button);
+
if (main_view_info->group_scroller)
_destroy_group_scroller(main_view_info->group_scroller);
ret = app_control_create(&app_control);
ret_if(APP_CONTROL_ERROR_NONE != ret);
+ time(&t);
local_time = localtime(&t);
snprintf(start_str, sizeof(start_str), "%4d-%2d-%2d %2d:%2d:%2d"