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://floralicense.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.
22 #include "edit-view.h"
23 #include "detail-view.h"
24 #include "external-ug.h"
25 #include "cld-images.h"
26 #include "list-base.h"
27 #include "week-data.h"
29 #define WEEK_DAY_NUMS 7
30 #define BUF_SIZE_64 64
31 #define MAX_DATA_LEN 10
34 DISPLAY_SMALL_WEEKEND = 0,
49 Evas_Coord_Rectangle rect;
50 Evas_Coord_Point down;
51 Evas_Coord_Point move;
55 Eina_List *week_event_list;
62 cal_week_view_type week_view_type;
64 int expanded_week_day;
66 Evas_Coord_Point multi_mouse_down;
67 Evas_Coord_Point multi_mouse_move;
69 Evas_Coord mouse_down_distance;
79 calendar_record_h record;
80 }cal_week_genlist_item_data;
82 static _calendar_book_color calendar_color;
83 static char signal_source[32];
85 static Evas_Object* __cal_week_cal_get_genlist_item_icon(void *data, Evas_Object *obj, const char *part);
86 static void __cal_week_cal_expand_week_day(cal_week_data *p, int pos);
87 static void __cal_week_cal_unexpand_week_day(cal_week_data *p, int pos);
88 static void __cal_week_more_event_callback(void *data, Evas_Object *obj, const char *e, const char *src);
89 static void __cal_week_genlist_mouse_up_event_callback(void *data, Evas *e, Evas_Object *ly, void *ei);
90 static void __cal_week_genlist_mouse_down_event_callback(void *data, Evas *e, Evas_Object *ly, void *ei);
91 static void __cal_week_genlist_mouse_move_event_callback(void *data, Evas *e, Evas_Object *ly, void *ei);
92 static void __cal_week_set_more_text(cal_week_data *p, int count, int pos);
94 static char* __cal_week_get_genlist_item_label(void *data, Evas_Object *obj, const char *part);
95 static void __cal_week_delete_genlist_item(void *data, Evas_Object *obj);
96 static char* __cal_week_share_genlist_item_label(void *data, Evas_Object *obj, const char *part);
98 static Elm_Genlist_Item_Class _itc = {
99 .item_style = "2text.2icon.edit.1",
100 .func.content_get = __cal_week_cal_get_genlist_item_icon,
101 .func.text_get = __cal_week_get_genlist_item_label,
102 .func.del = __cal_week_delete_genlist_item,
105 static Elm_Genlist_Item_Class itc_1text = {
106 .item_style = "1text",
107 .func.content_get = NULL,
108 .func.text_get = __cal_week_share_genlist_item_label,
111 static char* __cal_week_share_genlist_item_label(void *data, Evas_Object *obj, const char *part)
113 c_retvm_if(!data || !obj || !part, NULL, "data is null");
115 char *name = (char *)data;
117 if (!CAL_STRCMP(part, "elm.text")) {
125 static void __cal_week_delete_genlist_item(void *data, Evas_Object *obj)
127 c_retm_if(!data, "data is null.");
128 cal_week_genlist_item_data *item_data = data;
134 static char* __cal_week_get_genlist_item_label(void *data, Evas_Object *obj, const char *part)
136 c_retv_if(!data, NULL);
137 c_retv_if(!obj, NULL);
138 c_retv_if(!part, NULL);
142 cal_week_data *p = CAL_UTIL_GET_PRIV_DATA(obj);
145 cal_week_genlist_item_data *item_data = data;
146 calendar_record_h record = item_data->record;
147 c_retv_if(!record, NULL);
149 calendar_error_e error = CALENDAR_ERROR_NONE;
150 Eina_Bool is_task =EINA_FALSE;
151 Eina_Bool is_done = EINA_FALSE;
152 int todo_status = CALENDAR_TODO_STATUS_COMPLETED;
154 if(_calendar_is_task_record(record))
157 error = calendar_record_get_int(record, _calendar_todo_calendar_book.todo_status, &todo_status);
158 c_warn_if(error != CALENDAR_ERROR_NONE, "calendar_record_get_int() is failed(%x)", error);
160 if (CALENDAR_TODO_STATUS_COMPLETED == todo_status) {
163 is_done = EINA_FALSE;
168 if (!CAL_STRCMP(part, "elm.textblock.1")) {
169 if (is_task && is_done) {
170 tmp = _calendar_get_summary(record);
172 char *text = calloc(1, strlen(tmp)+500);
174 ERR("text is NULL!");
179 sprintf(text, "<strikethrough=on strikethrough_color=#333333><color=#3333337F>%s</color></strikethrough>", tmp);
186 } else if (!CAL_STRCMP(part, "elm.text.1")) {
187 if (!is_task || !is_done) {
188 return _calendar_get_summary(record);
191 } else if (!CAL_STRCMP(part, "elm.textblock.2")) {
195 char etime[256] = {0};
196 char stime[256] = {0};
198 if (_calendar_is_allday_record(record)) {
199 return strdup(C_("IDS_COM_BODY_ALL_DAY"));
201 calendar_time_s start_time = {0};
202 calendar_time_s end_time = {0};
203 _calendar_get_start_time(record, &start_time);
204 _calendar_get_end_time(record, &end_time);
206 cal_util_convert_lli_to_tm(NULL, start_time.time.utime, &tm_start);
207 cal_util_convert_lli_to_tm(NULL, end_time.time.utime, &tm_end);
210 cal_util_get_time_text(stime, sizeof(stime), NULL, CAL_UTIL_TIME_FORMAT_6, &tm_start);
211 cal_util_get_time_text(etime, sizeof(etime), NULL, CAL_UTIL_TIME_FORMAT_6, &tm_end);
213 cal_util_get_time_text(stime, sizeof(stime), NULL, CAL_UTIL_TIME_FORMAT_1, &tm_start);
214 cal_util_get_time_text(etime, sizeof(etime), NULL, CAL_UTIL_TIME_FORMAT_1, &tm_end);
219 snprintf(buf, sizeof(buf), "%s - %s", stime, etime);
221 } else if (is_done) {
222 sprintf(buf, "<color=#2A89C27F>%s</color>", etime);
225 return strdup(etime);
233 static void __cal_week_free_week_event_list(cal_week_data *p)
236 c_ret_if(!p->week_event_list);
239 Eina_List *list = NULL;
241 EINA_LIST_FOREACH(p->week_event_list, l, list) {
243 _calendar_free_record_list(&list);
246 p->week_event_list = eina_list_free(p->week_event_list);
249 static void __cal_week_text_refresh_callback(void *data)
253 c_retm_if(!data, "data is null");
254 cal_week_data *p = data;
256 cal_main_update_title_text(p->ad);
258 elm_object_text_set(p->ad->new_event_button, S_("IDS_COM_BODY_CREATE"));
261 const char *part = NULL;
262 Evas_Object *box = NULL;
263 Evas_Object *genlist = NULL;
264 Eina_List *list = NULL;
265 struct tm t = p->ad->base_tm;
266 cal_util_update_tm_day(&t, p->ad->wday_start - t.tm_wday);
267 for (day_index = 0; day_index < WEEK_DAY_NUMS; day_index++) {
268 part = cal_util_get_part_text("wdb/%d/sw", day_index);
270 cal_util_set_time_text(CAL_UTIL_GET_EDJ_DATA(p->ly), cal_util_get_part_text("wdb/%d/text_wday", day_index), CAL_UTIL_DATE_FORMAT_2, NULL, &t);
271 cal_util_update_tm_day(&t, 1);
273 box = evas_object_data_get(p->ly, part);
274 list = elm_box_children_get(box);
275 genlist = eina_list_nth(list, 0);
276 elm_genlist_realized_items_update(genlist);
278 eina_list_free(list);
281 static void __cal_week_delete_layout(void *data, Evas *e, Evas_Object *obj, void *ei)
287 cal_week_data *p = CAL_UTIL_GET_PRIV_DATA(obj);
290 __cal_week_free_week_event_list(p);
292 cal_util_delete_evas_object(&p->left);
293 cal_util_delete_evas_object(&p->right);
296 evas_object_del(p->ctx);
301 evas_object_del(p->popup);
305 cal_lang_manager_remove_callback(__cal_week_text_refresh_callback, p);
310 static void __cal_week_resize_view(void *data, Evas *e, Evas_Object *ly, void *ei)
314 cal_week_data *p = data;
316 cal_util_get_geometry(&p->rect, p->ly);
319 static void __cal_week_mouse_down_event_callback(void *data, Evas *e, Evas_Object *ly, void *ei)
321 cal_week_data *p = data;
322 Evas_Event_Mouse_Down *ev = ei;
324 p->down.x = p->move.x = ev->canvas.x;
325 p->down.y = p->move.y = ev->canvas.y;
328 p->multi_touched = 0;
331 cal_util_get_geometry(&p->rect, p->ly);
334 static inline void __cal_week_set_block(Evas_Object *ly, int pos, Evas_Object *eo)
339 const char *part = cal_util_get_part_text("wdb/%d/disable", pos);
342 Evas_Object *sw = evas_object_data_get(ly, part);
346 Evas_Object *obj = elm_object_part_content_get(ly, part);
348 elm_object_part_content_unset(ly, part);
351 evas_object_del(obj);
353 elm_object_part_content_set(ly, part, eo);
355 evas_object_data_set(ly, part, eo);
358 static inline void __cal_week_set_box(Evas_Object *ly, int pos)
362 const char *part = cal_util_get_part_text("wdb/%d/sw", pos);
364 Evas_Object *sw = evas_object_data_get(ly, part);
368 Evas_Object *obj = elm_object_part_content_get(ly, part);
370 elm_object_part_content_unset(ly, part);
373 evas_object_del(obj);
375 elm_object_part_content_set(ly, part, NULL);
377 evas_object_data_set(ly, part, NULL);
380 static void __cal_week_highlight_today_title(struct tm *tm, Evas_Object *obj, int index)
389 localtime_r(&t, &cur);
391 if (cur.tm_year == tm->tm_year
392 && cur.tm_mon ==tm->tm_mon
393 && cur.tm_mday == tm->tm_mday) {
394 cal_util_emit_signal(obj, "focus,%d,today", index);
396 cal_util_emit_signal(obj, "unfocus,%d,today", index);
400 static void __cal_week_update_days(Evas_Object *ly, cal_week_data *p, struct tm *tm_base, int start)
409 struct tm t = *tm_base;
410 cal_util_update_tm_day(&t, start - t.tm_wday);
411 char date_text[8]={0};
413 for (day_index = 0; day_index < WEEK_DAY_NUMS; day_index++) {
414 memset(date_text, 0x00, 8);
415 sprintf(date_text, "%d", t.tm_mday);
416 edje_object_part_text_set(CAL_UTIL_GET_EDJ_DATA(ly), cal_util_get_part_text("wdb/%d/text", day_index), date_text);
418 cal_util_set_time_text(CAL_UTIL_GET_EDJ_DATA(ly), cal_util_get_part_text("wdb/%d/text_wday", day_index), CAL_UTIL_DATE_FORMAT_2, NULL, &t);
420 cal_util_set_text(CAL_UTIL_GET_EDJ_DATA(ly), cal_util_get_part_text("wdb/%d/more", day_index), "");
422 __cal_week_set_box(ly, day_index);
424 __cal_week_highlight_today_title(&t, CAL_UTIL_GET_EDJ_DATA(ly), day_index);
426 cal_util_update_tm_day(&t, 1);
430 static void __cal_week_fill_days(Evas_Object *ly, cal_week_data *p, struct tm *tm, int start)
434 for (i = 0; i < WEEK_DAY_NUMS; i++) {
435 int wday = CAL_UTIL_GET_WDAY(i + start);
439 cal_util_emit_signal(CAL_UTIL_GET_EDJ_DATA(ly), "sunday,%d", i);
442 cal_util_emit_signal(CAL_UTIL_GET_EDJ_DATA(ly), "satday,%d", i);
447 __cal_week_update_days(ly, p, tm, start);
450 static Evas_Object* __cal_week_create_week_view(cal_week_data *p, int d)
454 struct appdata* ad = p->ad;
455 c_retv_if(!ad, NULL);
458 struct tm tm_s, tm_e;
462 tm_s.tm_mday -= CAL_UTIL_GET_WDAY(tm_s.tm_wday - ad->wday_start);
466 r_s = cal_util_update_tm_day(&tm_s, d * 7);
467 r_e = cal_util_update_tm_day(&tm_e, d * 7);
469 if (r_s == -1 && r_e == -1) {
472 ly = cal_util_add_layout(p->parent, p->name);
474 c_retv_if(!ly, NULL);
476 __cal_week_fill_days(ly, p, &tm_s, ad->wday_start);
479 evas_object_resize(ly, p->rect.w, p->rect.h);
481 Evas_Object *clip = (Evas_Object*)edje_object_part_object_get(CAL_UTIL_GET_EDJ_DATA(ad->main), "clip");
482 c_retv_if(!clip, NULL);
484 evas_object_clip_set(ly, (Evas_Object*)clip);
489 static void __cal_week_move_left(cal_week_data *p, Evas_Coord x)
494 p->left = __cal_week_create_week_view(p, -1);
498 evas_object_move(p->left, x, p->rect.y);
501 static void __cal_week_move_right(cal_week_data *p, Evas_Coord x)
506 p->right = __cal_week_create_week_view(p, 1);
510 evas_object_move(p->right, x, p->rect.y);
513 static int __cal_week_check_is_out_date(cal_week_data *p, int d)
515 c_retvm_if(!p, -1, "p is null");
517 struct tm tm_s, tm_e;
520 tm_s = p->ad->base_tm;
522 tm_s.tm_mday -= CAL_UTIL_GET_WDAY(tm_s.tm_wday - p->ad->wday_start);
526 r_s = cal_util_update_tm_day(&tm_s, d * 7);
527 r_e = cal_util_update_tm_day(&tm_e, d * 7);
529 if(r_s == -1 && r_e == -1)
535 static void __cal_week_mouse_up_event_callback(void *data, Evas *e, Evas_Object *ly, void *ei)
537 cal_week_data *p = data;
542 Evas_Event_Mouse_Up *ev = ei;
544 if (!p->downed || p->multi_touched)
553 dx = p->down.x - ev->canvas.x;
559 if (cal_util_get_flick_distance_threshold() < dx) {
560 r = __cal_week_check_is_out_date(p, d);
562 cal_util_update_tm_day(&(p->ad->base_tm), d * 7);
563 cal_main_update_title_text(p->ad);
564 cal_week_update_view(ly);
569 __cal_week_move_left(p, -p->rect.w);
570 __cal_week_move_right(p, p->rect.w);
573 evas_object_move(ly, p->rect.x, p->rect.y);
576 static void __cal_week_mouse_move_event_callback(void *data, Evas *e, Evas_Object *ly, void *ei)
578 c_retm_if(!data, "data is null");
579 c_retm_if(!ei, "ei is null");
581 cal_week_data *p = data;
582 Evas_Event_Mouse_Move *ev = ei;
588 c_retm_if(!p->ad, "p->ad is null");
590 p->move.x = ev->cur.canvas.x;
591 p->move.y = ev->cur.canvas.y;
593 if (!p->downed || p->multi_touched)
596 dx = p->move.x - p->down.x;
599 dy = p->down.y - p->move.y;
603 static int __cal_week_get_position(cal_week_data *p, struct tm *tm, int start)
605 return CAL_UTIL_GET_WDAY(tm->tm_wday - start);
608 static void __cal_week_update_select(cal_week_data *p, int pos)
613 cal_util_emit_signal(CAL_UTIL_GET_EDJ_DATA(p->ly), "unfocus,%d,wday", p->pos_selected);
614 p->pos_selected = pos;
615 cal_util_emit_signal(CAL_UTIL_GET_EDJ_DATA(p->ly), "focus,%d,wday", p->pos_selected);
618 static void __cal_week_down_event_callback(void *data, Evas_Object *obj, const char *e, const char *src)
620 c_retm_if(!data, "data is null");
621 cal_week_data *p = data;
622 p->pos_down = atoi(e);
623 c_retm_if(WEEK_DAY_NUMS == p->pos_down, "pos_down is todo.");
626 static void __cal_week_cal_event_callback(void *data, Evas_Object *obj, const char *e, const char *src)
629 c_retm_if(!data, "data is null");
630 cal_week_data *p = data;
632 if (p->pos_selected == -1)
644 struct appdata *ad = p->ad;
645 c_retm_if(!ad, "ad is null");
648 if (pos == WEEK_DAY_NUMS) {
651 if (pos != p->pos_selected) {
652 __cal_week_update_select(p, pos);
657 int d = pos - p->pos_selected;
659 cal_util_update_tm_day(&ad->base_tm, d);
662 if (pos != p->pos_selected) {
663 __cal_week_update_select(p, pos);
669 static void __cal_week_genlist_item_check_changed_callback(void *data, Evas_Object *obj, void *event_info)
674 cal_week_genlist_item_data *item_data = data;
676 calendar_record_h record =item_data->record;
678 calendar_error_e error = CALENDAR_ERROR_NONE;
680 calendar_record_h todo_original_record = NULL;
681 int todo_id = _calendar_get_record_index(record);
682 error = calendar_db_get_record(_calendar_todo._uri, todo_id, &todo_original_record);
683 c_warn_if(error != CALENDAR_ERROR_NONE, "calendar_db_get_record(%d) is failed(%x)", todo_id, error);
685 Eina_Bool check_status = elm_check_state_get(obj);
688 error = calendar_record_set_int(todo_original_record, _calendar_todo.todo_status, CALENDAR_TODO_STATUS_COMPLETED);
689 c_warn_if(error != CALENDAR_ERROR_NONE, "calendar_record_set_int() is failed(%x)", error);
691 error = calendar_record_set_int(record, _calendar_todo_calendar_book.todo_status, CALENDAR_TODO_STATUS_COMPLETED);
692 c_warn_if(error != CALENDAR_ERROR_NONE, "calendar_record_set_int() is failed(%x)", error);
695 error = calendar_record_set_int(todo_original_record, _calendar_todo.todo_status, CALENDAR_TODO_STATUS_IN_PROCESS);
696 c_warn_if(error != CALENDAR_ERROR_NONE, "calendar_record_set_int() is failed(%x)", error);
698 error = calendar_record_set_int(record, _calendar_todo_calendar_book.todo_status, CALENDAR_TODO_STATUS_IN_PROCESS);
699 c_warn_if(error != CALENDAR_ERROR_NONE, "calendar_record_set_int() is failed(%x)", error);
702 Evas_Object *genlist = evas_object_data_get(obj, "genlist");
705 cal_week_data *p = evas_object_data_get(genlist, "priv");
709 cal_main_remove_db_changed_callback(p->ad);
711 error = calendar_db_update_record(todo_original_record);
712 c_warn_if(error != CALENDAR_ERROR_NONE, "calendar_db_update_record() is failed(%x)", error);
714 cal_main_add_db_changed_callback(p->ad);
716 elm_genlist_item_update(item_data->it);
720 static Evas_Object* __cal_week_cal_get_genlist_item_icon(void *data, Evas_Object *obj, const char *part)
722 cal_week_data *p = evas_object_data_get(obj, "priv");
724 c_retv_if(!p->ad, NULL);
726 cal_week_genlist_item_data *item_data = data;
727 calendar_record_h record = item_data->record;
728 c_retv_if(!record, NULL);
730 if (!CAL_STRCMP(part, "elm.swallow.colorbar")) {
733 icon = evas_object_rectangle_add(evas_object_evas_get(obj));
734 evas_object_size_hint_align_set(icon, EVAS_HINT_FILL, EVAS_HINT_FILL);
736 _calendar_get_calendar_color(record, &calendar_color);
738 evas_object_color_set(icon, calendar_color.red, calendar_color.green, calendar_color.blue, calendar_color.alpha);
741 } else if (!CAL_STRCMP(part, "elm.edit.icon.1")) {
743 if(!_calendar_is_task_record(record))
746 Evas_Object *check = elm_check_add(obj);
747 c_retvm_if(!check, NULL, "elm_check_add returned null");
749 Eina_Bool check_status = EINA_FALSE;
750 calendar_error_e error = CALENDAR_ERROR_NONE;
752 error = calendar_record_get_int(record, _calendar_todo_calendar_book.todo_status, &todo_status);
753 c_warn_if(error != CALENDAR_ERROR_NONE, "calendar_record_get_int() is failed(%x)", error);
755 if (CALENDAR_TODO_STATUS_COMPLETED == todo_status) {
756 check_status = EINA_TRUE;
757 } else if (CALENDAR_TODO_STATUS_IN_PROCESS == todo_status) {
758 check_status = EINA_FALSE;
761 elm_check_state_pointer_set(check, &check_status);
762 evas_object_data_set(check, "genlist", obj);
763 evas_object_smart_callback_add(check, "changed", __cal_week_genlist_item_check_changed_callback, item_data);
764 evas_object_propagate_events_set(check, EINA_FALSE);
767 } else if (!CAL_STRCMP(part, "elm.icon.1")) {
768 if (_calendar_is_facebook_record(record)) {
769 Evas_Object *icon = elm_icon_add(obj);
770 c_retv_if(!icon, NULL);
772 int r = elm_icon_file_set(icon, CAL_IMAGES_EDJ, CAL_IMAGES_FACEBOOK);
782 static void __cal_week_cal_genlist_item_select_callback(void *data, Evas_Object *obj, void *event_info)
785 calendar_record_h record = data;
787 Elm_Object_Item *it = elm_genlist_selected_item_get(obj);
789 elm_genlist_item_selected_set(it, EINA_FALSE);
791 cal_week_data *p = CAL_UTIL_GET_PRIV_DATA(obj);
798 p->ad->cid = _calendar_get_record_index(record);
800 int day_index = (int)evas_object_data_get(obj, "pos");
801 int diff = day_index - p->pos_selected;
803 cal_util_update_tm_day(&(p->ad->base_tm), diff);
804 __cal_week_update_select(p, day_index);
807 cal_detail_create_view(p->ad, record, NULL, NULL);
810 static void __cal_week_ctx_popup_hide_callback(void *data, Evas_Object *obj, void *ei)
814 cal_week_data* p = data;
818 evas_object_del(obj);
821 static void __cal_week_init_ctx_data(calendar_record_h record, cal_week_data *p)
826 p->ad->cid = _calendar_get_record_index(record);
829 static void __cal_week_edit_popup_response_event_callback(void *data, Evas_Object *obj, void *event_info)
833 c_retm_if(!data, "data is null");
834 c_retm_if(!obj, "obj is null");
836 Evas_Object *popup = data;
837 Evas_Object *button = obj;
839 cal_week_data* p = evas_object_data_get(popup, "data");
840 c_retm_if(!p, "p is null");
842 struct appdata* ad = p->ad;
843 c_retm_if(!ad, "ad is null");
845 calendar_record_h record = evas_object_data_get(p->popup, "record");
846 c_retm_if(!record, "record is null");
848 if (!strcmp(elm_object_text_get(button), C_("IDS_CLD_BODY_ONLY_THIS_EVENT"))) {
849 cal_edit_create_view(ad, record, NULL, NULL);
850 }else if (!strcmp(elm_object_text_get(button), C_("IDS_CLD_POP_ALL_REPETITIVE_EVENTS"))) {
851 calendar_record_h origin_record = NULL;
852 int index = _calendar_get_record_index(record);
853 origin_record = _calendar_get_record_with_index(index);
855 cal_edit_create_view(ad, origin_record, NULL, NULL);
856 calendar_record_destroy(origin_record, true);
859 evas_object_del(popup);
863 static void __cal_week_delete_event(cal_week_data* p, Eina_Bool is_delete_all)
867 struct appdata* ad = p->ad;
870 if (!is_delete_all) {
872 calendar_record_h instance = NULL;
874 instance = evas_object_data_get(p->ly, "record");
876 _calendar_delete_recurrence_instance(instance);
879 _calendar_delete_record_with_index(ad->cid);
882 static void __cal_week_delete_popup_response_event_callback(void *data, Evas_Object *obj, void *event_info)
886 c_retm_if(!data, "data is null");
887 c_retm_if(!obj, "obj is null");
889 Evas_Object *popup = data;
890 Evas_Object *button = obj;
892 cal_week_data* p = evas_object_data_get(popup, "data");
893 c_retm_if(!p, "p is null");
895 if (!strcmp(elm_object_text_get(button), C_("IDS_CLD_BODY_ONLY_THIS_EVENT")))
896 __cal_week_delete_event(p, EINA_FALSE);
897 else if (!strcmp(elm_object_text_get(button), C_("IDS_CLD_POP_ALL_REPETITIVE_EVENTS")))
898 __cal_week_delete_event(p, EINA_TRUE);
900 evas_object_del(popup);
904 static void __cal_week_show_popup(cal_week_data *p, const char *tit, Eina_Bool is_edit)
908 void (*callback_func)(void *data, Evas_Object *obj, void *ei) = NULL;
911 callback_func = __cal_week_edit_popup_response_event_callback;
913 callback_func = __cal_week_delete_popup_response_event_callback;
916 p->popup = cal_util_add_popup(p->ad->win, "verticalbuttonstyle", NULL, tit, callback_func,
917 p, C_("IDS_CLD_BODY_ONLY_THIS_EVENT"),
918 C_("IDS_CLD_POP_ALL_REPETITIVE_EVENTS"),
919 S_("IDS_COM_SK_CANCEL"), NULL);
922 c_retm_if(!p->popup, "cal_util_add_popup(p->ad->win) returned null");
924 evas_object_data_set(p->popup, "priv", p);
927 static void __cal_week_edit_norepeat_popup_response_event_callback(void *data, Evas_Object *obj, void *event_info)
929 c_retm_if(!data, "data is null");
930 c_retm_if(!obj, "obj is null");
932 Evas_Object *popup = data;
933 Evas_Object *button = obj;
935 cal_week_data* p = evas_object_data_get(popup, "data");
936 c_retm_if(!p, "p is null");
938 calendar_record_h record = evas_object_data_get(p->popup, "record");
939 c_retm_if(!record, "record is null");
941 if (!strcmp(elm_object_text_get(button), S_("IDS_COM_SK_OK"))) {
942 calendar_record_h origin_record = NULL;
943 int index = _calendar_get_record_index(record);
944 origin_record = _calendar_get_record_with_index(index);
946 cal_edit_create_view(p->ad, origin_record, NULL, NULL);
947 calendar_record_destroy(origin_record, true);
950 evas_object_del(popup);
954 static void __cal_week_edit_call_callback(void *data, Evas_Object *obj, void *ei)
960 cal_week_genlist_item_data *item_data = data;
961 cal_week_data *p = item_data->p;
964 calendar_record_h record = item_data->record;
967 elm_ctxpopup_dismiss(obj);
969 __cal_week_init_ctx_data(record, p);
971 if (_calendar_is_task_record(record)) {
972 p->popup = cal_util_add_popup(p->ad->win, NULL, NULL, C_("IDS_TASK_HEADER_EDIT_TASK"), __cal_week_edit_norepeat_popup_response_event_callback, p,
973 S_("IDS_COM_SK_OK"),S_("IDS_COM_SK_CANCEL"), NULL);
975 if (_calendar_is_recurrent_record(record))
976 __cal_week_show_popup(p, C_("IDS_CLD_HEADER_EDIT_EVENT"), EINA_TRUE);
978 p->popup = cal_util_add_popup(p->ad->win, NULL, NULL, C_("IDS_CLD_HEADER_EDIT_EVENT"), __cal_week_edit_norepeat_popup_response_event_callback, p,
979 S_("IDS_COM_SK_OK"),S_("IDS_COM_SK_CANCEL"), NULL);
982 evas_object_data_set(p->popup, "record", record);
985 static void __cal_week_delete_norepeat_popup_response_event_callback(void *data, Evas_Object *obj, void *event_info)
987 c_retm_if(!data, "data is null");
988 c_retm_if(!obj, "obj is null");
990 Evas_Object *popup = data;
991 Evas_Object *button = obj;
993 cal_week_data* p = evas_object_data_get(popup, "data");
994 c_retm_if(!p, "p is null");
995 c_retm_if(!p->ly, "p->ly is null");
997 if (NULL != strstr(elm_object_text_get(button), S_("IDS_COM_BODY_DELETE"))) {
998 calendar_record_h record = evas_object_data_get(p->ly, "record");
1000 _calendar_delete_record(record);
1002 int r = status_message_post(S_("IDS_COM_POP_DELETED"));
1003 c_warn_if(r != STATUS_ERROR_NONE, "status_message_post() is failed(%d)", r);
1006 evas_object_del(p->popup);
1010 static void __cal_week_delete_call_callback(void *data, Evas_Object *obj, void *ei)
1016 cal_week_genlist_item_data *item_data = data;
1017 cal_week_data *p = item_data->p;
1020 calendar_record_h record = item_data->record;
1021 c_retm_if(!record, "record is NULL.");
1023 elm_ctxpopup_dismiss(obj);
1025 __cal_week_init_ctx_data(record, p);
1029 evas_object_data_set(p->ly, "record", record);
1031 if (_calendar_is_task_record(record)) {
1032 p->popup = cal_util_add_popup(p->ad->win, NULL, NULL, S_("IDS_COM_POP_DELETE_Q"), __cal_week_delete_norepeat_popup_response_event_callback, p,
1033 S_("IDS_COM_BODY_DELETE"),S_("IDS_COM_SK_CANCEL"), NULL);
1035 if (_calendar_is_recurrent_record(record)) {
1036 __cal_week_show_popup(p, C_("IDS_CLD_OPT_DELETE_EVENT"), EINA_FALSE);
1038 p->popup = cal_util_add_popup(p->ad->win, NULL, NULL, S_("IDS_COM_POP_DELETE_Q"), __cal_week_delete_norepeat_popup_response_event_callback, p,
1039 S_("IDS_COM_BODY_DELETE"),S_("IDS_COM_SK_CANCEL"), NULL);
1045 static void __cal_week_share_popup_response_callback(void *data, Evas_Object *obj, void *ei)
1047 c_retm_if(!data, "data is null");
1048 c_retm_if(!obj, "obj is null");
1050 Evas_Object *popup = data;
1052 cal_week_data* p = evas_object_data_get(popup, "data");
1053 c_retm_if(!p, "p is null");
1055 evas_object_del(popup);
1060 static inline void __cal_week_delete_popup(cal_week_data *p)
1062 c_retm_if(!p || !p->popup, "param is null");
1064 evas_object_del(p->popup);
1069 static void __cal_week_via_message_callback(void *data, Evas_Object *obj, void *ei)
1071 c_retm_if(!data, "data is null");
1072 c_retm_if(!obj, "obj is null");
1074 cal_week_data *p = data;
1075 c_retm_if(!p->ad, "p->ad is null");
1077 calendar_record_h record = _calendar_get_record_with_index(p->ad->cid);
1079 _calendar_export_record_to_vcs(record, CAL_MESSAGE_VCS);
1081 p->ad->ug = cal_launch_ug_with_var(NULL, CAL_MESSAGE_COMPOSER_UG, NULL, "ATTACHFILE", CAL_MESSAGE_VCS, NULL);
1083 __cal_week_delete_popup(p);
1086 static void __cal_week_via_email_callback(void *data, Evas_Object *obj, void *ei)
1088 c_retm_if(!data, "data is null");
1089 c_retm_if(!obj, "obj is null");
1091 cal_week_data *p = data;
1092 c_retm_if(!p->ad, "p->ad is null");
1094 calendar_record_h record = _calendar_get_record_with_index(p->ad->cid);
1096 _calendar_export_record_to_vcs(record, CAL_MESSAGE_VCS);
1098 p->ad->ug = cal_launch_ug_with_var(NULL, CAL_EMAIL_COMPOSER_UG, (struct ug_cbs *)p->ad, "RUN_TYPE", "5", "ATTACHMENT", CAL_EMAIL_VCS, NULL);
1100 __cal_week_delete_popup(p);
1103 static void __cal_week_via_bluetooth_callback(void *data, Evas_Object *obj, void *ei)
1105 c_retm_if(!data, "data is null");
1106 c_retm_if(!obj, "obj is null");
1108 cal_week_data *p = data;
1109 c_retm_if(!p->ad, "p->ad is null");
1111 calendar_record_h record = _calendar_get_record_with_index(p->ad->cid);
1113 _calendar_export_record_to_vcs(record, CAL_MESSAGE_VCS);
1115 p->ad->ug = cal_launch_ug_with_var(NULL, CAL_BLUETOOTH_UG, NULL, "launch-type", "send", "filecount", "1", "files", CAL_BLUETOOTH_VCS, NULL);
1117 __cal_week_delete_popup(p);
1120 static void __cal_week_share_call_callback(void *data, Evas_Object *obj, void *ei)
1126 cal_week_genlist_item_data *item_data = data;
1127 cal_week_data *p = item_data->p;
1130 calendar_record_h record = item_data->record;
1133 elm_ctxpopup_dismiss(obj);
1135 __cal_week_init_ctx_data(record, p);
1137 p->popup = cal_util_add_popup(p->ad->win, "menustyle", S_("IDS_COM_BUTTON_SHARE"), NULL,
1138 __cal_week_share_popup_response_callback, p,
1139 S_("IDS_COM_BODY_CLOSE"), NULL);
1141 c_retm_if(!p->popup, "cal_util_add_popup returned null");
1142 evas_object_data_set(p->popup, "data", p);
1144 Evas_Object *genlist = elm_genlist_add(p->popup);
1145 c_retm_if(!genlist, "elm_genlist_add returned null");
1147 elm_genlist_item_append(genlist, &itc_1text, S_("IDS_COM_BODY_EMAIL"), NULL, ELM_GENLIST_ITEM_NONE, __cal_week_via_email_callback, p);
1148 elm_genlist_item_append(genlist, &itc_1text, S_("IDS_COM_BODY_MESSAGE"), NULL, ELM_GENLIST_ITEM_NONE, __cal_week_via_message_callback, p);
1149 elm_genlist_item_append(genlist, &itc_1text, S_("IDS_COM_BODY_BLUETOOTH"), NULL, ELM_GENLIST_ITEM_NONE, __cal_week_via_bluetooth_callback, p);
1151 elm_object_content_set(p->popup, genlist);
1152 evas_object_show(p->popup);
1155 static void __cal_week_new_call_callback(void *data, Evas_Object *obj, void *ei)
1161 cal_week_genlist_item_data *item_data = data;
1163 cal_week_data *p = item_data->p;
1166 struct appdata *ad = p->ad;
1172 elm_ctxpopup_dismiss(obj);
1174 calendar_record_h record = item_data->record;
1177 cal_edit_create_view(p->ad, record, NULL, NULL);
1180 static void __cal_week_show_ctx_popup(cal_week_genlist_item_data *item_data, cal_week_data *p)
1182 c_ret_if(!item_data);
1186 evas_object_del(p->ctx);
1190 p->ctx = elm_ctxpopup_add(p->ad->naviframe);
1193 evas_object_smart_callback_add(p->ctx, "dismissed", __cal_week_ctx_popup_hide_callback, p);
1196 elm_ctxpopup_item_append(p->ctx, S_("IDS_COM_SK_EDIT"), NULL, __cal_week_edit_call_callback, item_data);
1197 elm_ctxpopup_item_append(p->ctx, S_("IDS_COM_BODY_DELETE"), NULL, __cal_week_delete_call_callback, item_data);
1200 elm_ctxpopup_item_append(p->ctx, S_("IDS_COM_BUTTON_SHARE"), NULL, __cal_week_share_call_callback, item_data);
1201 elm_ctxpopup_item_append(p->ctx, S_("IDS_COM_SK_NEW"), NULL, __cal_week_new_call_callback, item_data);
1203 elm_ctxpopup_direction_priority_set(p->ctx, ELM_CTXPOPUP_DIRECTION_DOWN,
1204 ELM_CTXPOPUP_DIRECTION_RIGHT,
1205 ELM_CTXPOPUP_DIRECTION_LEFT,
1206 ELM_CTXPOPUP_DIRECTION_UP);
1207 evas_object_data_set(p->ctx, "priv", p);
1208 evas_object_move(p->ctx, p->down.x, p->down.y);
1209 evas_object_show(p->ctx);
1214 static void __cal_week_add_event(Eina_List *list, int day_index, cal_week_data *p)
1219 Eina_List *l = NULL;
1220 calendar_record_h record = NULL;
1222 int ncount = eina_list_count(list);
1224 Evas_Object *box = cal_util_add_box(p->ly);
1227 Evas_Object *genlist = elm_genlist_add(box);
1230 evas_object_data_set(genlist, "priv", p);
1231 evas_object_size_hint_align_set(genlist, EVAS_HINT_FILL, EVAS_HINT_FILL);
1232 evas_object_size_hint_weight_set(genlist, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1233 evas_object_show(box);
1234 evas_object_show(genlist);
1236 EINA_LIST_FOREACH(list, l, record) {
1238 cal_week_genlist_item_data *item_data = calloc(1, sizeof(cal_week_genlist_item_data));
1239 c_ret_if(!item_data);
1241 item_data->record = record;
1243 item_data->it = elm_genlist_item_append(genlist, &_itc, item_data, NULL, ELM_GENLIST_ITEM_NONE, __cal_week_cal_genlist_item_select_callback, record);
1245 elm_object_item_data_set(item_data->it, item_data);
1249 elm_box_pack_start(box, genlist);
1250 elm_object_part_content_set(p->ly, cal_util_get_part_text("wdb/%d/sw", day_index), box);
1252 evas_object_data_set(genlist, "pos", (void *)day_index);
1253 evas_object_data_set(genlist, "priv", p);
1255 evas_object_propagate_events_set(genlist, EINA_FALSE);
1257 evas_object_event_callback_add(genlist, EVAS_CALLBACK_MOUSE_DOWN, __cal_week_genlist_mouse_down_event_callback, p);
1258 evas_object_event_callback_add(genlist, EVAS_CALLBACK_MOUSE_UP, __cal_week_genlist_mouse_up_event_callback, p);
1259 evas_object_event_callback_add(genlist, EVAS_CALLBACK_MOUSE_MOVE, __cal_week_genlist_mouse_move_event_callback, p);
1261 p->event_count[day_index] = ncount;
1263 __cal_week_set_more_text(p,
1264 week_data_get_overflow_count(ncount, day_index, false, p->ad->is_landscape_mode),
1268 static void __cal_week_unset_week_day_content(cal_week_data *p)
1275 for (i = 0; i < WEEK_DAY_NUMS; i++) {
1277 Evas_Object *box = elm_object_part_content_get(p->ly, cal_util_get_part_text("wdb/%d/sw", i));
1280 elm_object_part_content_unset(p->ly, cal_util_get_part_text("wdb/%d/sw", i));
1282 evas_object_del(box);
1286 static void __cal_week_get_week_events(cal_week_data *p)
1290 struct appdata *ad = p->ad;
1293 Eina_List *event_list = NULL;
1295 __cal_week_unset_week_day_content(p);
1297 struct tm tm_start = ad->base_tm;
1298 tm_start.tm_hour = 0;
1299 tm_start.tm_min = 0;
1300 tm_start.tm_sec = 0;
1302 cal_util_update_tm_day(&tm_start, ad->wday_start - tm_start.tm_wday);
1304 struct tm tm_end = tm_start;
1305 tm_end.tm_hour = 23;
1310 for (day_index = 0; day_index < 7; day_index++) {
1312 p->event_count[day_index] = 0;
1314 event_list = _calendar_get_all_instance_list(&tm_start, &tm_end);
1316 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);
1318 event_list = eina_list_merge(event_list, todo_list);
1322 p->week_event_list = eina_list_append(p->week_event_list, event_list);
1323 __cal_week_add_event(event_list, day_index, p);
1328 cal_util_update_tm_day(&tm_start, 1);
1329 cal_util_update_tm_day(&tm_end, 1);
1333 Evas_Object* cal_week_create_view(struct appdata *ad, Evas_Object *main)
1337 c_retv_if(!ad, NULL);
1338 c_retv_if(!main, NULL);
1340 cal_week_data *p = calloc(1, sizeof(cal_week_data));
1341 c_retv_if(!p, NULL);
1343 if (!ad->is_landscape_mode) {
1344 p->name = "main/week/small";
1346 p->name = "landscape/main/week/small";
1350 ad->tapbar_focus_view = CV_WEEK;
1353 p->expanded_week_day = -1;
1354 Evas_Object *ly = cal_util_add_layout(ad->naviframe, p->name);
1360 evas_object_data_set(ly, "priv", p);
1362 p->pos_selected = 0;
1364 __cal_week_fill_days(ly, p, &ad->base_tm, ad->wday_start);
1366 edje_object_signal_callback_add(CAL_UTIL_GET_EDJ_DATA(ly), "*", "cal", __cal_week_cal_event_callback, p);
1367 edje_object_signal_callback_add(CAL_UTIL_GET_EDJ_DATA(ly), "*", "more", __cal_week_more_event_callback, p);
1368 edje_object_signal_callback_add(CAL_UTIL_GET_EDJ_DATA(ly), "*", "down", __cal_week_down_event_callback, p);
1370 evas_object_event_callback_add(ly, EVAS_CALLBACK_MOUSE_DOWN, __cal_week_mouse_down_event_callback, p);
1371 evas_object_event_callback_add(ly, EVAS_CALLBACK_MOUSE_UP, __cal_week_mouse_up_event_callback, p);
1372 evas_object_event_callback_add(ly, EVAS_CALLBACK_MOUSE_MOVE, __cal_week_mouse_move_event_callback, p);
1373 evas_object_event_callback_add(ly, EVAS_CALLBACK_RESIZE, __cal_week_resize_view, p);
1374 evas_object_event_callback_add(ly, EVAS_CALLBACK_DEL, __cal_week_delete_layout, NULL);
1376 cal_lang_manager_add_callback(__cal_week_text_refresh_callback, p);
1381 void cal_week_update_view(Evas_Object *ly)
1387 cal_week_data *p = CAL_UTIL_GET_PRIV_DATA(ly);
1390 struct appdata *ad = p->ad;
1393 __cal_week_free_week_event_list(p);
1395 __cal_week_update_days(p->ly, p, &ad->base_tm, ad->wday_start);
1397 __cal_week_update_select(p, __cal_week_get_position(p, &ad->base_tm, ad->wday_start));
1399 __cal_week_get_week_events(p);
1401 cal_util_delete_evas_object(&p->left);
1402 cal_util_delete_evas_object(&p->right);
1406 static inline void __cal_week_cal_expand_up(cal_week_data *p, int pos)
1408 cal_util_emit_signal(CAL_UTIL_GET_EDJ_DATA(p->ly), "set_expand_up,%d", pos);
1409 __cal_week_set_more_text(p,
1410 week_data_get_overflow_count(p->event_count[pos], pos, true, p->ad->is_landscape_mode),
1414 static inline void __cal_week_cal_expand_up_1(cal_week_data *p, int pos)
1416 cal_util_emit_signal(CAL_UTIL_GET_EDJ_DATA(p->ly), "set_expand_up_1,%d", pos);
1417 __cal_week_set_more_text(p,
1418 week_data_get_overflow_count(p->event_count[pos], pos, true, p->ad->is_landscape_mode),
1422 static inline void __cal_week_cal_expand_up_2(cal_week_data *p, int pos)
1424 cal_util_emit_signal(CAL_UTIL_GET_EDJ_DATA(p->ly), "set_expand_up_2,%d", pos);
1425 __cal_week_set_more_text(p,
1426 week_data_get_overflow_count(p->event_count[pos], pos, true, p->ad->is_landscape_mode),
1430 static inline void __cal_week_cal_expand_down(cal_week_data *p, int pos)
1432 cal_util_emit_signal(CAL_UTIL_GET_EDJ_DATA(p->ly), "set_expand_down,%d", pos);
1433 __cal_week_set_more_text(p,
1434 week_data_get_overflow_count(p->event_count[pos], pos, true, p->ad->is_landscape_mode),
1438 static inline void __cal_week_cal_expand_default(cal_week_data *p, int pos)
1440 cal_util_emit_signal(CAL_UTIL_GET_EDJ_DATA(p->ly), "set_expand_default,%d", pos);
1441 __cal_week_set_more_text(p,
1442 week_data_get_overflow_count(p->event_count[pos], pos, false, p->ad->is_landscape_mode),
1446 static inline void __cal_week_cal_collapse_up(cal_week_data *p, int pos)
1448 cal_util_emit_signal(CAL_UTIL_GET_EDJ_DATA(p->ly), "set_expand_hide_up,%d", pos);
1449 __cal_week_set_more_text(p, p->event_count[pos], pos);
1452 static inline void __cal_week_cal_collapse_down(cal_week_data *p, int pos)
1454 cal_util_emit_signal(CAL_UTIL_GET_EDJ_DATA(p->ly), "set_expand_hide_down,%d", pos);
1455 __cal_week_set_more_text(p, p->event_count[pos], pos);
1458 static void __cal_week_cal_expand_week_day(cal_week_data *p, int pos)
1460 c_retm_if(!p, "p is null");
1461 c_retm_if(-1 == pos, "pos is -1");
1462 c_retm_if(p->expanded_week_day == pos, "Week day was expanded.");
1464 if (-1 != p->expanded_week_day) {
1465 __cal_week_cal_unexpand_week_day(p, p->expanded_week_day);
1466 cal_util_emit_signal(CAL_UTIL_GET_EDJ_DATA(p->ly), "show,%d,more", p->expanded_week_day);
1469 cal_util_emit_signal(CAL_UTIL_GET_EDJ_DATA(p->ly), "hide,%d,more", pos);
1471 if (!p->ad->is_landscape_mode) {
1474 __cal_week_cal_expand_down(p, pos);
1475 __cal_week_cal_collapse_down(p, pos+2);
1478 __cal_week_cal_expand_down(p, pos);
1479 __cal_week_cal_collapse_down(p, pos+2);
1480 __cal_week_cal_collapse_down(p, pos+4);
1481 __cal_week_cal_collapse_down(p, pos+5);
1484 __cal_week_cal_collapse_up(p, pos-2);
1485 __cal_week_cal_expand_up(p, pos);
1486 __cal_week_cal_collapse_down(p, pos+2);
1489 __cal_week_cal_expand_up(p, pos);
1490 __cal_week_cal_collapse_up(p, pos-2);
1491 __cal_week_cal_collapse_down(p, pos+2);
1492 __cal_week_cal_collapse_down(p, pos+3);
1495 __cal_week_cal_collapse_up(p, pos-4);
1496 __cal_week_cal_collapse_up(p, pos-2);
1497 __cal_week_cal_expand_up(p, pos);
1500 __cal_week_cal_collapse_up(p, pos-4);
1501 __cal_week_cal_collapse_up(p, pos-2);
1502 __cal_week_cal_expand_up_1(p, pos);
1503 __cal_week_cal_collapse_down(p, pos+1);
1506 __cal_week_cal_collapse_up(p, pos-5);
1507 __cal_week_cal_collapse_up(p, pos-3);
1508 __cal_week_cal_collapse_up(p, pos-1);
1509 __cal_week_cal_expand_up_2(p, pos);
1518 __cal_week_cal_expand_down(p, pos);
1519 __cal_week_cal_collapse_down(p, pos+3);
1522 __cal_week_cal_expand_down(p, pos);
1523 __cal_week_cal_collapse_down(p, pos+3);
1524 __cal_week_cal_collapse_down(p, pos+4);
1528 __cal_week_cal_expand_up(p, pos);
1529 __cal_week_cal_collapse_up(p, pos-3);
1532 __cal_week_cal_expand_up_1(p, pos);
1533 __cal_week_cal_collapse_up(p, pos-3);
1534 __cal_week_cal_collapse_down(p, pos+1);
1537 __cal_week_cal_expand_up_2(p, pos);
1538 __cal_week_cal_collapse_up(p, pos-1);
1539 __cal_week_cal_collapse_up(p, pos-4);
1545 p->expanded_week_day = pos;
1548 static void __cal_week_cal_unexpand_week_day(cal_week_data *p, int pos)
1550 c_retm_if(!p, "p is null");
1551 c_retm_if(-1 == pos, "pos is -1");
1552 c_retm_if(p->expanded_week_day != pos, "Week day was unexpanded.");
1554 __cal_week_cal_expand_default(p, pos);
1555 cal_util_emit_signal(CAL_UTIL_GET_EDJ_DATA(p->ly), "show,%d,more", pos);
1557 if (!p->ad->is_landscape_mode) {
1560 __cal_week_cal_expand_default(p, pos);
1561 __cal_week_cal_expand_default(p, pos+2);
1562 __cal_week_cal_expand_default(p, pos+4);
1565 __cal_week_cal_expand_default(p, pos);
1566 __cal_week_cal_expand_default(p, pos+2);
1567 __cal_week_cal_expand_default(p, pos+4);
1568 __cal_week_cal_expand_default(p, pos+5);
1571 __cal_week_cal_expand_default(p, pos-2);
1572 __cal_week_cal_expand_default(p, pos);
1573 __cal_week_cal_expand_default(p, pos+2);
1576 __cal_week_cal_expand_default(p, pos-2);
1577 __cal_week_cal_expand_default(p, pos);
1578 __cal_week_cal_expand_default(p, pos+2);
1579 __cal_week_cal_expand_default(p, pos+3);
1582 __cal_week_cal_expand_default(p, pos-4);
1583 __cal_week_cal_expand_default(p, pos-2);
1584 __cal_week_cal_expand_default(p, pos);
1587 __cal_week_cal_expand_default(p, pos-4);
1588 __cal_week_cal_expand_default(p, pos-2);
1589 __cal_week_cal_expand_default(p, pos);
1590 __cal_week_cal_expand_default(p, pos+1);
1593 __cal_week_cal_expand_default(p, pos);
1594 __cal_week_cal_expand_default(p, pos-1);
1595 __cal_week_cal_expand_default(p, pos-3);
1596 __cal_week_cal_expand_default(p, pos-5);
1605 __cal_week_cal_expand_default(p, pos+3);
1608 __cal_week_cal_expand_default(p, pos+3);
1609 __cal_week_cal_expand_default(p, pos+4);
1613 __cal_week_cal_expand_default(p, pos-3);
1616 __cal_week_cal_expand_default(p, pos-3);
1617 __cal_week_cal_expand_default(p, pos+1);
1620 __cal_week_cal_expand_default(p, pos-4);
1621 __cal_week_cal_expand_default(p, pos-1);
1627 p->expanded_week_day = -1;
1631 static void __cal_week_more_event_callback(void *data, Evas_Object *obj, const char *e, const char *src)
1635 c_retm_if(!data, "data is null");
1636 cal_week_data *p = data;
1644 struct appdata *ad = p->ad;
1645 c_retm_if(!ad, "ad is null");
1649 int d = pos - p->pos_selected;
1651 cal_util_update_tm_day(&ad->base_tm, d);
1653 __cal_week_update_select(p, pos);
1655 if (pos == p->expanded_week_day)
1656 __cal_week_cal_unexpand_week_day(p, p->expanded_week_day);
1658 __cal_week_cal_expand_week_day(p, pos);
1661 static void __cal_week_genlist_mouse_up_event_callback(void *data, Evas *e, Evas_Object *ly, void *ei)
1663 c_retm_if(!data, "data is null");
1664 c_retm_if(!ly, "ly is null");
1666 cal_week_data *p = data;
1667 int pos = (int)evas_object_data_get(ly, "pos");
1668 snprintf(signal_source, 31, "wdb/%d/base", pos);
1669 __cal_week_mouse_up_event_callback(p, NULL, p->ly, ei);
1670 edje_object_signal_emit(CAL_UTIL_GET_EDJ_DATA(p->ly), "mouse,up,1", signal_source);
1671 edje_object_signal_emit(CAL_UTIL_GET_EDJ_DATA(p->ly), "mouse,clicked,1", signal_source);
1674 static void __cal_week_genlist_mouse_down_event_callback(void *data, Evas *e, Evas_Object *ly, void *ei)
1676 c_retm_if(!data, "data is null");
1677 c_retm_if(!ly, "ly is null");
1679 cal_week_data *p = data;
1680 int pos = (int)evas_object_data_get(ly, "pos");
1681 snprintf(signal_source, 31, "wdb/%d/base", pos);
1682 __cal_week_mouse_down_event_callback(p, NULL, p->ly, ei);
1683 edje_object_signal_emit(CAL_UTIL_GET_EDJ_DATA(p->ly), "mouse,down,1", signal_source);
1686 static void __cal_week_genlist_mouse_move_event_callback(void *data, Evas *e, Evas_Object *ly, void *ei)
1688 c_retm_if(!data, "data is null");
1689 c_retm_if(!ly, "ly is null");
1691 cal_week_data *p = data;
1692 __cal_week_mouse_move_event_callback(p, NULL, p->ly, ei);
1695 static void __cal_week_set_more_text(cal_week_data *p, int count, int pos)
1697 c_retm_if(!p, "p is null");
1698 c_retm_if(pos < 0, "pos is wrong");
1699 c_retm_if(!p->ly, "p->ly is null");
1701 char part[32] = {0};
1702 char text[32] = {0};
1704 snprintf(part, sizeof part, "wdb/%d/more", pos);
1707 snprintf(text, sizeof text, "+%d", count);
1708 edje_object_part_text_set(CAL_UTIL_GET_EDJ_DATA(p->ly), part, text);