1e71227a0032556ba2c956d636530706c19800b7
[apps/core/preloaded/calendar.git] / src / view-acct.c
1 /*
2
3 Copyright (c) 2000-2012 Samsung Electronics Co., Ltd All Rights Reserved
4
5 This file is part of org.tizen.efl-calendar
6 Written by Taeho Kang <taeho84.kang@samsung.com>
7
8 PROPRIETARY/CONFIDENTIAL
9
10 This software is the confidential and proprietary information of
11 SAMSUNG ELECTRONICS ("Confidential Information"). You shall not
12 disclose such Confidential Information and shall use it only in
13 accordance with the terms of the license agreement you entered
14 into with SAMSUNG ELECTRONICS.
15
16 SAMSUNG make no representations or warranties about the suitability
17 of the software, either express or implied, including but not limited
18 to the implied warranties of merchantability, fitness for a particular
19 purpose, or non-infringement. SAMSUNG shall not be liable for any
20 damages suffered by licensee as a result of using, modifying or
21 distributing this software or its derivatives.
22
23 */
24
25
26 #include <Elementary.h>
27 #include <ui-gadget.h>
28
29 #include "view.h"
30 #include "acct-svc.h"
31
32 #define DEFAULT_LOCAL_CALENDAR_COLOR "95.190.0.255"
33
34 #define ACCOUNT_LABLE_STRING_LENGTH 128
35
36
37 static const char *_name = "acct";
38
39 typedef struct {
40         const char *name;
41         struct appdata *ad;
42         Evas_Object *parent;
43         Evas_Object *ly;
44         Evas_Object *ly_phone;
45
46         Evas_Object *gl;
47
48         Eina_List *acctlist;
49
50         Evas_Object* color_selector;
51         Evas_Object* color;
52         Evas_Object* rect;
53         struct _cs* cs;
54
55         Evas_Object* notify;
56
57         int selected_count;
58 } cal_account_data;
59
60 static char* __cal_account_get_genlist_item_label(void *, Evas_Object *, const char *);
61 static Evas_Object* __cal_account_get_genlist_item_icon(void *, Evas_Object *, const char *);
62 static void __cal_account_update_genlist(void* data);
63 static void __cal_account_popup_response_callback(void *data, Evas_Object *obj, void *event_info);
64
65 static Elm_Genlist_Item_Class itc = {
66         .item_style = "2text.3icon.3",
67         .func.text_get = __cal_account_get_genlist_item_label,
68         .func.content_get = __cal_account_get_genlist_item_icon,
69         .decorate_all_item_style = "edit_default",
70 };
71
72 static struct _acct def_at = { LOCAL_ACCOUNT_ID, "Local account", "/opt/apps/org.tizen.efl-calendar/res/icons/all_calendar.png", NULL, NULL, };
73
74 static Calendar_color calendar_color;
75
76 static void __cal_account_set_selected_count_label(void *data)
77 {
78         c_retm_if(!data, "data is null");
79
80         cal_account_data *account_data = data;
81
82         if (account_data->selected_count <= 0)
83         {
84                 if (account_data->notify)
85                         evas_object_hide(account_data->notify);
86
87                 return;
88         }
89
90         struct appdata *ad = account_data->ad;
91         c_retm_if(!ad, "appdata is null");
92
93         Evas_Object *nv = ad->nv;
94         c_retm_if(!nv, "nv is null");
95
96         Evas_Object *notify = NULL;
97         Evas_Object *selectioninfo_layout = NULL;
98         char lable_str[ACCOUNT_LABLE_STRING_LENGTH] = {'\0'};
99
100         if (!account_data->notify) {
101                 notify = elm_notify_add(nv);
102                 c_retm_if(!notify, "elm_notify_add returned null");
103
104                 account_data->notify = notify;
105                 elm_notify_orient_set(notify, ELM_NOTIFY_ORIENT_BOTTOM);
106
107                 selectioninfo_layout = elm_layout_add(notify);
108                 if (!selectioninfo_layout)
109                 {
110                         evas_object_del(notify);
111                         account_data->notify = NULL;
112                         return;
113                 }
114
115                 elm_layout_theme_set(selectioninfo_layout, "standard", "selectioninfo", "vertical/bottom_64");
116                 elm_object_content_set(notify, selectioninfo_layout);
117         }
118         snprintf(lable_str, sizeof(lable_str), "%s(%d)", S_("IDS_COM_POP_SELECTED"), account_data->selected_count);
119         edje_object_part_text_set(CAL_UTIL_GET_EDJ_DATA(selectioninfo_layout), "elm.text", lable_str);
120
121         if (0 < account_data->selected_count) {
122                 evas_object_show(account_data->notify);
123         } else {
124                 evas_object_hide(account_data->notify);
125         }
126 }
127
128 static void __cal_account_clear_list(cal_account_data *account_data)
129 {
130         c_retm_if(account_data == NULL, "account_data is null");
131
132         struct _acct *at;
133         Eina_List *l;
134
135         if(def_at.data)
136         {
137                 CALENDAR_SVC_FREE_CS_LIST((Eina_List **)&def_at.data);
138                 def_at.data = NULL;
139         }
140
141         if (account_data->acctlist)
142         {
143                 EINA_LIST_FOREACH(account_data->acctlist, l, at)
144                 {
145                         if (NULL != at && at->data)
146                                 CALENDAR_SVC_FREE_CS_LIST((Eina_List **)&at->data);
147                 }
148                 cal_account_svc_free_account_list(&account_data->acctlist);
149         }
150 }
151
152 static char* __cal_account_get_genlist_item_label(void *data, Evas_Object *obj, const char *part)
153 {
154         c_retvm_if(!data, NULL, "data is null");
155         c_retvm_if(!obj, NULL, "obj is null");
156
157         struct _cs *cs = data;
158         const char* name = NULL;
159         struct _acct* at = NULL;
160
161         c_retvm_if(!cs->cs, NULL, "cs->cs is null");
162
163         if (!CAL_STRCMP(part, "elm.text.1"))
164         {
165                 if (CALENDAR_SVC_STRUCT_GET_INT(cs->cs, CAL_TABLE_INT_INDEX) == DEFAULT_CALENDAR_ID)
166                         return strdup(C_("IDS_CLD_OPT_PHONE_CALENDAR"));
167
168                 name = CALENDAR_SVC_STRUCT_GET_STR(cs->cs, CAL_TABLE_TXT_NAME);
169                 if (name)
170                         return strdup(name);
171         }
172         else if (!CAL_STRCMP(part, "elm.text.2"))
173         {
174                 if (CALENDAR_SVC_STRUCT_GET_INT(cs->cs, CAL_TABLE_INT_INDEX) == DEFAULT_CALENDAR_ID)
175                         return strdup(C_("IDS_EMAIL_BODY_DEFAULT_ACCOUNT"));
176
177                 at = cs->at;
178                 if (at && at->name)
179                         return strdup(at->name);
180         }
181
182         return NULL;
183 }
184
185 static void __cal_account_check_changed_callback(void *data, Evas_Object *obj, void *event_info)
186 {
187         c_retm_if(data == NULL, "data is null");
188         c_retm_if(obj == NULL, "obj is null");
189
190         Eina_List * realized_list;
191         Elm_Object_Item *it;
192         Eina_List *l;
193         Evas_Object* check = obj;
194         Eina_Bool is_checked = EINA_FALSE;
195
196         cal_account_data* account_data = CAL_UTIL_GET_PRIV_DATA(obj);
197         c_retm_if(account_data == NULL, "account_data is null");
198
199         struct _cs *cs = data;
200
201         CALENDAR_SVC_SET_CALENDAR_VISIBILITY(cs->cs,elm_check_state_get(obj));
202
203         realized_list = elm_genlist_realized_items_get(account_data->gl);
204         EINA_LIST_FOREACH(realized_list, l, it) {
205                 elm_genlist_item_update(it);
206         }
207
208         account_data->ad->is_update_view = EINA_TRUE;
209
210         is_checked = elm_check_state_get(check);
211         if (is_checked) {
212
213                 account_data->selected_count++;
214         } else {
215
216                 if (0 < account_data->selected_count) {
217                         account_data->selected_count--;
218                 }
219         }
220
221         __cal_account_set_selected_count_label(account_data);
222 }
223
224 static void __cal_account_color_selector_changed_callback(void *data, Evas_Object *obj, void *event_info)
225 {
226         c_retm_if(data == NULL, "data is null");
227         c_retm_if(obj == NULL, "obj is null");
228
229         Evas_Object *rect = data;
230         elm_colorselector_color_get(obj, &calendar_color.red, &calendar_color.green, &calendar_color.blue, &calendar_color.alpha);
231         evas_object_color_set(rect, calendar_color.red, calendar_color.green, calendar_color.blue, calendar_color.alpha);
232 }
233
234 static Evas_Object* __cal_account_create_colorselector(Evas_Object* parent, cal_account_data* account_data)
235 {
236         c_retvm_if(!parent, NULL, "parent is null");
237         c_retvm_if(!account_data, NULL, "account_data is null");
238
239         Evas_Object *selector;
240         Evas_Object *rect;
241         Evas_Object *selector_layout;
242
243         selector_layout = cal_util_add_layout(parent, "color_selector");
244         c_retvm_if(!selector_layout, NULL, "layout is null");
245
246         selector = elm_colorselector_add(parent);
247         if (!selector)
248         {
249                 ERR("elm_colorselector_add returned null");
250                 evas_object_del(selector_layout);
251                 return NULL;
252         }
253
254         elm_colorselector_mode_set(selector, ELM_COLORSELECTOR_COMPONENTS);
255         elm_object_part_content_set(selector_layout, "elm.swallow.selector", selector);
256         account_data->color = selector;
257
258         rect = evas_object_rectangle_add(evas_object_evas_get(parent));
259         if (!selector)
260         {
261                 ERR("evas_object_rectangle_add returned null");
262                 evas_object_del(selector_layout);
263                 return NULL;
264         }
265
266         elm_object_part_content_set(selector_layout, "elm.swallow.color", rect);
267         account_data->rect = rect;
268
269         evas_object_smart_callback_add(selector, "changed", __cal_account_color_selector_changed_callback, rect);
270
271         return selector_layout;
272 }
273
274 static void __cal_account_popup_response_callback(void *data, Evas_Object *obj, void *event_info)
275 {
276         c_retm_if(!data, "data is null");
277         c_retm_if(!obj, "obj is null");
278
279         Evas_Object *popup = data;
280         Evas_Object *button = obj;
281
282         Eina_List * realized_list;
283         Elm_Object_Item *it;
284         Eina_List *l;
285
286         cal_account_data* account_data = evas_object_data_get(popup, "data");
287         c_retm_if(!account_data, "CAL_UTIL_GET_PRIV_DATA returned null");
288
289         struct _cs *cs = account_data->cs;
290         c_retm_if(!cs, "cs is null");
291
292         if (!strcmp(elm_object_text_get(button), S_("IDS_COM_OPT_SAVE")))
293                 CALENDAR_SVC_SET_CALENDAR_COLOR(cs->cs, &calendar_color);
294
295         realized_list = elm_genlist_realized_items_get(account_data->gl);
296         c_retm_if(!realized_list, "elm_genlist_realized_items_get returned null");
297
298         EINA_LIST_FOREACH(realized_list, l, it) {
299                 elm_genlist_item_update(it);
300         }
301
302         evas_object_del(popup);
303 }
304
305 static Evas_Object* __cal_account_color_create_popup(cal_account_data* account_data)
306 {
307         c_retvm_if(!account_data, NULL, "account_data is null");
308
309         Evas_Object *popup = NULL;
310         popup = cal_util_add_popup(account_data->ad->win, NULL, NULL, NULL,
311                 __cal_account_popup_response_callback, account_data,
312                 S_("IDS_COM_OPT_SAVE"), S_("IDS_IDLE_BUTTON_CANCEL"), NULL);
313         c_retvm_if(!popup, NULL, "cal_util_add_popup returned null");
314
315         evas_object_propagate_events_set(popup, EINA_FALSE);
316
317         account_data->color_selector = __cal_account_create_colorselector(popup, account_data);
318
319         if (!account_data->color_selector) {
320                 ERR("__cal_account_create_colorselector returned null");
321                 evas_object_del(popup);
322                 return NULL;
323         }
324
325         elm_object_content_set(popup, account_data->color_selector);
326
327         return popup;
328 }
329
330 static void __cal_account_color_clicked_callback(void *data, Evas *e, Evas_Object *obj, void *ei)
331 {
332         c_retm_if(data == NULL, "data is null");
333         c_retm_if(obj == NULL, "obj is null");
334         cal_account_data* account_data = CAL_UTIL_GET_PRIV_DATA(obj);
335         c_retm_if(account_data == NULL, "CAL_UTIL_GET_PRIV_DATA returned null");
336
337         Evas_Object *popup = NULL;
338
339         struct _cs* cs = data;
340
341         account_data->cs = cs;
342
343         popup = __cal_account_color_create_popup(account_data);
344         c_retm_if(popup == NULL, "popup is null");
345
346         CALENDAR_SVC_GET_CALENDAR_COLOR(cs->cs, &calendar_color);
347         elm_colorselector_color_set(account_data->color, calendar_color.red, calendar_color.green, calendar_color.blue, calendar_color.alpha);
348         evas_object_color_set(account_data->rect,calendar_color.red, calendar_color.green, calendar_color.blue, calendar_color.alpha);
349 }
350
351 static Evas_Object* __cal_account_get_genlist_item_icon(void *data, Evas_Object *obj, const char *part)
352 {
353         c_retvm_if(data == NULL, NULL, "data is null");
354         c_retvm_if(obj == NULL, NULL, "obj is null");
355
356         struct _cs *cs = data;
357
358         cal_account_data* account_data = CAL_UTIL_GET_PRIV_DATA(obj);
359         c_retvm_if(account_data == NULL, NULL, "CAL_UTIL_GET_PRIV_DATA returned null");
360
361         Evas_Object* icon = NULL;
362         Evas_Object* check = NULL;
363         Eina_Bool checked;
364         Calendar_color color = {0,};
365         char* icon_path = NULL;
366
367         if (elm_genlist_decorate_mode_get(obj) && !strcmp(part, "elm.edit.icon.1"))
368         {
369                 check = elm_check_add(obj);
370                 c_retvm_if(check == NULL, NULL, "elm_check_add returned null");
371
372                 evas_object_data_set(check, "priv", account_data);
373                 evas_object_propagate_events_set(check, EINA_FALSE);
374
375                 checked = CALENDAR_SVC_STRUCT_GET_INT(cs->cs,CAL_TABLE_INT_VISIBILITY);
376                 elm_check_state_set(check, checked);
377
378                 evas_object_smart_callback_add(check, "changed", __cal_account_check_changed_callback, cs);
379                 cs->check = check;
380
381                 return check;
382         }
383         else if (!strcmp(part, "elm.icon.1"))
384         {
385                 icon = elm_icon_add(obj);
386                 c_retvm_if(icon == NULL, NULL, "elm_icon_add returned null");
387
388                 if ( CALENDAR_SVC_STRUCT_GET_INT( cs->cs, CAL_TABLE_INT_INDEX) == DEFAULT_CALENDAR_ID)
389                         elm_icon_file_set(icon, "/opt/apps/org.tizen.efl-calendar/res/icons/all_calendar.png", NULL);
390                 else
391                 {
392                         icon_path = cal_account_svc_get_account_icon_path(CALENDAR_SVC_STRUCT_GET_INT( cs->cs, CAL_TABLE_INT_ACCOUNT_ID));
393                         if (icon_path)
394                         {
395                                 elm_icon_file_set(icon, icon_path, NULL);
396                                 free(icon_path);
397                         }
398                         else
399                         {
400                                 ERR("cal_account_svc_get_account_icon_path returned null");
401                                 elm_icon_file_set(icon, "/opt/apps/org.tizen.efl-calendar/res/icons/all_calendar.png", NULL);
402                         }
403                 }
404
405                 evas_object_size_hint_aspect_set(icon, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
406
407                 return icon;
408         }
409         else if(!strcmp(part, "elm.icon.2"))
410         {
411                 CALENDAR_SVC_GET_CALENDAR_COLOR(cs->cs, &color);
412
413                 icon = evas_object_rectangle_add(evas_object_evas_get(obj));
414                 c_retvm_if(icon == NULL, NULL, "evas_object_rectangle_add returned null");
415
416                 evas_object_data_set(icon, "priv", account_data);
417                 evas_object_size_hint_align_set(icon, EVAS_HINT_FILL, EVAS_HINT_FILL);
418                 evas_object_propagate_events_set(icon, EINA_FALSE);
419                 evas_object_color_set(icon, color.red, color.green, color.blue, color.alpha);
420
421                 evas_object_event_callback_add(icon, EVAS_CALLBACK_MOUSE_UP, __cal_account_color_clicked_callback, cs);
422
423                 return icon;
424         }
425         else if(!strcmp(part, "elm.swallow.colorbar"))
426         {
427                 CALENDAR_SVC_GET_CALENDAR_COLOR(cs->cs, &color);
428                 icon = evas_object_rectangle_add(evas_object_evas_get(obj));
429                 c_retvm_if(icon == NULL, NULL, "evas_object_rectangle_add returned null");
430
431                 evas_object_size_hint_align_set(icon, EVAS_HINT_FILL, EVAS_HINT_FILL);
432                 evas_object_color_set(icon, color.red, color.green, color.blue, color.alpha);
433
434                 return icon;
435         }
436         return NULL;
437 }
438
439 static void __cal_account_add_list(cal_account_data *account_data)
440 {
441         c_retm_if(account_data == NULL, "account_data is null");
442
443         Evas_Object *gl;
444
445         gl = elm_genlist_add(account_data->ly);
446         c_retm_if(gl == NULL, "elm_genlist_add returned null");
447
448         elm_genlist_tree_effect_enabled_set(gl, EINA_TRUE);
449         elm_genlist_decorate_mode_set(gl, EINA_TRUE);
450
451         evas_object_data_set(gl, "priv", account_data);
452
453         elm_object_part_content_set(account_data->ly, "sw", gl);
454         account_data->gl = gl;
455 }
456
457 static void __cal_account_get_calendars(cal_account_data *account_data, struct _acct *at)
458 {
459         c_retm_if(account_data == NULL, "account_data is null");
460         c_retm_if(at == NULL, "at is null");
461         c_retm_if(at->id < 1 , "at->id(%d) is less then 0", at->id);
462
463         Eina_List *csl = NULL;
464
465         csl = CALENDAR_SVC_GET_CALENDARS_WITH_ACCOUNT(at->id, at);
466
467         if (csl)
468                 at->data = eina_list_merge(at->data, csl);
469 }
470
471 static void __cal_account_get_list(cal_account_data *account_data)
472 {
473         c_retm_if(account_data == NULL, "account_data is null");
474
475         Eina_List *l;
476         struct _acct *at;
477
478         l = cal_account_svc_get_account_list();
479         if (l)
480                 account_data->acctlist = eina_list_merge(account_data->acctlist, l);
481
482         EINA_LIST_FOREACH(account_data->acctlist, l, at)
483                 __cal_account_get_calendars(account_data, at);
484 }
485
486 static inline void __cal_account_set_default_account(cal_account_data *account_data)
487 {
488         c_retm_if(account_data == NULL, "account_data is null");
489
490         Eina_List *csl = NULL;
491
492         csl = CALENDAR_SVC_GET_CALENDARS_WITH_ACCOUNT(LOCAL_ACCOUNT_ID, &def_at);
493         if (csl)
494                 def_at.data = eina_list_merge(def_at.data, csl);
495 }
496
497 static void __cal_account_genlist_item_select_callback(void *data, Evas_Object *obj, void *event_info)
498 {
499         c_retm_if(data == NULL, "data is null");
500         c_retm_if(obj == NULL, "obj is null");
501
502         Elm_Object_Item *it;
503         cal_account_data *account_data = CAL_UTIL_GET_PRIV_DATA(obj);
504         c_retm_if(account_data == NULL, "CAL_UTIL_GET_PRIV_DATA returned null");
505
506         struct _cs *cs = data;
507
508
509         Eina_Bool is_checked = EINA_FALSE;
510
511         it = elm_genlist_selected_item_get(obj);
512         c_retm_if(it == NULL, "elm_genlist_selected_item_get returned null");
513
514         elm_genlist_item_selected_set(it, EINA_FALSE);
515
516         is_checked = elm_check_state_get(cs->check);
517         elm_check_state_set(cs->check, !is_checked);
518
519         if (!is_checked) {
520                 account_data->selected_count++;
521         } else {
522                 if (0 < account_data->selected_count)
523                 account_data->selected_count--;
524         }
525
526
527         CALENDAR_SVC_SET_CALENDAR_VISIBILITY(cs->cs, !is_checked);
528
529         account_data->ad->is_update_view = EINA_TRUE;
530
531         __cal_account_set_selected_count_label(account_data);
532 }
533
534 static void __cal_account_update_genlist(void* data)
535 {
536         CAL_FN_START;
537
538         c_retm_if(data == NULL, "data is null");
539
540         Eina_List* l, *ll;
541         struct _acct *at;
542         struct _cs* cs;
543         cal_account_data* account_data = data;
544         Eina_Bool checked = EINA_FALSE;
545
546         __cal_account_clear_list(account_data);
547         elm_genlist_clear(account_data->gl);
548
549         __cal_account_get_list(account_data);
550
551         __cal_account_set_default_account(account_data);
552         EINA_LIST_FOREACH(def_at.data, l, cs)
553         {
554                 if (cs) {
555                         checked = CALENDAR_SVC_STRUCT_GET_INT(cs->cs,CAL_TABLE_INT_VISIBILITY);
556                         if (checked) {
557                                 account_data->selected_count ++;
558                         }
559                         elm_genlist_item_append(account_data->gl, &itc, cs, NULL, ELM_GENLIST_ITEM_NONE, __cal_account_genlist_item_select_callback, cs);
560                 }
561         }
562
563         EINA_LIST_FOREACH(account_data->acctlist, l, at)
564         {
565                 if (at)
566                 {
567                         EINA_LIST_FOREACH(at->data, ll, cs)
568                         {
569                                 if (cs) {
570                                         checked = CALENDAR_SVC_STRUCT_GET_INT(cs->cs,CAL_TABLE_INT_VISIBILITY);
571                                         if (checked) {
572                                                 account_data->selected_count ++;
573                                         }
574                                         elm_genlist_item_append(account_data->gl, &itc, cs, NULL, ELM_GENLIST_ITEM_NONE, __cal_account_genlist_item_select_callback, cs);
575                                 }
576                         }
577                 }
578         }
579 }
580
581 static void __cal_account_delete_layout(void *data, Evas *e, Evas_Object *obj, void *ei)
582 {
583         CAL_FN_START;
584
585         c_retm_if(data == NULL, "data is null");
586
587         cal_account_data *account_data = data;
588
589         __cal_account_clear_list(account_data);
590
591     if (account_data->notify)
592                 evas_object_del(account_data->notify);
593
594         free(account_data);
595
596         CALENDAR_SVC_DEL_EVENT_CHANGED_CALLBACK(__cal_account_update_genlist);
597 }
598
599 static void __cal_account_button_callback(void *data, Evas_Object *obj, void *event_info)
600 {
601         c_retm_if(data == NULL, "data is null");
602
603         cal_account_data *account_data = data;
604         Evas_Object *popup = cal_util_add_popup(account_data->ad->win, NULL, C_("IDS_COM_POP_ERRORMSG_SAVE_Q"), NULL,
605                 __cal_account_popup_response_callback, account_data,
606                 S_("IDS_COM_OPT_SAVE"), S_("IDS_IDLE_BUTTON_CANCEL"), NULL);
607         c_retm_if(!popup, "cal_util_add_popup returned null");
608
609         elm_popup_orient_set(popup, ELM_POPUP_ORIENT_CENTER);
610 }
611
612 static Evas_Object* __cal_account_create_layout(struct appdata *ad, Evas_Object *parent)
613 {
614         CAL_FN_START;
615
616         c_retvm_if(!ad || !parent, NULL, "Input parameter is null");
617
618         Evas_Object *ly;
619         Evas_Object *bg;
620         Evas_Object *close_button;
621         cal_account_data *account_data;
622
623         account_data = calloc(1, sizeof(cal_account_data));
624         c_retvm_if(account_data == NULL, NULL, "calloc(1, sizeof(cal_account_data)) is failed");
625
626         account_data->name = _name;
627         account_data->parent = parent;
628         account_data->ad = ad;
629         account_data->selected_count = 0;
630         account_data->notify = NULL;
631
632
633         ly = cal_util_add_layout(ad->nv, account_data->name);
634         if (!ly)
635         {
636                 ERR("cal_util_add_layout returned null");
637                 free(account_data);
638                 return NULL;
639         }
640         account_data->ly = ly;
641         evas_object_data_set(ly, "priv", account_data);
642
643         bg = cal_util_add_bg(ly, EINA_FALSE);
644         if (!bg)
645         {
646                 ERR("cal_util_add_bg returned null");
647                 evas_object_del(ly);
648                 free(account_data);
649                 return NULL;
650         }
651         elm_object_part_content_set(ly, "base", bg);
652
653         __cal_account_add_list(account_data);
654         __cal_account_update_genlist(account_data);
655
656         close_button = elm_button_add(account_data->ly);
657         elm_object_part_content_set(account_data->ly, "selector_button", close_button);
658         elm_object_text_set(close_button,S_("IDS_COM_BODY_CLOSE"));
659
660         evas_object_smart_callback_add(close_button, "clicked", __cal_account_button_callback, account_data);
661
662         evas_object_event_callback_add(ly, EVAS_CALLBACK_DEL, __cal_account_delete_layout, account_data);
663
664         CALENDAR_SVC_ADD_EVENT_CHANGED_CALLBACK(__cal_account_update_genlist, account_data);
665
666         return ly;
667 }
668
669 void cal_account_create_view(struct appdata *ad, Evas_Object *parent)
670 {
671         CAL_FN_START;
672
673         c_retm_if(ad == NULL, "ad is null");
674         c_retm_if(ad->nv == NULL, "ad->nv is null");
675         c_retm_if(parent == NULL, "parent is null");
676
677         Evas_Object *ly;
678         Evas_Object *add;
679         Evas_Object *back;
680         Elm_Object_Item* navi_item;
681
682         ly = __cal_account_create_layout(ad, parent);
683         c_retm_if(ly == NULL, "__cal_account_create_layout returned null");
684
685         add = elm_button_add(ad->nv);
686         if (!add)
687         {
688                 ERR("elm_button_add returned null");
689                 evas_object_del(ly);
690                 return;
691         }
692
693         navi_item = elm_naviframe_item_push(ad->nv, C_("IDS_CLD_BODY_CALENDARS"), NULL, NULL, ly, NULL);
694         if (!navi_item)
695         {
696                 ERR("elm_naviframe_item_push returned null");
697                 evas_object_del(add);
698                 evas_object_del(ly);
699                 return;
700         }
701
702         back = elm_object_item_part_content_get(navi_item, "prev_btn");
703         if (!navi_item)
704         {
705                 ERR("elm_object_item_part_content_get returned null");
706                 elm_naviframe_item_pop(ad->nv);
707                 evas_object_del(add);
708                 evas_object_del(ly);
709                 return;
710         }
711
712         elm_object_style_set(back, "naviframe/back_btn/default");
713 }