d3bc181fcbaea0da1eed7540e9370a64e0f96e48
[apps/core/preloaded/calendar.git] / src / list-delete.c
1 /*\r
2   *\r
3   *  Copyright 2012  Samsung Electronics Co., Ltd\r
4   *\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
8   *\r
9   *       http://floralicense.org/license/\r
10   *\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
16   */\r
17 \r
18 #include "cld.h"\r
19 #include "cld-images.h"\r
20 #include "list-base.h"\r
21 \r
22 static const char *_name;\r
23 \r
24 ///TODO: get full path from caller\r
25 #define VFILE_PATH "/opt/usr/media/Others"\r
26 \r
27 static Elm_Entry_Filter_Limit_Size _limit_20char = {\r
28        .max_char_count = 20,\r
29 };\r
30 \r
31 typedef enum {\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
36 \r
37 #define MAX_FETCH_COUNT 10\r
38 \r
39 #define ACCOUNT_LABLE_STRING_LENGTH 128\r
40 \r
41 typedef struct {\r
42         const char *name;\r
43         struct appdata *ad;\r
44         Evas_Object *parent;\r
45         Evas_Object *ly;\r
46         Evas_Object *no_content;\r
47         Evas_Object *bg;\r
48 \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
55         Evas_Object *box;\r
56         Evas_Object *popup;\r
57 \r
58         int totalcnt;\r
59         int offset;\r
60         Ecore_Idler* idler;\r
61         int num_check;\r
62         Evas_Object * selection_info;\r
63 \r
64         int genlist_count;\r
65         Elm_Object_Item* navi_item;\r
66 \r
67         int more_idx;\r
68 \r
69         cal_list_delete_mode mode;\r
70 \r
71         Eina_List *append_list;\r
72         int appended_event_count;
73
74         Eina_List *prepend_list;
75         int prepended_event_count;\r
76 \r
77         struct tm tm_start;\r
78         struct tm tm_end;\r
79 \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
83 \r
84         struct tm last_itc_h; // To prevent duplicated cal_list_itc_h, in add events & add events idler\r
85 \r
86         Elm_Object_Item *load_more_top;\r
87         Elm_Object_Item *load_more_bottom;\r
88 \r
89         Eina_List *repeat_list;\r
90 \r
91         Eina_Bool is_today_has_instance;\r
92 \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
99 \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
116 \r
117 \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
122 };\r
123 \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
129 };
130
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
136 };\r
137 \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
143 };\r
144 \r
145 static _calendar_book_color calendar_color;\r
146 \r
147 extern Elm_Genlist_Item_Class cal_list_today_group_itc_h;\r
148 \r
149 //TODO\r
150 #define ELM_GENLIST_ITEM_GROUP (1<<1)\r
151 \r
152 static char* __cal_list_delete_get_genlist_task_item_label(void *data, Evas_Object *obj, const char *part)\r
153 {\r
154         c_retv_if(!data, NULL);\r
155         c_retv_if(!obj, NULL);\r
156         c_retv_if(!part, NULL);\r
157 \r
158         char *str = NULL;\r
159         char *tmp = NULL;\r
160 \r
161         cal_list_genlist_item_data *item_data = data;\r
162 \r
163         cal_list_delete_data *p = CAL_UTIL_GET_PRIV_DATA(obj);\r
164         c_retv_if(!p, NULL);\r
165 \r
166         if (!item_data || !item_data->record)\r
167                 return NULL;\r
168 \r
169         calendar_record_h record = item_data->record;\r
170         c_retv_if(!record, NULL);\r
171 \r
172         Eina_Bool is_done = EINA_FALSE;\r
173         calendar_error_e error = CALENDAR_ERROR_NONE;\r
174 \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
178 \r
179         if (CALENDAR_TODO_STATUS_COMPLETED == todo_status) {\r
180                 is_done = EINA_TRUE;\r
181         } else {\r
182                 is_done = EINA_FALSE;\r
183         }\r
184 \r
185         if (!CAL_STRCMP(part, "elm.textblock.1")) {\r
186                 if (is_done) {\r
187                         tmp = _calendar_get_summary(record);\r
188 \r
189                         char *text = calloc(1, CAL_STRLEN(tmp)+500);\r
190                         if (!text) {\r
191                                 ERR("text is null");\r
192                                 free(tmp);\r
193                                 return NULL;\r
194                         }\r
195 \r
196                         sprintf(text, "<strikethrough=on strikethrough_color=#D1D1D1>%s</strikethrough>", tmp);\r
197 \r
198                         free(tmp);\r
199                         tmp = NULL;\r
200                         return text;\r
201                 }\r
202                 return NULL;\r
203         } else if (!CAL_STRCMP(part, "elm.text.1")) {\r
204                 if (!is_done) {\r
205                         str = _calendar_get_summary(record);\r
206 \r
207                         if (item_data->color_str) {\r
208                                 free(item_data->color_str);\r
209                                 item_data->color_str = NULL;\r
210                         }\r
211                         return str;\r
212                 }\r
213                 return NULL;\r
214         } else if (!CAL_STRCMP(part, "elm.text.3")) {\r
215                 if (is_done)\r
216                         return NULL;\r
217 \r
218                 return _calendar_get_location(record);\r
219 \r
220         } else if (!CAL_STRCMP(part, "elm.textblock.3")) {\r
221                 if (!is_done)\r
222                         return NULL;\r
223 \r
224                 return _calendar_get_location(record);\r
225 \r
226         } else if (!CAL_STRCMP(part, "elm.text.2")) {\r
227                 if (is_done)\r
228                         return NULL;\r
229 \r
230                 return _calendar_get_time_str_for_genlist(record);\r
231         } else if (!CAL_STRCMP(part, "elm.textblock.2")) {\r
232                 if (!is_done)\r
233                         return NULL;\r
234 \r
235                 return _calendar_get_time_str_for_genlist(record);\r
236         }\r
237 \r
238         return NULL;\r
239 }\r
240 \r
241 static Evas_Object *__cal_list_delete_get_genlist_task_item_icon(void *data, Evas_Object *obj, const char *part)\r
242 {\r
243         c_retv_if(!data, NULL);\r
244 \r
245         cal_list_delete_data *p = CAL_UTIL_GET_PRIV_DATA(obj);\r
246         c_retv_if(!p, NULL);\r
247 \r
248         cal_list_genlist_item_data *item_data = data;\r
249 \r
250         Evas_Object *icon = NULL;\r
251 \r
252         calendar_record_h record = item_data->record;\r
253         c_retv_if(!record, NULL);\r
254 \r
255         if (!CAL_STRCMP(part, "elm.swallow.colorbar")) {\r
256 \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
259 \r
260                 _calendar_get_calendar_color(record, &calendar_color);\r
261 \r
262                 evas_object_color_set(icon, calendar_color.red, calendar_color.green, calendar_color.blue, calendar_color.alpha);\r
263 \r
264                 return icon;\r
265         }\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
271 \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
282                 }\r
283 \r
284                 return icon;\r
285 \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
289 \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
294 \r
295                 return icon;\r
296         }\r
297 \r
298         return NULL;\r
299 }\r
300 \r
301 \r
302 static char* __cal_list_delete_share_genlist_item_label(void *data, Evas_Object *obj, const char *part)\r
303 {
304         c_retv_if(!data || !obj || !part, NULL);\r
305 \r
306         cal_list_genlist_item_data *item_data = data;\r
307 \r
308         if (!CAL_STRCMP(part, "elm.text")) {\r
309                 return strdup(item_data->label);\r
310         }
311
312         return NULL;
313 }\r
314 \r
315 static void __cal_list_delete_delete_genlist_item(void *data, Evas_Object *obj)\r
316 {
317         c_retm_if(!data, "data is null.");
318         cal_list_genlist_item_data *item_data = data;\r
319
320         if (item_data->color_str) {
321                 free(item_data->color_str);
322                 item_data->color_str = NULL;
323         }
324 \r
325         if (item_data->label) {\r
326                 free(item_data->label);\r
327                 item_data->label = NULL;\r
328         }\r
329 \r
330         free(item_data);
331 }
332 \r
333 static char* __cal_list_delete_get_genlist_header_item_label(void *data, Evas_Object *obj, const char *part)\r
334 {
335         c_retv_if(!data, NULL);
336
337         char buf[128];
338         cal_list_genlist_item_data *item_data = data;\r
339         const struct tm *tm = item_data->tm;
340
341         if (!CAL_STRCMP(part, "elm.text")) {
342                 if (!tm) {
343                         return strdup(C_("IDS_CLD_BODY_REPEATING_EVENT"));
344                 } else {
345                         cal_util_get_time_text(buf, sizeof(buf), CAL_UTIL_DATE_FORMAT_1, NULL, tm);\r
346                         return strdup(buf);
347                 }
348         }
349         return NULL;
350 }\r
351 \r
352 static void __cal_list_delete_delete_genlist_header_item(void *data, Evas_Object *obj)\r
353 {
354         CAL_FN_START;
355
356         c_retm_if(!data, "data is null.");
357
358         cal_list_genlist_item_data *item_data = data;\r
359
360         free(item_data->tm);
361         free(item_data);
362 }\r
363 \r
364 static void __cal_list_delete_update_small_info(cal_list_delete_data *p, int count)\r
365 {\r
366         c_ret_if(!p);\r
367         c_ret_if(!p->ly);\r
368 \r
369         if (!count) {\r
370                 cal_util_hide_small_information(p->ly);\r
371                 elm_object_disabled_set(p->bt_delete, EINA_TRUE);\r
372                 return;
373         }\r
374
375         char lable_str[128] = { '\0'};\r
376 \r
377         snprintf(lable_str, sizeof(lable_str), "%s (%d)", S_("IDS_COM_POP_SELECTED"), count);\r
378
379         cal_util_show_small_information(p->ly, lable_str, 0.0);\r
380 }\r
381 \r
382 static void __cal_list_delete_genlist_item_check_changed_callback(void *data, Evas_Object *obj, void *event_info)\r
383 {\r
384         c_retm_if(!data, "data is null");\r
385         cal_list_genlist_item_data *item_data = data;\r
386 \r
387         Elm_Object_Item *it;\r
388         Eina_List* realized_list, *l;\r
389 \r
390         cal_list_delete_data* p = CAL_UTIL_GET_PRIV_DATA(obj);\r
391         c_retm_if(!p, "p is null");\r
392 \r
393         if (p->genlist_count <= 0) {\r
394                 return;\r
395         }\r
396 \r
397         item_data->checked = elm_check_state_get(obj);\r
398         if (item_data->checked) {\r
399                 p->num_check++;\r
400                 if (item_data->is_before_today) {\r
401                         p->before_today_num_checked++;\r
402                 }\r
403         } else {\r
404                 p->num_check--;\r
405                 if (item_data->is_before_today) {\r
406                         p->before_today_num_checked--;\r
407                 }\r
408         }\r
409 \r
410         if (item_data->checked || 0 < p->num_check)\r
411                 elm_object_disabled_set(p->bt_delete, EINA_FALSE);\r
412         else\r
413                 elm_object_disabled_set(p->bt_delete, EINA_TRUE);\r
414 \r
415         realized_list = elm_genlist_realized_items_get(p->genlist);\r
416         EINA_LIST_FOREACH(realized_list, l, it) {\r
417                 if (it)\r
418                         elm_genlist_item_update(it);\r
419         }\r
420 \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
424         } else {\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
427         }\r
428 \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
431         } else {\r
432                 elm_check_state_set(p->select_before_today_check, EINA_FALSE);\r
433         }\r
434 }\r
435 \r
436 static Evas_Object *__cal_list_delete_get_genlist_item_icon(void *data, Evas_Object *obj, const char *part)\r
437 {
438         c_retv_if(!data, NULL);
439
440         cal_list_delete_data *p = CAL_UTIL_GET_PRIV_DATA(obj);\r
441         c_retv_if(!p, NULL);
442
443         cal_list_genlist_item_data *item_data = data;\r
444 \r
445         Evas_Object *icon = NULL;
446
447         calendar_record_h record = item_data->record;
448
449         if (!CAL_STRCMP(part, "elm.swallow.colorbar")) {
450 \r
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
453 \r
454                 _calendar_get_calendar_color(record, &calendar_color);\r
455 \r
456                 evas_object_color_set(icon, calendar_color.red, calendar_color.green, calendar_color.blue, calendar_color.alpha);\r
457 \r
458                 return icon;\r
459
460
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
464 \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
469 \r
470                 return icon;\r
471         }\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
475                                 return NULL;\r
476 \r
477                         icon = elm_icon_add(obj);\r
478                         c_retv_if(!icon, NULL);
479 \r
480                         int r = elm_icon_file_set(icon, CAL_IMAGES_EDJ, CAL_IMAGES_ALARM);\r
481                         c_retv_if(!r, NULL);
482 \r
483                         return icon;\r
484                 }
485         }\r
486         else if (!CAL_STRCMP(part, "elm.icon.2")) {
487
488                 if ( CAL_LIST_DELETE_MODE_NORMAL == p->mode) {\r
489                         if (!_calendar_is_recurrent_record(record))\r
490                                 return NULL;\r
491 \r
492                         icon = elm_icon_add(obj);\r
493                         c_retv_if(!icon, NULL);
494 \r
495                         int r = elm_icon_file_set(icon, CAL_IMAGES_EDJ, CAL_IMAGES_REPEAT);\r
496                         c_retv_if(!r, NULL);
497 \r
498                         return icon;\r
499                 }
500         }\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
506 \r
507                                 int r = elm_icon_file_set(icon, CAL_IMAGES_EDJ, CAL_IMAGES_FACEBOOK);\r
508                                 c_retv_if(!r, NULL);\r
509 \r
510                                 return icon;\r
511                         }\r
512                 }\r
513         }\r
514
515         return NULL;
516 }
517 \r
518 static void __cal_list_delete_remove_db_changed_callback(cal_list_delete_data *p)\r
519 {\r
520         CAL_FN_START;\r
521 \r
522         c_ret_if(!p);\r
523 \r
524         calendar_error_e error = CALENDAR_ERROR_NONE;\r
525 \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
528 \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
531 \r
532         CAL_FN_END;\r
533 }\r
534 \r
535 static void __cal_list_delete_text_refresh_callback(void *data)\r
536 {\r
537         CAL_FN_START;\r
538 \r
539         c_retm_if(!data, "data is null");\r
540         cal_list_delete_data *p = data;\r
541 \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
544         else\r
545                 elm_object_item_part_text_set(p->navi_item, "default", C_("IDS_CLD_BUTTON_DELETE"));\r
546 \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
559         }\r
560 \r
561         elm_object_text_set(p->bt_delete, S_("IDS_COM_BODY_DELETE"));\r
562 \r
563         elm_genlist_realized_items_update(p->genlist);\r
564 }\r
565 \r
566 static void __cal_list_delete_delete_layout(void *data, Evas *e, Evas_Object *obj, void *ei)\r
567 {\r
568         CAL_FN_START;\r
569 \r
570         c_retm_if(!data, "data is null");\r
571 \r
572         cal_list_delete_data *p = data;\r
573 \r
574         p->ad->current_view = p->ad->tapbar_focus_view;\r
575 \r
576         if (p->idler) {\r
577                 ecore_idler_del(p->idler);\r
578                 p->idler = NULL;\r
579         }\r
580 \r
581         __cal_list_delete_remove_db_changed_callback(p);\r
582
583         _calendar_free_record_list(&p->append_list);\r
584 \r
585         _calendar_free_record_list(&p->prepend_list);\r
586 \r
587         if (p->box) {\r
588                 elm_box_clear(p->box);\r
589         }\r
590 \r
591 \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
595         }\r
596 \r
597         if (p->popup) {\r
598                 evas_object_del(p->popup);\r
599         }\r
600 \r
601         cal_lang_manager_remove_callback(__cal_list_delete_text_refresh_callback, p);\r
602 \r
603         free(p);\r
604 \r
605         CAL_FN_END;\r
606 }\r
607 \r
608 static char* __cal_list_delete_get_genlist_item_label(void *data, Evas_Object *obj, const char *part)\r
609 {
610         c_retv_if(!data, NULL);
611         c_retv_if(!obj, NULL);
612         c_retv_if(!part, NULL);
613
614         char *str = NULL;
615
616         cal_list_genlist_item_data *item_data = data;\r
617
618         cal_list_delete_data *p = CAL_UTIL_GET_PRIV_DATA(obj);\r
619         c_retv_if(!p, NULL);
620
621         if (!item_data || !item_data->record)
622                 return NULL;
623
624         calendar_record_h record = item_data->record;
625         c_retv_if(!record, NULL);
626
627         if (!CAL_STRCMP(part, "elm.text.1")) {
628
629                 if (item_data->color_str) {
630                         free(item_data->color_str);
631                         item_data->color_str = NULL;
632                 }
633 \r
634                 str = _calendar_get_summary(record);\r
635                 return str;\r
636         } else if (!CAL_STRCMP(part, "elm.text.3")) {
637
638                 return _calendar_get_location(record);\r
639 \r
640         } else if (!CAL_STRCMP(part, "elm.text.2")) {
641
642                 return _calendar_get_time_str_for_genlist(record);\r
643
644         } else if (!CAL_STRCMP(part, "elm.slide.text.1")) {
645
646                 return _calendar_get_summary(record);\r
647         }\r
648
649         return NULL;
650 }
651 \r
652 static void __cal_list_delete_genlist_item_select_callback(void *data, Evas_Object *obj, void *event_info)\r
653 {\r
654         c_ret_if(!data);\r
655         c_ret_if(!obj);\r
656 \r
657         Eina_List* realized_list, *l;\r
658         Elm_Object_Item* it;\r
659         cal_list_genlist_item_data* item = data;\r
660 \r
661         cal_list_delete_data *p = CAL_UTIL_GET_PRIV_DATA(obj);\r
662         c_ret_if(!p);\r
663 \r
664         if (p->genlist_count <= 0)\r
665                 return;\r
666 \r
667         item->checked = !(item->checked);\r
668         if (item->checked) {\r
669                 p->num_check++;\r
670                 if (item->is_before_today) {\r
671                         p->before_today_num_checked++;\r
672                 }\r
673         } else {\r
674                 p->num_check--;\r
675                 if (item->is_before_today) {\r
676                         p->before_today_num_checked--;\r
677                 }\r
678         }\r
679 \r
680         if (item->checked || 0 < p->num_check) {\r
681                 elm_object_disabled_set(p->bt_delete, EINA_FALSE);\r
682         }\r
683         else if (0 >= p->num_check) {\r
684                 elm_object_disabled_set(p->bt_delete, EINA_TRUE);\r
685         }\r
686 \r
687         it = elm_genlist_selected_item_get(obj);\r
688         if (it)\r
689                 elm_genlist_item_selected_set(it, EINA_FALSE);\r
690 \r
691 \r
692         realized_list = elm_genlist_realized_items_get(obj);\r
693 \r
694         EINA_LIST_FOREACH(realized_list, l, it) {\r
695                 if (it)\r
696                         elm_genlist_item_update(it);\r
697         }\r
698 \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
702         } else {\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
705         }\r
706 \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
709         } else {\r
710                 elm_check_state_set(p->select_before_today_check, EINA_FALSE);\r
711         }\r
712 \r
713 }\r
714 \r
715 static void __cal_list_delete_append_list_with_iter(Eina_List **event_list, calendar_list_h list)\r
716 {\r
717         c_ret_if(!event_list);\r
718         c_ret_if(!list);\r
719 \r
720         calendar_record_h record = NULL;\r
721 \r
722         int i = 0;\r
723         int count = 0;\r
724         calendar_error_e error = CALENDAR_ERROR_NONE;\r
725 \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
728 \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
732 \r
733                 *event_list = eina_list_append(*event_list, record);\r
734 \r
735                 calendar_list_next(list);\r
736         }\r
737 }\r
738 \r
739 static void __cal_list_delete_get_events(cal_list_delete_data *p)\r
740 {
741         CAL_FN_START;
742
743         c_ret_if(!p);
744 \r
745         struct appdata *ad = p->ad;
746         c_ret_if(!ad);
747 \r
748         struct tm before_today_tm = {0};\r
749
750         cal_util_update_tm_month(&before_today_tm, 1);
751         cal_util_update_tm_day(&before_today_tm, -1);\r
752 \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
756 \r
757         p->append_list = eina_list_merge(p->append_list, todo_list);\r
758 \r
759         CAL_FN_END;\r
760 }
761 \r
762 static void __cal_list_delete_get_events_with_day(cal_list_delete_data *p)\r
763 {
764         CAL_FN_START;
765
766         c_ret_if(!p);
767
768         struct tm tm_start = p->ad->base_tm;
769         tm_start.tm_hour = 0;
770         tm_start.tm_min = 0;
771         tm_start.tm_sec = 0;
772
773         struct tm tm_end = tm_start;
774         tm_end.tm_hour = 23;
775         tm_end.tm_min = 59;
776         tm_end.tm_sec = 59;
777 \r
778         p->append_list = _calendar_get_all_instance_list(&tm_start, &tm_end);\r
779 \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
781
782         todo_list = eina_list_reverse(todo_list);
783 \r
784         p->append_list = eina_list_merge(p->append_list, todo_list);\r
785
786         CAL_FN_END;
787 }\r
788 \r
789 static void __cal_list_delete_get_events_with_year(cal_list_delete_data *p)\r
790 {
791         CAL_FN_START;
792
793         c_ret_if(!p);\r
794 \r
795         struct tm tm_start;\r
796         struct tm tm_end;\r
797 \r
798         time_t start;\r
799         time_t end;\r
800 \r
801         cal_util_get_year_time_t(&p->ad->base_tm, &start, &end);\r
802 \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
805
806         p->append_list = _calendar_get_all_instance_list(&tm_start, &tm_end);\r
807 \r
808
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
810
811         todo_list = eina_list_reverse(todo_list);
812 \r
813         p->append_list = eina_list_merge(p->append_list, todo_list);\r
814
815         CAL_FN_END;
816 }\r
817 \r
818 static void __cal_list_delete_get_events_with_month(cal_list_delete_data *p)\r
819 {
820         CAL_FN_START;
821
822         c_ret_if(!p);\r
823 \r
824         struct tm tm_start;\r
825         struct tm tm_end;\r
826 \r
827         time_t start;\r
828         time_t end;\r
829 \r
830         cal_util_get_month_time_t(&p->ad->base_tm, &start, &end);\r
831 \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
834
835         p->append_list = _calendar_get_all_instance_list(&tm_start, &tm_end);\r
836 \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
838
839         todo_list = eina_list_reverse(todo_list);
840 \r
841         p->append_list = eina_list_merge(p->append_list, todo_list);\r
842
843         CAL_FN_END;
844 }\r
845 \r
846 static void __cal_list_delete_get_events_with_week(cal_list_delete_data *p)\r
847 {
848         CAL_FN_START;
849
850         c_ret_if(!p);\r
851 \r
852         struct tm tm_start;\r
853         struct tm tm_end;\r
854 \r
855         time_t start;\r
856         time_t end;\r
857 \r
858         cal_util_get_week_time_t(&p->ad->base_tm, &start, &end, 0);\r
859 \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
862
863         p->append_list = _calendar_get_all_instance_list(&tm_start, &tm_end);\r
864 \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
866
867         todo_list = eina_list_reverse(todo_list);
868 \r
869         p->append_list = eina_list_merge(p->append_list, todo_list);\r
870
871         CAL_FN_END;
872 }\r
873 \r
874 static void __cal_list_delete_get_todo_with_search(cal_list_delete_data *p)\r
875 {
876         CAL_FN_START;
877
878         c_ret_if(!p);
879
880         __cal_list_delete_get_data_with_search(p, _calendar_search_task);\r
881
882         CAL_FN_END;
883 }\r
884 \r
885 static void __cal_list_delete_get_task_list(cal_list_delete_data *p)\r
886 {
887         CAL_FN_START;
888
889         c_ret_if(!p);
890
891         struct appdata *ad = p->ad;
892         c_ret_if(!ad);
893
894         p->tm_start.tm_year = 70;
895         p->tm_end.tm_year = 137;
896
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
898
899         CAL_FN_END;
900 }\r
901 \r
902 static void __cal_list_delete_update_events(cal_list_delete_data *p)\r
903 {
904         c_ret_if(!p);
905
906         _calendar_free_record_list(&p->prepend_list);\r
907         _calendar_free_record_list(&p->append_list);\r
908
909         struct appdata *ad = p->ad;
910         c_ret_if(!ad);
911
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;
918
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;
925
926         if (ad->tapbar_focus_view== CV_LIST) {\r
927                 __cal_list_delete_get_events(p);\r
928 \r
929         } else if (ad->tapbar_focus_view == CV_YEAR) {\r
930                 __cal_list_delete_get_events_with_year(p);\r
931 \r
932         } else if (ad->tapbar_focus_view == CV_MONTH) {\r
933                 __cal_list_delete_get_events_with_month(p);\r
934 \r
935         } else if (ad->tapbar_focus_view == CV_WEEK) {\r
936                 __cal_list_delete_get_events_with_week(p);\r
937 \r
938         } else if (ad->tapbar_focus_view == CV_DAY) {\r
939                 __cal_list_delete_get_events_with_day(p);\r
940 \r
941         } else if (ad->tapbar_focus_view == CV_TODO) {\r
942                 __cal_list_delete_get_task_list(p);\r
943 \r
944         }\r
945 \r
946 }\r
947 \r
948 static void __cal_list_delete_delete_idler(cal_list_delete_data *p)\r
949 {
950         CAL_FN_START;
951
952         c_ret_if(!p);
953
954         if (!p->idler)
955                 return;
956
957         ecore_idler_del(p->idler);
958
959         p->idler = NULL;
960 }\r
961 \r
962 static inline void __cal_list_delete_delete_select_all(cal_list_delete_data *p)\r
963 {\r
964         c_ret_if(!p);\r
965 \r
966         if (p->select_all_layout) {\r
967                 evas_object_del(p->select_all_layout);\r
968                 p->select_all_layout = NULL;\r
969         }\r
970 }\r
971 \r
972 static inline void __cal_list_delete_delete_select_before_today(cal_list_delete_data *p)\r
973 {\r
974         c_ret_if(!p);\r
975 \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
979         }\r
980 }
981 \r
982 static void __cal_list_delete_delete_no_contents(cal_list_delete_data *p)\r
983 {
984         CAL_FN_START;
985
986         c_ret_if(!p);\r
987         c_ret_if(!p->box);\r
988         c_ret_if(!p->no_content);\r
989
990         elm_object_part_content_unset(p->ly, "sw");\r
991
992         evas_object_del(p->no_content);\r
993
994         p->no_content = NULL;\r
995 \r
996         elm_object_part_content_set(p->ly, "sw", p->box);\r
997         evas_object_show(p->box);\r
998 }\r
999 \r
1000 static void __cal_list_delete_create_genlist(cal_list_delete_data *p)\r
1001 {
1002         CAL_FN_START;
1003
1004         c_ret_if(!p);
1005
1006         if (p->genlist)
1007                 return;
1008
1009         Evas_Object *genlist = elm_genlist_add(p->ly);\r
1010         c_ret_if(!genlist);
1011 \r
1012         p->genlist = genlist;\r
1013 \r
1014 \r
1015         elm_genlist_decorate_mode_set(p->genlist, EINA_TRUE);\r
1016         evas_object_data_set(p->genlist, "priv", p);\r
1017 \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
1020 \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
1024 }
1025 \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)
1028 {
1029         CAL_FN_START;
1030
1031         c_retv_if(!genlist, NULL);
1032
1033         cal_list_delete_data *p = CAL_UTIL_GET_PRIV_DATA(genlist);\r
1034         c_retvm_if(!p, NULL, "p is null.");
1035
1036         if (p->mode == CAL_LIST_DELETE_MODE_DAY)\r
1037                 return NULL;
1038
1039         struct tm *t;\r
1040 \r
1041         if (tm) {\r
1042                 t = calloc(1, sizeof(struct tm));
1043                 c_retv_if(!t, NULL);\r
1044
1045                 *t = *tm;
1046         } else {\r
1047                 t = NULL;\r
1048         }\r
1049
1050         cal_list_genlist_item_data *item_data = calloc(1, sizeof(cal_list_genlist_item_data));\r
1051
1052         item_data->tm = t;
1053         item_data->checked = EINA_FALSE;\r
1054         item_data->todo_group_type = type;\r
1055
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
1059                 free(p);\r
1060                 return NULL;\r
1061         }\r
1062
1063         elm_genlist_item_select_mode_set(item_data->it, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
1064
1065         return item_data->it;
1066 }
1067 \r
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)
1071 {
1072         CAL_FN_START;
1073
1074         cal_list_delete_data *p = CAL_UTIL_GET_PRIV_DATA(genlist);\r
1075         c_retv_if(!p, NULL);
1076
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
1079 \r
1080         item_data->record = record;\r
1081         item_data->is_before_today = is_before_today;\r
1082         item_data->checked = EINA_FALSE;\r
1083 \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
1087                 free(p);\r
1088                 return NULL;\r
1089         }
1090
1091         return item_data->it;
1092 }\r
1093 \r
1094 static void __cal_list_delete_append_event_to_genlist(cal_list_delete_data *p)\r
1095 {
1096         CAL_FN_START;
1097
1098         c_ret_if(!p);
1099
1100         struct appdata* ad = p->ad;
1101         c_ret_if(!ad);
1102
1103         Elm_Object_Item *it = NULL;
1104         long long int time_previous = 0;
1105 \r
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
1111
1112         if (0 < p->appended_event_count) {
1113                 list = eina_list_nth_list(p->append_list, p->appended_event_count - 1);
1114                 c_ret_if(!list);
1115
1116                 record = eina_list_data_get(list);
1117                 c_ret_if(!record);
1118 \r
1119                 Eina_Bool is_todo = EINA_FALSE;\r
1120                 if (_calendar_is_task_record(record)) {\r
1121                         is_todo = EINA_TRUE;\r
1122                 } else {\r
1123                         is_todo = EINA_FALSE;\r
1124                 }\r
1125 \r
1126                 if (is_todo) {\r
1127                         _calendar_get_end_time(record, &end_time);\r
1128 \r
1129                         cal_util_convert_lli_to_tm(NULL, end_time.time.utime, &tm_current);\r
1130                 } else {\r
1131                         calendar_time_s start_time = {0};\r
1132                         _calendar_get_start_time(record, &start_time);\r
1133 \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;
1138                         } else {
1139                                 cal_util_convert_lli_to_tm(NULL, start_time.time.utime, &tm_current);
1140                         }\r
1141                 }
1142
1143                 time_previous = (tm_current.tm_year << 9) | (tm_current.tm_mon << 5) | tm_current.tm_mday;
1144
1145                 list = eina_list_next(list);
1146                 c_ret_if(!list);
1147         }
1148         else
1149                 list = p->append_list;
1150
1151         EINA_LIST_FOREACH(list, l, record) {\r
1152
1153                 if (!record)
1154                         continue;
1155
1156                 tm_current = p->ad->base_tm;\r
1157
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
1163                 } else {\r
1164                         is_todo = EINA_FALSE;\r
1165                 }\r
1166 \r
1167                 if (is_todo) {\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
1170 \r
1171                         if (tm_current.tm_mday == 0)\r
1172                                 continue;\r
1173                 } else {\r
1174                         if (ad->tapbar_focus_view == CV_LIST) {\r
1175                                 calendar_record_h original_record = NULL;\r
1176 \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
1181                                 }\r
1182 \r
1183                                 if (!original_record) {\r
1184                                         original_record = record;\r
1185                                 }\r
1186 \r
1187                                 if (_calendar_is_recurrent_record(original_record)) {\r
1188                                         Eina_List *ll;\r
1189                                         void *id;\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
1193                                                         break;\r
1194                                                 }\r
1195                                         }\r
1196 \r
1197                                         if (is_repeat_event) {\r
1198                                                 continue;\r
1199                                         } else {\r
1200                                                 p->repeat_list = eina_list_append(p->repeat_list, (void *)original_event_id);\r
1201                                         }\r
1202                                 }\r
1203                         }\r
1204                         calendar_time_s start_time = {0};\r
1205                         _calendar_get_end_time(record, &start_time);\r
1206 \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;
1211                         }\r
1212                         else
1213                                 cal_util_convert_lli_to_tm(NULL, start_time.time.utime, &tm_current);
1214                 }\r
1215
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
1221                 }\r
1222 \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
1228                                 } else {\r
1229                                         it = __cal_list_delete_append_genlist_group_item(p->genlist, &cal_list_delete_itc_h, &tm_current, CAL_NOT_TASK);\r
1230                                 }\r
1231 \r
1232                                 time_previous = time_current;\r
1233 \r
1234                                 if (time_today == time_current) {\r
1235                                         ad->today_item = it;\r
1236                                         p->is_today_added = EINA_TRUE;\r
1237                                 }\r
1238 \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
1243                                         }\r
1244                                         else\r
1245                                                 ad->today_item = it;\r
1246                                 }\r
1247 \r
1248                                 p->last_itc_h = tm_current;\r
1249                         }\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
1254                                 }\r
1255                         } else {\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
1262 \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
1270 \r
1271                                 long long int diff = due_date - today;\r
1272 \r
1273                                 if (diff < 0) {\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
1277                                         }\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
1282                                         }\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
1287                                         }\r
1288                                 } else {\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
1292                                         }\r
1293                                 }\r
1294                         }\r
1295                 }\r
1296 \r
1297                 switch (p->mode) {
1298                 case CAL_LIST_DELETE_MODE_NORMAL:\r
1299                         if (is_todo) {\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
1301                         } else {\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
1303                         }\r
1304                         p->genlist_count++;\r
1305                         break;\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
1309                         break;
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
1313                         break;
1314                 default:
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
1317                         break;\r
1318                 }
1319
1320                 appended_event_count++;
1321
1322                 if (10 < appended_event_count)
1323                         break;
1324
1325         }
1326
1327         p->appended_event_count += appended_event_count;
1328
1329         CAL_FN_END;
1330 }
1331 \r
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)
1334 {
1335         CAL_FN_START;
1336
1337         c_retv_if(!genlist, NULL);
1338
1339         cal_list_delete_data *p = CAL_UTIL_GET_PRIV_DATA(genlist);\r
1340         c_retv_if(!p, NULL);
1341
1342         if (p->mode == CAL_LIST_DELETE_MODE_TASK || p->mode == CAL_LIST_DELETE_MODE_DAY)\r
1343                 return NULL;
1344
1345         struct tm *t = calloc(1, sizeof(struct tm));
1346 \r
1347         *t = *tm;
1348
1349         cal_list_genlist_item_data *item_data = calloc(1, sizeof(cal_list_genlist_item_data));\r
1350 \r
1351         item_data->tm = t;
1352         item_data->checked = EINA_FALSE;\r
1353
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);
1356
1357         elm_genlist_item_select_mode_set(item_data->it, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
1358
1359         return item_data->it;
1360 }
1361 \r
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)
1365 {
1366         CAL_FN_START;
1367 \r
1368         cal_list_delete_data *p = CAL_UTIL_GET_PRIV_DATA(genlist);\r
1369         c_retv_if(!p, NULL);\r
1370 \r
1371         cal_list_genlist_item_data *item_data = calloc(1, sizeof(cal_list_genlist_item_data));\r
1372 \r
1373         item_data->record = record;
1374         item_data->is_before_today = is_before_today;\r
1375         item_data->checked = EINA_FALSE;\r
1376 \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
1380 \r
1381                 free(item_data);\r
1382 \r
1383                 return NULL;\r
1384         }\r
1385
1386         return item_data->it;
1387 }\r
1388 \r
1389 static void __cal_list_delete_prepend_event_to_genlist(cal_list_delete_data *p)\r
1390 {
1391         CAL_FN_START;
1392
1393         c_ret_if(!p);
1394         c_ret_if(!p->prepend_list);
1395
1396         struct appdata* ad = p->ad;
1397         c_retm_if(!ad, "ad is null.");
1398
1399         Elm_Object_Item *it = NULL;
1400         int time_previous = 0;
1401
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};
1407
1408         int time_today = (ad->today_tm.tm_year << 9) | (ad->today_tm.tm_mon << 5) | ad->today_tm.tm_mday;\r
1409 \r
1410         if (0 < p->prepended_event_count) {
1411                 list = eina_list_nth_list(p->prepend_list, p->prepended_event_count);
1412                 c_ret_if(!list);
1413         }
1414         else
1415                 list = p->prepend_list;
1416
1417         EINA_LIST_FOREACH(list, l, record) {
1418
1419                 if (!record)
1420                         continue;
1421
1422                 Eina_Bool is_todo = EINA_FALSE;\r
1423                 Eina_Bool is_before_today = EINA_FALSE;\r
1424 \r
1425                 if(_calendar_is_task_record(record)) {\r
1426                         is_todo = EINA_TRUE;\r
1427                 } else {\r
1428                         is_todo = EINA_FALSE;\r
1429                 }\r
1430 \r
1431                 tm_current = p->ad->base_tm;
1432
1433                 if (is_todo) {\r
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
1437 \r
1438                         if (tm_current.tm_mday == 0)\r
1439                                 continue;\r
1440                 }\r
1441                 else {\r
1442                         calendar_time_s start_time = {0};\r
1443                         _calendar_get_end_time(record, &start_time);\r
1444 \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
1449                         }\r
1450                         else\r
1451                                 cal_util_convert_lli_to_tm(NULL, start_time.time.utime, &tm_current);\r
1452                 }\r
1453
1454                 int time_current = (tm_current.tm_year << 9) | (tm_current.tm_mon << 5) | tm_current.tm_mday;
1455
1456                 if (time_current < time_today) {\r
1457                         p->before_today_num++;\r
1458                         is_before_today = EINA_TRUE;\r
1459                 }\r
1460 \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
1463
1464                 switch (p->mode) {
1465                 case CAL_LIST_DELETE_MODE_NORMAL:\r
1466                         if (is_todo) {\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
1468                         } else {\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
1470                         }\r
1471                         p->genlist_count++;\r
1472                         break;
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
1476                         break;\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
1480                         break;\r
1481                 default:
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
1484                 }
1485
1486
1487                 time_previous = time_current;
1488                 tm_previous = tm_current;
1489
1490                 prepended_event_count++;
1491
1492                 if (10 < prepended_event_count)
1493                         break;
1494
1495         }
1496
1497         __cal_list_delete_prepend_genlist_group_item(p->genlist, &cal_list_delete_itc_h, &tm_current);\r
1498
1499         p->prepended_event_count += prepended_event_count;
1500
1501         CAL_FN_END;
1502 }
1503 \r
1504 static Eina_Bool __cal_list_delete_check_idler_condition(cal_list_delete_data *p)\r
1505 {
1506         c_retv_if(!p, ECORE_CALLBACK_CANCEL);
1507
1508         if (p->appended_event_count < eina_list_count(p->append_list) ||
1509                 p->prepended_event_count < eina_list_count(p->prepend_list)) {
1510
1511                 return ECORE_CALLBACK_RENEW;
1512         }
1513
1514         if (p->idler) {
1515                 ecore_idler_del(p->idler);
1516                 p->idler = NULL;
1517         }
1518
1519         return ECORE_CALLBACK_CANCEL;
1520 }\r
1521 \r
1522 static void __cal_list_delete_delete_load_more(Elm_Object_Item *item)\r
1523 {
1524         c_ret_if(!item);
1525 \r
1526         elm_object_item_del(item);
1527 }\r
1528 \r
1529 static void __cal_list_delete_prepend_more(void *data, Evas_Object *obj, void *event_info)\r
1530 {
1531         c_ret_if(!data);
1532         c_ret_if(!obj);
1533
1534         cal_list_delete_data *p = data;\r
1535
1536         __cal_list_delete_delete_load_more(p->load_more_top);\r
1537
1538         struct tm tm_start= p->tm_start;
1539         struct tm tm_end = tm_start;
1540
1541         cal_util_update_tm_month(&tm_start, -3);
1542
1543         Eina_List *prepend_more_list = _calendar_get_all_instance_list(&tm_start, &tm_end);\r
1544
1545         prepend_more_list = eina_list_reverse(prepend_more_list);
1546
1547         p->tm_start = tm_start;
1548
1549         p->prepend_list = eina_list_merge(p->prepend_list, prepend_more_list);
1550
1551         __cal_list_delete_prepend_event_to_genlist(p);\r
1552
1553         // TODO:i18n
1554         p->load_more_top= __cal_list_delete_add_load_more_to_genlist(p, "Load events before", &p->tm_start);\r
1555 }
1556 \r
1557 static void __cal_list_delete_append_more(void *data, Evas_Object *obj, void *event_info)\r
1558 {
1559         c_ret_if(!data);
1560         c_ret_if(!obj);
1561
1562         cal_list_delete_data *p = data;\r
1563
1564         __cal_list_delete_delete_load_more(p->load_more_bottom);\r
1565
1566         struct tm tm_start= p->tm_end;
1567         struct tm tm_end = tm_start;
1568
1569         cal_util_update_tm_month(&tm_end, 3);
1570
1571         Eina_List *append_more_list = _calendar_get_all_instance_list(&tm_start, &tm_end);\r
1572
1573         p->tm_end = tm_end;
1574
1575         p->append_list = eina_list_merge(p->append_list, append_more_list);
1576
1577         __cal_list_delete_append_event_to_genlist(p);\r
1578
1579         // TODO:i18n
1580         p->load_more_bottom = __cal_list_delete_add_load_more_to_genlist(p, "Load events after", &p->tm_end);\r
1581 }
1582 \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
1584 {
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);
1589
1590         char time[32] = {0};
1591
1592         cal_util_get_time_text(time, sizeof(time), CAL_UTIL_DATE_FORMAT_8, NULL, tm);
1593
1594         Elm_Object_Item *load_more = NULL;
1595 \r
1596         cal_list_genlist_item_data *item_data = calloc(1, sizeof(cal_list_genlist_item_data));\r
1597 \r
1598         item_data->label = calloc(1, sizeof(time) + strlen(text));\r
1599 \r
1600         snprintf(item_data->label, sizeof(time) + strlen(text), "%s %s", text, time);\r
1601 \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
1606         else
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
1608
1609         if (!load_more) {\r
1610                 ERR("load_more is null");\r
1611 \r
1612                 CAL_FREE(item_data->label);\r
1613 \r
1614                 CAL_FREE(item_data);\r
1615 \r
1616                 return NULL;\r
1617         }\r
1618
1619         return load_more;
1620 }
1621 \r
1622 Eina_Bool __cal_list_delete_idler_callback(void* data)\r
1623 {
1624         CAL_FN_START;
1625
1626         c_retv_if(!data, ECORE_CALLBACK_CANCEL);
1627
1628         cal_list_delete_data *p = data;\r
1629
1630         c_retv_if(!p->idler, ECORE_CALLBACK_CANCEL);
1631
1632         __cal_list_delete_append_event_to_genlist(p);\r
1633
1634         __cal_list_delete_prepend_event_to_genlist(p);\r
1635
1636         Eina_Bool ret = __cal_list_delete_check_idler_condition(p);\r
1637
1638         CAL_FN_END;
1639
1640         return ret;
1641 }
1642 \r
1643 static void __cal_list_delete_add_idler(cal_list_delete_data *p)\r
1644 {
1645         c_ret_if(!p);\r
1646         c_ret_if(!p->ad);\r
1647
1648         if (p->appended_event_count < eina_list_count(p->append_list) ||
1649                 p->prepended_event_count < eina_list_count(p->prepend_list)) {
1650
1651                 if (p->idler)
1652                         ecore_idler_del(p->idler);
1653
1654                 p->idler = ecore_idler_add(__cal_list_delete_idler_callback, p);\r
1655                 c_ret_if(!p->idler);
1656
1657         }\r
1658 }\r
1659 \r
1660 static void __cal_list_delete_delete_genlist(cal_list_delete_data *p)\r
1661 {
1662         CAL_FN_START;
1663
1664         c_ret_if(!p);
1665
1666         if (!p->genlist)
1667                 return;
1668
1669         elm_object_part_content_unset(p->ly, "sw");\r
1670
1671         evas_object_del(p->genlist);
1672
1673         p->genlist = NULL;
1674 }\r
1675 \r
1676 static void __cal_list_delete_create_no_contents(cal_list_delete_data *p)\r
1677 {
1678         CAL_FN_START;
1679
1680         c_ret_if(!p);
1681         c_ret_if(!p->ly);\r
1682
1683         if (p->no_content)\r
1684                 return;
1685
1686         char* title = NULL;
1687
1688         if (p->mode == CAL_LIST_DELETE_MODE_TASK)\r
1689                 title = C_("IDS_TASK_BODY_NO_TASKS");
1690         else
1691                 title = C_("IDS_CLD_BODY_NO_EVENTS");
1692
1693         Evas_Object *no_content = cal_util_add_nocontents(p->ly, title);\r
1694         c_ret_if(!no_content);\r
1695 \r
1696         elm_object_part_content_unset(p->ly, "sw");\r
1697 \r
1698         if (p->box)\r
1699                 evas_object_hide(p->box);\r
1700 \r
1701         elm_object_part_content_set(p->ly, "sw", no_content);\r
1702
1703         p->no_content = no_content;\r
1704 }\r
1705 \r
1706 static void __cal_list_delete_update_genlist(cal_list_delete_data *p)\r
1707 {
1708         CAL_FN_START;
1709
1710         c_ret_if(!p);
1711
1712         __cal_list_delete_delete_idler(p);\r
1713
1714         if (p->genlist) {\r
1715                 elm_genlist_clear(p->genlist);
1716         }\r
1717
1718         struct appdata* ad = p->ad;
1719         c_ret_if(!ad);
1720
1721         ad->today_item = NULL;
1722
1723         p->appended_event_count = 0;
1724
1725         p->prepended_event_count = 0;
1726 \r
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
1730
1731                 __cal_list_delete_create_genlist(p);\r
1732
1733                 __cal_list_delete_append_event_to_genlist(p);\r
1734
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
1740                         } else {\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
1743                         }\r
1744 \r
1745                 }\r
1746 \r
1747                 __cal_list_delete_delete_no_contents(p);\r
1748 \r
1749                 __cal_list_delete_add_idler(p);\r
1750 \r
1751                 evas_object_show(p->bt_delete);\r
1752
1753         } else {\r
1754                 __cal_list_delete_delete_select_all(p);\r
1755 \r
1756                 if (ad->tapbar_focus_view == CV_LIST) {\r
1757                         __cal_list_delete_delete_select_before_today(p);\r
1758                 }\r
1759 \r
1760                 __cal_list_delete_delete_genlist(p);\r
1761
1762                 __cal_list_delete_create_no_contents(p);\r
1763 \r
1764                 evas_object_hide(p->bt_delete);\r
1765         }
1766
1767         CAL_FN_END;
1768 }\r
1769 \r
1770 static void __cal_list_delete_update_list(cal_list_delete_data *p)\r
1771 {
1772         CAL_FN_START;
1773
1774         c_ret_if(!p);
1775 \r
1776         p->num_check = 0;\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
1786 \r
1787         __cal_list_delete_update_events(p);\r
1788
1789         __cal_list_delete_update_genlist(p);\r
1790 \r
1791         __cal_list_delete_update_small_info(p, p->num_check);\r
1792
1793         CAL_FN_END;
1794 }\r
1795 \r
1796 static void __cal_list_delete_event_update_noti_received_cb(const char* view_uri, void* user_data)\r
1797 {\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
1800 \r
1801         if (p->popup) {\r
1802                 evas_object_del(p->popup);\r
1803                 p->popup = NULL;\r
1804         }\r
1805 \r
1806         __cal_list_delete_update_list(p);\r
1807 }\r
1808 \r
1809 static void __cal_list_delete_update_all_check(cal_list_delete_data* p)\r
1810 {\r
1811         c_retm_if(!p, "p is null");\r
1812         c_retm_if(!p->genlist, "p is null");\r
1813 \r
1814         Elm_Object_Item *it;\r
1815         Eina_List* realized_list, *l;\r
1816         cal_list_genlist_item_data* item_data;\r
1817 \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
1825                 }\r
1826         } else {\r
1827                 p->num_check = 0;\r
1828                 p->before_today_num_checked = 0;\r
1829                 elm_check_state_set(p->select_before_today_check, EINA_FALSE);\r
1830 \r
1831                 elm_object_disabled_set(p->bt_delete, EINA_TRUE);\r
1832                 elm_object_signal_emit(p->ly, "hide,selection,info", "elm");\r
1833         }\r
1834 \r
1835         it = elm_genlist_first_item_get(p->genlist);\r
1836         while (it) {\r
1837                 item_data = elm_object_item_data_get(it);\r
1838                 if (item_data) {\r
1839                         item_data->checked = elm_check_state_get(p->select_all_check);\r
1840                 }\r
1841                 it = elm_genlist_item_next_get(it);\r
1842         }\r
1843 \r
1844         realized_list = elm_genlist_realized_items_get(p->genlist);\r
1845         EINA_LIST_FOREACH(realized_list, l, it)\r
1846         {\r
1847                 if (it) {\r
1848                         elm_genlist_item_update(it);\r
1849                 }\r
1850         }\r
1851 }\r
1852 \r
1853 static void __cal_list_delete_update_before_today_check(cal_list_delete_data* p)\r
1854 {\r
1855         c_retm_if(!p, "p is null");\r
1856         c_retm_if(!p->genlist, "p is null");\r
1857 \r
1858         Elm_Object_Item *it;\r
1859         Eina_List* realized_list, *l;\r
1860         cal_list_genlist_item_data* item_data;\r
1861 \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
1865 \r
1866                 int count = 0;\r
1867                 it = elm_genlist_first_item_get(p->genlist);\r
1868                 while (it) {\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
1872                         }\r
1873                         it = elm_genlist_item_next_get(it);\r
1874                 }\r
1875 \r
1876                 it = elm_genlist_first_item_get(p->genlist);\r
1877                 while (it) {\r
1878                         item_data = elm_object_item_data_get(it);\r
1879                         if (item_data->checked && item_data->record != NULL) {\r
1880                                 count++;\r
1881                         }\r
1882                         it = elm_genlist_item_next_get(it);\r
1883                 }\r
1884                 p->num_check = count;\r
1885 \r
1886                 __cal_list_delete_update_small_info(p, p->num_check);\r
1887 \r
1888                 if (p->num_check == p->genlist_count) {\r
1889                         elm_check_state_set(p->select_all_check, EINA_TRUE);\r
1890                 } else {\r
1891                         elm_check_state_set(p->select_all_check, EINA_FALSE);\r
1892                 }\r
1893         } else {\r
1894                 p->before_today_num_checked = 0;\r
1895 \r
1896                 int count = 0;\r
1897                 it = elm_genlist_first_item_get(p->genlist);\r
1898                 while (it) {\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
1902                                 count++;\r
1903                         }\r
1904                         it = elm_genlist_item_next_get(it);\r
1905                 }\r
1906 \r
1907                 p->num_check = p->num_check - count;\r
1908                 if (p->num_check < 0 ) {\r
1909                         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
1912                 } else {\r
1913                         __cal_list_delete_update_small_info(p, p->num_check);\r
1914                 }\r
1915 \r
1916                 if (p->num_check == p->genlist_count) {\r
1917                         elm_check_state_set(p->select_all_check, EINA_TRUE);\r
1918                 } else {\r
1919                         elm_check_state_set(p->select_all_check, EINA_FALSE);\r
1920                 }\r
1921         }\r
1922 \r
1923         realized_list = elm_genlist_realized_items_get(p->genlist);\r
1924         EINA_LIST_FOREACH(realized_list, l, it)\r
1925         {\r
1926                 if (it) {\r
1927                         elm_genlist_item_update(it);\r
1928                 }\r
1929         }\r
1930 }\r
1931 \r
1932 static void __cal_list_delete_select_all_mouse_up_callback(void *data, Evas *e, Evas_Object *obj, void *event_info)\r
1933 {\r
1934         c_retm_if(!data, "data is null");\r
1935         cal_list_delete_data *p = data;\r
1936 \r
1937         Evas_Event_Mouse_Up *ev = event_info;\r
1938         if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD)\r
1939                 return;\r
1940 \r
1941         if (p->genlist_count <= 0) {\r
1942                 return;\r
1943         }\r
1944         elm_check_state_set(p->select_all_check, !elm_check_state_get(p->select_all_check));\r
1945 \r
1946         __cal_list_delete_update_all_check(p);\r
1947 }\r
1948 \r
1949 static void __cal_list_delete_select_before_today_mouse_up_callback(void *data, Evas *e, Evas_Object *obj, void *event_info)\r
1950 {\r
1951         c_retm_if(!data, "data is null");\r
1952         cal_list_delete_data *p = data;\r
1953 \r
1954         Evas_Event_Mouse_Up *ev = event_info;\r
1955         if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD)\r
1956                 return;\r
1957 \r
1958         if (p->before_today_num <= 0) {\r
1959                 return;\r
1960         }\r
1961         elm_check_state_set(p->select_before_today_check, !elm_check_state_get(p->select_before_today_check));\r
1962 \r
1963         __cal_list_delete_update_before_today_check(p);\r
1964 }\r
1965 \r
1966 \r
1967 static void __cal_list_delete_select_all_changed_callback(void *data, Evas_Object *obj, void *event_info)\r
1968 {\r
1969         c_retm_if(!obj, "obj is null");\r
1970 \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
1974                 return;\r
1975         }\r
1976 \r
1977         __cal_list_delete_update_all_check(p);\r
1978 }\r
1979 \r
1980 static void __cal_list_delete_select_before_today_changed_callback(void *data, Evas_Object *obj, void *event_info)\r
1981 {\r
1982         c_retm_if(!obj, "obj is null");\r
1983 \r
1984         cal_list_delete_data* p = data;\r
1985         c_retm_if(!p, "p is null");\r
1986 \r
1987         if (p->before_today_num <= 0) {\r
1988                 return;\r
1989         }\r
1990 \r
1991         __cal_list_delete_update_before_today_check(p);\r
1992 }\r
1993 \r
1994 static void __cal_list_delete_create_select_all(cal_list_delete_data* p)\r
1995 {\r
1996         CAL_FN_START;\r
1997 \r
1998         c_ret_if(!p);\r
1999         c_ret_if(!p->ad);\r
2000         c_ret_if(!p->ly);\r
2001         c_ret_if(!p->box);\r
2002         c_ret_if(p->select_all_layout);\r
2003 \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
2010 \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
2015 \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
2018 \r
2019         // TODO:i18n\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
2032         }\r
2033 \r
2034         elm_box_pack_start(p->box, p->select_all_layout);\r
2035         evas_object_show(p->select_all_layout);\r
2036         CAL_FN_END;\r
2037 }\r
2038 \r
2039 static void __cal_list_delete_create_select_before_today(cal_list_delete_data* p)\r
2040 {\r
2041         CAL_FN_START;\r
2042 \r
2043         c_ret_if(!p);\r
2044         c_ret_if(!p->ad);\r
2045         c_ret_if(!p->ly);\r
2046         c_ret_if(!p->box);\r
2047         c_ret_if(p->select_before_today_layout);\r
2048 \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
2055 \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
2060 \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
2063 \r
2064         elm_object_part_text_set(p->select_before_today_layout, "elm.text", C_("IDS_CLD_BODY_ALL_EVENTS_BEFORE_TODAY"));\r
2065 \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
2068 \r
2069         CAL_FN_END;\r
2070 }\r
2071 \r
2072 static Evas_Object* __cal_list_delete_create_layout(Evas_Object *parent, struct appdata *ad)\r
2073 {\r
2074         CAL_FN_START;\r
2075 \r
2076         c_retvm_if(!parent, NULL, "parent is null");\r
2077         c_retvm_if(!ad, NULL, "ad is null");\r
2078 \r
2079         cal_list_delete_data *p = NULL;\r
2080         Evas_Object *ly;\r
2081 \r
2082         p = calloc(1, sizeof(cal_list_delete_data));\r
2083         c_retvm_if(!p, NULL, "p is null");\r
2084 \r
2085         _name = "list/base/without_searchbar";\r
2086         p->name = _name;\r
2087         p->ad = ad;\r
2088         p->parent = parent;\r
2089 \r
2090         ly = cal_util_add_layout(parent, p->name);\r
2091         if (!ly) {\r
2092                 ERR("cal_util_add_layout returned null");\r
2093                 free(p);\r
2094                 return NULL;\r
2095         }\r
2096         p->ly = ly;\r
2097         evas_object_data_set(ly, "priv", p);\r
2098 \r
2099         p->bg = cal_util_add_bg(ly,EINA_FALSE);\r
2100         if (!p->bg) {\r
2101                 ERR("cal_util_add_bg returned null");\r
2102                 evas_object_del(ly);\r
2103                 free(p);\r
2104                 return NULL;\r
2105         }\r
2106         elm_object_part_content_set(ly, "base", p->bg);\r
2107 \r
2108         elm_object_disabled_set(p->bt_delete, EINA_TRUE);\r
2109 \r
2110         p->box = elm_box_add(p->ly);\r
2111         if (!p->box) {\r
2112                 ERR("elm_box_add returned null");\r
2113                 evas_object_del(ly);\r
2114                 free(p);\r
2115                 ERR("box is null");\r
2116                 return NULL;\r
2117         }\r
2118         evas_object_size_hint_weight_set(p->box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);\r
2119 \r
2120         elm_object_part_content_set(ly, "sw", p->box);\r
2121         evas_object_show(ly);\r
2122 \r
2123         evas_object_event_callback_add(ly, EVAS_CALLBACK_DEL, __cal_list_delete_delete_layout, p);\r
2124 \r
2125         calendar_error_e error = CALENDAR_ERROR_NONE;\r
2126 \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
2129 \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
2135                 free(p);\r
2136                 p = NULL;\r
2137                 return NULL;\r
2138         }\r
2139 \r
2140         CAL_FN_END;\r
2141 \r
2142         return ly;\r
2143 }\r
2144 \r
2145 static void __cal_list_delete_popup_response_event_callback(void *data, Evas_Object *obj, void *event_info)\r
2146 {\r
2147         c_retm_if(!data, "data is null");\r
2148         c_retm_if(!obj, "obj is null");\r
2149 \r
2150         Evas_Object *popup = data;\r
2151         Evas_Object *button = obj;\r
2152 \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
2156 \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
2162                 while(it) {\r
2163                         item = elm_object_item_data_get(it);\r
2164                         temp = elm_genlist_item_next_get(it);\r
2165 \r
2166                         if (item && item->record != NULL && item->checked == EINA_TRUE) {\r
2167 \r
2168                                 int index = _calendar_get_record_index( item->record);\r
2169                                 _calendar_delete_record_with_index(index);\r
2170 \r
2171                                 elm_object_item_del(it);\r
2172                         }\r
2173                         it = temp;\r
2174                 }\r
2175 \r
2176                 elm_object_disabled_set(p->bt_delete, EINA_TRUE);\r
2177 \r
2178                 int r = status_message_post(S_("IDS_COM_POP_DELETED"));\r
2179                 c_warn_if(r != STATUS_ERROR_NONE, "status_message_post() is failed(%d)", r);\r
2180         }\r
2181 \r
2182         evas_object_del(p->popup);\r
2183         p->popup = NULL;\r
2184 }\r
2185 \r
2186 static int __cal_list_delete_check_exsited_repeat_item(cal_list_delete_data *p)\r
2187 {\r
2188         c_retv_if(!p, 1);\r
2189 \r
2190         cal_list_genlist_item_data *item = NULL;\r
2191         Elm_Object_Item *it = NULL;\r
2192 \r
2193         it = elm_genlist_first_item_get(p->genlist);\r
2194         while(it) {\r
2195                 item = elm_object_item_data_get(it);\r
2196 \r
2197                 if (item && item->record != NULL && item->checked == EINA_TRUE) {\r
2198                         Eina_Bool is_recurrent = _calendar_is_recurrent_record(item->record);\r
2199                         if(is_recurrent)\r
2200                                 return 1;\r
2201                 }\r
2202                 it = elm_genlist_item_next_get(it);\r
2203         }\r
2204 \r
2205         return 0;\r
2206 }\r
2207 \r
2208 static void __cal_list_delete_delete_event(cal_list_delete_data* p, Eina_Bool is_delete_all)\r
2209 {
2210         c_ret_if(!p);
2211         c_ret_if(!p->ad);\r
2212
2213         cal_list_genlist_item_data *item = NULL;\r
2214         Elm_Object_Item *it = NULL;\r
2215         Elm_Object_Item *temp = NULL;\r
2216         int cid;\r
2217 \r
2218         it = elm_genlist_first_item_get(p->genlist);\r
2219         while(it) {\r
2220                 item = elm_object_item_data_get(it);\r
2221                 temp = elm_genlist_item_next_get(it);\r
2222 \r
2223                 if (item && item->record != NULL && item->checked == EINA_TRUE) {\r
2224 \r
2225                         cid = _calendar_get_record_index(item->record);\r
2226 \r
2227                         if (!is_delete_all) {\r
2228                                 _calendar_delete_recurrence_instance(item->record);\r
2229                         } else {\r
2230                                 _calendar_delete_record_with_index(cid);\r
2231                         }\r
2232 \r
2233                         elm_object_item_del(it);\r
2234                 }\r
2235 \r
2236                 it = temp;\r
2237         }\r
2238         int r = status_message_post(S_("IDS_COM_POP_DELETED"));\r
2239         c_warn_if(r != STATUS_ERROR_NONE, "status_message_post() is failed(%d)", r);\r
2240 \r
2241         elm_object_disabled_set(p->bt_delete, EINA_TRUE);\r
2242 }\r
2243 \r
2244 static void __cal_list_delete_delete_popup_response_event_callback(void *data, Evas_Object *obj, void *event_info)\r
2245 {
2246         CAL_FN_START;
2247
2248         c_retm_if(!data, "data is null");
2249         c_retm_if(!obj, "obj is null");
2250
2251         Evas_Object *popup = data;
2252         Evas_Object *button = obj;
2253
2254         cal_list_delete_data* p = evas_object_data_get(popup, "data");\r
2255         c_retm_if(!p, "p is null");
2256
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
2260         } else {\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
2265         }\r
2266
2267         evas_object_del(popup);
2268         p->popup = NULL;
2269 }\r
2270 \r
2271 static void __cal_list_delete_show_popup(cal_list_delete_data *p, const char *tit)\r
2272 {
2273         c_retm_if(!p, "p is NULL.");
2274
2275         void (*callback_func)(void *data, Evas_Object *obj, void *ei) = NULL;\r
2276 \r
2277         callback_func = __cal_list_delete_delete_popup_response_event_callback;\r
2278 \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
2284         } else {\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
2288 \r
2289         }\r
2290 \r
2291         c_retm_if(!p->popup, "cal_util_add_popup(p->ad->win) returned null");
2292
2293         evas_object_data_set(p->popup, "priv", p);
2294 }\r
2295 \r
2296 static void __cal_list_delete_delete_button_callback(void *data, Evas_Object *obj, void *ei)\r
2297 {\r
2298         CAL_FN_START;\r
2299 \r
2300         c_ret_if(!data);\r
2301 \r
2302         Evas_Object *ly = data;\r
2303 \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
2308 \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
2315                 } else {\r
2316                         // TODO:i18n\r
2317                         __cal_list_delete_show_popup(p, "If you delete this repeated event, all related events will also be deleted. Continue?");\r
2318                 }\r
2319         } else {\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
2322         }\r
2323 }\r
2324 \r
2325 static void __cal_list_delete_back_btn_click_callback(void *data, Evas_Object *obj, void *event_info)\r
2326 {
2327         CAL_FN_START;
2328
2329         c_retm_if(!data, "data is null");
2330
2331         struct appdata* ad = (struct appdata*)data;
2332
2333         elm_naviframe_item_pop(ad->naviframe);\r
2334 }\r
2335 \r
2336 Evas_Object *cal_list_delete_view_create(Evas_Object *parent, struct appdata *ad)\r
2337 {\r
2338         CAL_FN_START;\r
2339 \r
2340         c_retvm_if(!ad || !parent, NULL, "Input parameter is null");\r
2341 \r
2342         Evas_Object *ly;\r
2343 \r
2344         if (ad->current_view == CV_DELETE)\r
2345                 return NULL;\r
2346 \r
2347         ad->current_view = CV_DELETE;\r
2348 \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
2351 \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
2354 \r
2355         p->mode = CAL_LIST_DELETE_MODE_NORMAL;\r
2356         p->more_idx = -1;\r
2357 \r
2358         if (NULL != ad->bt_view)\r
2359                 p->mode = CAL_LIST_DELETE_MODE_TASK;\r
2360 \r
2361         Evas_Object *back_button = elm_button_add(ad->naviframe);\r
2362         c_retv_if(!back_button, NULL);\r
2363
2364         evas_object_smart_callback_add(back_button, "clicked", __cal_list_delete_back_btn_click_callback, ad);\r
2365
2366         elm_object_style_set(back_button, "naviframe/back_btn/default");\r
2367 \r
2368 \r
2369         // TODO:i18n\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
2374         }\r
2375         if (!p->navi_item)\r
2376         {\r
2377                 ERR("elm_naviframe_item_push is failed");\r
2378                 evas_object_del(ly);\r
2379                 return NULL;\r
2380         }\r
2381 \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
2383 \r
2384         cal_lang_manager_add_callback(__cal_list_delete_text_refresh_callback, p);\r
2385 \r
2386         CAL_FN_END;\r
2387 \r
2388         return ly;\r
2389 }\r
2390 \r
2391 void cal_list_delete_update_view(Evas_Object *ly)\r
2392 {\r
2393         CAL_FN_START;\r
2394 \r
2395         cal_list_delete_data *p;\r
2396 \r
2397         c_retm_if(!ly, "ly is null.");\r
2398 \r
2399         p = CAL_UTIL_GET_PRIV_DATA(ly);\r
2400         if (!p || CAL_STRCMP(p->name, _name)) {\r
2401                 ERR("Invalid object");\r
2402                 return;\r
2403         }\r
2404 \r
2405         struct appdata *ad = p->ad;\r
2406         c_ret_if(!ad);\r
2407 \r
2408         __cal_list_delete_update_list(p);\r
2409 \r
2410 }\r
2411 \r
2412 Evas_Object* cal_list_delete_view_create_more_events(Evas_Object *parent, struct appdata *ad, int idx)\r
2413 {\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
2418 \r
2419         ly = cal_list_delete_view_create(parent, ad);\r
2420         c_retvm_if(!ly, NULL, "ly is null.");\r
2421 \r
2422         p = CAL_UTIL_GET_PRIV_DATA(ly);\r
2423         c_retvm_if(!p, NULL, "p is null.");\r
2424 \r
2425         p->mode = CAL_LIST_DELETE_MODE_DAY;\r
2426         p->more_idx = idx;\r
2427 \r
2428         return ly;\r
2429 }\r