Tizen 2.1 base
[apps/core/preloaded/calendar.git] / src / view-main-day.c
1 /*
2   *
3   *  Copyright 2012  Samsung Electronics Co., Ltd
4   *
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
8   *
9   *       http://floralicense.org/license/
10   *
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.
16   */
17
18
19 #include "view.h"
20 #include "detail-view.h"
21 #include "day-expandable-list.h"
22 #include "day-time.h"
23
24 #define CAL_HEIGHT_OF_EXPAND_IMG 50
25 typedef struct {
26         const char *name;
27         struct appdata *ad;
28         Evas_Object *parent;
29         Evas_Object *ly; // self
30
31         cal_day_time_h day_time; // layout
32         Evas_Object *time_block; // layout
33
34         Evas_Object *genlist;
35         Eina_Bool is_expanded;
36 } cal_day_data;
37
38 static const char *_name = "main/day";
39
40 static void __cal_day_text_refresh_callback(void *data)
41 {
42         CAL_FN_START;
43
44         c_retm_if(!data, "data is null");
45         cal_day_data *p = data;
46
47         cal_main_update_title_text(p->ad);
48
49         elm_object_text_set(p->ad->new_event_button, S_("IDS_COM_BODY_CREATE"));
50
51         char title[32] = {0};
52         snprintf(title, sizeof(title), "%s %s & %s", C_("IDS_COM_BODY_ALL_DAY"), "event", C_("IDS_CLD_BODY_TASKS"));
53         elm_object_part_text_set(p->ly, "list/title/text", title);
54
55         elm_genlist_realized_items_update(p->genlist);
56
57 }
58
59 static void __cal_day_delete_layout(void *data, Evas *e, Evas_Object *obj, void *ei)
60 {
61         CAL_FN_START;
62
63         CAL_ASSERT(data);
64
65         cal_day_data *p = data;
66
67         cal_lang_manager_remove_callback(__cal_day_text_refresh_callback, p);
68
69         CAL_FREE(p);
70 }
71
72 void cal_day_update_genlist(Evas_Object *ly)
73 {
74         CAL_FN_START;
75
76         c_ret_if(!ly);
77
78         cal_day_data *p = CAL_UTIL_GET_PRIV_DATA (ly);
79         c_ret_if(!p);
80         c_ret_if(!p->genlist);
81
82         cal_day_exp_list_update(p->genlist);
83 }
84
85 Evas_Object* cal_day_create_view(struct appdata *ad, Evas_Object *main)
86 {
87         CAL_FN_START;
88
89         cal_day_data *p;
90         Evas_Object *ly;
91
92         CAL_ASSERT(ad);
93
94         CAL_CALLOC(p, 1, cal_day_data);
95
96         p->name = _name;
97         p->ad = ad;
98         ad->tapbar_focus_view = CV_DAY;
99         p->parent = main;
100
101         p->ly = ly = cal_util_add_layout(ad->naviframe, p->name);
102         if (NULL == ly) {
103                 free(p);
104                 p =NULL;
105                 return NULL;
106         }
107
108         evas_object_data_set(ly, "priv", p);
109
110         p->genlist = cal_day_exp_list_create(ly, "list/sw", ad);
111
112         int control_flag = ENABLE_MOUSE_DOWN_FLAG|ENABLE_MOUSE_UP_FLAG|ENABLE_MOUSE_MOVE_FLAG|ENABLE_MOUSE_OUT_FLAG|ENABLE_MULTI_DOWN_FLAG|ENABLE_MULTI_UP_FLAG|ENABLE_MULTI_MOVE_FLAG|ENABLE_GRAG_START_FLAG;
113
114         p->day_time = cal_base_time_new(_CAL_BASE_TYPE_EVENT, ly, ad->base_tm.tm_hour, &p->time_block, ad, control_flag);
115
116         CAL_ASSERT (p->day_time);
117         CAL_ASSERT (p->time_block);
118
119         elm_object_part_content_set(ly, "cont/sw", p->time_block);
120
121         Evas_Object *scroller = evas_object_data_get(p->time_block, "scroller");
122         c_retvm_if(!scroller, NULL, "scroller is null");
123
124         evas_object_event_callback_add(ly, EVAS_CALLBACK_DEL, __cal_day_delete_layout, p);
125
126         cal_lang_manager_add_callback(__cal_day_text_refresh_callback, p);
127
128         return ly;
129 }
130
131 void cal_day_change_content_display_status(Evas_Object *ly)
132 {
133         c_ret_if(!ly);
134
135         cal_day_data *p = evas_object_data_get(ly, "priv");
136         c_ret_if(!p);
137
138         struct appdata *ad = p->ad;
139         c_ret_if(!ad);
140
141         Elm_Object_Item *top = elm_naviframe_top_item_get(ad->naviframe);
142         Evas_Object *obj = elm_object_item_part_content_get(top, "default");
143
144         if (ad->main != obj || ad->ug) {
145                 cal_base_time_hide(p->day_time);
146         } else {
147                 cal_base_time_show(p->day_time);
148         }
149 }
150
151 void cal_day_update_view(Evas_Object *ly)
152 {
153         CAL_FN_START;
154
155         cal_day_data *p;
156
157         CAL_ASSERT(ly);
158
159         p = CAL_UTIL_GET_PRIV_DATA(ly);
160         if (!p || CAL_STRCMP(p->name, _name)) {
161                 ERR("Invalid object");
162                 return;
163         }
164
165         cal_day_update_genlist(ly);
166
167         cal_base_time_update(p->day_time);
168
169         cal_day_change_content_display_status(p->ly);
170 }