3 * Copyright 2012 Samsung Electronics Co., Ltd
\r
5 * Licensed under the Flora License, Version 1.0 (the "License");
\r
6 * you may not use this file except in compliance with the License.
\r
7 * You may obtain a copy of the License at
\r
9 * http://floralicense.org/license/
\r
11 * Unless required by applicable law or agreed to in writing, software
\r
12 * distributed under the License is distributed on an "AS IS" BASIS,
\r
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
\r
14 * See the License for the specific language governing permissions and
\r
15 * limitations under the License.
\r
19 #include "cld-images.h"
\r
20 #include "list-base.h"
\r
22 static const char *_name;
\r
24 ///TODO: get full path from caller
\r
25 #define VFILE_PATH "/opt/usr/media/Others"
\r
27 static Elm_Entry_Filter_Limit_Size _limit_20char = {
\r
28 .max_char_count = 20,
\r
32 CAL_LIST_DELETE_MODE_NORMAL = 0,
\r
33 CAL_LIST_DELETE_MODE_DAY,
\r
34 CAL_LIST_DELETE_MODE_TASK,
\r
35 }cal_list_delete_mode;
\r
37 #define MAX_FETCH_COUNT 10
\r
39 #define ACCOUNT_LABLE_STRING_LENGTH 128
\r
44 Evas_Object *parent;
\r
46 Evas_Object *no_content;
\r
49 Evas_Object *bt_delete;
\r
50 Evas_Object *genlist;
\r
51 Evas_Object *select_all_layout;
\r
52 Evas_Object *select_all_check;
\r
53 Evas_Object *select_before_today_layout;
\r
54 Evas_Object *select_before_today_check;
\r
62 Evas_Object * selection_info;
\r
65 Elm_Object_Item* navi_item;
\r
69 cal_list_delete_mode mode;
\r
71 Eina_List *append_list;
\r
72 int appended_event_count;
74 Eina_List *prepend_list;
75 int prepended_event_count;
\r
80 Eina_Bool is_today_added; //To check real today item is added.
\r
81 int before_today_num_checked; // record the number of event before today checked
\r
82 int before_today_num; // record the number of event before today
\r
84 struct tm last_itc_h; // To prevent duplicated cal_list_itc_h, in add events & add events idler
\r
86 Elm_Object_Item *load_more_top;
\r
87 Elm_Object_Item *load_more_bottom;
\r
89 Eina_List *repeat_list;
\r
91 Eina_Bool is_today_has_instance;
\r
93 Elm_Object_Item *due_today_item;
\r
94 Elm_Object_Item *no_due_date_item;
\r
95 Elm_Object_Item *due_within_a_week_item;
\r
96 Elm_Object_Item *due_in_over_one_week_item;
\r
97 Elm_Object_Item *over_due_item;
\r
98 } cal_list_delete_data;
\r
100 static void __cal_list_delete_genlist_item_select_callback(void *data, Evas_Object *obj, void *event_info);
\r
101 static void __cal_list_delete_event_update_noti_received_cb(const char* view_uri, void* user_data);
\r
102 static char* __cal_list_delete_get_genlist_item_label(void *data, Evas_Object *obj, const char *part);
\r
103 static Evas_Object *__cal_list_delete_get_genlist_item_icon(void *data, Evas_Object *obj, const char *part);
\r
104 static void __cal_list_delete_update_all_check(cal_list_delete_data* p);
\r
105 static char* __cal_list_delete_get_genlist_header_item_label(void *data, Evas_Object *obj, const char *part);
\r
106 static void __cal_list_delete_delete_genlist_header_item(void *data, Evas_Object *obj);
\r
107 static void __cal_list_delete_delete_genlist_item(void *data, Evas_Object *obj);
\r
108 static inline Elm_Object_Item* __cal_list_delete_append_genlist_item(Evas_Object *genlist, const Elm_Genlist_Item_Class *itc, calendar_record_h record, Eina_Bool is_before_today, Elm_Object_Item *parent, Evas_Smart_Cb func, const void *func_data);
\r
109 static char* __cal_list_delete_share_genlist_item_label(void *data, Evas_Object *obj, const char *part);
\r
110 static Elm_Object_Item * __cal_list_delete_add_load_more_to_genlist(cal_list_delete_data *p, const char *text, struct tm *tm);
\r
111 static void __cal_list_delete_create_select_all(cal_list_delete_data* p);
\r
112 static void __cal_list_delete_create_select_before_today(cal_list_delete_data* p);
\r
113 static char* __cal_list_delete_get_genlist_task_item_label(void *data, Evas_Object *obj, const char *part);
\r
114 static Evas_Object *__cal_list_delete_get_genlist_task_item_icon(void *data, Evas_Object *obj, const char *part);
\r
115 static void __cal_list_delete_genlist_item_check_changed_callback(void *data, Evas_Object *obj, void *event_info);
\r
118 static Elm_Genlist_Item_Class cal_list_delete_itc_h = {
\r
119 .item_style = "grouptitle",
120 .func.text_get = __cal_list_delete_get_genlist_header_item_label,
\r
121 .func.del = __cal_list_delete_delete_genlist_header_item,
\r
124 static Elm_Genlist_Item_Class cal_list_delete_itc = {
\r
125 .item_style = "3text.4icon.calendar.check",
126 .func.text_get = __cal_list_delete_get_genlist_task_item_label,
\r
127 .func.del = __cal_list_delete_delete_genlist_item,
\r
128 .func.content_get = __cal_list_delete_get_genlist_task_item_icon,
\r
131 static Elm_Genlist_Item_Class cal_list_delete_normal_itc = {
\r
132 .item_style = "3text.4icon.calendar.check",
\r
133 .func.text_get = __cal_list_delete_get_genlist_item_label,
\r
134 .func.del = __cal_list_delete_delete_genlist_item,
\r
135 .func.content_get = __cal_list_delete_get_genlist_item_icon,
\r
138 static Elm_Genlist_Item_Class itc_1text = {
139 .item_style = "1text",
140 .func.content_get = NULL,
\r
141 .func.del = __cal_list_delete_delete_genlist_item,
\r
142 .func.text_get = __cal_list_delete_share_genlist_item_label,
\r
145 static _calendar_book_color calendar_color;
\r
147 extern Elm_Genlist_Item_Class cal_list_today_group_itc_h;
\r
150 #define ELM_GENLIST_ITEM_GROUP (1<<1)
\r
152 static char* __cal_list_delete_get_genlist_task_item_label(void *data, Evas_Object *obj, const char *part)
\r
154 c_retv_if(!data, NULL);
\r
155 c_retv_if(!obj, NULL);
\r
156 c_retv_if(!part, NULL);
\r
161 cal_list_genlist_item_data *item_data = data;
\r
163 cal_list_delete_data *p = CAL_UTIL_GET_PRIV_DATA(obj);
\r
164 c_retv_if(!p, NULL);
\r
166 if (!item_data || !item_data->record)
\r
169 calendar_record_h record = item_data->record;
\r
170 c_retv_if(!record, NULL);
\r
172 Eina_Bool is_done = EINA_FALSE;
\r
173 calendar_error_e error = CALENDAR_ERROR_NONE;
\r
175 int todo_status = CALENDAR_TODO_STATUS_COMPLETED;
\r
176 error = calendar_record_get_int(record, _calendar_todo_calendar_book.todo_status, &todo_status);
\r
177 c_warn_if(error != CALENDAR_ERROR_NONE, "calendar_record_get_int() is failed(%x)", error);
\r
179 if (CALENDAR_TODO_STATUS_COMPLETED == todo_status) {
\r
180 is_done = EINA_TRUE;
\r
182 is_done = EINA_FALSE;
\r
185 if (!CAL_STRCMP(part, "elm.textblock.1")) {
\r
187 tmp = _calendar_get_summary(record);
\r
189 char *text = calloc(1, CAL_STRLEN(tmp)+500);
\r
191 ERR("text is null");
\r
196 sprintf(text, "<strikethrough=on strikethrough_color=#D1D1D1>%s</strikethrough>", tmp);
\r
203 } else if (!CAL_STRCMP(part, "elm.text.1")) {
\r
205 str = _calendar_get_summary(record);
\r
207 if (item_data->color_str) {
\r
208 free(item_data->color_str);
\r
209 item_data->color_str = NULL;
\r
214 } else if (!CAL_STRCMP(part, "elm.text.3")) {
\r
218 return _calendar_get_location(record);
\r
220 } else if (!CAL_STRCMP(part, "elm.textblock.3")) {
\r
224 return _calendar_get_location(record);
\r
226 } else if (!CAL_STRCMP(part, "elm.text.2")) {
\r
230 return _calendar_get_time_str_for_genlist(record);
\r
231 } else if (!CAL_STRCMP(part, "elm.textblock.2")) {
\r
235 return _calendar_get_time_str_for_genlist(record);
\r
241 static Evas_Object *__cal_list_delete_get_genlist_task_item_icon(void *data, Evas_Object *obj, const char *part)
\r
243 c_retv_if(!data, NULL);
\r
245 cal_list_delete_data *p = CAL_UTIL_GET_PRIV_DATA(obj);
\r
246 c_retv_if(!p, NULL);
\r
248 cal_list_genlist_item_data *item_data = data;
\r
250 Evas_Object *icon = NULL;
\r
252 calendar_record_h record = item_data->record;
\r
253 c_retv_if(!record, NULL);
\r
255 if (!CAL_STRCMP(part, "elm.swallow.colorbar")) {
\r
257 icon = evas_object_rectangle_add(evas_object_evas_get(obj));
\r
258 evas_object_size_hint_align_set(icon, EVAS_HINT_FILL, EVAS_HINT_FILL);
\r
260 _calendar_get_calendar_color(record, &calendar_color);
\r
262 evas_object_color_set(icon, calendar_color.red, calendar_color.green, calendar_color.blue, calendar_color.alpha);
\r
266 else if (!CAL_STRCMP(part, "elm.icon.1") ) {
\r
267 calendar_todo_priority_e priority = CALENDAR_TODO_PRIORITY_NONE;
\r
268 calendar_error_e error = CALENDAR_ERROR_NONE;
\r
269 error = calendar_record_get_int(record, _calendar_todo_calendar_book.priority, (int*)&priority);
\r
270 c_warn_if(error != CALENDAR_ERROR_NONE, "calendar_record_get_int() is failed(%x)", error);
\r
272 if (priority == CALENDAR_TODO_PRIORITY_HIGH) {
\r
273 icon = elm_icon_add(obj);
\r
274 c_retvm_if(!icon, NULL, "elm_icon_add returned null");
\r
275 int r = elm_icon_file_set(icon, CAL_IMAGES_EDJ, CAL_IMAGES_PRIORITY);
\r
276 c_retv_if(!r, NULL);
\r
277 } else if (priority == CALENDAR_TODO_PRIORITY_LOW) {
\r
278 icon = elm_icon_add(obj);
\r
279 c_retvm_if(!icon, NULL, "elm_icon_add returned null");
\r
280 int r = elm_icon_file_set(icon, CAL_IMAGES_EDJ, CAL_IMAGES_PRIORITY_LOW);
\r
281 c_retv_if(!r, NULL);
\r
286 } else if (!CAL_STRCMP(part, "elm.edit.icon")) {
\r
287 icon = elm_check_add(obj);
\r
288 c_retvm_if(!icon, NULL, "elm_check_add returned null");
\r
290 elm_check_state_pointer_set(icon, &item_data->checked);
\r
291 evas_object_smart_callback_add(icon, "changed", __cal_list_delete_genlist_item_check_changed_callback, item_data);
\r
292 evas_object_propagate_events_set(icon, EINA_FALSE);
\r
293 evas_object_data_set(icon, "priv", p);
\r
302 static char* __cal_list_delete_share_genlist_item_label(void *data, Evas_Object *obj, const char *part)
\r
304 c_retv_if(!data || !obj || !part, NULL);
\r
306 cal_list_genlist_item_data *item_data = data;
\r
308 if (!CAL_STRCMP(part, "elm.text")) {
\r
309 return strdup(item_data->label);
\r
315 static void __cal_list_delete_delete_genlist_item(void *data, Evas_Object *obj)
\r
317 c_retm_if(!data, "data is null.");
318 cal_list_genlist_item_data *item_data = data;
\r
320 if (item_data->color_str) {
321 free(item_data->color_str);
322 item_data->color_str = NULL;
325 if (item_data->label) {
\r
326 free(item_data->label);
\r
327 item_data->label = NULL;
\r
333 static char* __cal_list_delete_get_genlist_header_item_label(void *data, Evas_Object *obj, const char *part)
\r
335 c_retv_if(!data, NULL);
338 cal_list_genlist_item_data *item_data = data;
\r
339 const struct tm *tm = item_data->tm;
341 if (!CAL_STRCMP(part, "elm.text")) {
343 return strdup(C_("IDS_CLD_BODY_REPEATING_EVENT"));
345 cal_util_get_time_text(buf, sizeof(buf), CAL_UTIL_DATE_FORMAT_1, NULL, tm);
\r
352 static void __cal_list_delete_delete_genlist_header_item(void *data, Evas_Object *obj)
\r
356 c_retm_if(!data, "data is null.");
358 cal_list_genlist_item_data *item_data = data;
\r
364 static void __cal_list_delete_update_small_info(cal_list_delete_data *p, int count)
\r
370 cal_util_hide_small_information(p->ly);
\r
371 elm_object_disabled_set(p->bt_delete, EINA_TRUE);
\r
375 char lable_str[128] = { '\0'};
\r
377 snprintf(lable_str, sizeof(lable_str), "%s (%d)", S_("IDS_COM_POP_SELECTED"), count);
\r
379 cal_util_show_small_information(p->ly, lable_str, 0.0);
\r
382 static void __cal_list_delete_genlist_item_check_changed_callback(void *data, Evas_Object *obj, void *event_info)
\r
384 c_retm_if(!data, "data is null");
\r
385 cal_list_genlist_item_data *item_data = data;
\r
387 Elm_Object_Item *it;
\r
388 Eina_List* realized_list, *l;
\r
390 cal_list_delete_data* p = CAL_UTIL_GET_PRIV_DATA(obj);
\r
391 c_retm_if(!p, "p is null");
\r
393 if (p->genlist_count <= 0) {
\r
397 item_data->checked = elm_check_state_get(obj);
\r
398 if (item_data->checked) {
\r
400 if (item_data->is_before_today) {
\r
401 p->before_today_num_checked++;
\r
405 if (item_data->is_before_today) {
\r
406 p->before_today_num_checked--;
\r
410 if (item_data->checked || 0 < p->num_check)
\r
411 elm_object_disabled_set(p->bt_delete, EINA_FALSE);
\r
413 elm_object_disabled_set(p->bt_delete, EINA_TRUE);
\r
415 realized_list = elm_genlist_realized_items_get(p->genlist);
\r
416 EINA_LIST_FOREACH(realized_list, l, it) {
\r
418 elm_genlist_item_update(it);
\r
421 if (p->num_check == p->genlist_count) {
\r
422 elm_check_state_set(p->select_all_check,EINA_TRUE);
\r
423 __cal_list_delete_update_all_check(p);
\r
425 elm_check_state_set(p->select_all_check,EINA_FALSE);
\r
426 __cal_list_delete_update_small_info(p, p->num_check);
\r
429 if ((p->before_today_num_checked == p->before_today_num) && p->before_today_num != 0) {
\r
430 elm_check_state_set(p->select_before_today_check, EINA_TRUE);
\r
432 elm_check_state_set(p->select_before_today_check, EINA_FALSE);
\r
436 static Evas_Object *__cal_list_delete_get_genlist_item_icon(void *data, Evas_Object *obj, const char *part)
\r
438 c_retv_if(!data, NULL);
440 cal_list_delete_data *p = CAL_UTIL_GET_PRIV_DATA(obj);
\r
443 cal_list_genlist_item_data *item_data = data;
\r
445 Evas_Object *icon = NULL;
447 calendar_record_h record = item_data->record;
449 if (!CAL_STRCMP(part, "elm.swallow.colorbar")) {
451 icon = evas_object_rectangle_add(evas_object_evas_get(obj));
\r
452 evas_object_size_hint_align_set(icon, EVAS_HINT_FILL, EVAS_HINT_FILL);
\r
454 _calendar_get_calendar_color(record, &calendar_color);
\r
456 evas_object_color_set(icon, calendar_color.red, calendar_color.green, calendar_color.blue, calendar_color.alpha);
\r
461 } else if (!CAL_STRCMP(part, "elm.edit.icon") ) {
\r
462 icon = elm_check_add(obj);
\r
463 c_retvm_if(!icon, NULL, "elm_check_add returned null");
\r
465 elm_check_state_pointer_set(icon, &item_data->checked);
\r
466 evas_object_smart_callback_add(icon, "changed", __cal_list_delete_genlist_item_check_changed_callback, item_data);
\r
467 evas_object_propagate_events_set(icon, EINA_FALSE);
\r
468 evas_object_data_set(icon, "priv", p);
\r
472 else if (!CAL_STRCMP(part, "elm.icon.1")) {
\r
473 if ( CAL_LIST_DELETE_MODE_NORMAL == p->mode) {
\r
474 if (!_calendar_has_reminder(record))
\r
477 icon = elm_icon_add(obj);
\r
478 c_retv_if(!icon, NULL);
480 int r = elm_icon_file_set(icon, CAL_IMAGES_EDJ, CAL_IMAGES_ALARM);
\r
486 else if (!CAL_STRCMP(part, "elm.icon.2")) {
488 if ( CAL_LIST_DELETE_MODE_NORMAL == p->mode) {
\r
489 if (!_calendar_is_recurrent_record(record))
\r
492 icon = elm_icon_add(obj);
\r
493 c_retv_if(!icon, NULL);
495 int r = elm_icon_file_set(icon, CAL_IMAGES_EDJ, CAL_IMAGES_REPEAT);
\r
501 else if (!CAL_STRCMP(part, "elm.icon.3")) {
502 if ( CAL_LIST_DELETE_MODE_NORMAL == p->mode) {
\r
503 if (_calendar_is_facebook_record(record)) {
\r
504 icon = elm_icon_add(obj);
\r
505 c_retv_if(!icon, NULL);
\r
507 int r = elm_icon_file_set(icon, CAL_IMAGES_EDJ, CAL_IMAGES_FACEBOOK);
\r
508 c_retv_if(!r, NULL);
\r
518 static void __cal_list_delete_remove_db_changed_callback(cal_list_delete_data *p)
\r
524 calendar_error_e error = CALENDAR_ERROR_NONE;
\r
526 error = calendar_db_remove_changed_cb(_calendar_event._uri, __cal_list_delete_event_update_noti_received_cb, p);
\r
527 c_warn_if(error != CALENDAR_ERROR_NONE, "calendar_db_remove_changed_cb() is failed(%x)", error);
\r
529 error = calendar_db_remove_changed_cb(_calendar_todo._uri, __cal_list_delete_event_update_noti_received_cb, p);
\r
530 c_warn_if(error != CALENDAR_ERROR_NONE, "calendar_db_remove_changed_cb() is failed(%x)", error);
\r
535 static void __cal_list_delete_text_refresh_callback(void *data)
\r
539 c_retm_if(!data, "data is null");
\r
540 cal_list_delete_data *p = data;
\r
542 if (p->mode == CAL_LIST_DELETE_MODE_TASK)
\r
543 elm_object_item_part_text_set(p->navi_item, "default", C_("IDS_CLD_OPT_DELETE_TASK"));
\r
545 elm_object_item_part_text_set(p->navi_item, "default", C_("IDS_CLD_BUTTON_DELETE"));
\r
547 if (p->ad->tapbar_focus_view == CV_LIST ) {
\r
548 elm_object_part_text_set(p->select_all_layout, "elm.text", C_("IDS_CLD_BODY_ALL_EVENTS"));
\r
549 } else if (p->ad->tapbar_focus_view == CV_TODO) {
\r
550 elm_object_part_text_set(p->select_all_layout, "elm.text", S_("IDS_COM_BODY_SELECT_ALL"));
\r
551 } else if (p->ad->tapbar_focus_view == CV_YEAR) {
\r
552 elm_object_part_text_set(p->select_all_layout, "elm.text", C_("IDS_CLD_MBODY_ALL_THIS_YEAR"));
\r
553 } else if (p->ad->tapbar_focus_view == CV_MONTH) {
\r
554 elm_object_part_text_set(p->select_all_layout, "elm.text", C_("IDS_CLD_BODY_ALL_THIS_MONTH"));
\r
555 } else if (p->ad->tapbar_focus_view == CV_WEEK) {
\r
556 elm_object_part_text_set(p->select_all_layout, "elm.text", C_("IDS_CLD_BODY_ALL_THIS_WEEK"));
\r
557 } else if (p->ad->tapbar_focus_view == CV_DAY) {
\r
558 elm_object_part_text_set(p->select_all_layout, "elm.text", C_("IDS_CLD_BODY_ALL_THIS_DAY"));
\r
561 elm_object_text_set(p->bt_delete, S_("IDS_COM_BODY_DELETE"));
\r
563 elm_genlist_realized_items_update(p->genlist);
\r
566 static void __cal_list_delete_delete_layout(void *data, Evas *e, Evas_Object *obj, void *ei)
\r
570 c_retm_if(!data, "data is null");
\r
572 cal_list_delete_data *p = data;
\r
574 p->ad->current_view = p->ad->tapbar_focus_view;
\r
577 ecore_idler_del(p->idler);
\r
581 __cal_list_delete_remove_db_changed_callback(p);
\r
583 _calendar_free_record_list(&p->append_list);
\r
585 _calendar_free_record_list(&p->prepend_list);
\r
588 elm_box_clear(p->box);
\r
592 Evas_Object *e_content = elm_object_part_content_get(p->ly, "sw");
\r
593 if (p->no_content && p->no_content != e_content) {
\r
594 evas_object_del(p->no_content);
\r
598 evas_object_del(p->popup);
\r
601 cal_lang_manager_remove_callback(__cal_list_delete_text_refresh_callback, p);
\r
608 static char* __cal_list_delete_get_genlist_item_label(void *data, Evas_Object *obj, const char *part)
\r
610 c_retv_if(!data, NULL);
611 c_retv_if(!obj, NULL);
612 c_retv_if(!part, NULL);
616 cal_list_genlist_item_data *item_data = data;
\r
618 cal_list_delete_data *p = CAL_UTIL_GET_PRIV_DATA(obj);
\r
621 if (!item_data || !item_data->record)
624 calendar_record_h record = item_data->record;
625 c_retv_if(!record, NULL);
627 if (!CAL_STRCMP(part, "elm.text.1")) {
629 if (item_data->color_str) {
630 free(item_data->color_str);
631 item_data->color_str = NULL;
634 str = _calendar_get_summary(record);
\r
636 } else if (!CAL_STRCMP(part, "elm.text.3")) {
638 return _calendar_get_location(record);
\r
640 } else if (!CAL_STRCMP(part, "elm.text.2")) {
642 return _calendar_get_time_str_for_genlist(record);
\r
644 } else if (!CAL_STRCMP(part, "elm.slide.text.1")) {
646 return _calendar_get_summary(record);
\r
652 static void __cal_list_delete_genlist_item_select_callback(void *data, Evas_Object *obj, void *event_info)
\r
657 Eina_List* realized_list, *l;
\r
658 Elm_Object_Item* it;
\r
659 cal_list_genlist_item_data* item = data;
\r
661 cal_list_delete_data *p = CAL_UTIL_GET_PRIV_DATA(obj);
\r
664 if (p->genlist_count <= 0)
\r
667 item->checked = !(item->checked);
\r
668 if (item->checked) {
\r
670 if (item->is_before_today) {
\r
671 p->before_today_num_checked++;
\r
675 if (item->is_before_today) {
\r
676 p->before_today_num_checked--;
\r
680 if (item->checked || 0 < p->num_check) {
\r
681 elm_object_disabled_set(p->bt_delete, EINA_FALSE);
\r
683 else if (0 >= p->num_check) {
\r
684 elm_object_disabled_set(p->bt_delete, EINA_TRUE);
\r
687 it = elm_genlist_selected_item_get(obj);
\r
689 elm_genlist_item_selected_set(it, EINA_FALSE);
\r
692 realized_list = elm_genlist_realized_items_get(obj);
\r
694 EINA_LIST_FOREACH(realized_list, l, it) {
\r
696 elm_genlist_item_update(it);
\r
699 if (p->num_check == p->genlist_count) {
\r
700 elm_check_state_set(p->select_all_check,EINA_TRUE);
\r
701 __cal_list_delete_update_all_check(p);
\r
703 elm_check_state_set(p->select_all_check,EINA_FALSE);
\r
704 __cal_list_delete_update_small_info(p, p->num_check);
\r
707 if ((p->before_today_num_checked == p->before_today_num) && p->before_today_num != 0) {
\r
708 elm_check_state_set(p->select_before_today_check, EINA_TRUE);
\r
710 elm_check_state_set(p->select_before_today_check, EINA_FALSE);
\r
715 static void __cal_list_delete_append_list_with_iter(Eina_List **event_list, calendar_list_h list)
\r
717 c_ret_if(!event_list);
\r
720 calendar_record_h record = NULL;
\r
724 calendar_error_e error = CALENDAR_ERROR_NONE;
\r
726 error = calendar_list_get_count(list, &count);
\r
727 c_warn_if(error != CALENDAR_ERROR_NONE, "calendar_list_get_count() is failed(%x)", error);
\r
729 for (i = 0; i < count; i++) {
\r
730 error = calendar_list_get_current_record_p(list, &record);
\r
731 c_warn_if(error != CALENDAR_ERROR_NONE, "calendar_list_get_current_record_p() is failed(%x)", error);
\r
733 *event_list = eina_list_append(*event_list, record);
\r
735 calendar_list_next(list);
\r
739 static void __cal_list_delete_get_events(cal_list_delete_data *p)
\r
745 struct appdata *ad = p->ad;
748 struct tm before_today_tm = {0};
\r
750 cal_util_update_tm_month(&before_today_tm, 1);
751 cal_util_update_tm_day(&before_today_tm, -1);
\r
753 p->append_list = _calendar_get_all_record_list();
\r
754 Eina_List *todo_list = _calendar_get_due_date_task_list(&p->tm_start, &p->tm_end, p->ad->is_display_complete_todo, _CALENDAR_TASK_SORT_TYPE_DUEDATE_ASC);
\r
755 todo_list = eina_list_reverse(todo_list);
\r
757 p->append_list = eina_list_merge(p->append_list, todo_list);
\r
762 static void __cal_list_delete_get_events_with_day(cal_list_delete_data *p)
\r
768 struct tm tm_start = p->ad->base_tm;
769 tm_start.tm_hour = 0;
773 struct tm tm_end = tm_start;
778 p->append_list = _calendar_get_all_instance_list(&tm_start, &tm_end);
\r
780 Eina_List *todo_list = _calendar_get_due_date_task_list(&tm_start, &tm_end, p->ad->is_display_complete_todo, _CALENDAR_TASK_SORT_TYPE_DUEDATE_ASC);
\r
782 todo_list = eina_list_reverse(todo_list);
784 p->append_list = eina_list_merge(p->append_list, todo_list);
\r
789 static void __cal_list_delete_get_events_with_year(cal_list_delete_data *p)
\r
795 struct tm tm_start;
\r
801 cal_util_get_year_time_t(&p->ad->base_tm, &start, &end);
\r
803 cal_util_convert_lli_to_tm(NULL, start, &tm_start);
\r
804 cal_util_convert_lli_to_tm(NULL, end, &tm_end);
\r
806 p->append_list = _calendar_get_all_instance_list(&tm_start, &tm_end);
\r
809 Eina_List *todo_list = _calendar_get_due_date_task_list(&tm_start, &tm_end, p->ad->is_display_complete_todo, _CALENDAR_TASK_SORT_TYPE_DUEDATE_ASC);
\r
811 todo_list = eina_list_reverse(todo_list);
813 p->append_list = eina_list_merge(p->append_list, todo_list);
\r
818 static void __cal_list_delete_get_events_with_month(cal_list_delete_data *p)
\r
824 struct tm tm_start;
\r
830 cal_util_get_month_time_t(&p->ad->base_tm, &start, &end);
\r
832 cal_util_convert_lli_to_tm(NULL, start, &tm_start);
\r
833 cal_util_convert_lli_to_tm(NULL, end, &tm_end);
\r
835 p->append_list = _calendar_get_all_instance_list(&tm_start, &tm_end);
\r
837 Eina_List *todo_list = _calendar_get_due_date_task_list(&tm_start, &tm_end, p->ad->is_display_complete_todo, _CALENDAR_TASK_SORT_TYPE_DUEDATE_ASC);
\r
839 todo_list = eina_list_reverse(todo_list);
841 p->append_list = eina_list_merge(p->append_list, todo_list);
\r
846 static void __cal_list_delete_get_events_with_week(cal_list_delete_data *p)
\r
852 struct tm tm_start;
\r
858 cal_util_get_week_time_t(&p->ad->base_tm, &start, &end, 0);
\r
860 cal_util_convert_lli_to_tm(NULL, start, &tm_start);
\r
861 cal_util_convert_lli_to_tm(NULL, end, &tm_end);
\r
863 p->append_list = _calendar_get_all_instance_list(&tm_start, &tm_end);
\r
865 Eina_List *todo_list = _calendar_get_due_date_task_list(&tm_start, &tm_end, p->ad->is_display_complete_todo, _CALENDAR_TASK_SORT_TYPE_DUEDATE_ASC);
\r
867 todo_list = eina_list_reverse(todo_list);
869 p->append_list = eina_list_merge(p->append_list, todo_list);
\r
874 static void __cal_list_delete_get_todo_with_search(cal_list_delete_data *p)
\r
880 __cal_list_delete_get_data_with_search(p, _calendar_search_task);
\r
885 static void __cal_list_delete_get_task_list(cal_list_delete_data *p)
\r
891 struct appdata *ad = p->ad;
894 p->tm_start.tm_year = 70;
895 p->tm_end.tm_year = 137;
897 p->append_list = _calendar_get_all_task_list2(&p->tm_start, &p->tm_end, p->ad->is_display_complete_todo, _CALENDAR_TASK_SORT_TYPE_DUEDATE_ASC);
\r
902 static void __cal_list_delete_update_events(cal_list_delete_data *p)
\r
906 _calendar_free_record_list(&p->prepend_list);
\r
907 _calendar_free_record_list(&p->append_list);
\r
909 struct appdata *ad = p->ad;
912 p->tm_start.tm_year = 70;
\r
913 p->tm_start.tm_mon = 1;
\r
914 p->tm_start.tm_mday = 1;
915 p->tm_start.tm_hour = 0;
916 p->tm_start.tm_min = 0;
917 p->tm_start.tm_sec = 0;
919 p->tm_end.tm_year = 137;
920 p->tm_end.tm_mon = 12;
\r
921 p->tm_end.tm_mday = 31;
\r
922 p->tm_end.tm_hour = 23;
923 p->tm_end.tm_min = 59;
924 p->tm_end.tm_sec = 59;
926 if (ad->tapbar_focus_view== CV_LIST) {
\r
927 __cal_list_delete_get_events(p);
\r
929 } else if (ad->tapbar_focus_view == CV_YEAR) {
\r
930 __cal_list_delete_get_events_with_year(p);
\r
932 } else if (ad->tapbar_focus_view == CV_MONTH) {
\r
933 __cal_list_delete_get_events_with_month(p);
\r
935 } else if (ad->tapbar_focus_view == CV_WEEK) {
\r
936 __cal_list_delete_get_events_with_week(p);
\r
938 } else if (ad->tapbar_focus_view == CV_DAY) {
\r
939 __cal_list_delete_get_events_with_day(p);
\r
941 } else if (ad->tapbar_focus_view == CV_TODO) {
\r
942 __cal_list_delete_get_task_list(p);
\r
948 static void __cal_list_delete_delete_idler(cal_list_delete_data *p)
\r
957 ecore_idler_del(p->idler);
962 static inline void __cal_list_delete_delete_select_all(cal_list_delete_data *p)
\r
966 if (p->select_all_layout) {
\r
967 evas_object_del(p->select_all_layout);
\r
968 p->select_all_layout = NULL;
\r
972 static inline void __cal_list_delete_delete_select_before_today(cal_list_delete_data *p)
\r
976 if (p->select_before_today_layout) {
\r
977 evas_object_del(p->select_before_today_layout);
\r
978 p->select_before_today_layout = NULL;
\r
982 static void __cal_list_delete_delete_no_contents(cal_list_delete_data *p)
\r
988 c_ret_if(!p->no_content);
\r
990 elm_object_part_content_unset(p->ly, "sw");
\r
992 evas_object_del(p->no_content);
\r
994 p->no_content = NULL;
\r
996 elm_object_part_content_set(p->ly, "sw", p->box);
\r
997 evas_object_show(p->box);
\r
1000 static void __cal_list_delete_create_genlist(cal_list_delete_data *p)
\r
1009 Evas_Object *genlist = elm_genlist_add(p->ly);
\r
1012 p->genlist = genlist;
\r
1015 elm_genlist_decorate_mode_set(p->genlist, EINA_TRUE);
\r
1016 evas_object_data_set(p->genlist, "priv", p);
\r
1018 evas_object_size_hint_weight_set(p->genlist, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
\r
1019 evas_object_size_hint_align_set(p->genlist, EVAS_HINT_FILL, EVAS_HINT_FILL);
\r
1021 evas_object_show(p->genlist);
\r
1022 elm_object_focus_set(p->genlist, EINA_TRUE);
\r
1023 elm_box_pack_end(p->box, p->genlist);
\r
1026 static inline Elm_Object_Item* __cal_list_delete_append_genlist_group_item(Evas_Object *genlist,
\r
1027 const Elm_Genlist_Item_Class *itc, struct tm *tm, cal_task_group_item_type type)
1031 c_retv_if(!genlist, NULL);
1033 cal_list_delete_data *p = CAL_UTIL_GET_PRIV_DATA(genlist);
\r
1034 c_retvm_if(!p, NULL, "p is null.");
1036 if (p->mode == CAL_LIST_DELETE_MODE_DAY)
\r
1042 t = calloc(1, sizeof(struct tm));
1043 c_retv_if(!t, NULL);
\r
1050 cal_list_genlist_item_data *item_data = calloc(1, sizeof(cal_list_genlist_item_data));
\r
1053 item_data->checked = EINA_FALSE;
\r
1054 item_data->todo_group_type = type;
\r
1056 item_data->it = elm_genlist_item_append(genlist, itc, item_data, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
1057 if (item_data->it == NULL) {
\r
1058 ERR("elm_genlist_item_append failed!");
\r
1063 elm_genlist_item_select_mode_set(item_data->it, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
1065 return item_data->it;
1068 static inline Elm_Object_Item* __cal_list_delete_append_genlist_item(Evas_Object *genlist,
\r
1069 const Elm_Genlist_Item_Class *itc, calendar_record_h record, Eina_Bool is_before_today, Elm_Object_Item *parent,
1070 Evas_Smart_Cb func, const void *func_data)
1074 cal_list_delete_data *p = CAL_UTIL_GET_PRIV_DATA(genlist);
\r
1075 c_retv_if(!p, NULL);
1077 cal_list_genlist_item_data *item_data = calloc(1, sizeof(cal_list_genlist_item_data));
\r
1078 c_retv_if(!item_data, NULL);
\r
1080 item_data->record = record;
\r
1081 item_data->is_before_today = is_before_today;
\r
1082 item_data->checked = EINA_FALSE;
\r
1084 item_data->it = elm_genlist_item_append(genlist, itc, item_data, parent, ELM_GENLIST_ITEM_NONE, func, item_data);
\r
1085 if (item_data->it == NULL) {
\r
1086 ERR("elm_genlist_item_append failed!");
\r
1091 return item_data->it;
1094 static void __cal_list_delete_append_event_to_genlist(cal_list_delete_data *p)
\r
1100 struct appdata* ad = p->ad;
1103 Elm_Object_Item *it = NULL;
1104 long long int time_previous = 0;
1106 Eina_List *l, *list;
1107 calendar_record_h record;
1108 int appended_event_count = 0;
1109 struct tm tm_current;
1110 calendar_time_s end_time = {0};
\r
1112 if (0 < p->appended_event_count) {
1113 list = eina_list_nth_list(p->append_list, p->appended_event_count - 1);
1116 record = eina_list_data_get(list);
1119 Eina_Bool is_todo = EINA_FALSE;
\r
1120 if (_calendar_is_task_record(record)) {
\r
1121 is_todo = EINA_TRUE;
\r
1123 is_todo = EINA_FALSE;
\r
1127 _calendar_get_end_time(record, &end_time);
\r
1129 cal_util_convert_lli_to_tm(NULL, end_time.time.utime, &tm_current);
\r
1131 calendar_time_s start_time = {0};
\r
1132 _calendar_get_start_time(record, &start_time);
\r
1134 if (_calendar_is_allday_record(record)) {
\r
1135 tm_current.tm_year = start_time.time.date.year - 1900;
1136 tm_current.tm_mon = start_time.time.date.month - 1;
1137 tm_current.tm_mday = start_time.time.date.mday;
1139 cal_util_convert_lli_to_tm(NULL, start_time.time.utime, &tm_current);
1143 time_previous = (tm_current.tm_year << 9) | (tm_current.tm_mon << 5) | tm_current.tm_mday;
1145 list = eina_list_next(list);
1149 list = p->append_list;
1151 EINA_LIST_FOREACH(list, l, record) {
\r
1156 tm_current = p->ad->base_tm;
\r
1158 Eina_Bool is_todo = EINA_FALSE;
\r
1159 Eina_Bool is_before_today = EINA_FALSE;
\r
1160 Eina_Bool is_repeat_event = EINA_FALSE;
\r
1161 if (_calendar_is_task_record(record)) {
\r
1162 is_todo = EINA_TRUE;
\r
1164 is_todo = EINA_FALSE;
\r
1168 _calendar_get_end_time(record, &end_time);
\r
1169 cal_util_convert_lli_to_tm(NULL, end_time.time.utime, &tm_current);
\r
1171 if (tm_current.tm_mday == 0)
\r
1174 if (ad->tapbar_focus_view == CV_LIST) {
\r
1175 calendar_record_h original_record = NULL;
\r
1177 int original_event_id = _calendar_get_record_index(record);
\r
1178 if (0 < original_event_id) {
\r
1179 int r = calendar_db_get_record(_calendar_event._uri, original_event_id, &original_record);
\r
1180 c_retm_if(r != CALENDAR_ERROR_NONE, "calendar_db_get_record(%d) is failed(%d)", original_event_id, r);
\r
1183 if (!original_record) {
\r
1184 original_record = record;
\r
1187 if (_calendar_is_recurrent_record(original_record)) {
\r
1190 EINA_LIST_FOREACH(p->repeat_list, ll, id) {
\r
1191 if ((int)id == original_event_id) {
\r
1192 is_repeat_event = EINA_TRUE;
\r
1197 if (is_repeat_event) {
\r
1200 p->repeat_list = eina_list_append(p->repeat_list, (void *)original_event_id);
\r
1204 calendar_time_s start_time = {0};
\r
1205 _calendar_get_end_time(record, &start_time);
\r
1207 if (_calendar_is_allday_record(record)) {
\r
1208 tm_current.tm_year = start_time.time.date.year - 1900;
\r
1209 tm_current.tm_mon = start_time.time.date.month - 1;
\r
1210 tm_current.tm_mday = start_time.time.date.mday;
1213 cal_util_convert_lli_to_tm(NULL, start_time.time.utime, &tm_current);
1216 long long int time_today = (ad->today_tm.tm_year << 9) | (ad->today_tm.tm_mon << 5) | ad->today_tm.tm_mday;
\r
1217 long long int time_current = (tm_current.tm_year << 9) | (tm_current.tm_mon << 5) | tm_current.tm_mday;
1218 if (time_today > time_current) {
\r
1219 p->before_today_num++;
\r
1220 is_before_today = EINA_TRUE;
\r
1223 if (p->mode == CAL_LIST_DELETE_MODE_NORMAL) {
\r
1224 if (time_previous != time_current) {
\r
1225 if ((time_current == time_today) && (!p->is_today_has_instance)) {
\r
1226 it = __cal_list_delete_append_genlist_group_item(p->genlist, &cal_list_today_group_itc_h, &tm_current, CAL_NOT_TASK);
\r
1227 p->is_today_has_instance = EINA_TRUE;
\r
1229 it = __cal_list_delete_append_genlist_group_item(p->genlist, &cal_list_delete_itc_h, &tm_current, CAL_NOT_TASK);
\r
1232 time_previous = time_current;
\r
1234 if (time_today == time_current) {
\r
1235 ad->today_item = it;
\r
1236 p->is_today_added = EINA_TRUE;
\r
1239 if (!p->is_today_added) {
\r
1240 if (time_today < time_current) {
\r
1241 ad->today_item = it;
\r
1242 p->is_today_added = EINA_TRUE;
\r
1245 ad->today_item = it;
\r
1248 p->last_itc_h = tm_current;
\r
1250 } else if (p->mode == CAL_LIST_DELETE_MODE_TASK) {
\r
1251 if (end_time.time.utime == CALENDAR_TODO_NO_DUE_DATE) {
\r
1252 if (!p->no_due_date_item) {
\r
1253 it = p->no_due_date_item = __cal_list_delete_append_genlist_group_item(p->genlist, &cal_list_itc_h, NULL, CAL_TASK_NO_DUE_DATE);
\r
1256 struct tm tm_today = ad->today_tm;
\r
1257 tm_today.tm_hour = 0;
\r
1258 tm_today.tm_min = 0;
\r
1259 tm_today.tm_sec = 0;
\r
1260 long long int today;
\r
1261 cal_util_convert_tm_to_lli(NULL, &tm_today, &today);
\r
1263 struct tm tm_due_date = {0};
\r
1264 cal_util_convert_lli_to_tm(NULL, end_time.time.utime, &tm_due_date);
\r
1265 tm_due_date.tm_hour = 0;
\r
1266 tm_due_date.tm_min= 0;
\r
1267 tm_due_date.tm_sec = 0;
\r
1268 long long int due_date;
\r
1269 cal_util_convert_tm_to_lli(NULL, &tm_due_date, &due_date);
\r
1271 long long int diff = due_date - today;
\r
1274 if (!p->over_due_item) {
\r
1275 p->over_due_item = __cal_list_delete_append_genlist_group_item(
\r
1276 p->genlist, &cal_list_itc_h, NULL, CAL_TASK_OVER_DUE);
\r
1278 } else if (diff == 0) { // due_date today
\r
1279 if (!p->due_today_item) {
\r
1280 p->due_today_item = __cal_list_delete_append_genlist_group_item(
\r
1281 p->genlist, &cal_list_itc_h, NULL, CAL_TASK_DUE_TODAY);
\r
1283 } else if (diff < 7 * 24 * 60 * 60) {
\r
1284 if (!p->due_within_a_week_item) {
\r
1285 p->due_within_a_week_item = __cal_list_delete_append_genlist_group_item(
\r
1286 p->genlist, &cal_list_itc_h, NULL, CAL_TASK_DUE_WITHIN_A_WEEK);
\r
1289 if (!p->due_in_over_one_week_item) {
\r
1290 p->due_in_over_one_week_item = __cal_list_delete_append_genlist_group_item(
\r
1291 p->genlist, &cal_list_itc_h, NULL, CAL_TASK_DUE_IN_OVER_ONE_WEEK);
\r
1298 case CAL_LIST_DELETE_MODE_NORMAL:
\r
1300 __cal_list_delete_append_genlist_item(p->genlist, &cal_list_delete_itc, record, is_before_today, it, __cal_list_delete_genlist_item_select_callback, record);
\r
1302 __cal_list_delete_append_genlist_item(p->genlist, &cal_list_delete_normal_itc, record, is_before_today, it, __cal_list_delete_genlist_item_select_callback, record);
\r
1304 p->genlist_count++;
\r
1306 case CAL_LIST_DELETE_MODE_DAY:
\r
1307 __cal_list_delete_append_genlist_item(p->genlist, &cal_list_delete_normal_itc, record, is_before_today, it, __cal_list_delete_genlist_item_select_callback, record);
\r
1308 p->genlist_count++;
\r
1310 case CAL_LIST_DELETE_MODE_TASK:
\r
1311 __cal_list_delete_append_genlist_item(p->genlist, &cal_list_delete_itc, record, is_before_today, it, __cal_list_delete_genlist_item_select_callback, record);
\r
1312 p->genlist_count++;
\r
1315 __cal_list_delete_append_genlist_item(p->genlist, &cal_list_delete_itc, record, is_before_today, it, __cal_list_delete_genlist_item_select_callback, record);
\r
1316 p->genlist_count++;
\r
1320 appended_event_count++;
1322 if (10 < appended_event_count)
1327 p->appended_event_count += appended_event_count;
1332 static inline Elm_Object_Item* __cal_list_delete_prepend_genlist_group_item(Evas_Object *genlist,
\r
1333 const Elm_Genlist_Item_Class *itc, struct tm *tm)
1337 c_retv_if(!genlist, NULL);
1339 cal_list_delete_data *p = CAL_UTIL_GET_PRIV_DATA(genlist);
\r
1340 c_retv_if(!p, NULL);
1342 if (p->mode == CAL_LIST_DELETE_MODE_TASK || p->mode == CAL_LIST_DELETE_MODE_DAY)
\r
1345 struct tm *t = calloc(1, sizeof(struct tm));
1349 cal_list_genlist_item_data *item_data = calloc(1, sizeof(cal_list_genlist_item_data));
\r
1352 item_data->checked = EINA_FALSE;
\r
1354 item_data->it = elm_genlist_item_prepend(genlist, itc, item_data, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
1355 c_retv_if(!item_data->it, NULL);
1357 elm_genlist_item_select_mode_set(item_data->it, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
1359 return item_data->it;
1362 static inline Elm_Object_Item* __cal_list_delete_prepend_genlist_item(Evas_Object *genlist,
\r
1363 const Elm_Genlist_Item_Class *itc, calendar_record_h record, Eina_Bool is_before_today, Elm_Object_Item *parent,
1364 Evas_Smart_Cb func, const void *func_data)
1368 cal_list_delete_data *p = CAL_UTIL_GET_PRIV_DATA(genlist);
\r
1369 c_retv_if(!p, NULL);
\r
1371 cal_list_genlist_item_data *item_data = calloc(1, sizeof(cal_list_genlist_item_data));
\r
1373 item_data->record = record;
1374 item_data->is_before_today = is_before_today;
\r
1375 item_data->checked = EINA_FALSE;
\r
1377 item_data->it = elm_genlist_item_prepend(genlist, itc, item_data, NULL, ELM_GENLIST_ITEM_NONE, func, item_data);
\r
1378 if (!item_data->it) {
\r
1379 ERR("item_data->it is null");
\r
1386 return item_data->it;
1389 static void __cal_list_delete_prepend_event_to_genlist(cal_list_delete_data *p)
\r
1394 c_ret_if(!p->prepend_list);
1396 struct appdata* ad = p->ad;
1397 c_retm_if(!ad, "ad is null.");
1399 Elm_Object_Item *it = NULL;
1400 int time_previous = 0;
1402 Eina_List *l, *list;
1403 calendar_record_h record;
1404 int prepended_event_count = 0;
1405 struct tm tm_previous = {0};
1406 struct tm tm_current = {0};
1408 int time_today = (ad->today_tm.tm_year << 9) | (ad->today_tm.tm_mon << 5) | ad->today_tm.tm_mday;
\r
1410 if (0 < p->prepended_event_count) {
1411 list = eina_list_nth_list(p->prepend_list, p->prepended_event_count);
1415 list = p->prepend_list;
1417 EINA_LIST_FOREACH(list, l, record) {
1422 Eina_Bool is_todo = EINA_FALSE;
\r
1423 Eina_Bool is_before_today = EINA_FALSE;
\r
1425 if(_calendar_is_task_record(record)) {
\r
1426 is_todo = EINA_TRUE;
\r
1428 is_todo = EINA_FALSE;
\r
1431 tm_current = p->ad->base_tm;
1434 calendar_time_s end_time = {0};
\r
1435 _calendar_get_end_time(record, &end_time);
\r
1436 cal_util_convert_lli_to_tm(NULL, end_time.time.utime, &tm_current);
\r
1438 if (tm_current.tm_mday == 0)
\r
1442 calendar_time_s start_time = {0};
\r
1443 _calendar_get_end_time(record, &start_time);
\r
1445 if (_calendar_is_allday_record(record)) {
\r
1446 tm_current.tm_year = start_time.time.date.year - 1900;
\r
1447 tm_current.tm_mon = start_time.time.date.month - 1;
\r
1448 tm_current.tm_mday = start_time.time.date.mday;
\r
1451 cal_util_convert_lli_to_tm(NULL, start_time.time.utime, &tm_current);
\r
1454 int time_current = (tm_current.tm_year << 9) | (tm_current.tm_mon << 5) | tm_current.tm_mday;
1456 if (time_current < time_today) {
\r
1457 p->before_today_num++;
\r
1458 is_before_today = EINA_TRUE;
\r
1461 if (time_previous && time_previous != time_current)
1462 it = __cal_list_delete_prepend_genlist_group_item(p->genlist, &cal_list_delete_itc_h, &tm_previous);
\r
1465 case CAL_LIST_DELETE_MODE_NORMAL:
\r
1467 __cal_list_delete_prepend_genlist_item(p->genlist, &cal_list_delete_itc, record, is_before_today, it, __cal_list_delete_genlist_item_select_callback, record);
\r
1469 __cal_list_delete_prepend_genlist_item(p->genlist, &cal_list_delete_normal_itc, record, is_before_today, it, __cal_list_delete_genlist_item_select_callback, record);
\r
1471 p->genlist_count++;
\r
1473 case CAL_LIST_DELETE_MODE_DAY:
\r
1474 __cal_list_delete_prepend_genlist_item(p->genlist, &cal_list_delete_normal_itc, record, is_before_today, it, __cal_list_delete_genlist_item_select_callback, record);
\r
1475 p->genlist_count++;
\r
1477 case CAL_LIST_DELETE_MODE_TASK:
\r
1478 __cal_list_delete_prepend_genlist_item(p->genlist, &cal_list_delete_itc, record, is_before_today, it, __cal_list_delete_genlist_item_select_callback, record);
\r
1479 p->genlist_count++;
\r
1482 __cal_list_delete_prepend_genlist_item(p->genlist, &cal_list_delete_itc, record, is_before_today, it, __cal_list_delete_genlist_item_select_callback, record);
\r
1483 p->genlist_count++;
\r
1487 time_previous = time_current;
1488 tm_previous = tm_current;
1490 prepended_event_count++;
1492 if (10 < prepended_event_count)
1497 __cal_list_delete_prepend_genlist_group_item(p->genlist, &cal_list_delete_itc_h, &tm_current);
\r
1499 p->prepended_event_count += prepended_event_count;
1504 static Eina_Bool __cal_list_delete_check_idler_condition(cal_list_delete_data *p)
\r
1506 c_retv_if(!p, ECORE_CALLBACK_CANCEL);
1508 if (p->appended_event_count < eina_list_count(p->append_list) ||
1509 p->prepended_event_count < eina_list_count(p->prepend_list)) {
1511 return ECORE_CALLBACK_RENEW;
1515 ecore_idler_del(p->idler);
1519 return ECORE_CALLBACK_CANCEL;
1522 static void __cal_list_delete_delete_load_more(Elm_Object_Item *item)
\r
1526 elm_object_item_del(item);
1529 static void __cal_list_delete_prepend_more(void *data, Evas_Object *obj, void *event_info)
\r
1534 cal_list_delete_data *p = data;
\r
1536 __cal_list_delete_delete_load_more(p->load_more_top);
\r
1538 struct tm tm_start= p->tm_start;
1539 struct tm tm_end = tm_start;
1541 cal_util_update_tm_month(&tm_start, -3);
1543 Eina_List *prepend_more_list = _calendar_get_all_instance_list(&tm_start, &tm_end);
\r
1545 prepend_more_list = eina_list_reverse(prepend_more_list);
1547 p->tm_start = tm_start;
1549 p->prepend_list = eina_list_merge(p->prepend_list, prepend_more_list);
1551 __cal_list_delete_prepend_event_to_genlist(p);
\r
1554 p->load_more_top= __cal_list_delete_add_load_more_to_genlist(p, "Load events before", &p->tm_start);
\r
1557 static void __cal_list_delete_append_more(void *data, Evas_Object *obj, void *event_info)
\r
1562 cal_list_delete_data *p = data;
\r
1564 __cal_list_delete_delete_load_more(p->load_more_bottom);
\r
1566 struct tm tm_start= p->tm_end;
1567 struct tm tm_end = tm_start;
1569 cal_util_update_tm_month(&tm_end, 3);
1571 Eina_List *append_more_list = _calendar_get_all_instance_list(&tm_start, &tm_end);
\r
1575 p->append_list = eina_list_merge(p->append_list, append_more_list);
1577 __cal_list_delete_append_event_to_genlist(p);
\r
1580 p->load_more_bottom = __cal_list_delete_add_load_more_to_genlist(p, "Load events after", &p->tm_end);
\r
1583 static Elm_Object_Item * __cal_list_delete_add_load_more_to_genlist(cal_list_delete_data *p, const char *text, struct tm *tm)
\r
1585 c_retv_if(!p, NULL);
1586 c_retv_if(!p->genlist, NULL);
1587 c_retv_if(!text, NULL);
1588 c_retv_if(!tm, NULL);
1590 char time[32] = {0};
1592 cal_util_get_time_text(time, sizeof(time), CAL_UTIL_DATE_FORMAT_8, NULL, tm);
1594 Elm_Object_Item *load_more = NULL;
1596 cal_list_genlist_item_data *item_data = calloc(1, sizeof(cal_list_genlist_item_data));
\r
1598 item_data->label = calloc(1, sizeof(time) + strlen(text));
\r
1600 snprintf(item_data->label, sizeof(time) + strlen(text), "%s %s", text, time);
\r
1602 if (p->tm_start.tm_year == tm->tm_year
\r
1603 && p->tm_start.tm_mon == tm->tm_mon
1604 && p->tm_start.tm_mday == tm->tm_mday)
\r
1605 load_more = elm_genlist_item_prepend(p->genlist, &itc_1text, item_data, NULL, ELM_GENLIST_ITEM_NONE, __cal_list_delete_prepend_more, p);
\r
1607 load_more = elm_genlist_item_append(p->genlist, &itc_1text, item_data, NULL, ELM_GENLIST_ITEM_NONE, __cal_list_delete_append_more, p);
\r
1610 ERR("load_more is null");
\r
1612 CAL_FREE(item_data->label);
\r
1614 CAL_FREE(item_data);
\r
1622 Eina_Bool __cal_list_delete_idler_callback(void* data)
\r
1626 c_retv_if(!data, ECORE_CALLBACK_CANCEL);
1628 cal_list_delete_data *p = data;
\r
1630 c_retv_if(!p->idler, ECORE_CALLBACK_CANCEL);
1632 __cal_list_delete_append_event_to_genlist(p);
\r
1634 __cal_list_delete_prepend_event_to_genlist(p);
\r
1636 Eina_Bool ret = __cal_list_delete_check_idler_condition(p);
\r
1643 static void __cal_list_delete_add_idler(cal_list_delete_data *p)
\r
1648 if (p->appended_event_count < eina_list_count(p->append_list) ||
1649 p->prepended_event_count < eina_list_count(p->prepend_list)) {
1652 ecore_idler_del(p->idler);
1654 p->idler = ecore_idler_add(__cal_list_delete_idler_callback, p);
\r
1655 c_ret_if(!p->idler);
1660 static void __cal_list_delete_delete_genlist(cal_list_delete_data *p)
\r
1669 elm_object_part_content_unset(p->ly, "sw");
\r
1671 evas_object_del(p->genlist);
1676 static void __cal_list_delete_create_no_contents(cal_list_delete_data *p)
\r
1683 if (p->no_content)
\r
1688 if (p->mode == CAL_LIST_DELETE_MODE_TASK)
\r
1689 title = C_("IDS_TASK_BODY_NO_TASKS");
1691 title = C_("IDS_CLD_BODY_NO_EVENTS");
1693 Evas_Object *no_content = cal_util_add_nocontents(p->ly, title);
\r
1694 c_ret_if(!no_content);
\r
1696 elm_object_part_content_unset(p->ly, "sw");
\r
1699 evas_object_hide(p->box);
\r
1701 elm_object_part_content_set(p->ly, "sw", no_content);
\r
1703 p->no_content = no_content;
\r
1706 static void __cal_list_delete_update_genlist(cal_list_delete_data *p)
\r
1712 __cal_list_delete_delete_idler(p);
\r
1715 elm_genlist_clear(p->genlist);
1718 struct appdata* ad = p->ad;
1721 ad->today_item = NULL;
1723 p->appended_event_count = 0;
1725 p->prepended_event_count = 0;
1727 if (eina_list_count(p->append_list)) {
\r
1728 __cal_list_delete_create_select_all(p);
\r
1729 evas_object_show(p->select_all_layout);
\r
1731 __cal_list_delete_create_genlist(p);
\r
1733 __cal_list_delete_append_event_to_genlist(p);
\r
1735 if (ad->tapbar_focus_view == CV_LIST) {
\r
1736 __cal_list_delete_create_select_before_today(p);
\r
1737 if (p->before_today_num > 0) {
\r
1738 evas_object_show(p->select_before_today_layout);
\r
1739 elm_object_disabled_set(p->select_before_today_check, EINA_FALSE);
\r
1741 elm_check_state_set(p->select_before_today_check, EINA_FALSE);
\r
1742 elm_object_disabled_set(p->select_before_today_check, EINA_TRUE);
\r
1747 __cal_list_delete_delete_no_contents(p);
\r
1749 __cal_list_delete_add_idler(p);
\r
1751 evas_object_show(p->bt_delete);
\r
1754 __cal_list_delete_delete_select_all(p);
\r
1756 if (ad->tapbar_focus_view == CV_LIST) {
\r
1757 __cal_list_delete_delete_select_before_today(p);
\r
1760 __cal_list_delete_delete_genlist(p);
\r
1762 __cal_list_delete_create_no_contents(p);
\r
1764 evas_object_hide(p->bt_delete);
\r
1770 static void __cal_list_delete_update_list(cal_list_delete_data *p)
\r
1777 p->before_today_num_checked = 0;
\r
1778 p->before_today_num = 0;
\r
1779 p->genlist_count = 0;
\r
1780 p->is_today_has_instance = EINA_FALSE;
\r
1781 p->no_due_date_item = NULL;
\r
1782 p->due_today_item = NULL;
\r
1783 p->due_within_a_week_item = NULL;
\r
1784 p->due_in_over_one_week_item = NULL;
\r
1785 p->over_due_item = NULL;
\r
1787 __cal_list_delete_update_events(p);
\r
1789 __cal_list_delete_update_genlist(p);
\r
1791 __cal_list_delete_update_small_info(p, p->num_check);
\r
1796 static void __cal_list_delete_event_update_noti_received_cb(const char* view_uri, void* user_data)
\r
1798 c_retm_if(!user_data, "user_data is null");
\r
1799 cal_list_delete_data *p = (cal_list_delete_data *)user_data;
\r
1802 evas_object_del(p->popup);
\r
1806 __cal_list_delete_update_list(p);
\r
1809 static void __cal_list_delete_update_all_check(cal_list_delete_data* p)
\r
1811 c_retm_if(!p, "p is null");
\r
1812 c_retm_if(!p->genlist, "p is null");
\r
1814 Elm_Object_Item *it;
\r
1815 Eina_List* realized_list, *l;
\r
1816 cal_list_genlist_item_data* item_data;
\r
1818 if (elm_check_state_get(p->select_all_check)) {
\r
1819 p->num_check = p->genlist_count;
\r
1820 elm_object_disabled_set(p->bt_delete, EINA_FALSE);
\r
1821 __cal_list_delete_update_small_info(p, p->genlist_count);
\r
1822 if (p->before_today_num > 0) {
\r
1823 p->before_today_num_checked = p->before_today_num;
\r
1824 elm_check_state_set(p->select_before_today_check, EINA_TRUE);
\r
1828 p->before_today_num_checked = 0;
\r
1829 elm_check_state_set(p->select_before_today_check, EINA_FALSE);
\r
1831 elm_object_disabled_set(p->bt_delete, EINA_TRUE);
\r
1832 elm_object_signal_emit(p->ly, "hide,selection,info", "elm");
\r
1835 it = elm_genlist_first_item_get(p->genlist);
\r
1837 item_data = elm_object_item_data_get(it);
\r
1839 item_data->checked = elm_check_state_get(p->select_all_check);
\r
1841 it = elm_genlist_item_next_get(it);
\r
1844 realized_list = elm_genlist_realized_items_get(p->genlist);
\r
1845 EINA_LIST_FOREACH(realized_list, l, it)
\r
1848 elm_genlist_item_update(it);
\r
1853 static void __cal_list_delete_update_before_today_check(cal_list_delete_data* p)
\r
1855 c_retm_if(!p, "p is null");
\r
1856 c_retm_if(!p->genlist, "p is null");
\r
1858 Elm_Object_Item *it;
\r
1859 Eina_List* realized_list, *l;
\r
1860 cal_list_genlist_item_data* item_data;
\r
1862 if (elm_check_state_get(p->select_before_today_check)) {
\r
1863 p->before_today_num_checked = p->before_today_num;
\r
1864 elm_object_disabled_set(p->bt_delete, EINA_FALSE);
\r
1867 it = elm_genlist_first_item_get(p->genlist);
\r
1869 item_data = elm_object_item_data_get(it);
\r
1870 if (item_data->is_before_today) {
\r
1871 item_data->checked = EINA_TRUE;
\r
1873 it = elm_genlist_item_next_get(it);
\r
1876 it = elm_genlist_first_item_get(p->genlist);
\r
1878 item_data = elm_object_item_data_get(it);
\r
1879 if (item_data->checked && item_data->record != NULL) {
\r
1882 it = elm_genlist_item_next_get(it);
\r
1884 p->num_check = count;
\r
1886 __cal_list_delete_update_small_info(p, p->num_check);
\r
1888 if (p->num_check == p->genlist_count) {
\r
1889 elm_check_state_set(p->select_all_check, EINA_TRUE);
\r
1891 elm_check_state_set(p->select_all_check, EINA_FALSE);
\r
1894 p->before_today_num_checked = 0;
\r
1897 it = elm_genlist_first_item_get(p->genlist);
\r
1899 item_data = elm_object_item_data_get(it);
\r
1900 if (item_data->is_before_today) {
\r
1901 item_data->checked = EINA_FALSE;
\r
1904 it = elm_genlist_item_next_get(it);
\r
1907 p->num_check = p->num_check - count;
\r
1908 if (p->num_check < 0 ) {
\r
1910 elm_object_disabled_set(p->bt_delete, EINA_TRUE);
\r
1911 elm_object_signal_emit(p->ly, "hide,selection,info", "elm");
\r
1913 __cal_list_delete_update_small_info(p, p->num_check);
\r
1916 if (p->num_check == p->genlist_count) {
\r
1917 elm_check_state_set(p->select_all_check, EINA_TRUE);
\r
1919 elm_check_state_set(p->select_all_check, EINA_FALSE);
\r
1923 realized_list = elm_genlist_realized_items_get(p->genlist);
\r
1924 EINA_LIST_FOREACH(realized_list, l, it)
\r
1927 elm_genlist_item_update(it);
\r
1932 static void __cal_list_delete_select_all_mouse_up_callback(void *data, Evas *e, Evas_Object *obj, void *event_info)
\r
1934 c_retm_if(!data, "data is null");
\r
1935 cal_list_delete_data *p = data;
\r
1937 Evas_Event_Mouse_Up *ev = event_info;
\r
1938 if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD)
\r
1941 if (p->genlist_count <= 0) {
\r
1944 elm_check_state_set(p->select_all_check, !elm_check_state_get(p->select_all_check));
\r
1946 __cal_list_delete_update_all_check(p);
\r
1949 static void __cal_list_delete_select_before_today_mouse_up_callback(void *data, Evas *e, Evas_Object *obj, void *event_info)
\r
1951 c_retm_if(!data, "data is null");
\r
1952 cal_list_delete_data *p = data;
\r
1954 Evas_Event_Mouse_Up *ev = event_info;
\r
1955 if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD)
\r
1958 if (p->before_today_num <= 0) {
\r
1961 elm_check_state_set(p->select_before_today_check, !elm_check_state_get(p->select_before_today_check));
\r
1963 __cal_list_delete_update_before_today_check(p);
\r
1967 static void __cal_list_delete_select_all_changed_callback(void *data, Evas_Object *obj, void *event_info)
\r
1969 c_retm_if(!obj, "obj is null");
\r
1971 cal_list_delete_data* p = data;
\r
1972 c_retm_if(!p, "p is null");
\r
1973 if (p->genlist_count <= 0) {
\r
1977 __cal_list_delete_update_all_check(p);
\r
1980 static void __cal_list_delete_select_before_today_changed_callback(void *data, Evas_Object *obj, void *event_info)
\r
1982 c_retm_if(!obj, "obj is null");
\r
1984 cal_list_delete_data* p = data;
\r
1985 c_retm_if(!p, "p is null");
\r
1987 if (p->before_today_num <= 0) {
\r
1991 __cal_list_delete_update_before_today_check(p);
\r
1994 static void __cal_list_delete_create_select_all(cal_list_delete_data* p)
\r
2001 c_ret_if(!p->box);
\r
2002 c_ret_if(p->select_all_layout);
\r
2004 Evas_Object* layout = p->select_all_layout = elm_layout_add(p->box);
\r
2005 c_retm_if(!layout, "elm_layout_add returned null");
\r
2006 elm_layout_theme_set(layout, "genlist", "item", "select_all/default");
\r
2007 evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_FILL);
\r
2008 evas_object_size_hint_align_set(layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
\r
2009 evas_object_event_callback_add(layout, EVAS_CALLBACK_MOUSE_UP, __cal_list_delete_select_all_mouse_up_callback, p);
\r
2011 Evas_Object* check = p->select_all_check = elm_check_add(p->select_all_layout);
\r
2012 c_retm_if(!check, "elm_check_add returned null");
\r
2013 evas_object_smart_callback_add(check, "changed", __cal_list_delete_select_all_changed_callback, p);
\r
2014 evas_object_propagate_events_set(check, EINA_FALSE);
\r
2016 elm_object_part_content_set(layout, "elm.icon", check);
\r
2017 evas_object_data_set(p->select_all_layout, "layout", p->select_all_layout);
\r
2020 if (p->ad->tapbar_focus_view == CV_LIST ) {
\r
2021 elm_object_part_text_set(p->select_all_layout, "elm.text", "Select all events");
\r
2022 } else if (p->ad->tapbar_focus_view == CV_TODO) {
\r
2023 elm_object_part_text_set(p->select_all_layout, "elm.text", S_("IDS_COM_BODY_SELECT_ALL"));
\r
2024 } else if (p->ad->tapbar_focus_view == CV_YEAR) {
\r
2025 elm_object_part_text_set(p->select_all_layout, "elm.text", C_("IDS_CLD_MBODY_ALL_THIS_YEAR"));
\r
2026 } else if (p->ad->tapbar_focus_view == CV_MONTH) {
\r
2027 elm_object_part_text_set(p->select_all_layout, "elm.text", C_("IDS_CLD_BODY_ALL_THIS_MONTH"));
\r
2028 } else if (p->ad->tapbar_focus_view == CV_WEEK) {
\r
2029 elm_object_part_text_set(p->select_all_layout, "elm.text", C_("IDS_CLD_BODY_ALL_THIS_WEEK"));
\r
2030 } else if (p->ad->tapbar_focus_view == CV_DAY) {
\r
2031 elm_object_part_text_set(p->select_all_layout, "elm.text", C_("IDS_CLD_BODY_ALL_THIS_DAY"));
\r
2034 elm_box_pack_start(p->box, p->select_all_layout);
\r
2035 evas_object_show(p->select_all_layout);
\r
2039 static void __cal_list_delete_create_select_before_today(cal_list_delete_data* p)
\r
2046 c_ret_if(!p->box);
\r
2047 c_ret_if(p->select_before_today_layout);
\r
2049 Evas_Object* layout = p->select_before_today_layout = elm_layout_add(p->box);
\r
2050 c_retm_if(!layout, "elm_layout_add returned null");
\r
2051 elm_layout_theme_set(layout, "genlist", "item", "select_all/default");
\r
2052 evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_FILL);
\r
2053 evas_object_size_hint_align_set(layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
\r
2054 evas_object_event_callback_add(layout, EVAS_CALLBACK_MOUSE_UP, __cal_list_delete_select_before_today_mouse_up_callback, p);
\r
2056 Evas_Object* check = p->select_before_today_check = elm_check_add(p->select_before_today_layout);
\r
2057 c_retm_if(!check, "elm_check_add returned null");
\r
2058 evas_object_smart_callback_add(check, "changed", __cal_list_delete_select_before_today_changed_callback, p);
\r
2059 evas_object_propagate_events_set(check, EINA_FALSE);
\r
2061 elm_object_part_content_set(layout, "elm.icon", check);
\r
2062 evas_object_data_set(p->select_before_today_layout, "layout", p->select_before_today_layout);
\r
2064 elm_object_part_text_set(p->select_before_today_layout, "elm.text", C_("IDS_CLD_BODY_ALL_EVENTS_BEFORE_TODAY"));
\r
2066 elm_box_pack_before(p->box, p->select_before_today_layout, p->genlist);
\r
2067 evas_object_show(p->select_before_today_layout);
\r
2072 static Evas_Object* __cal_list_delete_create_layout(Evas_Object *parent, struct appdata *ad)
\r
2076 c_retvm_if(!parent, NULL, "parent is null");
\r
2077 c_retvm_if(!ad, NULL, "ad is null");
\r
2079 cal_list_delete_data *p = NULL;
\r
2082 p = calloc(1, sizeof(cal_list_delete_data));
\r
2083 c_retvm_if(!p, NULL, "p is null");
\r
2085 _name = "list/base/without_searchbar";
\r
2088 p->parent = parent;
\r
2090 ly = cal_util_add_layout(parent, p->name);
\r
2092 ERR("cal_util_add_layout returned null");
\r
2097 evas_object_data_set(ly, "priv", p);
\r
2099 p->bg = cal_util_add_bg(ly,EINA_FALSE);
\r
2101 ERR("cal_util_add_bg returned null");
\r
2102 evas_object_del(ly);
\r
2106 elm_object_part_content_set(ly, "base", p->bg);
\r
2108 elm_object_disabled_set(p->bt_delete, EINA_TRUE);
\r
2110 p->box = elm_box_add(p->ly);
\r
2112 ERR("elm_box_add returned null");
\r
2113 evas_object_del(ly);
\r
2115 ERR("box is null");
\r
2118 evas_object_size_hint_weight_set(p->box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
\r
2120 elm_object_part_content_set(ly, "sw", p->box);
\r
2121 evas_object_show(ly);
\r
2123 evas_object_event_callback_add(ly, EVAS_CALLBACK_DEL, __cal_list_delete_delete_layout, p);
\r
2125 calendar_error_e error = CALENDAR_ERROR_NONE;
\r
2127 error = calendar_db_add_changed_cb(_calendar_event._uri, __cal_list_delete_event_update_noti_received_cb, (void*)p);
\r
2128 c_warn_if(error != CALENDAR_ERROR_NONE, "calendar_db_add_changed_cb() is failed(%x)", error);
\r
2130 error = calendar_db_add_changed_cb(_calendar_todo._uri, __cal_list_delete_event_update_noti_received_cb, (void*)p);
\r
2131 c_warn_if(error != CALENDAR_ERROR_NONE, "calendar_db_add_changed_cb() is failed(%x)", error);
\r
2132 if (error != CALENDAR_ERROR_NONE) {
\r
2133 ERR("calendar_db_add_changed_cb failed");
\r
2134 evas_object_del(ly);
\r
2145 static void __cal_list_delete_popup_response_event_callback(void *data, Evas_Object *obj, void *event_info)
\r
2147 c_retm_if(!data, "data is null");
\r
2148 c_retm_if(!obj, "obj is null");
\r
2150 Evas_Object *popup = data;
\r
2151 Evas_Object *button = obj;
\r
2153 cal_list_delete_data *p = evas_object_data_get(popup, "data");
\r
2154 c_retm_if(!p, "p is null");
\r
2155 c_retm_if(!p->ad, "p->ad is null");
\r
2157 if (NULL != strstr(elm_object_text_get(button), S_("IDS_COM_BODY_DELETE"))) {
\r
2158 cal_list_genlist_item_data *item = NULL;
\r
2159 Elm_Object_Item *it = NULL;
\r
2160 Elm_Object_Item *temp = NULL;
\r
2161 it = elm_genlist_first_item_get(p->genlist);
\r
2163 item = elm_object_item_data_get(it);
\r
2164 temp = elm_genlist_item_next_get(it);
\r
2166 if (item && item->record != NULL && item->checked == EINA_TRUE) {
\r
2168 int index = _calendar_get_record_index( item->record);
\r
2169 _calendar_delete_record_with_index(index);
\r
2171 elm_object_item_del(it);
\r
2176 elm_object_disabled_set(p->bt_delete, EINA_TRUE);
\r
2178 int r = notification_status_message_post(S_("IDS_COM_POP_DELETED"));
\r
2179 c_warn_if(r != NOTIFICATION_ERROR_NONE, "notification_status_message_post() is failed(%d)", r);
\r
2182 evas_object_del(p->popup);
\r
2186 static int __cal_list_delete_check_exsited_repeat_item(cal_list_delete_data *p)
\r
2190 cal_list_genlist_item_data *item = NULL;
\r
2191 Elm_Object_Item *it = NULL;
\r
2193 it = elm_genlist_first_item_get(p->genlist);
\r
2195 item = elm_object_item_data_get(it);
\r
2197 if (item && item->record != NULL && item->checked == EINA_TRUE) {
\r
2198 Eina_Bool is_recurrent = _calendar_is_recurrent_record(item->record);
\r
2202 it = elm_genlist_item_next_get(it);
\r
2208 static void __cal_list_delete_delete_event(cal_list_delete_data* p, Eina_Bool is_delete_all)
\r
2213 cal_list_genlist_item_data *item = NULL;
\r
2214 Elm_Object_Item *it = NULL;
\r
2215 Elm_Object_Item *temp = NULL;
\r
2218 it = elm_genlist_first_item_get(p->genlist);
\r
2220 item = elm_object_item_data_get(it);
\r
2221 temp = elm_genlist_item_next_get(it);
\r
2223 if (item && item->record != NULL && item->checked == EINA_TRUE) {
\r
2225 cid = _calendar_get_record_index(item->record);
\r
2227 if (!is_delete_all) {
\r
2228 _calendar_delete_recurrence_instance(item->record);
\r
2230 _calendar_delete_record_with_index(cid);
\r
2233 elm_object_item_del(it);
\r
2238 int r = notification_status_message_post(S_("IDS_COM_POP_DELETED"));
\r
2239 c_warn_if(r != NOTIFICATION_ERROR_NONE, "notification_status_message_post() is failed(%d)", r);
\r
2241 elm_object_disabled_set(p->bt_delete, EINA_TRUE);
\r
2244 static void __cal_list_delete_delete_popup_response_event_callback(void *data, Evas_Object *obj, void *event_info)
\r
2248 c_retm_if(!data, "data is null");
2249 c_retm_if(!obj, "obj is null");
2251 Evas_Object *popup = data;
2252 Evas_Object *button = obj;
2254 cal_list_delete_data* p = evas_object_data_get(popup, "data");
\r
2255 c_retm_if(!p, "p is null");
2257 if (p->ad->tapbar_focus_view == CV_LIST) {
\r
2258 if (NULL != strstr(elm_object_text_get(button), S_("IDS_COM_BODY_DELETE")))
\r
2259 __cal_list_delete_delete_event(p, EINA_TRUE);
\r
2261 if (!strcmp(elm_object_text_get(button), C_("IDS_CLD_BODY_ONLY_THIS_EVENT")))
\r
2262 __cal_list_delete_delete_event(p, EINA_FALSE);
\r
2263 else if (!strcmp(elm_object_text_get(button), C_("IDS_CLD_POP_ALL_REPETITIVE_EVENTS")))
\r
2264 __cal_list_delete_delete_event(p, EINA_TRUE);
\r
2267 evas_object_del(popup);
2271 static void __cal_list_delete_show_popup(cal_list_delete_data *p, const char *tit)
\r
2273 c_retm_if(!p, "p is NULL.");
2275 void (*callback_func)(void *data, Evas_Object *obj, void *ei) = NULL;
\r
2277 callback_func = __cal_list_delete_delete_popup_response_event_callback;
\r
2279 if (p->ad->tapbar_focus_view != CV_LIST) {
\r
2280 p->popup = cal_util_add_popup(p->ad->win, "verticalbuttonstyle", NULL, tit, callback_func,
\r
2281 p, C_("IDS_CLD_BODY_ONLY_THIS_EVENT"),
\r
2282 C_("IDS_CLD_POP_ALL_REPETITIVE_EVENTS"),
\r
2283 S_("IDS_COM_SK_CANCEL"), NULL);
\r
2285 p->popup = cal_util_add_popup(p->ad->win, NULL, NULL, tit, callback_func,
\r
2286 p, S_("IDS_COM_BODY_DELETE"),
\r
2287 S_("IDS_COM_SK_CANCEL"), NULL);
\r
2291 c_retm_if(!p->popup, "cal_util_add_popup(p->ad->win) returned null");
2293 evas_object_data_set(p->popup, "priv", p);
2296 static void __cal_list_delete_delete_button_callback(void *data, Evas_Object *obj, void *ei)
\r
2302 Evas_Object *ly = data;
\r
2304 cal_list_delete_data *p = CAL_UTIL_GET_PRIV_DATA(ly);
\r
2305 c_retm_if(!p, "p is null");
\r
2306 c_retm_if(!p->ad, "p->ad is null");
\r
2307 c_retm_if(!p->append_list, "p->append_list is null");
\r
2309 if (CAL_LIST_DELETE_MODE_TASK == p->mode) {
\r
2310 p->popup = cal_util_add_popup(p->ad->win, NULL, NULL, S_("IDS_COM_POP_DELETE_Q"), __cal_list_delete_popup_response_event_callback, p,
\r
2311 S_("IDS_COM_BODY_DELETE"),S_("IDS_COM_SK_CANCEL"), NULL);
\r
2312 } else if (__cal_list_delete_check_exsited_repeat_item(p)) {
\r
2313 if (p->ad->tapbar_focus_view != CV_LIST) {
\r
2314 __cal_list_delete_show_popup(p, C_("IDS_CLD_OPT_DELETE_EVENT"));
\r
2317 __cal_list_delete_show_popup(p, "If you delete this repeated event, all related events will also be deleted. Continue?");
\r
2320 p->popup = cal_util_add_popup(p->ad->win, NULL, NULL, S_("IDS_COM_POP_DELETE_Q"), __cal_list_delete_popup_response_event_callback, p,
\r
2321 S_("IDS_COM_BODY_DELETE"),S_("IDS_COM_SK_CANCEL"), NULL);
\r
2325 static void __cal_list_delete_back_btn_click_callback(void *data, Evas_Object *obj, void *event_info)
\r
2329 c_retm_if(!data, "data is null");
2331 struct appdata* ad = (struct appdata*)data;
2333 elm_naviframe_item_pop(ad->naviframe);
\r
2336 Evas_Object *cal_list_delete_view_create(Evas_Object *parent, struct appdata *ad)
\r
2340 c_retvm_if(!ad || !parent, NULL, "Input parameter is null");
\r
2344 if (ad->current_view == CV_DELETE)
\r
2347 ad->current_view = CV_DELETE;
\r
2349 ly = __cal_list_delete_create_layout(parent,ad);
\r
2350 c_retvm_if(!ly, NULL, "__cal_list_delete_create_layout(parent,ad) is failed");
\r
2352 cal_list_delete_data * p = (cal_list_delete_data *)CAL_UTIL_GET_PRIV_DATA(ly);
\r
2353 c_retvm_if(!p, NULL, "p is null");
\r
2355 p->mode = CAL_LIST_DELETE_MODE_NORMAL;
\r
2358 if (NULL != ad->bt_view)
\r
2359 p->mode = CAL_LIST_DELETE_MODE_TASK;
\r
2361 Evas_Object *back_button = elm_button_add(ad->naviframe);
\r
2362 c_retv_if(!back_button, NULL);
\r
2364 evas_object_smart_callback_add(back_button, "clicked", __cal_list_delete_back_btn_click_callback, ad);
\r
2366 elm_object_style_set(back_button, "naviframe/back_btn/default");
\r
2370 if (p->mode == CAL_LIST_DELETE_MODE_TASK) {
\r
2371 p->navi_item = elm_naviframe_item_push(ad->naviframe, C_("IDS_CLD_OPT_DELETE_TASK"), back_button, NULL, ly, NULL);
\r
2372 } else if (p->mode == CAL_LIST_DELETE_MODE_NORMAL) {
\r
2373 p->navi_item = elm_naviframe_item_push(ad->naviframe, C_("IDS_CLD_BUTTON_DELETE"), back_button, NULL, ly, NULL);
\r
2375 if (!p->navi_item)
\r
2377 ERR("elm_naviframe_item_push is failed");
\r
2378 evas_object_del(ly);
\r
2382 p->bt_delete = cal_util_add_toolbar_button(ad->naviframe, "toolbar_button1", S_("IDS_COM_BODY_DELETE"), __cal_list_delete_delete_button_callback, ly);
\r
2384 cal_lang_manager_add_callback(__cal_list_delete_text_refresh_callback, p);
\r
2391 void cal_list_delete_update_view(Evas_Object *ly)
\r
2395 cal_list_delete_data *p;
\r
2397 c_retm_if(!ly, "ly is null.");
\r
2399 p = CAL_UTIL_GET_PRIV_DATA(ly);
\r
2400 if (!p || CAL_STRCMP(p->name, _name)) {
\r
2401 ERR("Invalid object");
\r
2405 struct appdata *ad = p->ad;
\r
2408 __cal_list_delete_update_list(p);
\r
2412 Evas_Object* cal_list_delete_view_create_more_events(Evas_Object *parent, struct appdata *ad, int idx)
\r
2414 c_retvm_if(!parent, NULL, "parent is null.");
\r
2415 c_retvm_if(!ad, NULL, "ad is null.");
\r
2416 Evas_Object *ly = NULL;
\r
2417 cal_list_delete_data *p = NULL;
\r
2419 ly = cal_list_delete_view_create(parent, ad);
\r
2420 c_retvm_if(!ly, NULL, "ly is null.");
\r
2422 p = CAL_UTIL_GET_PRIV_DATA(ly);
\r
2423 c_retvm_if(!p, NULL, "p is null.");
\r
2425 p->mode = CAL_LIST_DELETE_MODE_DAY;
\r
2426 p->more_idx = idx;
\r