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);
1003 evas_object_del(p->popup);
1007 static void __cal_week_delete_call_callback(void *data, Evas_Object *obj, void *ei)
1013 cal_week_genlist_item_data *item_data = data;
1014 cal_week_data *p = item_data->p;
1017 calendar_record_h record = item_data->record;
1018 c_retm_if(!record, "record is NULL.");
1020 elm_ctxpopup_dismiss(obj);
1022 __cal_week_init_ctx_data(record, p);
1026 evas_object_data_set(p->ly, "record", record);
1028 if (_calendar_is_task_record(record)) {
1029 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,
1030 S_("IDS_COM_BODY_DELETE"),S_("IDS_COM_SK_CANCEL"), NULL);
1032 if (_calendar_is_recurrent_record(record)) {
1033 __cal_week_show_popup(p, C_("IDS_CLD_OPT_DELETE_EVENT"), EINA_FALSE);
1035 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,
1036 S_("IDS_COM_BODY_DELETE"),S_("IDS_COM_SK_CANCEL"), NULL);
1042 static void __cal_week_share_popup_response_callback(void *data, Evas_Object *obj, void *ei)
1044 c_retm_if(!data, "data is null");
1045 c_retm_if(!obj, "obj is null");
1047 Evas_Object *popup = data;
1049 cal_week_data* p = evas_object_data_get(popup, "data");
1050 c_retm_if(!p, "p is null");
1052 evas_object_del(popup);
1057 static inline void __cal_week_delete_popup(cal_week_data *p)
1059 c_retm_if(!p || !p->popup, "param is null");
1061 evas_object_del(p->popup);
1066 static void __cal_week_via_message_callback(void *data, Evas_Object *obj, void *ei)
1068 c_retm_if(!data, "data is null");
1069 c_retm_if(!obj, "obj is null");
1071 cal_week_data *p = data;
1072 c_retm_if(!p->ad, "p->ad is null");
1074 calendar_record_h record = _calendar_get_record_with_index(p->ad->cid);
1076 _calendar_export_record_to_vcs(record, CAL_MESSAGE_VCS);
1078 p->ad->ug = cal_launch_ug_with_var(NULL, CAL_MESSAGE_COMPOSER_UG, NULL, "ATTACHFILE", CAL_MESSAGE_VCS, NULL);
1080 __cal_week_delete_popup(p);
1083 static void __cal_week_via_email_callback(void *data, Evas_Object *obj, void *ei)
1085 c_retm_if(!data, "data is null");
1086 c_retm_if(!obj, "obj is null");
1088 cal_week_data *p = data;
1089 c_retm_if(!p->ad, "p->ad is null");
1091 calendar_record_h record = _calendar_get_record_with_index(p->ad->cid);
1093 _calendar_export_record_to_vcs(record, CAL_MESSAGE_VCS);
1095 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);
1097 __cal_week_delete_popup(p);
1100 static void __cal_week_via_bluetooth_callback(void *data, Evas_Object *obj, void *ei)
1102 c_retm_if(!data, "data is null");
1103 c_retm_if(!obj, "obj is null");
1105 cal_week_data *p = data;
1106 c_retm_if(!p->ad, "p->ad is null");
1108 calendar_record_h record = _calendar_get_record_with_index(p->ad->cid);
1110 _calendar_export_record_to_vcs(record, CAL_MESSAGE_VCS);
1112 p->ad->ug = cal_launch_ug_with_var(NULL, CAL_BLUETOOTH_UG, NULL, "launch-type", "send", "filecount", "1", "files", CAL_BLUETOOTH_VCS, NULL);
1114 __cal_week_delete_popup(p);
1117 static void __cal_week_share_call_callback(void *data, Evas_Object *obj, void *ei)
1123 cal_week_genlist_item_data *item_data = data;
1124 cal_week_data *p = item_data->p;
1127 calendar_record_h record = item_data->record;
1130 elm_ctxpopup_dismiss(obj);
1132 __cal_week_init_ctx_data(record, p);
1134 p->popup = cal_util_add_popup(p->ad->win, "menustyle", S_("IDS_COM_BUTTON_SHARE"), NULL,
1135 __cal_week_share_popup_response_callback, p,
1136 S_("IDS_COM_BODY_CLOSE"), NULL);
1138 c_retm_if(!p->popup, "cal_util_add_popup returned null");
1139 evas_object_data_set(p->popup, "data", p);
1141 Evas_Object *genlist = elm_genlist_add(p->popup);
1142 c_retm_if(!genlist, "elm_genlist_add returned null");
1144 elm_genlist_item_append(genlist, &itc_1text, S_("IDS_COM_BODY_EMAIL"), NULL, ELM_GENLIST_ITEM_NONE, __cal_week_via_email_callback, p);
1145 elm_genlist_item_append(genlist, &itc_1text, S_("IDS_COM_BODY_MESSAGE"), NULL, ELM_GENLIST_ITEM_NONE, __cal_week_via_message_callback, p);
1146 elm_genlist_item_append(genlist, &itc_1text, S_("IDS_COM_BODY_BLUETOOTH"), NULL, ELM_GENLIST_ITEM_NONE, __cal_week_via_bluetooth_callback, p);
1148 elm_object_content_set(p->popup, genlist);
1149 evas_object_show(p->popup);
1152 static void __cal_week_new_call_callback(void *data, Evas_Object *obj, void *ei)
1158 cal_week_genlist_item_data *item_data = data;
1160 cal_week_data *p = item_data->p;
1163 struct appdata *ad = p->ad;
1169 elm_ctxpopup_dismiss(obj);
1171 calendar_record_h record = item_data->record;
1174 cal_edit_create_view(p->ad, record, NULL, NULL);
1177 static void __cal_week_show_ctx_popup(cal_week_genlist_item_data *item_data, cal_week_data *p)
1179 c_ret_if(!item_data);
1183 evas_object_del(p->ctx);
1187 p->ctx = elm_ctxpopup_add(p->ad->naviframe);
1190 evas_object_smart_callback_add(p->ctx, "dismissed", __cal_week_ctx_popup_hide_callback, p);
1193 elm_ctxpopup_item_append(p->ctx, S_("IDS_COM_SK_EDIT"), NULL, __cal_week_edit_call_callback, item_data);
1194 elm_ctxpopup_item_append(p->ctx, S_("IDS_COM_BODY_DELETE"), NULL, __cal_week_delete_call_callback, item_data);
1197 elm_ctxpopup_item_append(p->ctx, S_("IDS_COM_BUTTON_SHARE"), NULL, __cal_week_share_call_callback, item_data);
1198 elm_ctxpopup_item_append(p->ctx, S_("IDS_COM_SK_NEW"), NULL, __cal_week_new_call_callback, item_data);
1200 elm_ctxpopup_direction_priority_set(p->ctx, ELM_CTXPOPUP_DIRECTION_DOWN,
1201 ELM_CTXPOPUP_DIRECTION_RIGHT,
1202 ELM_CTXPOPUP_DIRECTION_LEFT,
1203 ELM_CTXPOPUP_DIRECTION_UP);
1204 evas_object_data_set(p->ctx, "priv", p);
1205 evas_object_move(p->ctx, p->down.x, p->down.y);
1206 evas_object_show(p->ctx);
1211 static void __cal_week_add_event(Eina_List *list, int day_index, cal_week_data *p)
1216 Eina_List *l = NULL;
1217 calendar_record_h record = NULL;
1219 int ncount = eina_list_count(list);
1221 Evas_Object *box = cal_util_add_box(p->ly);
1224 Evas_Object *genlist = elm_genlist_add(box);
1227 evas_object_data_set(genlist, "priv", p);
1228 evas_object_size_hint_align_set(genlist, EVAS_HINT_FILL, EVAS_HINT_FILL);
1229 evas_object_size_hint_weight_set(genlist, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1230 evas_object_show(box);
1231 evas_object_show(genlist);
1233 EINA_LIST_FOREACH(list, l, record) {
1235 cal_week_genlist_item_data *item_data = calloc(1, sizeof(cal_week_genlist_item_data));
1236 c_ret_if(!item_data);
1238 item_data->record = record;
1240 item_data->it = elm_genlist_item_append(genlist, &_itc, item_data, NULL, ELM_GENLIST_ITEM_NONE, __cal_week_cal_genlist_item_select_callback, record);
1242 elm_object_item_data_set(item_data->it, item_data);
1246 elm_box_pack_start(box, genlist);
1247 elm_object_part_content_set(p->ly, cal_util_get_part_text("wdb/%d/sw", day_index), box);
1249 evas_object_data_set(genlist, "pos", (void *)day_index);
1250 evas_object_data_set(genlist, "priv", p);
1252 evas_object_propagate_events_set(genlist, EINA_FALSE);
1254 evas_object_event_callback_add(genlist, EVAS_CALLBACK_MOUSE_DOWN, __cal_week_genlist_mouse_down_event_callback, p);
1255 evas_object_event_callback_add(genlist, EVAS_CALLBACK_MOUSE_UP, __cal_week_genlist_mouse_up_event_callback, p);
1256 evas_object_event_callback_add(genlist, EVAS_CALLBACK_MOUSE_MOVE, __cal_week_genlist_mouse_move_event_callback, p);
1258 p->event_count[day_index] = ncount;
1260 __cal_week_set_more_text(p,
1261 week_data_get_overflow_count(ncount, day_index, false, p->ad->is_landscape_mode),
1265 static void __cal_week_unset_week_day_content(cal_week_data *p)
1272 for (i = 0; i < WEEK_DAY_NUMS; i++) {
1274 Evas_Object *box = elm_object_part_content_get(p->ly, cal_util_get_part_text("wdb/%d/sw", i));
1277 elm_object_part_content_unset(p->ly, cal_util_get_part_text("wdb/%d/sw", i));
1279 evas_object_del(box);
1283 static void __cal_week_get_week_events(cal_week_data *p)
1287 struct appdata *ad = p->ad;
1290 Eina_List *event_list = NULL;
1292 __cal_week_unset_week_day_content(p);
1294 struct tm tm_start = ad->base_tm;
1295 tm_start.tm_hour = 0;
1296 tm_start.tm_min = 0;
1297 tm_start.tm_sec = 0;
1299 cal_util_update_tm_day(&tm_start, ad->wday_start - tm_start.tm_wday);
1301 struct tm tm_end = tm_start;
1302 tm_end.tm_hour = 23;
1307 for (day_index = 0; day_index < 7; day_index++) {
1309 p->event_count[day_index] = 0;
1311 event_list = _calendar_get_all_instance_list(&tm_start, &tm_end);
1313 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);
1315 event_list = eina_list_merge(event_list, todo_list);
1319 p->week_event_list = eina_list_append(p->week_event_list, event_list);
1320 __cal_week_add_event(event_list, day_index, p);
1325 cal_util_update_tm_day(&tm_start, 1);
1326 cal_util_update_tm_day(&tm_end, 1);
1330 Evas_Object* cal_week_create_view(struct appdata *ad, Evas_Object *main)
1334 c_retv_if(!ad, NULL);
1335 c_retv_if(!main, NULL);
1337 cal_week_data *p = calloc(1, sizeof(cal_week_data));
1338 c_retv_if(!p, NULL);
1340 if (!ad->is_landscape_mode) {
1341 p->name = "main/week/small";
1343 p->name = "landscape/main/week/small";
1347 ad->tapbar_focus_view = CV_WEEK;
1350 p->expanded_week_day = -1;
1351 Evas_Object *ly = cal_util_add_layout(ad->naviframe, p->name);
1357 evas_object_data_set(ly, "priv", p);
1359 p->pos_selected = 0;
1361 __cal_week_fill_days(ly, p, &ad->base_tm, ad->wday_start);
1363 edje_object_signal_callback_add(CAL_UTIL_GET_EDJ_DATA(ly), "*", "cal", __cal_week_cal_event_callback, p);
1364 edje_object_signal_callback_add(CAL_UTIL_GET_EDJ_DATA(ly), "*", "more", __cal_week_more_event_callback, p);
1365 edje_object_signal_callback_add(CAL_UTIL_GET_EDJ_DATA(ly), "*", "down", __cal_week_down_event_callback, p);
1367 evas_object_event_callback_add(ly, EVAS_CALLBACK_MOUSE_DOWN, __cal_week_mouse_down_event_callback, p);
1368 evas_object_event_callback_add(ly, EVAS_CALLBACK_MOUSE_UP, __cal_week_mouse_up_event_callback, p);
1369 evas_object_event_callback_add(ly, EVAS_CALLBACK_MOUSE_MOVE, __cal_week_mouse_move_event_callback, p);
1370 evas_object_event_callback_add(ly, EVAS_CALLBACK_RESIZE, __cal_week_resize_view, p);
1371 evas_object_event_callback_add(ly, EVAS_CALLBACK_DEL, __cal_week_delete_layout, NULL);
1373 cal_lang_manager_add_callback(__cal_week_text_refresh_callback, p);
1378 void cal_week_update_view(Evas_Object *ly)
1384 cal_week_data *p = CAL_UTIL_GET_PRIV_DATA(ly);
1387 struct appdata *ad = p->ad;
1390 __cal_week_free_week_event_list(p);
1392 __cal_week_update_days(p->ly, p, &ad->base_tm, ad->wday_start);
1394 __cal_week_update_select(p, __cal_week_get_position(p, &ad->base_tm, ad->wday_start));
1396 __cal_week_get_week_events(p);
1398 cal_util_delete_evas_object(&p->left);
1399 cal_util_delete_evas_object(&p->right);
1403 static inline void __cal_week_cal_expand_up(cal_week_data *p, int pos)
1405 cal_util_emit_signal(CAL_UTIL_GET_EDJ_DATA(p->ly), "set_expand_up,%d", pos);
1406 __cal_week_set_more_text(p,
1407 week_data_get_overflow_count(p->event_count[pos], pos, true, p->ad->is_landscape_mode),
1411 static inline void __cal_week_cal_expand_up_1(cal_week_data *p, int pos)
1413 cal_util_emit_signal(CAL_UTIL_GET_EDJ_DATA(p->ly), "set_expand_up_1,%d", pos);
1414 __cal_week_set_more_text(p,
1415 week_data_get_overflow_count(p->event_count[pos], pos, true, p->ad->is_landscape_mode),
1419 static inline void __cal_week_cal_expand_up_2(cal_week_data *p, int pos)
1421 cal_util_emit_signal(CAL_UTIL_GET_EDJ_DATA(p->ly), "set_expand_up_2,%d", pos);
1422 __cal_week_set_more_text(p,
1423 week_data_get_overflow_count(p->event_count[pos], pos, true, p->ad->is_landscape_mode),
1427 static inline void __cal_week_cal_expand_down(cal_week_data *p, int pos)
1429 cal_util_emit_signal(CAL_UTIL_GET_EDJ_DATA(p->ly), "set_expand_down,%d", pos);
1430 __cal_week_set_more_text(p,
1431 week_data_get_overflow_count(p->event_count[pos], pos, true, p->ad->is_landscape_mode),
1435 static inline void __cal_week_cal_expand_default(cal_week_data *p, int pos)
1437 cal_util_emit_signal(CAL_UTIL_GET_EDJ_DATA(p->ly), "set_expand_default,%d", pos);
1438 __cal_week_set_more_text(p,
1439 week_data_get_overflow_count(p->event_count[pos], pos, false, p->ad->is_landscape_mode),
1443 static inline void __cal_week_cal_collapse_up(cal_week_data *p, int pos)
1445 cal_util_emit_signal(CAL_UTIL_GET_EDJ_DATA(p->ly), "set_expand_hide_up,%d", pos);
1446 __cal_week_set_more_text(p, p->event_count[pos], pos);
1449 static inline void __cal_week_cal_collapse_down(cal_week_data *p, int pos)
1451 cal_util_emit_signal(CAL_UTIL_GET_EDJ_DATA(p->ly), "set_expand_hide_down,%d", pos);
1452 __cal_week_set_more_text(p, p->event_count[pos], pos);
1455 static void __cal_week_cal_expand_week_day(cal_week_data *p, int pos)
1457 c_retm_if(!p, "p is null");
1458 c_retm_if(-1 == pos, "pos is -1");
1459 c_retm_if(p->expanded_week_day == pos, "Week day was expanded.");
1461 if (-1 != p->expanded_week_day) {
1462 __cal_week_cal_unexpand_week_day(p, p->expanded_week_day);
1463 cal_util_emit_signal(CAL_UTIL_GET_EDJ_DATA(p->ly), "show,%d,more", p->expanded_week_day);
1466 cal_util_emit_signal(CAL_UTIL_GET_EDJ_DATA(p->ly), "hide,%d,more", pos);
1468 if (!p->ad->is_landscape_mode) {
1471 __cal_week_cal_expand_down(p, pos);
1472 __cal_week_cal_collapse_down(p, pos+2);
1475 __cal_week_cal_expand_down(p, pos);
1476 __cal_week_cal_collapse_down(p, pos+2);
1477 __cal_week_cal_collapse_down(p, pos+4);
1478 __cal_week_cal_collapse_down(p, pos+5);
1481 __cal_week_cal_collapse_up(p, pos-2);
1482 __cal_week_cal_expand_up(p, pos);
1483 __cal_week_cal_collapse_down(p, pos+2);
1486 __cal_week_cal_expand_up(p, pos);
1487 __cal_week_cal_collapse_up(p, pos-2);
1488 __cal_week_cal_collapse_down(p, pos+2);
1489 __cal_week_cal_collapse_down(p, pos+3);
1492 __cal_week_cal_collapse_up(p, pos-4);
1493 __cal_week_cal_collapse_up(p, pos-2);
1494 __cal_week_cal_expand_up(p, pos);
1497 __cal_week_cal_collapse_up(p, pos-4);
1498 __cal_week_cal_collapse_up(p, pos-2);
1499 __cal_week_cal_expand_up_1(p, pos);
1500 __cal_week_cal_collapse_down(p, pos+1);
1503 __cal_week_cal_collapse_up(p, pos-5);
1504 __cal_week_cal_collapse_up(p, pos-3);
1505 __cal_week_cal_collapse_up(p, pos-1);
1506 __cal_week_cal_expand_up_2(p, pos);
1515 __cal_week_cal_expand_down(p, pos);
1516 __cal_week_cal_collapse_down(p, pos+3);
1519 __cal_week_cal_expand_down(p, pos);
1520 __cal_week_cal_collapse_down(p, pos+3);
1521 __cal_week_cal_collapse_down(p, pos+4);
1525 __cal_week_cal_expand_up(p, pos);
1526 __cal_week_cal_collapse_up(p, pos-3);
1529 __cal_week_cal_expand_up_1(p, pos);
1530 __cal_week_cal_collapse_up(p, pos-3);
1531 __cal_week_cal_collapse_down(p, pos+1);
1534 __cal_week_cal_expand_up_2(p, pos);
1535 __cal_week_cal_collapse_up(p, pos-1);
1536 __cal_week_cal_collapse_up(p, pos-4);
1542 p->expanded_week_day = pos;
1545 static void __cal_week_cal_unexpand_week_day(cal_week_data *p, int pos)
1547 c_retm_if(!p, "p is null");
1548 c_retm_if(-1 == pos, "pos is -1");
1549 c_retm_if(p->expanded_week_day != pos, "Week day was unexpanded.");
1551 __cal_week_cal_expand_default(p, pos);
1552 cal_util_emit_signal(CAL_UTIL_GET_EDJ_DATA(p->ly), "show,%d,more", pos);
1554 if (!p->ad->is_landscape_mode) {
1557 __cal_week_cal_expand_default(p, pos);
1558 __cal_week_cal_expand_default(p, pos+2);
1559 __cal_week_cal_expand_default(p, pos+4);
1562 __cal_week_cal_expand_default(p, pos);
1563 __cal_week_cal_expand_default(p, pos+2);
1564 __cal_week_cal_expand_default(p, pos+4);
1565 __cal_week_cal_expand_default(p, pos+5);
1568 __cal_week_cal_expand_default(p, pos-2);
1569 __cal_week_cal_expand_default(p, pos);
1570 __cal_week_cal_expand_default(p, pos+2);
1573 __cal_week_cal_expand_default(p, pos-2);
1574 __cal_week_cal_expand_default(p, pos);
1575 __cal_week_cal_expand_default(p, pos+2);
1576 __cal_week_cal_expand_default(p, pos+3);
1579 __cal_week_cal_expand_default(p, pos-4);
1580 __cal_week_cal_expand_default(p, pos-2);
1581 __cal_week_cal_expand_default(p, pos);
1584 __cal_week_cal_expand_default(p, pos-4);
1585 __cal_week_cal_expand_default(p, pos-2);
1586 __cal_week_cal_expand_default(p, pos);
1587 __cal_week_cal_expand_default(p, pos+1);
1590 __cal_week_cal_expand_default(p, pos);
1591 __cal_week_cal_expand_default(p, pos-1);
1592 __cal_week_cal_expand_default(p, pos-3);
1593 __cal_week_cal_expand_default(p, pos-5);
1602 __cal_week_cal_expand_default(p, pos+3);
1605 __cal_week_cal_expand_default(p, pos+3);
1606 __cal_week_cal_expand_default(p, pos+4);
1610 __cal_week_cal_expand_default(p, pos-3);
1613 __cal_week_cal_expand_default(p, pos-3);
1614 __cal_week_cal_expand_default(p, pos+1);
1617 __cal_week_cal_expand_default(p, pos-4);
1618 __cal_week_cal_expand_default(p, pos-1);
1624 p->expanded_week_day = -1;
1628 static void __cal_week_more_event_callback(void *data, Evas_Object *obj, const char *e, const char *src)
1632 c_retm_if(!data, "data is null");
1633 cal_week_data *p = data;
1641 struct appdata *ad = p->ad;
1642 c_retm_if(!ad, "ad is null");
1646 int d = pos - p->pos_selected;
1648 cal_util_update_tm_day(&ad->base_tm, d);
1650 __cal_week_update_select(p, pos);
1652 if (pos == p->expanded_week_day)
1653 __cal_week_cal_unexpand_week_day(p, p->expanded_week_day);
1655 __cal_week_cal_expand_week_day(p, pos);
1658 static void __cal_week_genlist_mouse_up_event_callback(void *data, Evas *e, Evas_Object *ly, void *ei)
1660 c_retm_if(!data, "data is null");
1661 c_retm_if(!ly, "ly is null");
1663 cal_week_data *p = data;
1664 int pos = (int)evas_object_data_get(ly, "pos");
1665 snprintf(signal_source, 31, "wdb/%d/base", pos);
1666 __cal_week_mouse_up_event_callback(p, NULL, p->ly, ei);
1667 edje_object_signal_emit(CAL_UTIL_GET_EDJ_DATA(p->ly), "mouse,up,1", signal_source);
1668 edje_object_signal_emit(CAL_UTIL_GET_EDJ_DATA(p->ly), "mouse,clicked,1", signal_source);
1671 static void __cal_week_genlist_mouse_down_event_callback(void *data, Evas *e, Evas_Object *ly, void *ei)
1673 c_retm_if(!data, "data is null");
1674 c_retm_if(!ly, "ly is null");
1676 cal_week_data *p = data;
1677 int pos = (int)evas_object_data_get(ly, "pos");
1678 snprintf(signal_source, 31, "wdb/%d/base", pos);
1679 __cal_week_mouse_down_event_callback(p, NULL, p->ly, ei);
1680 edje_object_signal_emit(CAL_UTIL_GET_EDJ_DATA(p->ly), "mouse,down,1", signal_source);
1683 static void __cal_week_genlist_mouse_move_event_callback(void *data, Evas *e, Evas_Object *ly, void *ei)
1685 c_retm_if(!data, "data is null");
1686 c_retm_if(!ly, "ly is null");
1688 cal_week_data *p = data;
1689 __cal_week_mouse_move_event_callback(p, NULL, p->ly, ei);
1692 static void __cal_week_set_more_text(cal_week_data *p, int count, int pos)
1694 c_retm_if(!p, "p is null");
1695 c_retm_if(pos < 0, "pos is wrong");
1696 c_retm_if(!p->ly, "p->ly is null");
1698 char part[32] = {0};
1699 char text[32] = {0};
1701 snprintf(part, sizeof part, "wdb/%d/more", pos);
1704 snprintf(text, sizeof text, "+%d", count);
1705 edje_object_part_text_set(CAL_UTIL_GET_EDJ_DATA(p->ly), part, text);