bd3f2fc4997246c1eb2348ab272282151cc4d471
[apps/home/clock.git] / alarm / src / alarm_view_main.c
1 /*
2   * Copyright 2012  Samsung Electronics Co., Ltd
3   * 
4   * Licensed under the Flora License, Version 1.0 (the "License");
5   * you may not use this file except in compliance with the License.
6   * You may obtain a copy of the License at
7   * 
8   *     http://www.tizenopensource.org/license
9   * 
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS,
12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   * See the License for the specific language governing permissions and
14   * limitations under the License.
15   */
16
17 #include "alarm_view_main.h"
18 #include "alarm_fwk_genlist.h"
19 #include "alarm_fwk_util.h"
20
21 /**********************************************************************
22 ******************Local function declear, extern function declear*************************************
23 ***********************************************************************/
24
25 static int _alarm_main_genlist_btn_set(struct appdata *ad);
26 //
27 static Evas_Object *elm_nocontents_add_ex(Evas_Object * parent);
28 static int _alarm_main_create_notify(struct appdata *ad, AData * alarm);
29 static void _alarm_main_enable_alarm_cb(void *data, Evas_Object * obj,
30                                         void *event_info);
31 //
32 static int _alarm_view_genlist_create_layout(struct appdata *ad);
33 static int _alarm_view_genlist_update_layout(struct appdata *ad);
34 //
35 static int _alarm_view_genlist_cb_add(void *data);
36 static int _alarm_view_genlist_cb_del(void *data);
37 static int _alarm_view_genlist_cb_mod(void *data, AData * pAlarmData);
38 //base
39 static int _alarm_view_genlist_create(void *data);
40 static int _alarm_view_genlist_destroy(void *data);
41 static int _alarm_view_genlist_update(void *data);
42 static int _alarm_view_genlist_cleanup(void *data);
43 /**********************************************************************
44 ******************Global val , static global val*************************************
45 ***********************************************************************/
46
47 //
48 clk_view alarm_view_genlist = {
49         .create = _alarm_view_genlist_create,
50         .destroy = _alarm_view_genlist_destroy,
51         .update = _alarm_view_genlist_update,
52         .cleanup = _alarm_view_genlist_cleanup,
53         .is_create = EINA_FALSE,
54         .layer = MAX_CLK_FWK_VIEW_LAYER,
55 };
56
57 static Eina_Bool g_bIsClickedIcon = EINA_FALSE;
58
59 static char *_gl_label_get_main(void *data, Evas_Object * obj,
60                                 const char *part);
61 static Evas_Object *_gl_icon_get_main(void *data, Evas_Object * obj,
62                                       const char *part);
63 static void _gl_sel_main(void *data, Evas_Object * obj, void *event_info);
64 static Elm_Genlist_Item_Class itc_main = {
65         .item_style = STRING_ALARM_ALM_NBEAT,
66         .func.text_get = _gl_label_get_main,
67         .func.content_get = _gl_icon_get_main,
68         .func.state_get = NULL,
69         .func.del = default_alarm_data_list_pack_del,
70 };
71
72 /**********************************************************************
73 ******************Local function ref*************************************
74 ***********************************************************************/
75
76 //
77 static int _alarm_view_genlist_cb_add(void *data)
78 {
79         retvm_if(!data, FAILED, "data NULL");
80         struct appdata *ad = (struct appdata *)data;
81         genlist_view *view = ad->view_genlist;
82
83 #ifdef ALARMAPP_FEATURE_MORNINGCALL
84         int num = view->total_number - 1;
85 #else
86         int num = view->total_number;
87 #endif
88         retvm_if(num >= MAX_ALARM_NUMBER, FAILED, "num >= MAX_ALARM_NUMBER");
89
90         ad->is_new = EINA_TRUE;
91 #ifdef ALARMAPP_FEATURE_MORNINGCALL
92         ad->type_enter_pg_setting = TYPE_ENTER_PG_SETTING_NORMAL;
93 #endif
94         set_alarm_default(ad);
95         clk_view_change(&alarm_view_genlist, &alarm_view_setting, data);
96         return SUCCESS;
97 }
98
99 //
100 static int _alarm_view_genlist_cb_del(void *data)
101 {
102         return clk_view_change(&alarm_view_genlist, &alarm_view_delete, data);
103 }
104
105 //
106 static int _alarm_view_genlist_cb_mod(void *data, AData * pAlarmData)
107 {
108         retvm_if(NULL_CHECK(data), FAILED, "data error");
109         retvm_if(NULL_CHECK(pAlarmData), FAILED, "pAlarmData error");
110         struct appdata *ad = (struct appdata *)data;
111         int ret = SUCCESS;
112         //get new
113         memcpy(ad->alarm, pAlarmData, sizeof(AData));
114         ad->is_new = EINA_FALSE;
115 #ifdef ALARMAPP_FEATURE_MORNINGCALL
116         ad->type_enter_pg_setting =
117             IS_STR_EQUAL(STRING_ALARM_IDS_ALM_BODY_MORNING_CALL,
118                          ad->alarm->name) ? TYPE_ENTER_PG_SETTING_MORNINGCALL :
119             TYPE_ENTER_PG_SETTING_NORMAL;
120 #endif
121         clk_view_change(&alarm_view_genlist, &alarm_view_setting, data);
122         return ret;
123 }
124
125 //
126 static int _alarm_view_genlist_create(void *data)
127 {
128         retvm_if(!data, FAILED, "data null");
129         struct appdata *ad = (struct appdata *)data;
130         int ret = SUCCESS;
131
132         ad->page = PAGE_ALARM_GENLIST;
133         //create genlist data
134         ad->view_genlist = CALLOC(1, genlist_view);
135         retvm_if(NULL_CHECK(ad->view_genlist), FAILED, "malloc error");
136
137         ret = _alarm_view_genlist_create_layout(ad);
138         ret |= _alarm_view_genlist_update_layout(ad);
139         alm_show_view(ad, EINA_TRUE);
140         alarm_view_genlist.is_create = EINA_TRUE;
141         alarm_view_genlist.layer = 0;
142         return ret;
143 }
144
145 //
146 static int _alarm_view_genlist_destroy(void *data)
147 {
148         retvm_if(!data, FAILED, "data null");
149         struct appdata *ad = (struct appdata *)data;
150         genlist_view *view = ad->view_genlist;
151
152         EVAS_OBJECT_DELIF(view->eo_layout);
153         alarm_view_genlist.is_create = EINA_FALSE;
154         FREEIF(ad->view_genlist);
155         return SUCCESS;
156 }
157
158 //
159 static int _alarm_view_genlist_update(void *data)
160 {
161         retvm_if(!data, FAILED, "data null");
162         struct appdata *ad = (struct appdata *)data;
163         int ret = SUCCESS;
164
165         ad->page = PAGE_ALARM_GENLIST;
166         ret = _alarm_view_genlist_update_layout(ad);
167         alm_show_view(ad, EINA_TRUE);
168         return ret;
169 }
170
171 //
172 static int _alarm_view_genlist_cleanup(void *data)
173 {
174         return SUCCESS;
175 }
176
177 //
178 static int _alarm_main_genlist_btn_set(struct appdata *ad)
179 {
180         retvm_if(!ad, FAILED, "ad null");
181         int ret = SUCCESS;
182         Eina_Bool bVisible;
183         genlist_view *view = ad->view_genlist;
184         //
185 #ifdef ALARMAPP_FEATURE_MORNINGCALL
186         int num = view->total_number - 1;
187 #else
188         int num = view->total_number;
189 #endif
190         bVisible = num < MAX_ALARM_NUMBER ? EINA_TRUE : EINA_FALSE;
191         elm_object_item_disabled_set(view->eci_btn_rht, !bVisible);
192         bVisible = IS_EQUAL(0, num) ? EINA_FALSE : EINA_TRUE;
193         elm_object_item_disabled_set(view->eci_btn_lft, !bVisible);
194         return ret;
195 }
196
197 /**
198 * send
199 * This function is  used to create no contents for alarm
200 * @param           parent[in]         pointer to Evas_Object
201 * @return          when success, return pointer to Evas_Object or NULL if error
202 * @exception
203 */
204
205 static Evas_Object *elm_nocontents_add_ex(Evas_Object * parent)
206 {
207         retv_if(!parent, NULL);
208         Evas_Object *noc;
209         CLK_FUN_BEG();
210         noc = elm_layout_add(parent);
211         elm_object_part_content_set(parent, "elm.swallow.content", noc);
212         elm_layout_theme_set(noc, "layout", "nocontents", "text");
213         elm_object_part_text_set(noc, "elm.text",
214                                  STRING_ALARM_IDS_ALARM_BODY_NO_ALARMS);
215         elm_object_style_set(noc, "text");
216         CLK_FUN_END();
217         return noc;
218 }
219
220 /**
221 * send
222 * This function is  used to create notify
223 * @param           ad[in]   pointer to struct appdata
224 * @return          when success, return SUCCESS or FAILED if error
225 * @exception
226 */
227 static int _alarm_main_create_notify(struct appdata *ad, AData * alarm)
228 {
229         retvm_if(!ad, FAILED, "ad null");
230         genlist_view *view = ad->view_genlist;
231         //
232         char text[BUF_SIZE_256] = { 0 };
233         alarm_date_t alarm_date;
234         alarm_util_get_alert_time_offset(alarm, &alarm_date);
235         if (alarm_date.sec > 0) {
236                 alarm_date.min += 1;
237         }
238         if (alarm_date.day < 0) {
239                 alarm_date.day += 7;
240                 alarm_date.hour += 24;
241                 alarm_date.min += 60;
242         }
243         if (alarm_date.hour < 0 && alarm_date.day >= 0) {
244                 alarm_date.day += 6;
245                 alarm_date.hour += 24;
246                 alarm_date.min += 60;
247         }
248         if (alarm_date.min < 0 && alarm_date.hour >= 0 && alarm_date.day >= 0) {
249                 alarm_date.day += 6;
250                 alarm_date.hour += 23;
251                 alarm_date.min += 60;
252         }
253         if (alarm_date.day == 0 && alarm_date.hour == 0 && alarm_date.min == 0) {
254                 snprintf(text, sizeof(text),
255                          _("IDS_ALM_POP_ALARM_SET_FOR_PD_DAYS_FROM_NOW"),
256                          alarm_date.day + 7);
257         }
258         if (alarm_date.day == 0 && alarm_date.hour == 0 && alarm_date.min == 1) {
259                 snprintf(text, sizeof(text), _("IDS_ALM_POP_1_MINUTE"));
260         }
261         if (alarm_date.day == 0 && alarm_date.hour == 0 && alarm_date.min > 1) {
262                 snprintf(text, sizeof(text),
263                          _("IDS_ALM_POP_ALARM_SET_FOR_PD_MINUTES_FROM_NOW"),
264                          alarm_date.min);
265         }
266         if (alarm_date.day == 0 && alarm_date.hour == 1 && alarm_date.min == 0) {
267                 snprintf(text, sizeof(text), _("IDS_ALM_POP_1_HOUR"));
268         }
269         if (alarm_date.day == 0 && alarm_date.hour > 1 && alarm_date.min == 0) {
270                 snprintf(text, sizeof(text),
271                          _("IDS_ALM_POP_ALARM_SET_FOR_PD_HOURS_FROM_NOW"),
272                          alarm_date.hour);
273         }
274         if (alarm_date.day == 1 && alarm_date.hour == 0 && alarm_date.min == 0) {
275                 snprintf(text, sizeof(text), _("IDS_ALM_POP_1_DAY"));
276         }
277
278         if (alarm_date.day > 1 && alarm_date.hour == 0 && alarm_date.min == 0) {
279                 snprintf(text, sizeof(text),
280                          _("IDS_ALM_POP_ALARM_SET_FOR_PD_DAYS_FROM_NOW"),
281                          alarm_date.day);
282         }
283         if (alarm_date.day == 0 && alarm_date.hour == 1 && alarm_date.min == 1) {
284                 snprintf(text, sizeof(text),
285                          _
286                          ("IDS_ALM_POP_ALARM_SET_FOR_1_HOUR_AND_1_MINUTE_FROM_NOW"));
287         }
288         if (alarm_date.day == 0 && alarm_date.hour == 1 && alarm_date.min > 1) {
289                 snprintf(text, sizeof(text),
290                          _
291                          ("IDS_ALM_POP_ALARM_SET_FOR_1_HOUR_AND_PD_MINUTES_FROM_NOW"),
292                          alarm_date.min + 1);
293         }
294         if (alarm_date.day == 0 && alarm_date.hour > 1 && alarm_date.min == 1) {
295                 snprintf(text, sizeof(text),
296                          _
297                          ("IDS_ALM_POP_ALARM_SET_FOR_PD_HOURS_AND_1_MINUTE_FROM_NOW"),
298                          alarm_date.hour);
299         }
300         if (alarm_date.day == 0 && alarm_date.hour > 1 && alarm_date.min > 1) {
301                 snprintf(text, sizeof(text),
302                          _
303                          ("IDS_ALM_POP_ALARM_SET_FOR_PD_HOURS_AND_PD_MINUTES_FROM_NOW"),
304                          alarm_date.hour, alarm_date.min);
305         }
306         if (alarm_date.day == 1 && alarm_date.hour == 0 && alarm_date.min == 1) {
307                 snprintf(text, sizeof(text),
308                          _
309                          ("IDS_ALM_POP_ALARM_SET_FOR_1_DAY_AND_1_MINUTE_FROM_NOW"));
310         }
311         if (alarm_date.day == 1 && alarm_date.hour == 0 && alarm_date.min > 1) {
312                 snprintf(text, sizeof(text),
313                          _
314                          ("IDS_ALM_POP_ALARM_SET_FOR_1_DAY_AND_PD_MINUTES_FROM_NOW"),
315                          alarm_date.min);
316         }
317         if (alarm_date.day > 1 && alarm_date.hour == 0 && alarm_date.min == 1) {
318                 snprintf(text, sizeof(text),
319                          _
320                          ("IDS_ALM_POP_ALARM_SET_FOR_PD_DAYS_AND_1_MINUTE_FROM_NOW"),
321                          alarm_date.day);
322         }
323         if (alarm_date.day > 1 && alarm_date.hour == 0 && alarm_date.min > 1) {
324                 snprintf(text, sizeof(text),
325                          _
326                          ("IDS_ALM_POP_ALARM_SET_FOR_PD_DAYS_AND_PD_MINUTES_FROM_NOW"),
327                          alarm_date.day, alarm_date.min);
328         }
329         if (alarm_date.day == 1 && alarm_date.hour == 1 && alarm_date.min == 0) {
330                 snprintf(text, sizeof(text),
331                          _
332                          ("IDS_ALM_POP_ALARM_SET_FOR_1_DAY_AND_1_HOUR_FROM_NOW"));
333         }
334         if (alarm_date.day == 1 && alarm_date.hour > 1 && alarm_date.min == 0) {
335                 snprintf(text, sizeof(text),
336                          _
337                          ("IDS_ALM_POP_ALARM_SET_FOR_1_DAY_AND_PD_HOURS_FROM_NOW"),
338                          alarm_date.hour);
339         }
340         if (alarm_date.day > 1 && alarm_date.hour == 1 && alarm_date.min == 0) {
341                 snprintf(text, sizeof(text),
342                          _
343                          ("IDS_ALM_POP_ALARM_SET_FOR_PD_DAYS_AND_1_HOUR_FROM_NOW"),
344                          alarm_date.day);
345         }
346         if (alarm_date.day > 1 && alarm_date.hour > 1 && alarm_date.min == 0) {
347                 snprintf(text, sizeof(text),
348                          _
349                          ("IDS_ALM_POP_ALARM_SET_FOR_PD_DAYS_AND_PD_HOURS_FROM_NOW"),
350                          alarm_date.day, alarm_date.hour);
351         }
352         if (alarm_date.day == 1 && alarm_date.hour == 1 && alarm_date.min == 1) {
353                 snprintf(text, sizeof(text),
354                          _
355                          ("IDS_ALM_POP_ALARM_SET_FOR_1_DAY_1_HOUR_AND_1_MINUTE_FROM_NOW"));
356         }
357         if (alarm_date.day == 1 && alarm_date.hour == 1 && alarm_date.min > 1) {
358                 snprintf(text, sizeof(text),
359                          _
360                          ("IDS_ALM_POP_ALARM_SET_FOR_PD_HOURS_AND_PD_MINUTES_FROM_NOW"),
361                          alarm_date.min);
362         }
363         if (alarm_date.day == 1 && alarm_date.hour > 1 && alarm_date.min == 1) {
364                 snprintf(text, sizeof(text),
365                          _
366                          ("IDS_ALM_POP_ALARM_SET_FOR_1_DAY_PD_HOURS_AND_1_MINUTE_FROM_NOW"),
367                          alarm_date.hour);
368         }
369         if (alarm_date.day > 1 && alarm_date.hour == 1 && alarm_date.min == 1) {
370                 snprintf(text, sizeof(text),
371                          _
372                          ("IDS_ALM_POP_ALARM_SET_FOR_PD_DAY_1_HOUR_AND_1_MINUTE_FROM_NOW"),
373                          alarm_date.day);
374                 //PD DAY(S)
375         }
376         if (alarm_date.day == 1 && alarm_date.hour > 1 && alarm_date.min > 1) {
377                 snprintf(text, sizeof(text),         /*_("IDS_ALM_POP_ALARM_SET_FOR_1_DAY_PD_HOURS_AND_PD_MINUTES_FROM_NOW"),*/
378                          "Alarm set for 1 day %d hours and %d minutes from now",
379                          alarm_date.hour, alarm_date.min);
380                 //The string of this case is needed
381         }
382         if (alarm_date.day > 1 && alarm_date.hour == 1 && alarm_date.min > 1) {
383                 snprintf(text, sizeof(text),
384                          _
385                          ("IDS_ALM_POP_ALARM_SET_FOR_PD_DAYS_1_HOUR_AND_PD_MINUTES_FROM_NOW"),
386                          alarm_date.day, alarm_date.min);
387         }
388         if (alarm_date.day > 1 && alarm_date.hour > 1 && alarm_date.min == 1) {
389                 snprintf(text, sizeof(text),
390                          _
391                          ("IDS_ALM_POP_ALARM_SET_FOR_PD_DAYS_PD_HOURS_AND_1_MINUTE_FROM_NOW"),
392                          alarm_date.day, alarm_date.hour);
393         }
394         if (alarm_date.day > 1 && alarm_date.hour > 1 && alarm_date.min > 1) {
395                 snprintf(text, sizeof(text),
396                          _
397                          ("IDS_ALM_POP_ALARM_SET_FOR_PD_DAYS_PD_HOURS_AND_PD_MINUTES_FROM_NOW"),
398                          alarm_date.day, alarm_date.hour, alarm_date.min);
399         }
400
401         widget_create_popup(view->eo_layout, text, NULL, 1.0, NULL, NULL);
402         return SUCCESS;
403 }
404
405 /**
406 * send
407 * This function is  used to register cb when user click the icon in list item
408 * @param           data[in]         pointer to data
409 * @param           obj[in]          pointer to current evas object
410 * @param           event_info[in]   pointer to event
411 * @return          void
412 * @exception
413 */
414 static void _alarm_main_enable_alarm_cb(void *data, Evas_Object * obj,
415                                         void *event_info)
416 {
417         retm_if(!data, "data null");
418         int nErr = SUCCESS;
419         int ret = SUCCESS;
420         alarm_data_list_pack *adlp = (alarm_data_list_pack *) data;
421         char buf[ALARM_BUF_LEN] = { 0, };
422         AData *cur_alarm = &adlp->alarm_data;
423         //set protect
424         g_bIsClickedIcon = EINA_TRUE;
425         //set enable
426         cur_alarm->enable = !cur_alarm->enable;
427         //alarm server regist or delete
428         if (cur_alarm->enable) {
429                 nErr = alarmapp_mgr_create(cur_alarm);
430         } else {
431                 nErr = alarmapp_mgr_delete(cur_alarm);
432         }
433         if (nErr != SUCCESS) {
434                 cur_alarm->enable = EINA_FALSE;
435                 ret = ALM_POPUP_ID_ALARMMGR;
436         }
437         nErr = alarmdb_mod_data(cur_alarm);
438         if (IS_EQUAL(-1, nErr)) {
439                 ret = ALM_POPUP_ID_ALARMDB;
440         }
441         //set icon
442         if (!cur_alarm->enable) {
443                 snprintf(buf, sizeof(buf), ALARM_ICON_PATH "/%s",
444                          STRING_ALARM_GEN_ITEM_58_ALM_ICON_OFF_PNG);
445         } else {
446                 snprintf(buf, sizeof(buf), ALARM_ICON_PATH "/%s",
447                          cur_alarm->
448                          count ? STRING_ALARM_GEN_ITEM_58_ALM_ICON_SNOOZE_PNG :
449                          STRING_ALARM_GEN_ITEM_58_ALM_ICON_ON_PNG);
450                 //set notify
451                 _alarm_main_create_notify(adlp->ad, cur_alarm);
452         }
453         elm_icon_file_set(obj, buf, NULL);
454         //set vconf
455         vconf_set_int(VCONFKEY_ALARM_STATE, alarmdb_get_num_of_enable());
456 //End:
457         if (ret != SUCCESS) {
458                 struct appdata *ad = (struct appdata *)adlp->ad;
459                 alm_widget_create_popup(ad->win_main, ret);
460         }
461 }
462
463 /**
464 * send
465 * This function is  used to get label,
466 * as struct  Elm_Genlist_Item_Class, struct  GenlistItemLabelGetFunc: label_get
467 * @param           data[in]         pointer to data
468 * @param           obj[in]          pointer to current evas object
469 * @param           part[in]         string to current part name
470 * @return          when success, return label string or NULL if error
471 * @exception
472 */
473 static char *_gl_label_get_main(void *data, Evas_Object * obj, const char *part)
474 {
475         retvm_if(NULL_CHECK(data), NULL, "data null");
476         char buf[ALARM_BUF_LEN] = { 0, };
477         alarm_data_list_pack *adlp = (alarm_data_list_pack *) data;
478         AData *pAlarmData = &adlp->alarm_data;
479
480         if (IS_STR_EQUAL(part, STRING_ALARM_ELM_TEXT_TOP)) {
481                 char tmp[ALARM_BUF_LEN];
482                 snprintf(tmp, sizeof(tmp), "%s",
483                          alarm_icu_get_time_str(pAlarmData->stime,
484                                                 pAlarmData->timezone, NULL));
485                 if (IS_STR_EQUAL
486                     (STRING_ALARM_IDS_ALM_BODY_MORNING_CALL,
487                      pAlarmData->name)) {
488                         snprintf(buf, sizeof(buf), "%s  %s",
489                                  STRING_ALARM_IDS_ALM_BODY_MORNING_CALL_, tmp);
490                 } else {
491                         snprintf(buf, sizeof(buf), "%s  %s", pAlarmData->name,
492                                  tmp);
493                 }
494         } else if (IS_STR_EQUAL(part, STRING_ALARM_ELM_TEXT_REPEAT)) {
495                 alm_util_get_str_repeat(pAlarmData->repeat_weekly, ',',
496                                         buf, ALARM_BUF_LEN);
497         }
498         return strdup(buf);
499 }
500
501 /**
502 * send
503 * This function is  used to get icon,
504 * as struct  Elm_Genlist_Item_Class, struct  GenlistItemIconGetFunc: icon_get
505 * @param           data[in]         pointer to data
506 * @param           obj[in]          pointer to current evas object
507 * @param           part[in]         string to current part name
508 * @return          when success, return evas_object*  or NULL if error
509 * @exception
510 */
511 static Evas_Object *_gl_icon_get_main(void *data,
512                                       Evas_Object * obj, const char *part)
513 {
514         retvm_if(NULL_CHECK(data), NULL, "data null");
515         Evas_Object *ic = NULL;
516         char buf[ALARM_BUF_LEN] = { 0, };
517         alarm_data_list_pack *adlp = (alarm_data_list_pack *) data;
518         AData *pAlarmData = &adlp->alarm_data;
519
520         ic = elm_icon_add(obj);
521         if (IS_STR_EQUAL(part, STRING_ALARM_ELM_SWALLOW_ICON)) {
522                 if (!pAlarmData->enable) {
523                         snprintf(buf, sizeof(buf), ALARM_ICON_PATH "/%s",
524                                  STRING_ALARM_GEN_ITEM_58_ALM_ICON_OFF_PNG);
525                 } else {
526                         snprintf(buf, sizeof(buf), ALARM_ICON_PATH "/%s",
527                                  pAlarmData->
528                                  count ?
529                                  STRING_ALARM_GEN_ITEM_58_ALM_ICON_SNOOZE_PNG :
530                                  STRING_ALARM_GEN_ITEM_58_ALM_ICON_ON_PNG);
531                 }
532         }
533         evas_object_smart_callback_add(ic, "clicked",
534                                        _alarm_main_enable_alarm_cb, adlp);
535         elm_icon_file_set(ic, buf, NULL);
536         Evas_Object *eo_tmp = elm_icon_object_get(ic);
537         evas_object_repeat_events_set(eo_tmp, EINA_FALSE);
538         evas_object_propagate_events_set(ic, EINA_FALSE);
539         evas_object_show(ic);
540         return ic;
541 }
542
543 /**
544 * send
545 * This function is  used to set cb when item append.
546 * It will be called when user select the item
547 * @param           data[in]         pointer to data
548 * @param           obj[in]          pointer to current evas object
549 * @param           event_info[in]   pointer to event
550 * @return          void
551 * @exception
552 */
553 static void _gl_sel_main(void *data, Evas_Object * obj, void *event_info)
554 {
555         retm_if(NULL_CHECK(data), "data error");
556         Elm_Object_Item *gli = (Elm_Object_Item *) (event_info);
557         elm_genlist_item_selected_set(gli, 0);
558         Evas_Event_Mouse_Up *ev = (Evas_Event_Mouse_Up *) event_info;
559         retm_if(ev
560                 && (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD), "long focus");
561         if (g_bIsClickedIcon) {
562                 g_bIsClickedIcon = EINA_FALSE;
563                 return;
564         }
565         alarm_data_list_pack *adlp = (alarm_data_list_pack *) data;
566         struct appdata *ad = (struct appdata *)adlp->ad;
567         _alarm_view_genlist_cb_mod(ad, &adlp->alarm_data);
568 }
569
570 /**
571 * send
572 * This function is  used to load view: genlist view
573 * @param           data[in]         pointer to struct appdata
574 * @return          when success, return SUCCESS or FAILED if error
575 * @exception
576 */
577 static int _alarm_view_genlist_create_layout(struct appdata *ad)
578 {
579         retvm_if(!ad, FAILED, "ad null");
580         genlist_view *view = ad->view_genlist;
581         retvm_if(!view, FAILED, "view null");
582         view->eo_parent = ad->parent;
583         view->eo_layout = widget_create_layout(view->eo_parent);
584         view->eo_navibar = elm_naviframe_add(view->eo_layout);
585
586         view->eo_controlbar = widget_create_controlbar(view->eo_navibar, NULL);
587         Elm_Object_Item *eci;
588
589         view->eci_btn_lft = elm_toolbar_item_append(view->eo_controlbar, ALARM_IMAGE_DEL, NULL, /*S_("IDS_COM_SK_DELETE"), */
590                                                     alarm_view_genlist_btn_cb_del,
591                                                     ad);
592         eci = elm_toolbar_item_append(view->eo_controlbar, NULL,
593                                       NULL, NULL, NULL);
594         elm_object_item_disabled_set(eci, EINA_TRUE);
595
596         view->eci_btn_rht = elm_toolbar_item_append(view->eo_controlbar, ALARM_IMAGE_ADD, NULL, /*S_("IDS_COM_SK_ADD"), */
597                                                     alarm_view_genlist_btn_cb_add,
598                                                     ad);
599         eci =
600             elm_toolbar_item_append(view->eo_controlbar, NULL, NULL,
601                                     NULL, NULL);
602         elm_object_item_disabled_set(eci, EINA_TRUE);
603
604         view->eo_btn_back =
605             widget_create_button(view->eo_navibar,
606                                  STRING_ALARM_EDC_NAVIFRM_END_BTN_DEFAULT, NULL,
607                                  NULL, alarm_view_genlist_btn_cb_back,
608                                  ad->win_main);
609         view->eo_genlist = elm_genlist_add(view->eo_navibar);
610         view->eo_noalarm = elm_nocontents_add_ex(view->eo_navibar);
611         if (alarmdb_get_number_of_data_by_author(ALARM_DB_AUTHOR_ALARM)) {
612                 view->eo_content = view->eo_genlist;
613         } else {
614                 view->eo_content = view->eo_noalarm;
615         }
616         view->ei_naviframe =
617             widget_naviframe_push(view->eo_navibar,
618                                   STRING_ALARM_IDS_COM_BODY_ALARM_S_,
619                                   view->eo_btn_back, NULL, view->eo_content,
620                                   "tabbar", view->eo_controlbar);
621
622         elm_object_part_content_set(view->eo_layout,
623                                     STRING_ALARM_ELM_SWALLOW_CONTENT,
624                                     view->eo_navibar);
625         elm_object_focus_allow_set(view->eo_btn_back, EINA_FALSE);
626         ad->navi_bar = view->eo_navibar;
627         ad->layout = view->eo_layout;
628         return SUCCESS;
629 }
630
631 /**
632 * send
633 * This function is  used to show and update the genlist view
634 * @param           data[in]         pointer to struct appdata
635 * @return          when success, return SUCCESS or FAILED if error
636 * @exception
637 */
638 static int _alarm_view_genlist_update_layout(struct appdata *ad)
639 {
640         retvm_if(!ad, FAILED, "ad null");
641         genlist_view *view = ad->view_genlist;
642         retvm_if(!view, FAILED, "view is null");
643         //clear genlist
644         elm_genlist_clear(view->eo_genlist);
645         view->total_number = 0;
646         //
647         ADList *list = alarmapp_db_genlist_get_with_morningcall(SORT_BY_TIME);
648         Evas_Object *eo_new_content =
649             list ? view->eo_genlist : view->eo_noalarm;
650         if (!IS_EQUAL(eo_new_content, view->eo_content)) {
651                 view->eo_content = eo_new_content;
652                 elm_object_item_part_content_unset(view->ei_naviframe,
653                                                    "default");
654                 elm_object_item_part_content_set(view->ei_naviframe,
655                                                  "default", view->eo_content);
656         }
657         if (!list) {
658                 _alarm_main_genlist_btn_set(ad);
659                 return SUCCESS;
660         }
661         //append
662         ADList *cur = NULL;
663         int index = 0;
664         for (cur = list, index = 0; cur; cur = cur->next, ++index) {
665                 alarm_data_list_pack *adlp =
666                     alarm_create_genlist_item_data(ad, NULL, EINA_FALSE, index,
667                                                    &cur->ad);
668                 retvm_if(NULL_CHECK(adlp), FAILED, "malloc is null");
669                 adlp->item =
670                     elm_genlist_item_append(view->eo_genlist, &itc_main, adlp,
671                                             NULL, ELM_GENLIST_ITEM_NONE,
672                                             _gl_sel_main, adlp);
673                 ++view->total_number;
674         }
675         _alarm_main_genlist_btn_set(ad);
676         alarmdb_free_data_list(list);
677         return SUCCESS;
678 }
679
680 /**********************************************************************
681 ******************Global function ref*************************************
682 ***********************************************************************/
683
684 /**
685 * send
686 * This function is  used to del button cb: click
687 * @param           data[in]         pointer to data
688 * @param           obj[in]          pointer to current evas object
689 * @param           event_info[in]   pointer to event
690 * @return          void
691 * @exception
692 */
693 void alarm_view_genlist_btn_cb_del(void *data, Evas_Object * obj,
694                                    void *event_info)
695 {
696         _alarm_view_genlist_cb_del(data);
697 }
698
699 /**
700 * send
701 * This function is  used to add button cb:click
702 * @param           data[in]         pointer to data
703 * @param           obj[in]          pointer to current evas object
704 * @param           event_info[in]   pointer to event
705 * @return          void
706 * @exception
707 */
708 void alarm_view_genlist_btn_cb_add(void *data, Evas_Object * obj,
709                                    void *event_info)
710 {
711         _alarm_view_genlist_cb_add(data);
712 }
713
714 //
715 void alarm_view_genlist_btn_cb_back(void *data, Evas_Object * obj,
716                                     void *event_info)
717 {
718         ret_if(!data);
719         Evas_Object *win = (Evas_Object *) data;
720         elm_win_lower(win);
721 }