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.
23 #define ANIMATION_TIME 0.2
25 typedef enum year_index {
26 CAL_YEAR_PREV_YEAR = -1,
31 static const char *_name = NULL;
37 Evas_Object *ly; // self
38 Evas_Object *handle_base;
40 struct _year* prev_year;
41 struct _year* cur_year;
42 struct _year* next_year;
44 Eina_Bool ignore_mouse_down; // block mouse down event during flick
46 Evas_Coord_Rectangle rect;
47 Evas_Coord_Point down1,down2;
48 Evas_Coord_Point move1,move2;
56 Evas_Coord_Rectangle mouse_down_position;
57 Evas_Coord_Rectangle mouse_up_position;
58 Evas_Coord_Rectangle pos_to;
63 char wday[8][7];//To reduce get text time
64 char month[12][32];//To reduce get text time
66 Ecore_Idler* idler; //To make prev & next year object
68 Evas_Object* edje_handle[12];
69 Ecore_Idler *idler_for_change_view;
70 } cal_view_main_year_data;
78 cal_view_main_year_data *p;
81 static char signal_source[32];
82 static struct _year* __cal_year_create_year_object(Evas_Object* parent, cal_view_main_year_data* p, enum year_index);
83 static void __cal_year_delete_year_object(struct _year* y);
84 static void __cal_year_mouse_up(void *data, Evas *e, Evas_Object *ly, void *ei);
85 static void __cal_year_mouse_down(void *data, Evas *e, Evas_Object *ly, void *ei);
86 static void __cal_year_mouse_move(void *data, Evas *e, Evas_Object *ly, void *ei);
87 static void __cal_year_update_select(struct _year *y, int tm_mon);
88 static void __cal_year_delete_edje_handle(cal_view_main_year_data* p);
90 static inline void __cal_year_stop_animation(cal_view_main_year_data *p)
92 c_retm_if(!p, "Input parameter is null.");
95 ecore_animator_del(p->ani);
100 static void __cal_year_make_wday_text(cal_view_main_year_data* p);
101 static void __cal_year_make_month_text(cal_view_main_year_data* p);
102 static void __cal_year_set_wday_text(Evas_Object *month, int start);
104 static void __cal_year_text_refresh_callback(void *data)
108 c_retm_if(!data, "data is null");
109 cal_view_main_year_data *p = data;
111 cal_main_update_title_text(p->ad);
113 __cal_year_make_month_text(p);
114 __cal_year_make_wday_text(p);
117 for (i = 0; i < 12; i++) {
118 edje_object_part_text_set(p->cur_year->edj, cal_util_get_part_text("mb/%d/text", i), p->month[i]);
119 __cal_year_set_wday_text(evas_object_data_get(p->cur_year->ly, cal_util_get_part_text("mb/%d/sw", i)), p->ad->wday_start);
122 elm_object_text_set(p->ad->new_event_button, S_("IDS_COM_BODY_CREATE"));
126 static void __cal_year_delete_layout(void *data, Evas *e, Evas_Object *obj, void *ei)
130 c_retm_if(!data, "Input parameter is null.");
132 cal_view_main_year_data *p = data;
134 __cal_year_delete_edje_handle(p);
136 __cal_year_stop_animation(p);
139 __cal_year_delete_year_object(p->prev_year);
141 __cal_year_delete_year_object(p->cur_year);
143 __cal_year_delete_year_object(p->next_year);
146 ecore_idler_del(p->idler);
148 if (p->idler_for_change_view)
149 ecore_idler_del(p->idler_for_change_view);
151 cal_lang_manager_remove_callback(__cal_year_text_refresh_callback, p);
156 static void __cal_year_set_month_text(struct _year* y)
158 c_retm_if(!y, "Input parameter is null.");
161 cal_view_main_year_data* p = y->p;
165 for (i = 0; i < 12; i++)
166 edje_object_part_text_set(y->edj, cal_util_get_part_text("mb/%d/text", i), p->month[i]);
169 static void __cal_year_make_month_text(cal_view_main_year_data* p)
171 c_retm_if(!p, "Input parameter is null.");
177 cal_util_update_tm_month(&tm, tm.tm_mon*(-1));
179 for(i = 0; i < 12 ; i++)
181 cal_util_get_time_text(p->month[i], 31, CAL_UTIL_DATE_FORMAT_4, NULL, &tm);
182 cal_util_update_tm_month(&tm, 1);
186 static void __cal_year_make_wday_text(cal_view_main_year_data* p)
188 c_retm_if(!p, "Input parameter is null.");
194 cal_util_update_tm_day(&tm, tm.tm_wday*(-1));
196 for(i = 0; i < 7 ; i++) {
197 cal_util_get_time_text(p->wday[i], 7, CAL_UTIL_DATE_FORMAT_17, NULL, &tm);
198 cal_util_update_tm_day(&tm, 1);
202 static void __cal_year_set_wday_text(Evas_Object *month, int start)
204 c_retm_if(!month, "Input parameter is null.");
208 cal_view_main_year_data* p = CAL_UTIL_GET_PRIV_DATA(month);
210 for (i = 0; i < 7; i++)
212 edje_object_part_text_set(month, cal_util_get_part_text("sdh/%d/text", i), p->wday[(i+start)%7]);
216 cal_util_emit_signal(month, "satday,%d", i);
221 cal_util_emit_signal(month, "sunday,%d", i);
225 static void __cal_year_update_today(Evas_Object *ly, int tm_year, int tm_mon, int tm_mday, int pos)
227 c_retm_if(!ly, "Input parameter is null.");
229 cal_view_main_year_data *p = CAL_UTIL_GET_PRIV_DATA(ly);
230 c_retm_if(!p, "CAL_UTIL_GET_PRIV_DATA returned null.");
232 struct appdata *ad = p->ad;
233 c_retm_if(!ad, "p->ad is null.");
235 if (tm_year == ad->today_tm.tm_year && tm_mon == ad->today_tm.tm_mon && tm_mday == ad->today_tm.tm_mday)
236 cal_util_emit_signal(ly, "today,%d", pos-1);
240 static void __cal_year_fill_month(Evas_Object *month, int tm_year, int tm_mon, int *first_wday, int start_wday)
242 c_retm_if(!month, "Input parameter is null.");
248 max = CAL_UTIL_GET_WDAY(wday - start_wday);
250 for (i = 0; i < max; i++)
252 cal_util_set_text(month, cal_util_get_part_text("sdb/%d/text", i), "");
256 max = i + cal_util_get_max_days(tm_year, tm_mon);
259 cal_util_set_text(month, cal_util_get_part_text("sdb/%d/text", i), "%d", day);
262 cal_util_emit_signal(month, "satday,%d", i);
264 cal_util_emit_signal(month, "sunday,%d", i);
266 wday = CAL_UTIL_GET_WDAY(wday + 1);
268 __cal_year_update_today(month, tm_year, tm_mon, day-1, i);
275 cal_util_set_text(month, cal_util_get_part_text("sdb/%d/text", i), "");
281 static Evas_Object* __cal_year_create_month(struct _year *y, int tm_mon, int *wday, int start)
285 Evas_Object *month = edje_object_add(y->evas);
287 Eina_Bool r = edje_object_file_set(month, EDJ_FILE, "main/year/cal");
290 ERR("edje_object_file_set(%p, %s, %s) is failed.", month, EDJ_FILE, "main/year/cal");
292 evas_object_del(month);
297 evas_object_data_set(month,"priv",y->p);
299 __cal_year_set_wday_text(month, start);
301 __cal_year_fill_month(month, y->year, tm_mon, wday, start);
306 static int __cal_year_get_first_wday(int tm_year)
312 localtime_r(&t, &tm);
314 tm.tm_year = tm_year;
319 c_retvm_if(t == -1, 0, "mktime() returned -1.");
324 static void __cal_year_fill_months(struct _year* y)
326 c_retm_if(!y, "Input parameter is null.");
331 cal_view_main_year_data* p = y->p;
333 first_wday = __cal_year_get_first_wday(y->year);
335 __cal_year_make_wday_text(p);
337 for (i = 0; i < 12; i++)
339 month = __cal_year_create_month(y, i, &first_wday, p->ad->wday_start);
340 c_retm_if(!month, "");
342 edje_object_part_swallow(y->edj, cal_util_get_part_text("mb/%d/sw", i), month);
344 evas_object_data_set(y->ly, cal_util_get_part_text("mb/%d/sw", i), month);
348 static inline void __cal_year_move_year_objects(cal_view_main_year_data *p, Evas_Coord x)
350 c_retm_if(!p, "Input parameter is null.");
356 p->next_year = __cal_year_create_year_object(p->ly, p, CAL_YEAR_NEXT_YEAR);
357 c_retm_if(!p->next_year, "__cal_year_create_year_object(p->ly, p, CAL_YEAR_NEXT_YEAR) returned null");
360 evas_object_move(p->cur_year->image, x, p->rect.y);
362 evas_object_move(p->next_year->image, x + p->rect.w, p->rect.y);
367 p->prev_year = __cal_year_create_year_object(p->ly, p, CAL_YEAR_PREV_YEAR);
368 c_retm_if(!p->prev_year, "__cal_year_create_year_object(p->ly, p, CAL_YEAR_PREV_YEAR) returned null");
371 evas_object_move(p->cur_year->image, x, p->rect.y);
373 evas_object_move(p->prev_year->image, x -p->rect.w, p->rect.y);
376 evas_object_move(p->handle_base, x, p->rect.y);
379 static void __cal_year_image_object_mouse_down_callback(void *data, Evas *e, Evas_Object *obj, void *ei)
381 c_retm_if(!data, "Input parameter is null.");
383 cal_view_main_year_data *p = data;
384 struct _year *y = p->cur_year;
386 int index = (int)evas_object_data_get(obj, "index");
388 snprintf(signal_source, 31, "mb/%d/base", index);
389 edje_object_signal_emit(y->edj, "mouse,down,1", signal_source);
394 static void __cal_year_image_object_mouse_up_callback(void *data, Evas *e, Evas_Object *obj, void *ei)
396 c_retm_if(!data, "Input parameter is null.");
398 cal_view_main_year_data *p = data;
399 struct _year *y = p->cur_year;
400 struct appdata* ad = p->ad;
402 snprintf(signal_source, 31, "mb/%d/base", p->pos_down);
403 edje_object_signal_emit(y->edj, "mouse,up,1", signal_source);
405 if (p->ignore_mouse_down) {
406 p->ignore_mouse_down = EINA_FALSE;
410 if (p->multi_touched)
416 cal_util_update_tm_month(&ad->base_tm, p->pos_down - ad->base_tm.tm_mon);
418 cal_main_change_view(p->parent, CV_MONTH);
421 static void __cal_year_delete_edje_handle(cal_view_main_year_data* p)
423 c_retm_if(!p, "p is null.");
427 for (i = 0 ; i < 12 ; i++)
429 c_retm_if(!p->edje_handle[i], "p->edje_handle[%d] is null.", i);
431 evas_object_event_callback_del(p->edje_handle[i], EVAS_CALLBACK_MOUSE_DOWN, __cal_year_image_object_mouse_down_callback);
432 evas_object_event_callback_del(p->edje_handle[i], EVAS_CALLBACK_MOUSE_UP, __cal_year_image_object_mouse_up_callback);
434 evas_object_del(p->edje_handle[i]);
437 c_retm_if(!p->handle_base, "p->handle_base is null.");
438 evas_object_del(p->handle_base);
441 static inline int __cal_year_update_view(cal_view_main_year_data *p)
445 c_retvm_if(!p, -1, "Input parameter is null.");
446 c_retvm_if(!p->ad, -1, "p->ad is null.");
448 struct appdata* ad = p->ad;
450 int d = p->tm_to.tm_year - p->ad->base_tm.tm_year;
452 ad->base_tm = p->tm_to;
454 cal_util_emit_signal(p->cur_year->edj, "unselect,%d", p->pos_selected);
456 elm_object_part_content_unset(p->ly, "content");
457 elm_object_part_content_unset(p->ly, "content/left");
458 elm_object_part_content_unset(p->ly, "content/right");
463 evas_object_del(p->prev_year->image);
464 __cal_year_delete_year_object(p->prev_year);
467 p->prev_year = p->cur_year;
468 p->cur_year = p->next_year;
469 p->next_year = __cal_year_create_year_object(p->ly, p, CAL_YEAR_NEXT_YEAR);
474 evas_object_del(p->next_year->image);
475 __cal_year_delete_year_object(p->next_year);
478 p->next_year = p->cur_year;
479 p->cur_year = p->prev_year;
480 p->prev_year = __cal_year_create_year_object(p->ly, p, CAL_YEAR_PREV_YEAR);
483 elm_object_part_content_set(p->ly, "content", p->cur_year->image);
486 elm_object_part_content_set(p->ly, "content/left", p->prev_year->image);
489 elm_object_part_content_set(p->ly, "content/right", p->next_year->image);
491 cal_main_update_title_text(p->ad);
493 __cal_year_update_select(p->cur_year, ad->base_tm.tm_mon);
495 __cal_year_move_year_objects(p, 0);
497 if (p->ignore_mouse_down)
498 p->ignore_mouse_down = EINA_FALSE;
503 static Eina_Bool __cal_year_animation(void *data, double pos)
505 c_retvm_if(!data, ECORE_CALLBACK_CANCEL, "Input parameter is null.");
507 cal_view_main_year_data *p = data;
510 dx = (p->mouse_up_position.x - p->pos_to.x) * cal_util_nsin(1.0 - pos);
511 __cal_year_move_year_objects(p, p->pos_to.x + dx);
513 if ((dx + p->pos_to.x)%p->rect.w == 0)
516 __cal_year_update_view(p);
517 return ECORE_CALLBACK_CANCEL;
520 return ECORE_CALLBACK_RENEW;
523 static inline void __cal_year_start_animation(cal_view_main_year_data *p)
525 c_retm_if(!p, "Input parameter is null.");
527 if (p->mouse_up_position.x == p->pos_to.x)
531 p->ani = ecore_animator_timeline_add(ANIMATION_TIME, __cal_year_animation, p);
533 p->ani_start = ecore_time_get();
536 static void inline __cal_year_set_go(cal_view_main_year_data *p, int d)
538 c_retm_if(!p, "Input parameter is null.");
542 p->tm_to = p->ad->base_tm;
546 r = cal_util_update_tm_year(&p->tm_to, d);
550 p->pos_to.x = p->rect.w * (d * -1);
553 static void __cal_year_mouse_up(void *data, Evas *e, Evas_Object *ly, void *ei)
555 c_retm_if(!data, "Input parameter is null.");
557 Evas_Event_Mouse_Up *ev = ei;
558 cal_view_main_year_data *p = data;
565 cal_util_get_geometry(&p->mouse_up_position, p->cur_year->image);
567 int th = cal_util_get_flick_distance_threshold();
568 if (p->mouse_up_position.x > th)
569 __cal_year_set_go(p, -1);
570 else if (p->mouse_up_position.x < -th)
571 __cal_year_set_go(p, 1);
574 Evas_Coord x = ev->canvas.x - p->down1.x;
576 if (x < 3 && x > -3 && p->mouse_up_position.x ==0)
579 __cal_year_set_go(p, 0);
582 __cal_year_start_animation(p);
585 static void __cal_year_mouse_move(void *data, Evas *e, Evas_Object *ly, void *ei)
587 c_retm_if(!data, "Input parameter is null.");
589 cal_view_main_year_data *p = data;
591 Evas_Event_Mouse_Move *ev = ei;
595 p->move1.x = ev->cur.canvas.x;
596 p->move1.y = ev->cur.canvas.y;
598 if (!p->downed || p->multi_touched)
602 if ((cnt & 0x7) != 0) // Workaround
605 x = p->mouse_down_position.x + p->move1.x - p->down1.x;
607 __cal_year_move_year_objects(p, x);
609 p->ignore_mouse_down = EINA_TRUE;
611 struct _year *y = p->cur_year;
614 edje_object_signal_emit(y->edj, "mouse,up,1", signal_source);
618 static void __cal_year_mouse_down(void *data, Evas *e, Evas_Object *ly, void *ei)
620 c_retm_if(!data, "Input parameter is null.");
622 cal_view_main_year_data *p = data;
623 struct _year *y = p->cur_year;
625 Evas_Event_Mouse_Down *ev = ei;
627 p->down1.x = p->move1.x = ev->canvas.x;
628 p->down1.y = p->move1.y = ev->canvas.y;
630 cal_util_get_geometry(&p->mouse_down_position, y->image);
632 __cal_year_stop_animation(p);
635 p->multi_touched = 0;
638 static void __cal_year_update_select(struct _year *y, int tm_mon)
640 c_retm_if(!y, "Input parameter is null.");
642 cal_view_main_year_data* p = y->p;
644 if (p->pos_selected != -1)
645 cal_util_emit_signal(y->edj, "unselect,%d", p->pos_selected);
647 cal_util_emit_signal(y->edj, "select,%d", tm_mon);
649 p->pos_selected = tm_mon;
652 static Evas_Object *__cal_year_create_image(Evas_Object *parent, Eina_Bool is_landscape_mode)
654 c_retvm_if(!parent, NULL, "Input parameter is null.");
661 ecore_x_window_size_get(ecore_x_window_root_first_get(), &w, &h);
663 if (is_landscape_mode) {
669 e = evas_object_evas_get(parent);
670 ee = ecore_evas_ecore_evas_get(e);
672 img = ecore_evas_object_image_new(ee);
676 evas_object_image_alpha_set(img, EINA_TRUE);
677 evas_object_image_size_set(img, w, h);
678 evas_object_image_fill_set(img, 0, 0, w, h);
680 evas_object_show(img);
685 static Evas_Object *__cal_year_add_edje(Evas *e, const char *grp, Evas_Coord w, Evas_Coord h)
689 Evas_Object *eo = edje_object_add(e);
690 c_retv_if(!eo, NULL);
692 Eina_Bool r = edje_object_file_set(eo, EDJ_FILE, grp);
695 ERR("edje_object_file_set(%p, %s, %s) is failed.", eo, EDJ_FILE, grp);
702 evas_object_freeze_events_set(eo, EINA_TRUE);
704 evas_object_resize(eo, w, h);
705 evas_object_move(eo, 0, 0);
706 evas_object_show(eo);
711 static void __cal_year_image_object_resize_callback(void *data, Evas *e, Evas_Object *obj, void *ei)
713 c_retm_if(!data, "Input parameter is null.");
715 struct _year *y = data;
716 c_retm_if(!y->edj, "y->edj is null.");
717 c_retm_if(!y->p, "y->p is null.");
719 cal_view_main_year_data *p = y->p;
721 cal_util_get_geometry(&p->rect, obj);
723 evas_object_resize(y->edj, p->rect.w, p->rect.h);
724 evas_object_move(y->edj, 0, 0);
727 static void __cal_year_image_object_move_callback(void *data, Evas *e, Evas_Object *obj, void *ei)
729 c_retm_if(!data, "Input parameter is null.");
731 struct _year *y = data;
733 evas_object_move(y->edj, 0, 0);
736 static void __cal_year_delete_year_object(struct _year* y)
740 c_retm_if(!y, "Input parameter is null.");
742 evas_object_del(y->edj);
747 static struct _year* __cal_year_create_year_object(Evas_Object* ly, cal_view_main_year_data* p, enum year_index year)
749 c_retvm_if(!ly, NULL, "Input parameter is null.");
750 c_retvm_if(!p, NULL, "Input parameter is null.");
751 c_retvm_if(!p->ad, NULL, "p->ad is null.");
753 struct appdata* ad = p->ad;
754 c_retv_if(!ad, NULL);
756 struct tm tm = ad->base_tm;
758 int r = cal_util_update_tm_year(&tm, year);
759 c_retvm_if(r < 0, NULL, "cal_util_update_tm_year(%d, %d is failed", tm.tm_year, year);
761 struct _year* y = calloc(1, sizeof(struct _year));
764 y->image = __cal_year_create_image(ly, ad->is_landscape_mode);
766 y->evas = ecore_evas_object_evas_get(y->image);
768 y->edj = __cal_year_add_edje(y->evas, p->name, p->rect.w, p->rect.h);
773 elm_object_part_content_set(ly, "content/right", y->image);
775 elm_object_part_content_set(ly, "content/left", y->image);
777 elm_object_part_content_set(ly, "content", y->image);
780 y->year = tm.tm_year;
782 evas_object_event_callback_add(y->image, EVAS_CALLBACK_RESIZE, __cal_year_image_object_resize_callback, y);
783 evas_object_event_callback_add(y->image, EVAS_CALLBACK_MOVE, __cal_year_image_object_move_callback, y);
785 __cal_year_set_month_text(y);
786 __cal_year_fill_months(y);
791 static void __cal_year_create_edje_handle(cal_view_main_year_data* p)
793 c_retm_if(!p, "p is null.");
795 Evas * e = evas_object_evas_get(p->ly);
797 Evas_Object *ly = NULL;
798 Evas_Object *handle = NULL;
801 if (!p->ad->is_landscape_mode) {
802 ly = cal_util_add_layout(p->ly, "year/edje/handle");
804 ly = cal_util_add_layout(p->ly, "year/edje/handle/l");
807 c_retm_if(!ly, "ly is null.");
809 for (i = 0 ; i < 12 ; i++)
811 handle = evas_object_rectangle_add(e);
812 c_retm_if(!handle, "evas_object_rectangle_add returned null.");
814 evas_object_color_set(handle, 0, 0, 0, 0);
815 evas_object_data_set(handle, "index", (void*)i);
816 snprintf(part, sizeof(part), "handle/%d/sw", i);
817 elm_object_part_content_set(ly, part, handle);
819 evas_object_event_callback_add(handle, EVAS_CALLBACK_MOUSE_DOWN, __cal_year_image_object_mouse_down_callback, p);
820 evas_object_event_callback_add(handle, EVAS_CALLBACK_MOUSE_UP, __cal_year_image_object_mouse_up_callback, p);
822 p->edje_handle[i] = handle;
825 elm_object_part_content_set(p->ly, "edje/handle", ly);
831 Evas_Object* cal_year_create_view(struct appdata *ad, Evas_Object *main)
833 c_retvm_if(!ad, NULL, "Input parameter is null.");
834 c_retvm_if(!main, NULL, "Input parameter is null.");
836 cal_view_main_year_data *p;
837 Evas_Object* ly = NULL;
839 CAL_CALLOC(p, 1, cal_view_main_year_data);
841 if (!ad->is_landscape_mode) {
842 p->name = _name = "main/year/months";
844 p->name = _name = "main/year/months/l";
850 ad->tapbar_focus_view = CV_YEAR;
852 edje_object_part_geometry_get(CAL_UTIL_GET_EDJ_DATA(ad->main), "cont", NULL, NULL, &p->rect.w, &p->rect.h);
854 memset(p->wday, 0, 8*7);
855 memset(p->month, 0, 32*12);
857 __cal_year_make_month_text(p);
859 ly = cal_util_add_layout(p->ad->naviframe, "year/layout");
866 evas_object_data_set(ly, "priv", p);
869 p->pos_selected = -1;
871 __cal_year_create_edje_handle(p);
873 evas_object_event_callback_add(ly, EVAS_CALLBACK_DEL, __cal_year_delete_layout, p);
874 evas_object_event_callback_add(ly, EVAS_CALLBACK_MOUSE_DOWN, __cal_year_mouse_down, p);
875 evas_object_event_callback_add(ly, EVAS_CALLBACK_MOUSE_UP, __cal_year_mouse_up, p);
876 evas_object_event_callback_add(ly, EVAS_CALLBACK_MOUSE_MOVE, __cal_year_mouse_move, p);
878 cal_lang_manager_add_callback(__cal_year_text_refresh_callback, p);
883 static Eina_Bool __cal_year_create_year_with_idler(void* data)
887 c_retvm_if(!data, ECORE_CALLBACK_CANCEL, "Input param is null.");
889 cal_view_main_year_data* p = data;
891 c_retvm_if(!p->ad, ECORE_CALLBACK_CANCEL, "p->ad is null.");
894 __cal_year_delete_year_object(p->prev_year);
896 p->prev_year = __cal_year_create_year_object(p->ly, p, CAL_YEAR_PREV_YEAR);
897 c_retvm_if(!p->prev_year, ECORE_CALLBACK_CANCEL, "__cal_year_create_year_object returned null.");
900 __cal_year_delete_year_object(p->next_year);
902 p->next_year = __cal_year_create_year_object(p->ly, p, CAL_YEAR_NEXT_YEAR);
903 c_retvm_if(!p->next_year, ECORE_CALLBACK_CANCEL, "__cal_year_create_year_object returned null.");
907 return ECORE_CALLBACK_CANCEL;
910 static void __cal_year_update_current_year(cal_view_main_year_data* p)
914 c_retm_if(!p, "Input parameter is null.");
916 p->cur_year = __cal_year_create_year_object(p->ly, p, CAL_YEAR_CURR_YEAR);
917 c_retm_if(!p->cur_year, "__cal_year_create_year_object returned null.");
919 elm_object_part_content_set(p->ly, "content", p->cur_year->image);
922 void cal_year_update_view(Evas_Object *ly)
926 c_retm_if(!ly, "Input parameter is null.");
928 cal_view_main_year_data *p;
931 p = CAL_UTIL_GET_PRIV_DATA(ly);
932 c_retm_if(!p, "p is null.");
935 c_retm_if(!ad, "p->ad is null.");
937 if (!p || CAL_STRCMP(p->name, _name)) {
938 ERR("update year view: Invalid object");
942 __cal_year_update_current_year(p);
946 ecore_idler_del(p->idler);
950 p->idler = ecore_idler_add(__cal_year_create_year_with_idler, (void*)p);
952 __cal_year_update_select(p->cur_year, ad->base_tm.tm_mon);