3 * Copyright 2012 Samsung Electronics Co., Ltd
5 * Licensed under the Flora License, Version 1.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
9 * http://www.tizenopensource.org/license
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
20 #include <Elementary.h>
23 #include "noti-handler.h"
24 #include "edit-repeat.h"
26 #include "external-ug.h"
29 static Elm_Entry_Filter_Limit_Size _limit_20char = {
34 CAL_LIST_MODE_NORMAL = 0,
42 Evas_Object *layout; // self
45 Evas_Object *searchbar;
47 Evas_Object *no_contents;
51 Eina_List *append_list;
52 int appended_event_count;
54 Eina_List *prepend_list;
55 int prepended_event_count;
57 const char *searchtext;
60 Ecore_Idler* idler; // To append list
62 struct tm last_itc_h; // To prevent duplicated cal_list_itc_h, in add events & add events idler
64 Eina_Bool is_today_added; //To check real today item is added.
68 Ecore_Event_Handler *event_handler;
71 Elm_Object_Item *sweep_it;
73 Elm_Object_Item* navi_item;
74 Elm_Object_Item *bt_new;
75 Elm_Object_Item *bt_delete;
82 Elm_Object_Item *load_more_top;
83 Elm_Object_Item *load_more_bottom;
87 Elm_Object_Item *it; // Genlist Item pointer
88 Eina_Bool checked; // Check status
92 }cal_list_genlist_item_data;
95 static Calendar_color calendar_color;
97 static void __cal_list_delete_genlist_header_item(void *data, Evas_Object *obj);
98 static void __cal_list_delete_genlist_item(void *data, Evas_Object *obj);
99 static char* __cal_list_get_genlist_header_item_label(void *data, Evas_Object *obj, const char *part);
100 static char* __cal_list_get_genlist_item_label(void *data, Evas_Object *obj, const char *part);
101 static Evas_Object *__cal_list_get_genlist_item_icon(void *data, Evas_Object *obj, const char *part);
102 static char* __cal_list_share_genlist_item_label(void *data, Evas_Object *obj, const char *part);
103 static void __cal_list_prepend_more(void *data, Evas_Object *obj, void *event_info);
104 static void __cal_list_append_more(void *data, Evas_Object *obj, void *event_info);
105 static char* __cal_list_get_genlist_task_item_label(void *data, Evas_Object *obj, const char *part);
106 static Evas_Object *__cal_list_get_genlist_task_item_icon(void *data, Evas_Object *obj, const char *part);
108 static Elm_Genlist_Item_Class cal_list_itc_h = {
109 .item_style = "grouptitle",
110 .func.text_get = __cal_list_get_genlist_header_item_label,
111 .func.del = __cal_list_delete_genlist_header_item,
114 static Elm_Genlist_Item_Class cal_list_itc = {
115 .item_style = "3text.5icon",
116 .func.text_get = __cal_list_get_genlist_item_label,
117 .func.del = __cal_list_delete_genlist_item,
118 .func.content_get = __cal_list_get_genlist_item_icon,
119 .decorate_item_style = "mode/slide3",
122 static Elm_Genlist_Item_Class cal_list_normal_itc = {
123 .item_style = "3text.4icon.calendar",
124 .func.text_get = __cal_list_get_genlist_item_label,
125 .func.del = __cal_list_delete_genlist_item,
126 .func.content_get = __cal_list_get_genlist_item_icon,
127 .decorate_item_style = "mode/slide3",
130 static Elm_Genlist_Item_Class cal_task_itc = {
131 .item_style = "2text.4icon.5",
132 .func.text_get = __cal_list_get_genlist_task_item_label,
133 .func.del = __cal_list_delete_genlist_item,
134 .func.content_get = __cal_list_get_genlist_task_item_icon,
137 static Elm_Genlist_Item_Class itc_1text = {
138 .item_style = "1text",
139 .func.content_get = NULL,
140 .func.text_get = __cal_list_share_genlist_item_label,
143 static inline void __cal_list_delete_popup(cal_list_data *p)
145 c_retm_if(!p || !p->popup, "param is null");
147 evas_object_del(p->popup);
151 static char* __cal_list_share_genlist_item_label(void *data, Evas_Object *obj, const char *part)
153 c_retvm_if(!data || !obj || !part, NULL, "data is null");
155 char *name = (char *)data;
158 if (!CAL_STRCMP(part, "elm.text")) {
165 static inline Elm_Object_Item* __cal_list_append_genlist_group_item(Evas_Object *genlist,
166 const Elm_Genlist_Item_Class *itc, struct tm *tm)
170 c_retv_if(!genlist, NULL);
172 cal_list_data *p = CAL_UTIL_GET_PRIV_DATA(genlist);
173 c_retvm_if(!p, NULL, "p is null.");
175 if (p->mode == CAL_LIST_MODE_TASK || p->mode == CAL_LIST_MODE_DAY)
178 struct tm *t = calloc(1, sizeof(struct tm));
183 cal_list_genlist_item_data *item_data = calloc(1, sizeof(cal_list_genlist_item_data));
184 c_retv_if(!item_data, NULL);
188 item_data->it = elm_genlist_item_append(genlist, itc, item_data, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
189 c_retv_if(!item_data->it, NULL);
191 elm_genlist_item_select_mode_set(item_data->it, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
193 return item_data->it;
196 static inline Elm_Object_Item* __cal_list_prepend_genlist_group_item(Evas_Object *genlist,
197 const Elm_Genlist_Item_Class *itc, struct tm *tm)
201 c_retv_if(!genlist, NULL);
203 cal_list_data *p = CAL_UTIL_GET_PRIV_DATA(genlist);
206 if (p->mode == CAL_LIST_MODE_TASK || p->mode == CAL_LIST_MODE_DAY)
209 struct tm *t = calloc(1, sizeof(struct tm));
214 cal_list_genlist_item_data *item_data = calloc(1, sizeof(cal_list_genlist_item_data));
215 c_retv_if(!item_data, NULL);
219 item_data->it = elm_genlist_item_prepend(genlist, itc, item_data, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
220 c_retv_if(!item_data->it, NULL);
222 elm_genlist_item_select_mode_set(item_data->it, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
224 return item_data->it;
228 static inline Elm_Object_Item* __cal_list_append_genlist_item(Evas_Object *genlist,
229 const Elm_Genlist_Item_Class *itc, cal_struct *cs, Elm_Object_Item *parent,
230 Evas_Smart_Cb func, const void *func_data)
234 cal_list_genlist_item_data *item_data = calloc(1, sizeof(cal_list_genlist_item_data));
235 c_retv_if(!item_data, NULL);
239 cal_list_data *p = CAL_UTIL_GET_PRIV_DATA(genlist);
242 item_data->it = elm_genlist_item_append(genlist, itc, item_data, parent, ELM_GENLIST_ITEM_NONE, func, func_data);
243 c_retv_if(!item_data->it, NULL);
245 return item_data->it;
248 static inline Elm_Object_Item* __cal_list_prepend_genlist_item(Evas_Object *genlist,
249 const Elm_Genlist_Item_Class *itc, cal_struct *cs, Elm_Object_Item *parent,
250 Evas_Smart_Cb func, const void *func_data)
254 cal_list_genlist_item_data *item_data = calloc(1, sizeof(cal_list_genlist_item_data));
255 c_retv_if(!item_data, NULL);
259 cal_list_data *p = CAL_UTIL_GET_PRIV_DATA(genlist);
262 item_data->it = elm_genlist_item_prepend(genlist, itc, item_data, NULL, ELM_GENLIST_ITEM_NONE, func, func_data);
263 c_retv_if(!item_data->it, NULL);
265 return item_data->it;
268 static void __cal_list_set_genlist_item_sweep_off(Elm_Object_Item *it)
270 c_retm_if(!it, "it is null");
271 elm_genlist_item_decorate_mode_set(it, "slide", EINA_FALSE);
272 elm_genlist_item_select_mode_set(it, ELM_OBJECT_SELECT_MODE_ALWAYS);
275 static void __cal_list_init_sweep_data(cal_list_genlist_item_data* item_data, cal_list_data *p)
277 c_retm_if(!item_data, "item_data is null");
278 c_retm_if(!p, "p is null");
280 cal_struct *cs = item_data->cs;
281 c_retm_if(!cs, "cs is NULL.");
283 cal_main_set_cs(p->ad, cs);
286 static void __cal_list_edit_popup_response_event_callback(void *data, Evas_Object *obj, void *event_info)
288 c_retm_if(!data, "data is null");
289 c_retm_if(!obj, "obj is null");
291 Evas_Object *popup = data;
292 Evas_Object *button = obj;
293 cal_list_data* p = evas_object_data_get(popup, "data");
294 c_retm_if(!p, "p is null");
296 struct appdata* ad = p->ad;
297 c_retm_if(!ad, "ad is null");
299 if (!strcmp(elm_object_text_get(button), C_("IDS_CLD_BODY_ONLY_THIS_EVENT"))) {
300 ad->edit_special_one = EINA_TRUE;
302 cal_edit_create_view(ad, p->layout);
303 __cal_list_set_genlist_item_sweep_off(p->sweep_it);
304 }else if (!strcmp(elm_object_text_get(button), C_("IDS_CLD_POP_ALL_REPETITIVE_EVENTS"))) {
305 ad->edit_special_one = EINA_FALSE;
307 cal_edit_create_view(ad, p->layout);
308 __cal_list_set_genlist_item_sweep_off(p->sweep_it);
311 evas_object_del(popup);
315 static cal_struct* __cal_list_get_event(int idx)
317 c_retvm_if(idx < 0, NULL, "idx is invalied(%d)", idx);
318 cal_struct *cs = NULL;
320 int r = CALENDAR_SVC_GET(CAL_STRUCT_SCHEDULE, idx, NULL, &cs);
321 c_retvm_if(r != CAL_SUCCESS, NULL, "CALENDAR_SVC_GET(%d) is failed(%d)", idx, r);
326 static void __cal_list_delete_event(cal_list_data* p, Eina_Bool is_delete_all)
328 c_retm_if(!p, "p is null");
332 cal_struct *cs = __cal_list_get_event(p->ad->cid);
335 if (!is_delete_all) {
336 long long int lli_time;
337 cal_util_convert_tm_to_lli(NULL, &p->ad->tm_start, &lli_time);
339 r = calendar_svc_event_delete_normal_instance(p->ad->cid, lli_time);
340 if (r != CAL_SUCCESS)
341 ERR("calendar_svc_event_delete_normal_instance is failed %d", r);
343 r = CALENDAR_SVC_DELETE(CAL_STRUCT_SCHEDULE, p->ad->cid);
344 if (r != CAL_SUCCESS)
345 ERR("CALENDAR_SVC_DELETE is failed %d", r);
348 CALENDAR_SVC_STRUCT_FREE(&cs);
350 evas_object_del(p->popup);
354 static void __cal_list_delete_popup_response_event_callback(void *data, Evas_Object *obj, void *event_info)
356 c_retm_if(!data, "data is null");
357 c_retm_if(!obj, "obj is null");
359 Evas_Object *popup = data;
360 Evas_Object *button = obj;
362 cal_list_data* p = evas_object_data_get(popup, "data");
363 c_retm_if(!p, "p is null");
365 if (!strcmp(elm_object_text_get(button), C_("IDS_CLD_BODY_ONLY_THIS_EVENT")))
366 __cal_list_delete_event(p, EINA_FALSE);
367 else if (!strcmp(elm_object_text_get(button), C_("IDS_CLD_POP_ALL_REPETITIVE_EVENTS")))
368 __cal_list_delete_event(p, EINA_TRUE);
370 evas_object_del(popup);
374 static void __cal_list_show_popup(cal_list_data *p, const char *tit, Eina_Bool is_edit)
376 c_retm_if(!p, "p is NULL.");
378 void (*callback_func)(void *data, Evas_Object *obj, void *ei) = NULL;
381 callback_func = __cal_list_edit_popup_response_event_callback;
383 callback_func = __cal_list_delete_popup_response_event_callback;
385 p->popup = cal_util_add_popup(p->ad->win, "verticalbuttonstyle", NULL, tit,
386 callback_func, p, C_("IDS_CLD_BODY_ONLY_THIS_EVENT"),
387 C_("IDS_CLD_POP_ALL_REPETITIVE_EVENTS"), S_("IDS_COM_SK_CANCEL"), NULL);
389 c_retm_if(!p->popup, "cal_util_add_popup(p->ad->win) returned null");
391 evas_object_data_set(p->popup, "priv", p);
394 static void __cal_list_delete_popup_edit_response_event_callback(void *data, Evas_Object *obj, void *event_info)
396 c_retm_if(!data, "data is null");
397 c_retm_if(!obj, "obj is null");
399 Evas_Object *popup = data;
400 Evas_Object *button = obj;
402 cal_list_data *p = evas_object_data_get(popup, "data");
403 c_retm_if(!p, "p is null");
405 if (!strcmp(elm_object_text_get(button), S_("IDS_COM_SK_OK"))) {
406 cal_edit_create_view(p->ad, p->layout);
407 __cal_list_set_genlist_item_sweep_off(p->sweep_it);
410 evas_object_del(p->popup);
414 static void __cal_list_edit_button_callback(void *data, Evas_Object *obj, void *ei)
416 cal_list_genlist_item_data *item_data = data;
417 c_retm_if(!item_data, "item_data is NULL.");
419 cal_list_data* p = CAL_UTIL_GET_PRIV_DATA(obj);
420 c_retm_if(!p, "p is NULL.");
422 cal_struct *cs = item_data->cs;
423 c_retm_if(!cs, "cs is NULL.");
425 __cal_list_init_sweep_data(item_data, p);
427 if (0 != CALENDAR_SVC_STRUCT_GET_INT(cs, CALS_VALUE_INT_RRULE_ID)) {
428 __cal_list_show_popup(p,C_("IDS_CLD_HEADER_EDIT_EVENT"), EINA_TRUE);
430 p->popup = cal_util_add_popup(p->ad->win, NULL, NULL, C_("IDS_CLD_HEADER_EDIT_EVENT"), __cal_list_delete_popup_edit_response_event_callback, p,
431 S_("IDS_COM_SK_OK"),S_("IDS_COM_SK_CANCEL"), NULL);
436 static void __cal_list_delete_norepeat_popup_response_event_callback(void *data, Evas_Object *obj, void *event_info)
438 c_retm_if(!data, "data is null");
439 c_retm_if(!obj, "obj is null");
441 Evas_Object *popup = data;
442 Evas_Object *button = obj;
444 cal_list_data* p = evas_object_data_get(popup, "data");
446 c_retm_if(!p, "p is null");
447 c_retm_if(!p->ad, "p->ad is null");
448 c_retm_if(!p->popup, "p->popup is null");
450 if (!CAL_STRCMP(elm_object_text_get(button), S_("IDS_COM_SK_OK"))) {
451 int r = CALENDAR_SVC_DELETE(CAL_STRUCT_SCHEDULE, p->ad->cid);
452 c_warn_if(r != CAL_SUCCESS, "CALENDAR_SVC_DELETE(CAL_STRUCT_SCHEDULE, %d) is failed(%d)", p->ad->cid, r);
454 cal_struct *cs = evas_object_data_get(p->layout, "cs");
456 CALENDAR_SVC_STRUCT_FREE(&cs);
461 evas_object_del(p->popup);
465 static void __cal_list_delete_button_callback(void *data, Evas_Object *obj, void *ei)
467 cal_list_genlist_item_data *item_data = data;
468 c_retm_if(!item_data, "item_data is NULL.");
470 cal_list_data* p = CAL_UTIL_GET_PRIV_DATA(obj);
471 c_retm_if(!p, "p is NULL.");
473 __cal_list_init_sweep_data(item_data, p);
477 cal_struct *cs = __cal_list_get_event(p->ad->cid);
478 c_retm_if(!cs, "cs is null");
480 int r = CALENDAR_SVC_STRUCT_GET_INT(cs,CALS_VALUE_INT_RRULE_ID);
481 evas_object_data_set(p->layout, "cs", cs);
484 __cal_list_show_popup(p, C_("IDS_CLD_OPT_DELETE_EVENT"), EINA_FALSE);
486 p->popup = cal_util_add_popup(p->ad->win, NULL, NULL, C_("IDS_CLD_OPT_DELETE_EVENT"), __cal_list_delete_norepeat_popup_response_event_callback, p,
487 S_("IDS_COM_SK_OK"),S_("IDS_COM_SK_CANCEL"), NULL);
493 static void __cal_list_via_message_callback(void *data, Evas_Object *obj, void *ei)
495 c_retm_if(!data, "data is null");
496 c_retm_if(!obj, "obj is null");
498 cal_list_data *p = data;
499 c_retm_if(!p->ad, "p->ad is null");
501 cal_struct *cs = NULL;
502 int r = CALENDAR_SVC_GET(CAL_STRUCT_SCHEDULE, p->ad->cid, NULL, &cs);
503 if (CAL_SUCCESS != r || NULL == cs) {
504 ERR("CALENDAR_SVC_GET failed: %d", r);
508 r = cal_util_create_vcs_file_from_cs(cs, MESSAGE_VCS);
509 if (CAL_SUCCESS != r) {
510 CALENDAR_SVC_STRUCT_FREE(&cs);
511 ERR("cal_util_create_vcs_file_from_cs: %d", r);
515 CALENDAR_SVC_STRUCT_FREE(&cs);
517 cal_launch_ug_with_var(MESSAGE_COMPOSER_UG, NULL, "ATTACHFILE", MESSAGE_VCS, NULL);
518 __cal_list_set_genlist_item_sweep_off(p->sweep_it);
520 __cal_list_delete_popup(p);
523 static void __cal_list_via_email_callback(void *data, Evas_Object *obj, void *ei)
525 c_retm_if(!data, "data is null");
526 c_retm_if(!obj, "obj is null");
528 cal_list_data *p = data;
529 c_retm_if(!p->ad, "p->ad is null");
531 cal_struct *cs = NULL;
532 int r = CALENDAR_SVC_GET(CAL_STRUCT_SCHEDULE, p->ad->cid, NULL, &cs);
533 if (CAL_SUCCESS != r || NULL == cs) {
534 ERR("CALENDAR_SVC_GET failed: %d", r);
538 r = cal_util_create_vcs_file_from_cs(cs, EMAIL_VCS);
539 if (CAL_SUCCESS != r) {
540 CALENDAR_SVC_STRUCT_FREE(&cs);
541 ERR("cal_util_create_vcs_file_from_cs: %d", r);
545 CALENDAR_SVC_STRUCT_FREE(&cs);
547 cal_launch_ug_with_var(EMAIL_COMPOSER_UG, NULL, "RUN_TYPE", "5", "ATTACHFILE", EMAIL_VCS, NULL);
548 __cal_list_set_genlist_item_sweep_off(p->sweep_it);
550 __cal_list_delete_popup(p);
553 static void __cal_list_via_bluetooth_callback(void *data, Evas_Object *obj, void *ei)
555 c_retm_if(!data, "data is null");
556 c_retm_if(!obj, "obj is null");
558 cal_list_data *p = data;
559 c_retm_if(!p->ad, "p->ad is null");
561 cal_struct *cs = NULL;
562 int r = CALENDAR_SVC_GET(CAL_STRUCT_SCHEDULE, p->ad->cid, NULL, &cs);
563 if (CAL_SUCCESS != r || NULL == cs) {
564 ERR("CALENDAR_SVC_GET failed: %d", r);
568 r = cal_util_create_vcs_file_from_cs(cs, BLUETOOTH_VCS);
569 if (CAL_SUCCESS != r) {
570 CALENDAR_SVC_STRUCT_FREE(&cs);
571 ERR("cal_util_create_vcs_file_from_cs: %d", r);
575 CALENDAR_SVC_STRUCT_FREE(&cs);
577 cal_launch_ug_with_var(BLUETOOTH_UG, NULL, "launch-type", "send", "filecount", "1", "files", BLUETOOTH_VCS, NULL);
578 __cal_list_set_genlist_item_sweep_off(p->sweep_it);
580 __cal_list_delete_popup(p);
583 static void __cal_list_share_popup_response_callback(void *data, Evas_Object *obj, void *ei)
585 c_retm_if(!data, "data is null");
586 c_retm_if(!obj, "obj is null");
588 Evas_Object *popup = data;
590 cal_list_data* p = evas_object_data_get(popup, "data");
591 c_retm_if(!p, "p is null");
593 evas_object_del(popup);
598 static void __cal_list_send_button_callback(void *data, Evas_Object *obj, void *ei)
600 cal_list_genlist_item_data *item_data = data;
601 c_retm_if(!item_data, "item_data is NULL.");
603 cal_list_data* p = CAL_UTIL_GET_PRIV_DATA(obj);
604 c_retm_if(!p, "p is NULL.");
606 __cal_list_init_sweep_data(item_data, p);
608 p->popup = cal_util_add_popup(p->ad->win, "menustyle", S_("IDS_COM_BUTTON_SHARE"), NULL,
609 __cal_list_share_popup_response_callback, p,
610 S_("IDS_COM_BODY_CLOSE"), NULL);
612 c_retm_if(!p->popup, "cal_util_add_popup returned null");
613 evas_object_data_set(p->popup, "data", p);
615 Evas_Object *genlist = elm_genlist_add(p->popup);
616 c_retm_if(!genlist, "elm_genlist_add returned null");
618 elm_genlist_item_append(genlist, &itc_1text, S_("IDS_COM_BODY_EMAIL"), NULL, ELM_GENLIST_ITEM_NONE, __cal_list_via_email_callback, p);
619 elm_genlist_item_append(genlist, &itc_1text, S_("IDS_COM_BODY_MESSAGE"), NULL, ELM_GENLIST_ITEM_NONE, __cal_list_via_message_callback, p);
620 elm_genlist_item_append(genlist, &itc_1text, S_("IDS_COM_BODY_BLUETOOTH"), NULL, ELM_GENLIST_ITEM_NONE, __cal_list_via_bluetooth_callback, p);
622 elm_object_content_set(p->popup, genlist);
623 evas_object_show(p->popup);
626 static void __cal_list_genlist_item_check_changed_callback(void *data, Evas_Object *obj, void *event_info)
631 cal_list_genlist_item_data *item_data = data;
633 cal_list_data* p = CAL_UTIL_GET_PRIV_DATA(obj);
638 item_data->checked = elm_check_state_get(obj);
640 cal_struct *cs = item_data->cs;
643 if (item_data->checked)
644 CALENDAR_SVC_STRUCT_SET_INT(cs, CAL_VALUE_INT_TASK_STATUS, CALS_TODO_STATUS_COMPLETED);
646 CALENDAR_SVC_STRUCT_SET_INT(cs, CAL_VALUE_INT_TASK_STATUS, CALS_TODO_STATUS_IN_PROCESS);
648 r = CALENDAR_SVC_UPDATE(cs);
649 c_retm_if(r != CAL_SUCCESS, "CALENDAR_SVC_UPDATE is failed(%d).", r);
651 elm_genlist_item_update(item_data->it);
655 static int __cal_list_get_cs_alarm_flag(cal_struct *cs)
660 cal_struct *cs_d = NULL;
663 int cid = CALENDAR_SVC_STRUCT_GET_INT(cs, CAL_VALUE_INT_INDEX);
665 r = CALENDAR_SVC_GET(CAL_STRUCT_SCHEDULE, cid, NULL, &cs_d);
666 c_retv_if(CAL_SUCCESS != r , 0);
669 r = CALENDAR_SVC_STRUCT_GET_LIST(cs_d, CAL_VALUE_LST_ALARM, &al);
670 if (CAL_SUCCESS != r || !al) {
671 CALENDAR_SVC_STRUCT_FREE(&cs_d);
675 CALENDAR_SVC_STRUCT_FREE(&cs_d);
679 static int __cal_list_get_cs_repeat_flag(cal_struct *cs)
685 r = CALENDAR_SVC_STRUCT_GET_INT(cs, CALS_VALUE_INT_RRULE_ID);
691 static Evas_Object *__cal_list_get_genlist_item_icon(void *data, Evas_Object *obj, const char *part)
693 c_retv_if(!data, NULL);
695 cal_list_data *p = CAL_UTIL_GET_PRIV_DATA(obj);
698 cal_list_genlist_item_data *item_data = data;
700 Evas_Object *button = NULL;
701 cal_struct *calendar = NULL;
702 Evas_Object *icon = NULL;
704 cal_struct *cs = item_data->cs;
706 if (!CAL_STRCMP(part, "elm.swallow.colorbar")) {
708 int r = CALENDAR_SVC_GET(CAL_STRUCT_CALENDAR, CALENDAR_SVC_STRUCT_GET_INT(cs,CAL_VALUE_INT_CALENDAR_ID), NULL, &calendar);
709 if (r != CAL_SUCCESS)
711 ERR("CALENDAR_SVC_GET fail. %d", r);
715 icon = evas_object_rectangle_add(evas_object_evas_get(obj));
716 evas_object_size_hint_align_set(icon, EVAS_HINT_FILL, EVAS_HINT_FILL);
718 CALENDAR_SVC_GET_CALENDAR_COLOR(calendar, &calendar_color);
720 evas_object_color_set(icon, calendar_color.red, calendar_color.green, calendar_color.blue, calendar_color.alpha);
722 CALENDAR_SVC_STRUCT_FREE(&calendar);
726 } else if (!CAL_STRCMP(part, "elm.slide.swallow.1")) {
728 button = elm_button_add(obj);
729 c_retvm_if(!button, NULL, "button is NULL");
731 elm_object_style_set(button, "text_only/sweep");
732 elm_object_text_set(button, S_("IDS_COM_SK_EDIT"));
733 evas_object_data_set(button, "priv", p);
734 evas_object_smart_callback_add(button, "clicked", __cal_list_edit_button_callback, item_data);
738 } else if (!CAL_STRCMP(part, "elm.slide.swallow.2")) {
740 button = elm_button_add(obj);
741 c_retvm_if(!button, NULL, "button is NULL");
743 elm_object_style_set(button, "text_only/sweep");
744 elm_object_text_set(button, S_("IDS_COM_BODY_DELETE"));
745 evas_object_data_set(button, "priv", p);
746 evas_object_smart_callback_add(button, "clicked", __cal_list_delete_button_callback, item_data);
750 } else if (!CAL_STRCMP(part, "elm.slide.swallow.3")) {
752 button = elm_button_add(obj);
753 c_retvm_if(!button, NULL, "button is NULL");
755 elm_object_style_set(button, "text_only/sweep");
756 elm_object_text_set(button, S_("IDS_COM_BUTTON_SHARE"));
757 evas_object_data_set(button, "priv", p);
758 evas_object_smart_callback_add(button, "clicked", __cal_list_send_button_callback, item_data);
762 } else if (!CAL_STRCMP(part, "elm.edit.icon.1") ) {
763 icon = elm_check_add(obj);
764 c_retvm_if(!icon, NULL, "elm_check_add returned null");
766 int todo_status = CALENDAR_SVC_STRUCT_GET_INT(cs, CAL_VALUE_INT_TASK_STATUS);
768 if (CALS_TODO_STATUS_COMPLETED == todo_status)
769 item_data->checked = EINA_TRUE;
770 else if (CALS_TODO_STATUS_IN_PROCESS == todo_status)
771 item_data->checked = EINA_FALSE;
773 elm_check_state_pointer_set(icon, &item_data->checked);
774 evas_object_smart_callback_add(icon, "changed", __cal_list_genlist_item_check_changed_callback, item_data);
775 evas_object_propagate_events_set(icon, EINA_FALSE);
776 evas_object_data_set(icon, "priv", p);
779 } else if (!CAL_STRCMP(part, "elm.icon.1")) {
780 if ( CAL_LIST_MODE_NORMAL == p->mode) {
781 int r = __cal_list_get_cs_alarm_flag(cs);
784 icon = elm_icon_add(obj);
785 c_retv_if(!icon, NULL);
787 r = elm_icon_file_set(icon, CAL_EVENT_LIST_ICON_ALARM, NULL);
792 } else if (!CAL_STRCMP(part, "elm.icon.2")) {
794 if ( CAL_LIST_MODE_NORMAL == p->mode) {
795 int r = __cal_list_get_cs_repeat_flag(cs);
796 c_retv_if(r <= 0, NULL);
798 icon = elm_icon_add(obj);
799 c_retv_if(!icon, NULL);
801 r = elm_icon_file_set(icon, CAL_EVENT_LIST_ICON_REPEAT, NULL);
806 } else if (!CAL_STRCMP(part, "elm.icon.3")) {
807 if ( CAL_LIST_MODE_NORMAL == p->mode) {
808 int calendar_id = CALENDAR_SVC_STRUCT_GET_INT(cs, CAL_VALUE_INT_CALENDAR_ID);
809 if (p->ad->calendar_facebook_id == calendar_id) {
810 icon = elm_icon_add(obj);
811 c_retv_if(!icon, NULL);
813 int r = elm_icon_file_set(icon, CAL_EVENT_LIST_ICON_FACEBOOK, NULL);
824 static void __cal_list_genlist_item_check_clicked_callback(void *data, Evas_Object *obj, void *event_info)
829 cal_list_genlist_item_data *item_data = data;
831 cal_list_data *p = evas_object_data_get(obj, "priv");
837 item_data->checked = !item_data->checked;
839 cal_struct *cs = item_data->cs;
842 if (item_data->checked)
843 CALENDAR_SVC_STRUCT_SET_INT(cs, CAL_VALUE_INT_TASK_STATUS, CALS_TODO_STATUS_COMPLETED);
845 CALENDAR_SVC_STRUCT_SET_INT(cs, CAL_VALUE_INT_TASK_STATUS, CALS_TODO_STATUS_IN_PROCESS);
847 CALENDAR_SVC_DEL_EVENT_CHANGED_CALLBACK(cal_main_update_view);
849 r = CALENDAR_SVC_UPDATE(cs);
850 c_retm_if(r != CAL_SUCCESS, "CALENDAR_SVC_UPDATE is failed(%d).", r);
852 CALENDAR_SVC_ADD_EVENT_CHANGED_CALLBACK(cal_main_update_view, p->ad);
854 elm_genlist_item_update(item_data->it);
858 static Evas_Object *__cal_list_get_genlist_task_item_icon(void *data, Evas_Object *obj, const char *part)
860 c_retv_if(!data, NULL);
862 cal_list_data *p = CAL_UTIL_GET_PRIV_DATA(obj);
865 cal_list_genlist_item_data *item_data = data;
867 Evas_Object *button = NULL;
868 cal_struct *calendar = NULL;
869 Evas_Object *icon = NULL;
870 const char *str = NULL;
871 char *location = NULL;
873 cal_struct *cs = item_data->cs;
875 if (!CAL_STRCMP(part, "elm.swallow.colorbar")) {
877 int r = CALENDAR_SVC_GET(CAL_STRUCT_CALENDAR, CALENDAR_SVC_STRUCT_GET_INT(cs,CAL_VALUE_INT_CALENDAR_ID), NULL, &calendar);
878 if (r != CAL_SUCCESS)
880 ERR("CALENDAR_SVC_GET fail. %d", r);
884 icon = evas_object_rectangle_add(evas_object_evas_get(obj));
885 evas_object_size_hint_align_set(icon, EVAS_HINT_FILL, EVAS_HINT_FILL);
887 CALENDAR_SVC_GET_CALENDAR_COLOR(calendar, &calendar_color);
889 evas_object_color_set(icon, calendar_color.red, calendar_color.green, calendar_color.blue, calendar_color.alpha);
891 CALENDAR_SVC_STRUCT_FREE(&calendar);
894 } else if (!CAL_STRCMP(part, "elm.icon.1") ) {
895 cal_priority_type_t priority = CALENDAR_SVC_STRUCT_GET_INT(cs, CAL_VALUE_INT_PRIORITY);
896 c_retv_if(priority != EVENT_PRIORITY_HIGH, NULL);
898 icon = elm_icon_add(obj);
899 c_retvm_if(!icon, NULL, "elm_icon_add returned null");
901 elm_icon_file_set(icon, CAL_TASK_EVENT_HIGH_ICON, NULL);
903 } else if (!CAL_STRCMP(part, "elm.icon.2") ) {
904 Evas_Object *image = elm_image_add(obj);
905 c_retvm_if(!image, NULL, "elm_image_add returned null");
907 evas_object_propagate_events_set(image, EINA_FALSE);
909 int todo_status = CALENDAR_SVC_STRUCT_GET_INT(cs, CAL_VALUE_INT_TASK_STATUS);
910 if (CALS_TODO_STATUS_COMPLETED == todo_status) {
911 item_data->checked = EINA_TRUE;
912 elm_image_file_set(image, CAL_TASK_EVENT_COMPLETED_ICON, NULL);
914 item_data->checked = EINA_FALSE;
915 elm_image_file_set(image, CAL_TASK_EVENT_UNCOMPLETED_ICON, NULL);
918 elm_image_resizable_set(image, EINA_TRUE, EINA_TRUE);
919 evas_object_data_set(image, "priv", p);
920 evas_object_smart_callback_add(image, "clicked", __cal_list_genlist_item_check_clicked_callback, item_data);
922 evas_object_show(image);
929 // TODO: Create new type for header item data
930 static void __cal_list_delete_genlist_header_item(void *data, Evas_Object *obj)
934 c_retm_if(!data, "data is null.");
936 cal_list_genlist_item_data *item_data = data;
942 static void __cal_list_delete_genlist_item(void *data, Evas_Object *obj)
944 c_retm_if(!data, "data is null.");
945 cal_list_genlist_item_data *item_data = data;
947 if (item_data->color_str) {
948 free(item_data->color_str);
949 item_data->color_str = NULL;
955 static void __cal_list_append_list_with_iter(Eina_List **list, cal_iter *iter)
960 cal_struct *cs = NULL;
962 while (CALENDAR_SVC_ITER_NEXT(iter) == CAL_SUCCESS) {
965 cal_error error = CALENDAR_SVC_ITER_GET_INFO(iter, &cs);
966 if (error != CAL_SUCCESS) {
967 ERR("CALENDAR_SVC_ITER_GET_INFO() is failed(%d)", error);
971 *list = eina_list_append(*list, cs);
975 static void __cal_list_get_data_with_search(cal_list_data *p, int (*calendar_svc_search)(int, const char *, cal_iter **))
983 int search_field = CALS_SEARCH_FIELD_NONE;
984 search_field |= CALS_SEARCH_FIELD_SUMMARY;
985 search_field |= CALS_SEARCH_FIELD_LOCATION;
986 search_field |= CALS_SEARCH_FIELD_ATTENDEE;
987 search_field |= CALS_SEARCH_FIELD_DESCRIPTION;
989 int r= calendar_svc_search(search_field, p->searchtext, &it);
990 c_retm_if(r != CAL_SUCCESS, "calendar_svc_search() is failed(%d)");
992 __cal_list_append_list_with_iter(&p->append_list, it);
994 CALENDAR_SVC_ITER_REMOVE(&it);
999 static void __cal_list_get_events_with_search(cal_list_data *p)
1005 __cal_list_get_data_with_search(p, calendar_svc_event_search);
1010 static void __cal_list_get_todo_with_search(cal_list_data *p)
1016 __cal_list_get_data_with_search(p, calendar_svc_todo_search);
1021 static void __cal_list_genlist_item_select_callback(void *data, Evas_Object *obj, void *event_info)
1028 cal_struct *cs = data;
1030 Elm_Object_Item *it = elm_genlist_selected_item_get(obj);
1033 elm_genlist_item_selected_set(it, EINA_FALSE);
1035 cal_list_data *p = CAL_UTIL_GET_PRIV_DATA(obj);
1036 c_retm_if(!p, "priv is null.");
1038 cal_main_set_cs(p->ad, cs);
1040 if (p->mode != CAL_LIST_MODE_TASK)
1041 cal_detail_create_view(p->ad, p->parent);
1043 cal_detail_create_view_todo(p->ad, p->parent);
1046 static Eina_Bool __cal_list_check_idler_condition(cal_list_data *p)
1048 c_retv_if(!p, ECORE_CALLBACK_CANCEL);
1050 if (p->appended_event_count < eina_list_count(p->append_list) ||
1051 p->prepended_event_count < eina_list_count(p->prepend_list)) {
1053 return ECORE_CALLBACK_RENEW;
1057 ecore_idler_del(p->idler);
1061 return ECORE_CALLBACK_CANCEL;
1064 static void __cal_list_prepend_event_to_genlist(cal_list_data *p)
1069 c_ret_if(!p->prepend_list);
1071 struct appdata* ad = p->ad;
1072 c_retm_if(!ad, "ad is null.");
1074 Elm_Object_Item *it = NULL;
1075 int time_previous = 0;
1077 Eina_List *l, *list;
1079 int prepended_event_count = 0;
1080 struct tm tm_previous = {0};
1081 struct tm tm_current = {0};
1083 if (0 < p->prepended_event_count) {
1084 list = eina_list_nth_list(p->prepend_list, p->prepended_event_count);
1088 list = p->prepend_list;
1090 EINA_LIST_FOREACH(list, l, cs) {
1095 tm_current = p->ad->base_tm;
1097 if (CALENDAR_SVC_IS_ALLDAY_EVENT(cs)) {
1099 tm_current.tm_year = CALENDAR_SVC_STRUCT_GET_INT(cs, CALS_VALUE_INT_DTSTART_YEAR) - 1900;
1100 tm_current.tm_mon = CALENDAR_SVC_STRUCT_GET_INT(cs, CALS_VALUE_INT_DTSTART_MONTH) - 1;
1101 tm_current.tm_mday = CALENDAR_SVC_STRUCT_GET_INT(cs, CALS_VALUE_INT_DTSTART_MDAY);
1104 cal_util_convert_lli_to_tm(NULL, CALENDAR_SVC_STRUCT_GET_LLI(cs, CALS_VALUE_LLI_DTSTART_UTIME), &tm_current);
1106 int time_current = (tm_current.tm_year << 9) | (tm_current.tm_mon << 5) | tm_current.tm_mday;
1108 if (time_previous && time_previous != time_current)
1109 it = __cal_list_prepend_genlist_group_item(p->genlist, &cal_list_itc_h, &tm_previous);
1112 case CAL_LIST_MODE_NORMAL:
1113 __cal_list_prepend_genlist_item(p->genlist, &cal_list_normal_itc, cs, it, __cal_list_genlist_item_select_callback, cs);
1115 case CAL_LIST_MODE_DAY:
1116 __cal_list_prepend_genlist_item(p->genlist, &cal_list_normal_itc, cs, it, __cal_list_genlist_item_select_callback, cs);
1118 case CAL_LIST_MODE_TASK:
1119 __cal_list_prepend_genlist_item(p->genlist, &cal_task_itc, cs, it, __cal_list_genlist_item_select_callback, cs);
1122 __cal_list_prepend_genlist_item(p->genlist, &cal_list_itc, cs, it, __cal_list_genlist_item_select_callback, cs);
1126 time_previous = time_current;
1127 tm_previous = tm_current;
1129 prepended_event_count++;
1131 if (10 < prepended_event_count)
1136 __cal_list_prepend_genlist_group_item(p->genlist, &cal_list_itc_h, &tm_current);
1138 p->prepended_event_count += prepended_event_count;
1143 static void __cal_list_append_event_to_genlist(cal_list_data *p)
1149 struct appdata* ad = p->ad;
1152 Elm_Object_Item *it = NULL;
1153 int time_previous = 0;
1154 int time_today = (ad->today_tm.tm_year << 9) | (ad->today_tm.tm_mon << 5) | ad->today_tm.tm_mday;
1156 Eina_List *l, *list;
1158 int appended_event_count = 0;
1159 struct tm tm_current;
1161 if (0 < p->appended_event_count) {
1162 list = eina_list_nth_list(p->append_list, p->appended_event_count - 1);
1165 cs = eina_list_data_get(list);
1168 if (CALENDAR_SVC_IS_ALLDAY_EVENT(cs)) {
1170 tm_current.tm_year = CALENDAR_SVC_STRUCT_GET_INT(cs, CALS_VALUE_INT_DTSTART_YEAR) - 1900;
1171 tm_current.tm_mon = CALENDAR_SVC_STRUCT_GET_INT(cs, CALS_VALUE_INT_DTSTART_MONTH) - 1;
1172 tm_current.tm_mday = CALENDAR_SVC_STRUCT_GET_INT(cs, CALS_VALUE_INT_DTSTART_MDAY);
1174 cal_util_convert_lli_to_tm(NULL, CALENDAR_SVC_STRUCT_GET_LLI(cs, CALS_VALUE_LLI_DTSTART_UTIME), &tm_current);
1177 time_previous = (tm_current.tm_year << 9) | (tm_current.tm_mon << 5) | tm_current.tm_mday;
1179 list = eina_list_next(list);
1183 list = p->append_list;
1185 EINA_LIST_FOREACH(list, l, cs) {
1190 tm_current = p->ad->base_tm;
1192 if (CALENDAR_SVC_IS_ALLDAY_EVENT(cs)) {
1194 tm_current.tm_year = CALENDAR_SVC_STRUCT_GET_INT(cs, CALS_VALUE_INT_DTSTART_YEAR) - 1900;
1195 tm_current.tm_mon = CALENDAR_SVC_STRUCT_GET_INT(cs, CALS_VALUE_INT_DTSTART_MONTH) - 1;
1196 tm_current.tm_mday = CALENDAR_SVC_STRUCT_GET_INT(cs, CALS_VALUE_INT_DTSTART_MDAY);
1199 cal_util_convert_lli_to_tm(NULL, CALENDAR_SVC_STRUCT_GET_LLI(cs, CALS_VALUE_LLI_DTSTART_UTIME), &tm_current);
1201 int time_current = (tm_current.tm_year << 9) | (tm_current.tm_mon << 5) | tm_current.tm_mday;
1203 if (time_previous != time_current) {
1205 it = __cal_list_append_genlist_group_item(p->genlist, &cal_list_itc_h, &tm_current);
1206 time_previous = time_current;
1208 if (time_today == time_current) {
1209 ad->today_item = it;
1210 p->is_today_added = EINA_TRUE;
1213 if (!p->is_today_added) {
1214 if (time_today < time_current) {
1215 ad->today_item = it;
1216 p->is_today_added = EINA_TRUE;
1219 ad->today_item = it;
1222 p->last_itc_h = tm_current;
1226 case CAL_LIST_MODE_NORMAL:
1227 __cal_list_append_genlist_item(p->genlist, &cal_list_normal_itc, cs, it, __cal_list_genlist_item_select_callback, cs);
1229 case CAL_LIST_MODE_DAY:
1230 __cal_list_append_genlist_item(p->genlist, &cal_list_normal_itc, cs, it, __cal_list_genlist_item_select_callback, cs);
1232 case CAL_LIST_MODE_TASK:
1233 __cal_list_append_genlist_item(p->genlist, &cal_task_itc, cs, it, __cal_list_genlist_item_select_callback, cs);
1236 __cal_list_append_genlist_item(p->genlist, &cal_list_itc, cs, it, __cal_list_genlist_item_select_callback, cs);
1239 appended_event_count++;
1241 if (10 < appended_event_count)
1246 p->appended_event_count += appended_event_count;
1251 static void __cal_list_delete_load_more(Elm_Object_Item *item)
1255 char *text = elm_object_item_data_get(item);
1260 elm_object_item_del(item);
1263 static Elm_Object_Item * __cal_list_add_load_more_to_genlist(cal_list_data *p, const char *text, struct tm *tm)
1265 c_retv_if(!p, NULL);
1266 c_retv_if(!p->genlist, NULL);
1267 c_retv_if(!text, NULL);
1268 c_retv_if(!tm, NULL);
1270 char time[32] = {0};
1272 cal_util_get_time_text(time, sizeof(time), CAL_UTIL_DATE_FORMAT_8, NULL, tm);
1274 Elm_Object_Item *load_more = NULL;
1276 if (p->tm_start.tm_year == tm->tm_year
1277 && p->tm_start.tm_mon == tm->tm_mon
1278 && p->tm_start.tm_mday == tm->tm_mday)
1280 load_more = elm_genlist_item_prepend(p->genlist, &itc_1text, g_strdup_printf("%s %s", text, time), NULL, ELM_GENLIST_ITEM_NONE, __cal_list_prepend_more, p);
1282 load_more = elm_genlist_item_append(p->genlist, &itc_1text, g_strdup_printf("%s %s", text, time), NULL, ELM_GENLIST_ITEM_NONE, __cal_list_append_more, p);
1284 c_retv_if(!load_more, NULL);
1289 static void __cal_list_prepend_more(void *data, Evas_Object *obj, void *event_info)
1294 cal_list_data *p = data;
1296 __cal_list_delete_load_more(p->load_more_top);
1298 struct tm tm_start= p->tm_start;
1299 struct tm tm_end = tm_start;
1301 cal_util_update_tm_month(&tm_start, -3);
1303 Eina_List *prepend_more_list = CALENDAR_SVC_GET_EVENT_LIST(&tm_start, &tm_end);
1305 prepend_more_list = eina_list_reverse(prepend_more_list);
1307 p->tm_start = tm_start;
1309 p->prepend_list = eina_list_merge(p->prepend_list, prepend_more_list);
1311 __cal_list_prepend_event_to_genlist(p);
1314 p->load_more_top= __cal_list_add_load_more_to_genlist(p, "Load events before", &p->tm_start);
1317 static void __cal_list_append_more(void *data, Evas_Object *obj, void *event_info)
1322 cal_list_data *p = data;
1324 __cal_list_delete_load_more(p->load_more_bottom);
1326 struct tm tm_start= p->tm_end;
1327 struct tm tm_end = tm_start;
1329 cal_util_update_tm_month(&tm_end, 3);
1331 Eina_List *append_more_list = CALENDAR_SVC_GET_EVENT_LIST(&tm_start, &tm_end);
1335 p->append_list = eina_list_merge(p->append_list, append_more_list);
1337 __cal_list_append_event_to_genlist(p);
1340 p->load_more_bottom = __cal_list_add_load_more_to_genlist(p, "Load events after", &p->tm_end);
1343 static void __cal_list_create_load_more(cal_list_data *p)
1348 c_ret_if(!p->genlist);
1350 if (CAL_STRLEN(p->searchtext) || p->mode == CAL_LIST_MODE_TASK)
1354 p->load_more_top = __cal_list_add_load_more_to_genlist(p, "Load events before", &p->tm_start);
1356 p->load_more_bottom = __cal_list_add_load_more_to_genlist(p, "Load events after", &p->tm_end);
1359 Eina_Bool __cal_list_idler_callback(void* data)
1363 c_retv_if(!data, ECORE_CALLBACK_CANCEL);
1365 cal_list_data *p = data;
1367 c_retv_if(!p->idler, ECORE_CALLBACK_CANCEL);
1369 __cal_list_append_event_to_genlist(p);
1371 __cal_list_prepend_event_to_genlist(p);
1373 Eina_Bool ret = __cal_list_check_idler_condition(p);
1376 __cal_list_create_load_more(p);
1383 static void __cal_list_add_idler(cal_list_data *p)
1387 if (p->appended_event_count < eina_list_count(p->append_list) ||
1388 p->prepended_event_count < eina_list_count(p->prepend_list)) {
1391 ecore_idler_del(p->idler);
1393 p->idler = ecore_idler_add(__cal_list_idler_callback, p);
1394 c_ret_if(!p->idler);
1397 __cal_list_create_load_more(p);
1400 static void __cal_list_get_events(cal_list_data *p)
1406 struct appdata *ad = p->ad;
1409 struct tm tm_base = ad->base_tm;
1410 tm_base.tm_hour = 0;
1414 p->append_list = CALENDAR_SVC_GET_EVENT_LIST(&tm_base, &p->tm_end);
1415 cal_util_update_tm_day(&tm_base, -1);
1416 tm_base.tm_hour = 23;
1417 tm_base.tm_min = 59;
1418 tm_base.tm_sec = 59;
1420 p->prepend_list = CALENDAR_SVC_GET_EVENT_LIST(&p->tm_start, &tm_base);
1421 p->prepend_list = eina_list_reverse(p->prepend_list);
1426 static void __cal_list_get_task_list(cal_list_data *p)
1432 struct appdata *ad = p->ad;
1435 p->tm_start.tm_year = 70;
1436 p->tm_end.tm_year = 137;
1438 cals_status_t status;
1440 if (!ad->is_display_complete_todo) {
1441 status = CALS_TODO_STATUS_IN_PROCESS
1442 || CALS_TODO_STATUS_NONE
1443 || CALS_TODO_STATUS_NEEDS_ACTION
1444 || CALS_TODO_STATUS_CANCELLED;
1446 status = CALS_TODO_STATUS_IN_PROCESS
1447 || CALS_TODO_STATUS_NONE
1448 || CALS_TODO_STATUS_NEEDS_ACTION
1449 || CALS_TODO_STATUS_CANCELLED
1450 || CALS_TODO_STATUS_COMPLETED;
1453 int priority = CALS_TODO_PRIORITY_NONE
1454 |CALS_TODO_PRIORITY_HIGH
1455 |CALS_TODO_PRIORITY_MID
1456 |CALS_TODO_PRIORITY_LOW;
1458 p->append_list = CALENDAR_SVC_GET_TASK_LIST(&p->tm_start, &p->tm_end, priority, status, ad->todo_sort_type);
1463 static void __cal_list_gl_mode_right(void *data, Evas_Object *obj, void *event_info)
1465 c_retm_if(!event_info, "event_info is null");
1466 c_retm_if(!obj, "obj is null");
1468 Elm_Object_Item *it = event_info;
1470 elm_genlist_item_decorate_mode_set(it, "slide", EINA_TRUE);
1472 cal_list_data* p = CAL_UTIL_GET_PRIV_DATA(obj);
1473 c_retm_if(!p, "p is null");
1475 if (p->sweep_it && it != p->sweep_it)
1476 elm_genlist_item_decorate_mode_set(p->sweep_it, "slide", EINA_FALSE);
1481 static void __cal_list_gl_mode_left(void *data, Evas_Object *obj, void *event_info)
1483 c_retm_if(!event_info, "event_info is null");
1484 Elm_Object_Item *it = event_info;
1486 elm_genlist_item_decorate_mode_set(it, "slide", EINA_FALSE);
1489 static void __cal_list_gl_mode_cancel(void *data, Evas_Object *obj, void *event_info)
1491 c_retm_if(!obj, "obj is null");
1493 Elm_Object_Item *it = (Elm_Object_Item *)elm_genlist_decorated_item_get(obj);
1496 elm_genlist_item_decorate_mode_set(it, "slide", EINA_FALSE);
1499 static void __cal_list_get_events_with_day(cal_list_data *p)
1505 struct tm tm_start = p->ad->base_tm;
1506 tm_start.tm_hour = 0;
1507 tm_start.tm_min = 0;
1508 tm_start.tm_sec = 0;
1510 struct tm tm_end = tm_start;
1511 tm_end.tm_hour = 23;
1515 p->append_list = CALENDAR_SVC_GET_EVENT_LIST(&tm_start, &tm_end);
1520 static void __cal_list_delete_idler(cal_list_data *p)
1529 ecore_idler_del(p->idler);
1534 static void __cal_list_create_genlist(cal_list_data *p)
1543 Evas_Object *genlist = elm_genlist_add(p->layout);
1546 evas_object_data_set(genlist, "priv", p);
1548 if (p->mode != CAL_LIST_MODE_TASK) {
1549 evas_object_smart_callback_add(genlist, "drag,start,right", __cal_list_gl_mode_right, NULL);
1550 evas_object_smart_callback_add(genlist, "drag,start,left", __cal_list_gl_mode_left, NULL);
1551 evas_object_smart_callback_add(genlist, "drag,start,up", __cal_list_gl_mode_cancel, NULL);
1552 evas_object_smart_callback_add(genlist, "drag,start,down", __cal_list_gl_mode_cancel, NULL);
1555 elm_object_part_content_set(p->layout, "sw", genlist);
1557 p->genlist = genlist;
1560 static void __cal_list_create_no_contents(cal_list_data *p)
1565 c_ret_if(!p->layout);
1572 if (p->mode == CAL_LIST_MODE_TASK)
1573 title = C_("IDS_TASK_BODY_NO_TASKS");
1575 title = C_("IDS_CLD_BODY_NO_EVENTS");
1577 Evas_Object *no_contents = cal_util_add_nocontents(p->layout, title);
1578 c_ret_if(!no_contents);
1580 elm_object_part_content_set(p->layout, "sw", no_contents);
1582 p->no_contents = no_contents;
1585 static inline void __cal_list_show_searchbar(cal_list_data *p)
1587 if (p->mode != CAL_LIST_MODE_DAY)
1588 edje_object_signal_emit(CAL_UTIL_GET_EDJ_DATA(p->layout), "searchbar,show", "prog");
1591 static inline void __cal_list_hide_searchbar(cal_list_data *p)
1593 if (p->mode != CAL_LIST_MODE_DAY && !CAL_STRLEN(p->searchtext))
1594 edje_object_signal_emit(CAL_UTIL_GET_EDJ_DATA(p->layout), "searchbar,hide", "prog");
1597 static void __cal_list_delete_no_contents(cal_list_data *p)
1603 if (!p->no_contents)
1606 elm_object_part_content_unset(p->layout, "sw");
1608 evas_object_del(p->no_contents);
1610 p->no_contents = NULL;
1613 static void __cal_list_delete_genlist(cal_list_data *p)
1622 elm_object_part_content_unset(p->layout, "sw");
1624 evas_object_del(p->genlist);
1629 static void __cal_list_update_genlist(cal_list_data *p)
1635 __cal_list_delete_idler(p);
1637 elm_genlist_clear(p->genlist);
1639 struct appdata* ad = p->ad;
1642 ad->today_item = NULL;
1644 p->appended_event_count = 0;
1646 p->prepended_event_count = 0;
1648 if (eina_list_count(p->append_list)) {
1650 __cal_list_show_searchbar(p);
1652 __cal_list_delete_no_contents(p);
1654 __cal_list_create_genlist(p);
1656 __cal_list_append_event_to_genlist(p);
1658 __cal_list_add_idler(p);
1662 __cal_list_hide_searchbar(p);
1664 __cal_list_delete_genlist(p);
1666 __cal_list_create_no_contents(p);
1672 static void __cal_list_update_events(cal_list_data *p)
1676 CALENDAR_SVC_FREE_CS_LIST(&p->prepend_list);
1677 CALENDAR_SVC_FREE_CS_LIST(&p->append_list);
1679 struct appdata *ad = p->ad;
1682 p->tm_start = ad->base_tm;
1683 p->tm_start.tm_hour = 0;
1684 p->tm_start.tm_min = 0;
1685 p->tm_start.tm_sec = 0;
1687 p->tm_end = p->tm_start;
1688 p->tm_end.tm_hour = 23;
1689 p->tm_end.tm_min = 59;
1690 p->tm_end.tm_sec = 59;
1692 cal_util_update_tm_month(&p->tm_start, -3);
1693 cal_util_update_tm_month(&p->tm_end, 3);
1697 case CAL_LIST_MODE_NORMAL:
1699 if (CAL_STRLEN(p->searchtext))
1700 __cal_list_get_events_with_search(p);
1702 __cal_list_get_events(p);
1706 case CAL_LIST_MODE_DAY:
1708 __cal_list_get_events_with_day(p);
1712 case CAL_LIST_MODE_TASK:
1714 if (CAL_STRLEN(p->searchtext))
1715 __cal_list_get_todo_with_search(p);
1717 __cal_list_get_task_list(p);
1723 static void __cal_list_update_list(cal_list_data *p)
1729 __cal_list_update_events(p);
1731 __cal_list_update_genlist(p);
1736 static void __cal_list_searchbar_entry_changed_callback(void *data, Evas_Object *obj, void *event_info)
1740 cal_list_data *p = data;
1743 p->searchtext = elm_object_text_get(elm_object_part_content_get(p->searchbar, "elm.swallow.content"));
1745 __cal_list_update_list(p);
1750 static void __cal_list_cancel_button_callback(void *data, Evas_Object *obj, void *event_info)
1754 cal_list_data *p = data;
1757 elm_object_item_disabled_set(p->ad->bt_new, EINA_FALSE);
1759 Evas_Object *en = elm_object_part_content_get(p->searchbar, "elm.swallow.content");
1761 Ecore_IMF_Context *imf_context = elm_entry_imf_context_get(en);
1762 c_ret_if(!imf_context);
1764 ecore_imf_context_input_panel_hide(imf_context);
1769 static void __cal_list_day_event_changed_callback (void *user_data)
1771 c_retm_if(!user_data, "user_data is null");
1773 cal_list_data *p = user_data;
1776 evas_object_del(p->popup);
1780 cal_list_update_list(p->layout);
1783 static void __cal_list_delete_layout(void *data, Evas *e, Evas_Object *obj, void *ei)
1787 cal_list_data *p = data;
1788 c_retm_if(!p, "priv is null.");
1791 ecore_idler_del(p->idler);
1795 CALENDAR_SVC_DEL_EVENT_CHANGED_CALLBACK(__cal_list_day_event_changed_callback);
1797 CALENDAR_SVC_FREE_CS_LIST(&p->append_list);
1799 if (p->event_handler)
1800 ecore_event_handler_del(p->event_handler);
1803 evas_object_del(p->popup);
1812 static char* __cal_list_get_genlist_header_item_label(void *data, Evas_Object *obj, const char *part)
1814 c_retvm_if(!data, NULL, "datais null.");
1817 cal_list_genlist_item_data *item_data = data;
1818 const struct tm *tm = item_data->tm;
1820 if (!CAL_STRCMP(part, "elm.text")) {
1823 return strdup(C_("IDS_CLD_BODY_REPEATING_EVENT"));
1826 cal_util_get_time_text(buf, sizeof(buf), CAL_UTIL_DATE_FORMAT_1, NULL, tm);
1835 static char* __cal_list_get_genlist_item_cs_label(cal_list_data *p, cal_struct *cs)
1837 c_retvm_if(!cs, NULL, "cs is null.");
1838 c_retvm_if(!p, NULL, "p is null.");
1842 long long int lli_time;
1844 if (p->mode == CAL_LIST_MODE_TASK) {
1845 time = CAL_UTIL_DATE_FORMAT_12;
1846 lli_time = CALENDAR_SVC_STRUCT_GET_LLI(cs, CALS_VALUE_LLI_DTEND_UTIME);
1850 time = CAL_UTIL_TIME_FORMAT_6;
1852 time = CAL_UTIL_TIME_FORMAT_1;
1854 lli_time = CALENDAR_SVC_STRUCT_GET_LLI(cs, CALS_VALUE_LLI_DTSTART_UTIME);
1859 cal_util_convert_lli_to_tm(NULL, lli_time, &tm);
1863 cal_util_get_time_text(stime, sizeof(stime), NULL, time, &tm);
1865 return strdup(stime);
1868 static char* __cal_list_get_genlist_item_tm_label(cal_list_data *p, cal_struct *cs)
1870 c_retvm_if(!cs, NULL, "cs is null.");
1871 c_retvm_if(!p, NULL, "p is null.");
1877 long long int lli_start = CALENDAR_SVC_STRUCT_GET_LLI(cs, CALS_VALUE_LLI_DTSTART_UTIME);
1878 cal_util_convert_lli_to_tm(NULL, lli_start, &t);
1880 if (p->mode == CAL_LIST_MODE_TASK)
1881 cal_util_get_time_text(stime, sizeof(stime), NULL, CAL_UTIL_DATE_FORMAT_10, &t);
1885 cal_util_get_time_text(stime, sizeof(stime), NULL, CAL_UTIL_TIME_FORMAT_6, &t);
1887 cal_util_get_time_text(stime, sizeof(stime), NULL, CAL_UTIL_TIME_FORMAT_1, &t);
1890 snprintf(buf, sizeof(buf), "%s", stime);
1895 static char* __cal_list_get_genlist_item_label(void *data, Evas_Object *obj, const char *part)
1897 c_retv_if(!data, NULL);
1898 c_retv_if(!obj, NULL);
1899 c_retv_if(!part, NULL);
1901 const char *str = NULL;
1903 cal_list_genlist_item_data *item_data = data;
1905 cal_list_data *p = CAL_UTIL_GET_PRIV_DATA(obj);
1906 c_retv_if(!p, NULL);
1908 if (!item_data || !item_data->cs)
1911 cal_struct *cs = item_data->cs;
1912 c_retv_if(!cs, NULL);
1914 if (!CAL_STRCMP(part, "elm.text.1")) {
1916 if (item_data->color_str) {
1917 free(item_data->color_str);
1918 item_data->color_str = NULL;
1921 str = CALENDAR_SVC_STRUCT_GET_STR(cs, CAL_VALUE_TXT_SUMMARY);
1923 if (!CAL_STRLEN(str))
1924 str = C_("IDS_CLD_BODY_NO_TITLE");
1926 item_data->color_str = cal_util_get_search_color_text(p->searchtext, str);
1928 if (item_data->color_str) {
1929 return strdup(item_data->color_str);
1934 } else if (!CAL_STRCMP(part, "elm.text.2")) {
1936 str = CALENDAR_SVC_STRUCT_GET_STR(cs, CAL_VALUE_TXT_LOCATION);
1938 if (CAL_STRLEN(str))
1941 return strdup(C_("IDS_CLD_BODY_NO_LOCATION_SELECTED"));
1943 } else if (!CAL_STRCMP(part, "elm.text.3")) {
1945 if (CALENDAR_SVC_IS_ALLDAY_EVENT(cs))
1946 return strdup(C_("IDS_COM_BODY_ALL_DAY"));
1948 return __cal_list_get_genlist_item_cs_label(p, cs);
1950 } else if (!CAL_STRCMP(part, "elm.slide.text.1")) {
1952 str = CALENDAR_SVC_STRUCT_GET_STR(cs, CAL_VALUE_TXT_SUMMARY);
1954 if (CAL_STRLEN(str))
1957 return strdup(C_("IDS_CLD_BODY_NO_TITLE"));
1963 static char* __cal_list_get_genlist_task_item_label(void *data, Evas_Object *obj, const char *part)
1965 c_retv_if(!data, NULL);
1966 c_retv_if(!obj, NULL);
1967 c_retv_if(!part, NULL);
1969 const char *str = NULL;
1972 cal_list_genlist_item_data *item_data = data;
1974 cal_list_data *p = CAL_UTIL_GET_PRIV_DATA(obj);
1975 c_retv_if(!p, NULL);
1977 if (!item_data || !item_data->cs)
1980 cal_struct *cs = item_data->cs;
1981 c_retv_if(!cs, NULL);
1983 Eina_Bool is_done = EINA_FALSE;
1985 int todo_status = CALENDAR_SVC_STRUCT_GET_INT(cs, CAL_VALUE_INT_TASK_STATUS);
1986 if (CALS_TODO_STATUS_COMPLETED == todo_status) {
1987 is_done = EINA_TRUE;
1989 is_done = EINA_FALSE;
1992 if (!CAL_STRCMP(part, "elm.textblock.1")) {
1994 str = CALENDAR_SVC_STRUCT_GET_STR(cs, CAL_VALUE_TXT_SUMMARY);
1996 if (!p->searchtext) {
1997 if (CAL_STRLEN(str))
2000 tmp = strdup(C_("IDS_CLD_BODY_NO_TITLE"));
2002 char *text = calloc(1, strlen(tmp)+500);
2003 c_retv_if(!text, NULL);
2005 sprintf(text, "<strikethrough=on strikethrough_color=#D1D1D1>%s</strikethrough>", tmp);
2011 if (item_data->color_str) {
2012 free(item_data->color_str);
2013 item_data->color_str = NULL;
2016 if (!CAL_STRLEN(str)) {
2017 str = C_("IDS_CLD_BODY_NO_TITLE");
2020 char *text = calloc(1, strlen(str) + 500);
2021 c_retv_if(!text, NULL);
2023 item_data->color_str = cal_util_get_search_color_text(p->searchtext, str);
2024 if (item_data->color_str) {
2025 sprintf(text, "<strikethrough=on strikethrough_color=#D1D1D1>%s</strikethrough>",item_data->color_str);
2028 sprintf(text, "<strikethrough=on strikethrough_color=#D1D1D1>%s</strikethrough>", str);
2034 } else if (!CAL_STRCMP(part, "elm.text.1")) {
2036 str = CALENDAR_SVC_STRUCT_GET_STR(cs, CAL_VALUE_TXT_SUMMARY);
2038 if (CAL_STRLEN(str)) {
2039 free(item_data->color_str);
2040 item_data->color_str = NULL;
2042 str = C_("IDS_CLD_BODY_NO_TITLE");
2045 item_data->color_str = cal_util_get_search_color_text(p->searchtext, str);
2046 if (item_data->color_str) {
2047 return strdup(item_data->color_str);
2053 } else if (!CAL_STRCMP(part, "elm.text.2")) {
2057 str = CALENDAR_SVC_STRUCT_GET_STR(cs, CAL_VALUE_TXT_LOCATION);
2058 if (CAL_STRLEN(str)) {
2061 return strdup(C_("IDS_CLD_BODY_NO_LOCATION_SELECTED"));
2064 } else if (!CAL_STRCMP(part, "elm.textblock.2")) {
2068 str = CALENDAR_SVC_STRUCT_GET_STR(cs, CAL_VALUE_TXT_LOCATION);
2069 if (CAL_STRLEN(str)) {
2072 return strdup(C_("IDS_CLD_BODY_NO_LOCATION_SELECTED"));
2074 } else if (!CAL_STRCMP(part, "elm.text.3")) {
2078 if (CALENDAR_SVC_IS_ALLDAY_EVENT(cs))
2079 return strdup(C_("IDS_COM_BODY_ALL_DAY"));
2081 return __cal_list_get_genlist_item_cs_label(p, cs);
2082 } else if (!CAL_STRCMP(part, "elm.textblock.3")) {
2086 if (CALENDAR_SVC_IS_ALLDAY_EVENT(cs))
2087 return strdup(C_("IDS_COM_BODY_ALL_DAY"));
2089 return __cal_list_get_genlist_item_cs_label(p, cs);
2095 static void __cal_list_searchbar_entry_unfocused_callback(void *data, Evas_Object *obj, void *event_info)
2097 cal_list_data *p = data;
2099 elm_object_item_disabled_set(p->ad->bt_new, EINA_FALSE);
2102 static void __cal_list_searchbar_clicked_callback(void *data, Evas_Object *obj, void *event_info)
2104 cal_list_data *p = data;
2106 elm_object_item_disabled_set(p->ad->bt_new, EINA_TRUE);
2109 static void __cal_list_create_searchbar(cal_list_data *p)
2112 c_ret_if(!p->layout);
2114 Evas_Object *searchbar = cal_util_add_searchbar(p->layout, NULL, NULL, EINA_TRUE);
2115 c_ret_if(!searchbar);
2117 Evas_Object *entry = elm_object_part_content_get(searchbar, "elm.swallow.content");
2120 elm_entry_input_panel_layout_set(entry, ELM_INPUT_PANEL_LAYOUT_NORMAL);
2121 elm_entry_markup_filter_append(entry, elm_entry_filter_limit_size, &_limit_20char);
2123 evas_object_size_hint_weight_set(searchbar, EVAS_HINT_EXPAND, 0);
2124 evas_object_size_hint_align_set(searchbar, EVAS_HINT_FILL, 0.0);
2126 evas_object_smart_callback_add(entry, "changed", __cal_list_searchbar_entry_changed_callback, p);
2127 evas_object_smart_callback_add(entry, "unfocused", __cal_list_searchbar_entry_unfocused_callback, p);
2128 evas_object_smart_callback_add(searchbar, "clicked", __cal_list_searchbar_clicked_callback, p);
2129 evas_object_smart_callback_add(searchbar, "cancel,clicked", __cal_list_cancel_button_callback, p);
2131 evas_object_show(searchbar);
2132 elm_object_part_content_set(p->layout, "searchbar", searchbar);
2134 p->searchbar = searchbar;
2137 static Eina_Bool __cal_list_mouse_button_down_callback(void *data, int type, void *event)
2139 c_retvm_if(!event, EINA_FALSE, "event is null");
2140 c_retvm_if(!data, EINA_FALSE, "data is null");
2142 Ecore_Event_Mouse_Button *ev = event;
2143 cal_list_data *p = data;
2148 return ECORE_CALLBACK_RENEW;
2151 Evas_Object* cal_list_create_list(struct appdata *ad, Evas_Object *parent)
2155 c_retv_if(!ad, NULL);
2156 c_retv_if(!parent, NULL);
2158 cal_list_data *p = calloc(1, sizeof(cal_list_data));
2159 c_retv_if(!p, NULL);
2163 is_hour24 = ad->is_hour24;
2165 Evas_Object *layout = cal_util_add_layout(parent, "list/base");
2169 ERR("layout is null.");
2174 evas_object_data_set(layout, "priv", p);
2179 elm_object_item_disabled_set(p->ad->bt_new, EINA_FALSE);
2181 Evas_Object *bg = cal_util_add_bg(layout, EINA_FALSE);
2192 elm_object_part_content_set(layout, "base", bg);
2194 evas_object_event_callback_add(layout, EVAS_CALLBACK_DEL, __cal_list_delete_layout, p);
2196 p->event_handler = ecore_event_handler_add(ECORE_EVENT_MOUSE_BUTTON_DOWN, __cal_list_mouse_button_down_callback, p);
2203 void cal_list_scroll_today(struct appdata* ad)
2207 c_retm_if(!ad, "ad is null.");
2209 Elm_Object_Item* it = ad->today_item;
2211 elm_genlist_item_bring_in(it, ELM_GENLIST_ITEM_SCROLLTO_TOP);
2212 DBG("scroll to : %p", it);
2218 static void __cal_list_update_delete_button(cal_list_data *p)
2222 Elm_Object_Item *delete_button = NULL;
2224 if (p->mode == CAL_LIST_MODE_DAY)
2225 delete_button = p->bt_delete;
2227 delete_button = p->ad->bt_delete;
2229 if (eina_list_count(p->append_list))
2230 elm_object_item_disabled_set(delete_button, EINA_FALSE);
2232 elm_object_item_disabled_set(delete_button, EINA_TRUE);
2235 void cal_list_update_list(Evas_Object *ly)
2241 cal_list_data *p = CAL_UTIL_GET_PRIV_DATA(ly);
2244 struct appdata *ad = p->ad;
2247 if (p->mode == CAL_LIST_MODE_DAY)
2248 edje_object_signal_emit(CAL_UTIL_GET_EDJ_DATA(ly), "searchbar,hide", "prog");
2250 __cal_list_create_searchbar(p);
2252 __cal_list_update_list(p);
2254 __cal_list_update_delete_button(p);
2259 static void __cal_list_day_delete_button_callback(void *data, Evas_Object *obj, void *event_info)
2261 c_retm_if(!data, "data is null");
2262 c_retm_if(!obj, "obj is null");
2264 cal_list_data *p = data;
2265 Evas_Object *ly_delete = cal_list_delete_view_create_more_events(p->layout, p->ad, p->more_idx);
2266 c_retm_if(!ly_delete, "ly_delete is null");
2268 cal_list_delete_update_view(ly_delete);
2271 static void __cal_list_day_new_button_callback(void *data, Evas_Object *obj, void *event_info)
2273 c_retm_if(!data, "data is null");
2274 c_retm_if(!obj, "obj is null");
2276 cal_list_data *p = data;
2278 p->ad->base_hour = -1;
2281 cal_edit_create_view(p->ad, p->layout);
2284 Elm_Object_Item* cal_list_create_list_with_day(struct appdata *ad, Evas_Object *parent, int idx)
2288 c_retvm_if(!ad, NULL, "ad is null.");
2290 char title[1024] = {0};
2291 Evas_Object *controlbar;
2293 Evas_Object *ly = cal_list_create_list(ad, parent);
2294 c_retvm_if(!ly, NULL, "ly is null.");
2296 cal_list_data *p = (cal_list_data *)CAL_UTIL_GET_PRIV_DATA(ly);
2297 c_retvm_if(!p, NULL, "p is null.");
2300 evas_object_smart_callback_del(p->genlist, "drag,start,right", __cal_list_gl_mode_right);
2301 evas_object_smart_callback_del(p->genlist, "drag,start,left", __cal_list_gl_mode_left);
2302 evas_object_smart_callback_del(p->genlist, "drag,start,up", __cal_list_gl_mode_cancel);
2303 evas_object_smart_callback_del(p->genlist, "drag,start,down", __cal_list_gl_mode_cancel);
2306 p->mode = CAL_LIST_MODE_DAY;
2309 CALENDAR_SVC_ADD_EVENT_CHANGED_CALLBACK(__cal_list_day_event_changed_callback, p);
2311 cal_util_get_time_text(title, sizeof(title), CAL_UTIL_DATE_FORMAT_13, NULL, &p->ad->base_tm);
2313 p->navi_item = elm_naviframe_item_push(ad->nv, title, NULL, NULL, ly, NULL);
2316 ERR("elm_naviframe_item_push is failed");
2317 evas_object_del(ly);
2321 controlbar = cal_util_add_controlbar(ad->nv);
2324 ERR("cal_util_add_controlbar(ad->nv) is failed");
2325 elm_naviframe_prev_btn_auto_pushed_set(ad->nv, EINA_TRUE);
2326 elm_naviframe_item_pop(ad->nv);
2330 if (p->bt_delete != NULL) {
2331 elm_object_item_del(p->bt_delete);
2332 p->bt_delete = NULL;
2335 p->bt_new = elm_toolbar_item_append(controlbar, CAL_CBAR_ICON_CREAT, NULL,__cal_list_day_new_button_callback, p);
2336 if (p->bt_new != NULL) {
2337 elm_object_item_del(p->bt_new);
2341 p->bt_delete = elm_toolbar_item_append(controlbar, CAL_CBAR_ICON_DELETE, NULL, __cal_list_day_delete_button_callback, p);
2343 elm_object_item_part_content_set(p->navi_item, "controlbar", controlbar);
2344 cal_list_update_list(ly);
2348 return p->navi_item;
2351 Evas_Object* cal_list_create_list_todo(struct appdata *ad, Evas_Object *parent)
2355 c_retvm_if(!ad, NULL, "ad is null.");
2357 Evas_Object *ly = cal_list_create_list(ad, parent);
2358 c_retvm_if(!ly, NULL, "ly is null.");
2361 cal_list_data *p = CAL_UTIL_GET_PRIV_DATA(ly);
2362 c_retvm_if(!p, NULL, "p is null.");
2364 p->mode = CAL_LIST_MODE_TASK;
2366 r = vconf_get_int(CAL_VCONFKEY_COMPLETE_TODO_ON_OFF, (int *)&ad->is_display_complete_todo);
2367 c_retvm_if(r != 0, NULL, "vconf_get_int(CAL_VCONFKEY_COMPLETE_TODO_ON_OFF, (int *)&p->is_display_complete_todo) is failed");