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.
22 #define CAL_HEIGHT_OF_EXPAND_IMG 50
27 Evas_Object *ly; // self
29 Evas_Object *time_block; // layout
32 Eina_Bool is_expanded;
33 Eina_List *event_list;
37 } cal_view_main_day_data;
39 static const char *_name = "main/day";
41 static char* __cal_day_get_genlist_item_label(void *data, Evas_Object *obj, const char *part);
42 static void __cal_day_expand_content_mouse_clicked(void *data, Evas_Object *eo, const char *e, const char *s);
43 void cal_day_update_expand(Evas_Object *ly, int x);
45 static Elm_Genlist_Item_Class itc = {
46 .item_style = "dialogue/1text",
47 .func.text_get = __cal_day_get_genlist_item_label,
50 static void __cal_day_delete_layout(void *data, Evas *e, Evas_Object *obj, void *ei)
56 cal_view_main_day_data *p = data;
58 CALENDAR_SVC_FREE_CS_LIST(&p->event_list);
59 CALENDAR_SVC_FREE_CS_LIST(&p->task_list);
62 evas_object_clip_unset(p->expand);
63 edje_object_signal_callback_del(CAL_UTIL_GET_EDJ_DATA(p->expand), "*", "edj", __cal_day_expand_content_mouse_clicked);
64 evas_object_del(p->expand);
70 static char* __cal_day_get_genlist_item_label(void *data, Evas_Object *obj, const char *part)
72 c_retv_if(!data, NULL);
74 cal_struct *cs = data;
77 if (!CAL_STRCMP(part, "elm.text")) {
78 str = CALENDAR_SVC_STRUCT_GET_STR(cs, CAL_VALUE_TXT_SUMMARY);
82 return strdup(C_("IDS_CLD_BODY_NO_TITLE"));
88 static void __cal_day_genlist_item_select_callback(void *data, Evas_Object *obj, void *ei)
92 cal_struct *cs = data;
94 Elm_Object_Item *it = elm_genlist_selected_item_get(obj);
96 elm_genlist_item_selected_set(it, EINA_FALSE);
98 cal_view_main_day_data *p = CAL_UTIL_GET_PRIV_DATA(obj);
101 cal_main_set_cs(p->ad, cs);
103 cals_calendar_store_type cs_type = CALENDAR_SVC_STRUCT_GET_INT(cs, CAL_VALUE_INT_TYPE);
105 if (CALS_CALENDAR_TYPE_TODO == cs_type) {
106 cal_detail_create_view_todo(p->ad, p->parent);
108 cal_detail_create_view(p->ad, p->parent);
112 static void __cal_day_get_events(cal_view_main_day_data *p)
114 struct tm tm_start = p->ad->base_tm;
115 tm_start.tm_hour = 0;
119 struct tm tm_end = tm_start;
124 p->event_list = CALENDAR_SVC_GET_ALLDAY_EVENT_LIST(&tm_start, &tm_end);
127 static void __cal_day_get_tasks(cal_view_main_day_data *p)
131 struct tm tm_start = p->ad->base_tm;
132 tm_start.tm_hour = 0;
136 struct tm tm_end = tm_start;
141 p->task_list= CALENDAR_SVC_GET_TASK_LIST(&tm_start, &tm_end, CALS_TODO_PRIORITY_NONE, CALS_TODO_STATUS_NONE, CALS_TODO_LIST_ORDER_END_DATE);
144 void cal_day_update_genlist(Evas_Object *ly)
150 cal_view_main_day_data *p = CAL_UTIL_GET_PRIV_DATA (ly);
152 c_ret_if(!p->genlist);
156 elm_genlist_clear(p->genlist);
157 CALENDAR_SVC_FREE_CS_LIST(&p->event_list);
158 CALENDAR_SVC_FREE_CS_LIST(&p->task_list);
160 __cal_day_get_events(p);
162 cal_struct *cs = NULL;
164 EINA_LIST_FOREACH(p->event_list, l, cs) {
166 elm_genlist_item_append(p->genlist, &itc, cs, NULL,
167 ELM_GENLIST_ITEM_NONE, __cal_day_genlist_item_select_callback, cs);
171 __cal_day_get_tasks(p);
174 EINA_LIST_FOREACH(p->task_list, l, cs) {
176 elm_genlist_item_append(p->genlist, &itc, cs, NULL,
177 ELM_GENLIST_ITEM_NONE, __cal_day_genlist_item_select_callback, cs);
181 if (elm_genlist_items_count(p->genlist) == 0) {
182 cal_util_emit_signal(CAL_UTIL_GET_EDJ_DATA(p->expand), "hide,expand");
183 cal_util_emit_signal(CAL_UTIL_GET_EDJ_DATA(p->ly), "go,line0");
185 cal_util_emit_signal(CAL_UTIL_GET_EDJ_DATA(p->expand), "show,unexpanded");
186 if (!p->ad->is_landscape_mode) {
187 cal_util_emit_signal(CAL_UTIL_GET_EDJ_DATA(p->ly), "go,line1");
189 cal_util_emit_signal(CAL_UTIL_GET_EDJ_DATA(p->ly), "go,ls_line1");
192 cal_day_update_expand(ly, 0);
194 p->is_expanded = EINA_FALSE;
197 int cal_day_get_all_events_count(Evas_Object *ly)
199 c_retvm_if(!ly, 0, "ly is null");
201 cal_view_main_day_data *p = evas_object_data_get(ly, "priv");
202 c_retvm_if(!p, 0, "p is null");
204 return elm_genlist_items_count(p->genlist);
207 void cal_day_update_expand(Evas_Object *ly, int x)
209 c_retm_if(!ly, "ly is null");
211 cal_view_main_day_data *p = evas_object_data_get(ly, "priv");
212 c_retm_if(!p, "p is null");
214 Evas_Coord_Rectangle r;
215 cal_util_get_geometry(&r, p->genlist);
217 evas_object_move(p->expand, x, r.y+r.h);
218 evas_object_resize(p->expand, r.w, CAL_HEIGHT_OF_EXPAND_IMG);
219 evas_object_raise(p->expand);
222 static void __cal_day_expand_content_mouse_clicked(void *data, Evas_Object *eo, const char *e, const char *s)
224 c_retm_if(!data || !e, "input param is null");
226 if (0 != strcmp(e, "all_day"))
229 cal_view_main_day_data *p = (cal_view_main_day_data *)data;
231 if (p->is_expanded) {
232 if (!p->ad->is_landscape_mode) {
233 cal_util_emit_signal(CAL_UTIL_GET_EDJ_DATA(p->ly), "go,line1");
235 cal_util_emit_signal(CAL_UTIL_GET_EDJ_DATA(p->ly), "go,ls_line1");
238 cal_util_emit_signal(CAL_UTIL_GET_EDJ_DATA(p->expand), "show,unexpanded");
239 p->is_expanded = EINA_FALSE;
241 if (!p->ad->is_landscape_mode) {
242 cal_util_emit_signal(CAL_UTIL_GET_EDJ_DATA(p->ly), "go,line3");
244 cal_util_emit_signal(CAL_UTIL_GET_EDJ_DATA(p->ly), "go,ls_line3");
247 cal_util_emit_signal(CAL_UTIL_GET_EDJ_DATA(p->expand), "show,expanded");
248 p->is_expanded = EINA_TRUE;
253 Evas_Object* cal_day_create_view(struct appdata *ad, Evas_Object *main)
257 cal_view_main_day_data *p;
259 Evas_Object *genlist;
260 Evas_Object *time_block;
264 CAL_CALLOC(p, 1, cal_view_main_day_data);
270 p->ly = ly = cal_util_add_layout(ad->nv, p->name);
277 evas_object_data_set(ly, "priv", p);
279 genlist = elm_genlist_add(ly);
282 p->genlist = genlist;
283 elm_object_part_content_set(ly, "list/sw", genlist);
284 evas_object_data_set(genlist, "priv", p);
286 if (ad->is_landscape_mode)
287 cal_util_emit_signal(CAL_UTIL_GET_EDJ_DATA(p->ly), "go,ls_line1");
289 time_block = cal_day_create_time_block(&ad->base_tm, ad, ly);
290 CAL_ASSERT (time_block);
292 p->time_block = time_block;
293 elm_object_part_content_set(ly, "cont/sw", time_block);
295 Evas_Object *scroller = evas_object_data_get(p->time_block, "scroller");
296 c_retvm_if(!scroller, NULL, "scroller is null");
298 p->expand= cal_util_add_layout(scroller, "main/day/expand");
299 c_retvm_if(!p->expand, NULL, "p->expand is null");
301 evas_object_clip_set(p->expand, (Evas_Object*)edje_object_part_object_get(CAL_UTIL_GET_EDJ_DATA(p->time_block), "clip"));
302 edje_object_signal_callback_add(CAL_UTIL_GET_EDJ_DATA(p->expand), "*", "edj", __cal_day_expand_content_mouse_clicked, p);
304 evas_object_event_callback_add(ly, EVAS_CALLBACK_DEL, __cal_day_delete_layout, p);
309 void cal_day_update_view(Evas_Object *ly)
313 cal_view_main_day_data *p;
317 p = CAL_UTIL_GET_PRIV_DATA(ly);
318 if (!p || CAL_STRCMP(p->name, _name)) {
319 ERR("Invalid object");
323 cal_day_update_genlist(ly);
324 cal_day_time_update_time_block(p->time_block, &p->ad->base_tm);
327 cal_day_update_expand(ly, 0);