3 * Copyright 2012 Samsung Electronics Co., Ltd
5 * Licensed under the Flora License, Version 1.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
9 * http://www.tizenopensource.org/license
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
25 Evas_Object *ly; // self
29 Evas_Object *tabbar; /* tab layout */
30 Evas_Object *tabbar_button;
31 Eina_Bool is_tabbar_show;
33 enum cld_view previous_tab;
34 enum cld_view current_tab;
36 Evas_Object *title; /* title layout */
37 Evas_Object *title_landscape; /* title layout */
39 Ecore_Timer *down_timer;
40 double intval, intval_init;
44 cal_quick_add *quick_add;
51 Evas_Object* (*create)(struct appdata *ad, Evas_Object *ly);
52 void (*update)(Evas_Object *ly);
53 Elm_Object_Item *item;
57 Elm_Object_Item *it; // Genlist Item pointer
58 cal_main_data *main_data;
59 cals_todo_list_order_t order_type;
60 }cal_main_view_by_item_data;
63 static struct _tabbar_item tabbar_items[] = {
67 CAL_UTIL_DATE_FORMAT_5,
75 CAL_UTIL_DATE_FORMAT_15,
76 cal_month_create_view,
77 cal_month_update_view,
82 N_("IDS_CLD_BODY_WEEK"),
83 CAL_UTIL_DATE_FORMAT_6,
91 CAL_UTIL_DATE_FORMAT_7,
100 cal_list_create_view,
101 cal_list_update_view,
108 cal_todo_create_view,
109 cal_todo_update_view,
113 static char *__cal_main_get_view_by_label(void *data, Evas_Object *obj, const char *part);
114 static void __cal_main_get_view_by_item_delete(void *data, Evas_Object *obj);
115 static void __cal_main_set_title_text_naviframe( struct appdata *ad);
116 static int __cal_main_add_title_landscape(struct appdata *ad, Evas_Object *ly);
117 static void __cal_main_update_naviframe(cal_main_data *main_data);
119 static Elm_Genlist_Item_Class itc_1text_item = {
120 .item_style = "1text",
121 .func.text_get = __cal_main_get_view_by_label,
122 .func.del = __cal_main_get_view_by_item_delete,
124 static void __cal_main_center_button_callback(void *data, Evas_Object* obj, void* event_info);
126 static void __cal_main_new_button_callback(void *data, Evas_Object *obj, void *event_info)
131 Evas_Object *ly = data;
133 cal_main_data *main_data = CAL_UTIL_GET_PRIV_DATA(ly);
134 c_ret_if(!main_data);
136 struct appdata *ad = main_data->ad;
142 if (CV_TODO != main_data->current_tab)
143 cal_edit_create_view(main_data->ad, main_data->ly);
145 cal_edit_create_view_todo(main_data->ad, main_data->ly);
148 static void __cal_main_view_by_popup_list_sel(void *data, Evas_Object *obj, void *event_info)
150 c_retm_if(!data, "data is null");
151 c_retm_if(!obj, "obj is null");
153 Evas_Object *popup = NULL;
154 cal_main_view_by_item_data *item_data = data;
155 cal_main_data *main_data = item_data->main_data;
156 c_retm_if(!main_data, "main_data is null");
158 Elm_Object_Item *item = elm_genlist_selected_item_get(obj);
159 c_retm_if(!item, "elm_genlist_selected_item_get() returned null");
161 elm_genlist_item_selected_set(item, EINA_FALSE);
162 main_data->ad->todo_sort_type = item_data->order_type;
163 popup = evas_object_data_get(obj, "popup");
165 evas_object_del(popup);
169 cal_todo_update_view(main_data->content);
172 static void __cal_main_get_view_by_item_delete(void *data, Evas_Object *obj)
174 c_retm_if(!data, "data is null");
175 cal_main_view_by_item_data *item_data = data;
180 static char *__cal_main_get_view_by_label(void *data, Evas_Object *obj, const char *part)
182 c_retvm_if(!data, NULL, "data is null");
184 cal_main_view_by_item_data *item_data = data;
185 if (!CAL_STRCMP(part, "elm.text"))
187 if (item_data->order_type == CALS_TODO_LIST_ORDER_END_DATE) {
188 return strdup(C_("IDS_CLD_BODY_DUE_DATE"));
189 } else if (item_data->order_type == CALS_TODO_LIST_ORDER_PRIORITY) {
190 return strdup(C_("IDS_CLD_BODY_PRIORITY"));
191 } else if (item_data->order_type == -1) {
192 return strdup(C_("IDS_CST_POP_STATUS"));
200 static void __cal_main_view_popup_append_genlist_item(Evas_Object *genlist, cal_main_data *main_data, cals_todo_list_order_t order_type)
202 c_retm_if(!main_data, "main_data is null");
203 c_retm_if(!genlist, "genlist is null");
205 cal_main_view_by_item_data *item_data = calloc(1, sizeof(cal_main_view_by_item_data));
206 c_retm_if(!item_data, "item_data is null.");
207 item_data->main_data = main_data;
208 item_data->order_type = order_type;
209 item_data->it = elm_genlist_item_append(genlist, &itc_1text_item, item_data, NULL, ELM_GENLIST_ITEM_NONE, __cal_main_view_by_popup_list_sel, item_data);
210 c_retm_if(!item_data->it, "item_data->it is null");
213 static Evas_Object *__cal_main_view_by_popup(void *data)
215 c_retvm_if(!data, NULL, "data is null");
216 cal_main_data *main_data = (cal_main_data *)data;
218 Evas_Object *popup = NULL;
219 Evas_Object *genlist = NULL;
221 popup = cal_util_add_popup(main_data->ad->win, "liststyle", C_("IDS_CLD_BODY_VIEW"), NULL,
222 NULL, NULL, S_("IDS_COM_BODY_CLOSE"), NULL);
223 c_retvm_if(!popup, NULL, "popup is null");
225 genlist = elm_genlist_add(popup);
227 ERR("elm_genlist_add(popup) returned null");
228 evas_object_del(popup);
232 evas_object_size_hint_weight_set(genlist, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
233 evas_object_size_hint_align_set(genlist, EVAS_HINT_FILL, EVAS_HINT_FILL);
235 __cal_main_view_popup_append_genlist_item(genlist, main_data, CALS_TODO_LIST_ORDER_END_DATE);
237 // TODO: Update with calendar svc changes
238 __cal_main_view_popup_append_genlist_item(genlist, main_data, -1);
240 __cal_main_view_popup_append_genlist_item(genlist, main_data, CALS_TODO_LIST_ORDER_PRIORITY);
242 evas_object_data_set(genlist, "popup", popup);
243 elm_object_content_set(popup, genlist);
244 evas_object_show(genlist);
249 static void __cal_main_view_by_button_callback(void *data, Evas_Object *obj, void *event_info)
251 c_retm_if(!data, "data is null");
252 c_retm_if(!obj, "obj is null");
254 Evas_Object *ly = data;
255 cal_main_data *main_data;
257 main_data = CAL_UTIL_GET_PRIV_DATA(ly);
258 c_retm_if(!main_data, "CAL_UTIL_GET_PRIV_DATA returned null");
260 Evas_Object *popup = __cal_main_view_by_popup(main_data);
261 c_retm_if(!popup, "__cal_main_view_by_popup returns null");
262 evas_object_show(popup);
265 static void __cal_main_delete_button_callback(void *data, Evas_Object *obj, void *event_info)
267 c_retm_if(!data, "data is null");
268 c_retm_if(!obj, "obj is null");
270 Evas_Object *ly = data;
271 Evas_Object *ly_delete = NULL;
272 cal_main_data *main_data;
274 main_data = CAL_UTIL_GET_PRIV_DATA(ly);
275 c_retm_if(!main_data, "CAL_UTIL_GET_PRIV_DATA returned null");
277 ly_delete = cal_list_delete_view_create(main_data->ly,main_data->ad);
278 c_retm_if(!ly_delete, "ly_delete is null");
279 cal_list_delete_update_view(ly_delete);
284 static void __cal_main_account_button_callback(void *data, Evas_Object *obj, void *ei)
286 c_retm_if(!data, "data is null");
287 c_retm_if(!obj, "obj is null");
289 Evas_Object *ly = data;
290 cal_main_data *main_data;
292 main_data= CAL_UTIL_GET_PRIV_DATA(ly);
293 c_retm_if(!main_data, "CAL_UTIL_GET_PRIV_DATA returned null");
295 cal_account_create_view(main_data->ad, ly);
298 void cal_main_update_title_text(Evas_Object *title, enum cld_view v, struct tm *t, int week_start)
300 c_retm_if(!title, "title is null");
301 c_retm_if(!t, "t is null");
303 if (tabbar_items[v].title) {
305 cal_util_set_time_week_text(CAL_UTIL_GET_EDJ_DATA(title), "title/text", _(tabbar_items[v].title), NULL, t, week_start);
307 cal_util_set_time_text(CAL_UTIL_GET_EDJ_DATA(title), "title/text", _(tabbar_items[v].title), NULL, t);
312 static inline void __cal_main_update_title(Evas_Object *ly, enum cld_view v)
316 cal_main_data *main_data = CAL_UTIL_GET_PRIV_DATA(ly);
317 c_ret_if(!main_data);
319 struct appdata *ad = main_data->ad;
322 if (!ad->is_landscape_mode && tabbar_items[v].title) {
323 if (main_data->is_tabbar_show)
324 edje_object_signal_emit(CAL_UTIL_GET_EDJ_DATA(ly), "show,title,left", "prog");
326 edje_object_signal_emit(CAL_UTIL_GET_EDJ_DATA(ly), "show,title", "prog");
328 edje_object_signal_emit(CAL_UTIL_GET_EDJ_DATA(ly), "hide,title", "prog");
333 static void __cal_main_hide_tabbar(cal_main_data *main_data)
335 c_ret_if(!main_data);
337 edje_object_signal_emit(CAL_UTIL_GET_EDJ_DATA(main_data->ly), "right,default", "prog");
339 struct appdata *ad = main_data->ad;
342 if (!ad->is_landscape_mode && tabbar_items[ad->current_view].title) {
343 edje_object_signal_emit(CAL_UTIL_GET_EDJ_DATA(main_data->ly), "show,title", "prog");
345 edje_object_signal_emit(CAL_UTIL_GET_EDJ_DATA(main_data->ly), "hide,title", "prog");
347 main_data->is_tabbar_show = EINA_FALSE;
349 elm_object_style_set(main_data->tabbar_button, "calendar/naviframe/more_left/default");
352 static Eina_Bool __cal_main_tabbar_idler(void *data)
354 c_retv_if(!data, ECORE_CALLBACK_CANCEL);
356 cal_main_data *main_data = data;
357 struct appdata *ad = main_data->ad;
360 if (!ad->is_landscape_mode)
361 __cal_main_hide_tabbar(main_data);
363 main_data->idler = NULL;
365 return ECORE_CALLBACK_CANCEL;
369 static void __cal_main_tabbar_changed_callback(void *data, Evas_Object *obj, void *event_info)
374 c_ret_if(!event_info);
376 cal_main_data *main_data = data;
378 struct appdata *ad = main_data->ad;
381 enum cld_view view = (enum cld_view)event_info;
383 cal_main_change_view(main_data->ly, view);
385 if (main_data->idler) {
386 ecore_idler_del(main_data->idler);
387 main_data->idler = NULL;
390 main_data->idler = ecore_idler_add(__cal_main_tabbar_idler, main_data);
393 static void __cal_main_init_navi_title()
395 tabbar_items[CV_YEAR].msgid = C_("IDS_CLD_BODY_YEAR");
396 tabbar_items[CV_MONTH].msgid = C_("IDS_CLD_BODY_VIEWBY_MONTH");
397 tabbar_items[CV_WEEK].msgid = C_("IDS_CLD_BODY_WEEK");
398 tabbar_items[CV_DAY].msgid = C_("IDS_CLD_BODY_DAY");
399 tabbar_items[CV_LIST].msgid = C_("IDS_CLD_BODY_LIST");
400 tabbar_items[CV_TODO].msgid = C_("IDS_CLD_BODY_TASK");
403 static void __cal_main_update_tabbar(cal_main_data *main_data)
405 c_ret_if(!main_data);
406 c_ret_if(!main_data->ad);
408 Evas_Object *tabbar = main_data->tabbar;
411 switch (main_data->previous_tab) {
413 edje_object_signal_emit(CAL_UTIL_GET_EDJ_DATA(tabbar), "year_normal", "prog");
416 edje_object_signal_emit(CAL_UTIL_GET_EDJ_DATA(tabbar), "month_normal", "prog");
419 edje_object_signal_emit(CAL_UTIL_GET_EDJ_DATA(tabbar), "week_normal", "prog");
422 edje_object_signal_emit(CAL_UTIL_GET_EDJ_DATA(tabbar), "day_normal", "prog");
425 edje_object_signal_emit(CAL_UTIL_GET_EDJ_DATA(tabbar), "list_normal", "prog");
428 edje_object_signal_emit(CAL_UTIL_GET_EDJ_DATA(tabbar), "task_normal", "prog");
434 switch (main_data->current_tab) {
436 edje_object_signal_emit(CAL_UTIL_GET_EDJ_DATA(tabbar), "year_pressed", "prog");
439 edje_object_signal_emit(CAL_UTIL_GET_EDJ_DATA(tabbar), "month_pressed", "prog");
442 edje_object_signal_emit(CAL_UTIL_GET_EDJ_DATA(tabbar), "week_pressed", "prog");
445 edje_object_signal_emit(CAL_UTIL_GET_EDJ_DATA(tabbar), "day_pressed", "prog");
448 edje_object_signal_emit(CAL_UTIL_GET_EDJ_DATA(tabbar), "list_pressed", "prog");
451 edje_object_signal_emit(CAL_UTIL_GET_EDJ_DATA(tabbar), "task_pressed", "prog");
457 if (main_data->ad->is_landscape_mode) {
458 cal_util_emit_signal(CAL_UTIL_GET_EDJ_DATA(tabbar), "landscape");
460 cal_util_emit_signal(CAL_UTIL_GET_EDJ_DATA(tabbar), "portrait");
464 static void __cal_main_tabbar_content_mouse_cliked(void *data, Evas_Object *eo, const char *e, const char *s)
468 cal_main_data *main_data = data;
470 Evas_Object *tabbar = main_data->tabbar;
473 struct appdata *ad = main_data->ad;
476 enum cld_view view = CV_UNKNOWN;
478 if (!strcmp(e, "year")) {
482 } else if (!strcmp(e, "month")) {
486 } else if (!strcmp(e, "week")) {
490 } else if (!strcmp(e, "day")) {
494 } else if (!strcmp(e, "list")) {
498 } else if (!strcmp(e, "task")) {
503 __cal_main_tabbar_changed_callback(main_data, NULL, (void *)view);
506 static void __cal_main_add_tabbar(cal_main_data *main_data)
508 c_ret_if(!main_data);
510 Evas_Object *tabbar = elm_layout_add(main_data->ly);
513 Eina_Bool r = elm_layout_file_set(tabbar, EDJ_FILE, "tabbar_list");
514 c_ret_if(r == EINA_FALSE);
516 main_data->tabbar = tabbar;
518 __cal_main_update_tabbar(main_data);
520 cal_util_set_text(CAL_UTIL_GET_EDJ_DATA(tabbar), "year_text", tabbar_items[CV_YEAR].msgid);
521 cal_util_set_text(CAL_UTIL_GET_EDJ_DATA(tabbar), "month_text", tabbar_items[CV_MONTH].msgid);
522 cal_util_set_text(CAL_UTIL_GET_EDJ_DATA(tabbar), "week_text", tabbar_items[CV_WEEK].msgid);
523 cal_util_set_text(CAL_UTIL_GET_EDJ_DATA(tabbar), "day_text", tabbar_items[CV_DAY].msgid);
524 cal_util_set_text(CAL_UTIL_GET_EDJ_DATA(tabbar), "list_text", tabbar_items[CV_LIST].msgid);
525 cal_util_set_text(CAL_UTIL_GET_EDJ_DATA(tabbar), "task_text", tabbar_items[CV_TODO].msgid);
527 edje_object_signal_callback_add(CAL_UTIL_GET_EDJ_DATA(tabbar), "*", "clicked", __cal_main_tabbar_content_mouse_cliked, main_data);
529 elm_object_part_content_set(main_data->ly, "elm.swallow.tabbar", tabbar);
532 static void __cal_main_show_tabbar(cal_main_data *main_data)
534 c_ret_if(!main_data);
536 if (!main_data->tabbar)
537 __cal_main_add_tabbar(main_data);
539 edje_object_signal_emit(CAL_UTIL_GET_EDJ_DATA(main_data->ly), "left,offset", "prog");
541 struct appdata *ad = main_data->ad;
544 if (!ad->is_landscape_mode && tabbar_items[ad->current_view].title) {
545 edje_object_signal_emit(CAL_UTIL_GET_EDJ_DATA(main_data->ly), "show,title,left", "prog");
548 main_data->is_tabbar_show = EINA_TRUE;
550 elm_object_style_set(main_data->tabbar_button, "calendar/naviframe/more_right/default");
553 static void __cal_main_content_mouse_down(void *data, Evas *e, Evas_Object *ly, void *ei)
557 cal_main_data *main_data = data;
559 struct appdata *ad = main_data->ad;
562 if (main_data->is_tabbar_show && !ad->is_landscape_mode)
563 __cal_main_hide_tabbar(main_data);
566 static void __cal_main_create_content(Evas_Object *ly, cal_main_data *main_data, enum cld_view v)
568 c_retm_if(!ly, "ly is null");
569 c_retm_if(!main_data, "main_data is null");
572 struct appdata *ad = main_data->ad;
574 if (main_data->content) {
575 evas_object_event_callback_del(main_data->content, EVAS_CALLBACK_MOUSE_DOWN, __cal_main_content_mouse_down);
576 elm_object_part_content_unset(ly, "cont");
577 cal_util_delete_evas_object(&main_data->content);
580 if (tabbar_items[v].create) {
581 main_data->content = tabbar_items[v].create(ad, ly);
582 c_ret_if(!main_data->content);
585 evas_object_event_callback_add(main_data->content, EVAS_CALLBACK_MOUSE_DOWN, __cal_main_content_mouse_down, main_data);
586 elm_object_part_content_set(ly, "cont", main_data->content);
589 static inline int __cal_main_update_tm(struct tm *t, enum cld_view v, int delta)
591 c_retvm_if(!t, -1, "t is null");
597 r = cal_util_update_tm_year(t, delta);
600 r = cal_util_update_tm_month(t, delta);
603 r = cal_util_update_tm_day(t, delta * 7);
606 r = cal_util_update_tm_day(t, delta);
613 r = -1; // stop timer
619 static int __cal_main_update_content(cal_main_data *main_data)
621 c_retvm_if(!main_data, -1, "main_data is null");
623 struct appdata *ad = main_data->ad;
626 enum cld_view v = main_data->current_tab;
628 struct tm tmp = ad->base_tm;
629 int r = __cal_main_update_tm(&tmp, v, main_data->delta);
630 c_retv_if(r == -1, -1);
634 cal_main_update_title_text(ad->title, v, &ad->base_tm, ad->wday_start);
636 __cal_main_set_title_text_naviframe(ad);
638 if (tabbar_items[v].update)
639 tabbar_items[v].update(main_data->content);
641 ad->is_update_view = EINA_FALSE;
646 static Eina_Bool __cal_main_update_content_by_timer(void *data)
648 c_retvm_if(!data, ECORE_CALLBACK_CANCEL, "data is null");
650 cal_main_data *main_data;
653 main_data = CAL_UTIL_GET_PRIV_DATA(data);
654 c_retvm_if(!main_data, ECORE_CALLBACK_CANCEL, "CAL_UTIL_GET_PRIV_DATA returned null");
656 r = __cal_main_update_content(main_data);
658 main_data->down_timer = NULL;
659 return ECORE_CALLBACK_CANCEL;
662 main_data->intval = main_data->intval / 1.05;
663 ecore_timer_interval_set(main_data->down_timer, main_data->intval);
665 return ECORE_CALLBACK_RENEW;
668 void cal_main_change_view(Evas_Object *ly, enum cld_view v)
673 c_ret_if(v < CV_YEAR || v > CV_TODO);
675 cal_main_data *main_data = CAL_UTIL_GET_PRIV_DATA(ly);
676 c_ret_if(!main_data);
678 struct appdata *ad = main_data->ad;
681 if (main_data->current_tab == v)
684 main_data->is_tabbar_show = EINA_FALSE;
686 ad->current_view = v;
688 main_data->previous_tab = main_data->current_tab;
689 main_data->current_tab = v;
691 __cal_main_update_tabbar(main_data);
694 cal_day_time_set_time_block_default_parameters(ad);
696 __cal_main_create_content(ly, main_data, v);
697 __cal_main_update_title(ly, v);
699 Elm_Object_Item *it = NULL;
702 if (!ad->bt_delete) {
703 it = elm_toolbar_first_item_get(ad->cbar);
704 ad->bt_delete = elm_toolbar_item_insert_after(ad->cbar, it, CAL_CBAR_ICON_DELETE, NULL, __cal_main_delete_button_callback,ad->main);
708 elm_object_item_del(ad->bt_view);
713 it = elm_toolbar_first_item_get(ad->cbar);
714 ad->bt_today = elm_toolbar_item_insert_after(ad->cbar, it, CAL_CBAR_ICON_TODAY, NULL, __cal_main_center_button_callback, ad->main);
716 } else if (v == CV_TODO) {
719 elm_object_item_del(ad->bt_delete);
720 ad->bt_delete = NULL;
722 it = elm_toolbar_last_item_get(ad->cbar);
723 ad->bt_view = elm_toolbar_item_insert_before(ad->cbar, it, CAL_CBAR_ICON_VIEW, NULL, __cal_main_view_by_button_callback, ad->main);
724 ad->bt_delete = elm_toolbar_item_insert_before(ad->cbar, ad->bt_view, CAL_CBAR_ICON_DELETE, NULL, __cal_main_delete_button_callback,ad->main);
725 elm_object_item_del(ad->bt_today);
731 elm_object_item_del(ad->bt_delete);
732 ad->bt_delete = NULL;
736 elm_object_item_del(ad->bt_view);
741 it = elm_toolbar_first_item_get(ad->cbar);
742 ad->bt_today = elm_toolbar_item_insert_after(ad->cbar, it, CAL_CBAR_ICON_TODAY, NULL, __cal_main_center_button_callback, ad->main);
746 __cal_main_update_content(main_data);
751 static void __cal_main_set_base_tm(Evas_Object *ly)
753 c_retm_if(!ly, "ly is null");
755 cal_main_data *main_data;
758 main_data = CAL_UTIL_GET_PRIV_DATA(ly);
759 c_retm_if(!main_data, "CAL_UTIL_GET_PRIV_DATA returned null");
762 c_retm_if(!ad, "ad is null");
764 if (ad->current_view == CV_LIST)
766 cal_list_scroll_today(ad);
770 if(ad->base_tm.tm_year == ad->today_tm.tm_year)
771 if(ad->base_tm.tm_mon == ad->today_tm.tm_mon)
772 if(ad->base_tm.tm_mday == ad->today_tm.tm_mday)
775 ad->base_tm = ad->today_tm;
777 __cal_main_update_content(main_data);
780 static void __cal_main_inc_start(void *data, Evas_Object *obj, const char *e, const char *src)
782 cal_main_data *main_data;
784 main_data = CAL_UTIL_GET_PRIV_DATA(data);
785 c_retm_if(!main_data, "CAL_UTIL_GET_PRIV_DATA returned null");
787 main_data->intval = main_data->intval_init;
788 main_data->delta = 1;
790 if (main_data->down_timer)
791 ecore_timer_del(main_data->down_timer);
793 main_data->down_timer = ecore_timer_add(main_data->intval, __cal_main_update_content_by_timer, data);
794 __cal_main_update_content(main_data);
797 static void __cal_main_dec_start(void *data, Evas_Object *obj, const char *e, const char *src)
799 cal_main_data *main_data;
801 main_data = CAL_UTIL_GET_PRIV_DATA(data);
802 c_retm_if(!main_data, "CAL_UTIL_GET_PRIV_DATA returned null");
804 main_data->intval = main_data->intval_init;
805 main_data->delta = -1;
807 if (main_data->down_timer)
808 ecore_timer_del(main_data->down_timer);
810 main_data->down_timer = ecore_timer_add(main_data->intval, __cal_main_update_content_by_timer, data);
811 __cal_main_update_content(main_data);
814 static void __cal_main_stop(void *data, Evas_Object *obj, const char *e, const char *src)
816 cal_main_data *main_data;
818 main_data = CAL_UTIL_GET_PRIV_DATA(data);
819 c_retm_if(!main_data, "CAL_UTIL_GET_PRIV_DATA returned null");
821 if (main_data->down_timer)
822 ecore_timer_del(main_data->down_timer);
824 main_data->down_timer = NULL;
825 main_data->delta = 0;
828 static int __cal_main_add_title(struct appdata *ad, Evas_Object *ly)
830 c_retvm_if(!ad, -1, "ad is null");
831 c_retvm_if(!ly, -1, "ly is null");
833 cal_main_data *main_data;
836 title = cal_util_add_layout(ad->nv, "main/title");
837 c_retvm_if(!title, -1, "cal_util_add_layout returned null");
839 elm_object_part_content_set(ly, "title", title);
841 edje_object_signal_callback_add(CAL_UTIL_GET_EDJ_DATA(title), "start,inc", "title", __cal_main_inc_start, ly);
842 edje_object_signal_callback_add(CAL_UTIL_GET_EDJ_DATA(title), "start,dec", "title", __cal_main_dec_start, ly);
843 edje_object_signal_callback_add(CAL_UTIL_GET_EDJ_DATA(title), "stop,dec", "title", __cal_main_stop, ly);
844 edje_object_signal_callback_add(CAL_UTIL_GET_EDJ_DATA(title), "stop,inc", "title", __cal_main_stop, ly);
846 main_data = CAL_UTIL_GET_PRIV_DATA(ly);
847 c_retvm_if(!main_data, -1, "CAL_UTIL_GET_PRIV_DATA returned null");
849 main_data->title = title;
850 ad->title = main_data->title;
855 static void __cal_main_update_all(void* data)
859 struct appdata* ad = data;
861 ad->calendar_facebook_id = cal_account_svc_get_facebook_calendar_id();
863 cal_main_update_view(ad);
866 static void __cal_main_add_changed_callback(struct appdata * ad)
872 CALENDAR_SVC_ADD_EVENT_CHANGED_CALLBACK(cal_main_update_view, ad);
874 CALENDAR_SVC_ADD_CALENDAR_CHANGED_CALLBACK(CAL_STRUCT_CALENDAR, __cal_main_update_all, ad);
879 static void __cal_main_del_changed_callback()
883 CALENDAR_SVC_DEL_EVENT_CHANGED_CALLBACK(cal_main_update_view);
885 CALENDAR_SVC_DEL_CALENDAR_CHANGED_CALLBACK(CAL_STRUCT_CALENDAR, __cal_main_update_all);
890 static void __cal_main_delete_quick_add(cal_quick_add *quick_add)
892 c_retm_if(!quick_add, "quick_add is null");
894 if (quick_add->popup)
895 evas_object_del(quick_add->popup);
897 if (quick_add->hold_timer)
898 ecore_timer_del(quick_add->hold_timer);
903 static void __cal_main_delete_layout(void *data, Evas *e, Evas_Object *obj, void *ei)
909 cal_main_data *main_data = CAL_UTIL_GET_PRIV_DATA(obj);
910 c_ret_if(!main_data);
912 __cal_main_del_changed_callback();
914 if (main_data->down_timer)
915 ecore_timer_del(main_data->down_timer);
917 if (main_data->tabbar) {
918 edje_object_signal_callback_del(main_data->tabbar, "*", "clicked", __cal_main_tabbar_content_mouse_cliked);
919 evas_object_del(main_data->tabbar);
920 main_data->tabbar = NULL;
922 __cal_main_delete_quick_add(main_data->quick_add);
924 struct appdata *ad = main_data->ad;
934 static Evas_Object *__cal_main_create_main_layout(struct appdata *ad)
936 c_retv_if(!ad, NULL);
939 cal_main_data *main_data = calloc(1, sizeof(cal_main_data));
940 c_retv_if(!main_data, NULL);
942 Evas_Object *ly = cal_util_add_layout(ad->nv, "main");
950 main_data->intval_init = 0.5;
951 main_data->ad->bt_delete = NULL;
952 evas_object_data_set(ly, "priv", main_data);
954 evas_object_event_callback_add(ly, EVAS_CALLBACK_DEL, __cal_main_delete_layout, NULL);
956 r = __cal_main_add_title(ad, ly);
957 c_retv_if(r != 0, NULL);
959 r = __cal_main_add_title_landscape(ad, ly);
960 c_retv_if(r != 0, NULL);
965 static void __cal_main_center_button_callback(void *data, Evas_Object* obj, void* event_info)
967 c_retm_if(!data, "data is null");
969 __cal_main_set_base_tm(data);
972 static void __cal_main_back_button_clicked_callback(void *data, Evas_Object *obj, void *event_info)
974 c_retm_if(!data, "data is null");
976 struct appdata* ad = (struct appdata*)data;
978 elm_win_lower(ad->win);
981 static void __cal_main_tabbar_button_callback(void *data, Evas_Object *obj, void *event_info)
986 cal_main_data *main_data = data;
988 if (main_data->is_tabbar_show)
989 __cal_main_hide_tabbar(main_data);
991 __cal_main_show_tabbar(main_data);
994 static void __cal_main_add_tabbar_button( struct appdata *ad)
999 cal_main_data *main_data = CAL_UTIL_GET_PRIV_DATA(ad->main);
1000 c_ret_if(!main_data);
1002 Evas_Object *tabbar_button = elm_button_add(ad->nv);
1003 c_ret_if(!tabbar_button);
1005 cal_util_set_controlbar_button(tabbar_button, NULL, "calendar/naviframe/more_left/default", __cal_main_tabbar_button_callback, main_data);
1007 elm_object_item_part_content_set(ad->main_navi_item, "title_right_btn", tabbar_button);
1009 main_data->tabbar_button = tabbar_button;
1012 static void __cal_main_set_title_text_naviframe( struct appdata *ad)
1014 c_retm_if(!ad, "ad is null");
1018 Eina_Bool visibility = EINA_FALSE;
1020 const char *name = NULL;
1021 Eina_List *list = CALENDAR_SVC_GET_ALL(ALL_ACCOUNT_ID, ALL_CALENDAR_ID, CAL_STRUCT_CALENDAR);
1023 EINA_LIST_FOREACH(list, l, cs) {
1025 visibility = CALENDAR_SVC_STRUCT_GET_INT(cs,CAL_TABLE_INT_VISIBILITY);
1027 name = CALENDAR_SVC_STRUCT_GET_STR(cs,CAL_TABLE_TXT_NAME);
1034 elm_object_item_text_set(ad->main_navi_item, C_("IDS_CLD_HEADER_NO_CALENDARS"));
1036 if ((eina_list_count(list) == count)) {
1037 elm_object_item_text_set(ad->main_navi_item, C_("IDS_CLD_BODY_ALL_CALENDAR"));
1038 } else if (1 < count) {
1039 char buff[64] = {0};
1040 sprintf(buff, "%d %s", count, C_("IDS_CLD_BODY_CALENDARS"));
1041 elm_object_item_text_set(ad->main_navi_item, buff);
1042 } else if (1 == count) {
1044 if (!strcmp(name, "default calendar"))
1045 elm_object_item_text_set(ad->main_navi_item, C_("IDS_CLD_OPT_PHONE_CALENDAR"));
1047 elm_object_item_text_set(ad->main_navi_item, name);
1053 static void __cal_main_set_naviframe( struct appdata *ad)
1059 Evas_Object *cbar = cal_util_add_controlbar(ad->nv);
1063 ad->bt_new = elm_toolbar_item_append(cbar, CAL_CBAR_ICON_CREAT, NULL, __cal_main_new_button_callback, ad->main);
1064 ad->bt_today = elm_toolbar_item_append(cbar, CAL_CBAR_ICON_TODAY, NULL, __cal_main_center_button_callback, ad->main);
1065 elm_toolbar_item_append(cbar, CAL_CBAR_ICON_CALENDARS, NULL, __cal_main_account_button_callback, ad->main);
1066 Evas_Object *back_button = elm_button_add(ad->nv);
1067 c_ret_if(!back_button);
1068 evas_object_smart_callback_add(back_button, "clicked", __cal_main_back_button_clicked_callback, ad);
1070 ad->main_navi_item = elm_naviframe_item_push(ad->nv, NULL, back_button, NULL, ad->main, NULL);
1072 elm_object_item_part_content_set(ad->main_navi_item, "controlbar", cbar);
1074 elm_object_style_set(back_button, "naviframe/back_btn/default");
1076 __cal_main_add_tabbar_button(ad);
1078 __cal_main_init_navi_title();
1079 __cal_main_set_title_text_naviframe(ad);
1084 void cal_main_create_view(struct appdata *ad)
1088 c_retm_if(!ad, "data is null");
1090 c_retm_if(ad->request_view < CV_YEAR && ad->request_view > CV_DETAIL, "request_view is invalid");
1093 ad->main = __cal_main_create_main_layout(ad);
1094 c_retm_if(!ad->main, "ad->main is null");
1096 __cal_main_set_naviframe(ad);
1099 __cal_main_add_changed_callback(ad);
1101 cal_main_change_view(ad->main, ad->request_view);
1106 static void __cal_main_set_first_day(struct appdata *ad)
1108 c_retm_if(!ad, "ad is null");
1111 r = vconf_get_int(CAL_VCONFKEY_FIRST_DAY_OF_WEEK, &val);
1115 ad->wday_start = val;
1118 void cal_main_update_view(void *data)
1124 struct appdata* ad = data;
1126 c_ret_if(!ad->main);
1128 cal_main_data *main_data = CAL_UTIL_GET_PRIV_DATA(ad->main);
1129 c_ret_if(!main_data);
1131 if (ad->current_view == CV_UNKNOWN)
1132 ad->current_view = main_data->current_tab;
1134 __cal_main_update_naviframe(main_data);
1136 __cal_main_set_first_day(ad);
1138 __cal_main_create_content(main_data->ly, main_data, main_data->current_tab);
1140 __cal_main_update_content(main_data);
1142 __cal_main_update_tabbar(main_data);
1144 __cal_main_update_title(ad->main, main_data->current_tab);
1149 static int __cal_main_add_title_landscape(struct appdata *ad, Evas_Object *ly)
1154 cal_main_data *main_data;
1157 title = cal_util_add_layout(ad->nv, "main/title/l");
1158 c_retvm_if(!title, -1, "cal_util_add_layout returned null");
1160 edje_object_signal_callback_add(CAL_UTIL_GET_EDJ_DATA(title), "start,inc", "title", __cal_main_inc_start, ly);
1161 edje_object_signal_callback_add(CAL_UTIL_GET_EDJ_DATA(title), "start,dec", "title", __cal_main_dec_start, ly);
1162 edje_object_signal_callback_add(CAL_UTIL_GET_EDJ_DATA(title), "stop,dec", "title", __cal_main_stop, ly);
1163 edje_object_signal_callback_add(CAL_UTIL_GET_EDJ_DATA(title), "stop,inc", "title", __cal_main_stop, ly);
1165 main_data = CAL_UTIL_GET_PRIV_DATA(ly);
1166 c_retv_if(!main_data, -1);
1168 main_data->title_landscape = title;
1173 static void __cal_main_update_naviframe(cal_main_data *main_data)
1175 c_ret_if(!main_data);
1176 c_ret_if(!main_data->ad);
1178 struct appdata *ad = main_data->ad;
1180 if (ad->is_landscape_mode) {
1181 elm_object_item_part_content_unset(ad->main_navi_item, "title_right_btn");
1182 evas_object_hide(main_data->tabbar_button);
1184 ad->title = main_data->title_landscape;
1185 elm_naviframe_item_style_set(ad->main_navi_item, "basic/calendar");
1186 evas_object_show(ad->title);
1187 elm_object_item_part_content_set(ad->main_navi_item, "title_left_icon", ad->title);
1189 if (!main_data->tabbar)
1190 __cal_main_add_tabbar(main_data);
1192 cal_util_emit_signal(CAL_UTIL_GET_EDJ_DATA(ad->main ), "landscape,show,tabbar");
1195 elm_object_item_part_content_unset(ad->main_navi_item, "title_left_icon");
1196 evas_object_hide(ad->title);
1198 ad->title = main_data->title;
1199 elm_naviframe_item_style_set(ad->main_navi_item, "basic");
1201 evas_object_show(main_data->tabbar_button);
1202 elm_object_item_part_content_set(ad->main_navi_item, "title_right_btn", main_data->tabbar_button);
1204 if (main_data->is_tabbar_show) {
1205 cal_util_emit_signal(CAL_UTIL_GET_EDJ_DATA(ad->main ), "portrait,show,tabbar");
1207 cal_util_emit_signal(CAL_UTIL_GET_EDJ_DATA(ad->main ), "portrait,hide,tabbar");