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.
19 #include "alarm_view_del.h"
20 #include "alarm_fwk_util.h"
21 /**********************************************************************
22 ******************define, struct ,typedef, union, enum, global val *************************************
23 ***********************************************************************/
25 NOTIFY_TYPE_SELECTED = 0,
29 /**********************************************************************
30 ******************Local function declear, extern function declear*************************************
31 ***********************************************************************/
33 static int _alarm_delete_btn_set(struct appdata *ad);
35 static int _alarm_delete_create_notify(struct appdata *ad, NOTIFY_TYPE type,
37 static Evas_Object *_alarm_delete_create_selectall(struct appdata *ad);
38 static void _alarm_delete_selectall_clicked_cb(void *data, Evas_Object * obj,
42 static int _alarm_view_delete_create_layout(struct appdata *ad);
43 static int _alarm_view_delete_update_layout(struct appdata *ad);
44 static int _alarm_view_delete_delete_alarm(struct appdata *ad);
46 static int _alarm_view_delete_cb_can(void *data);
47 static int _alarm_view_delete_cb_del(void *data);
49 static int _alarm_view_delete_create(void *data);
50 static int _alarm_view_delete_destroy(void *data);
51 static int _alarm_view_delete_update(void *data);
52 static int _alarm_view_delete_cleanup(void *data);
53 /**********************************************************************
54 ******************Global val , static global val*************************************
55 ***********************************************************************/
58 clk_view alarm_view_delete = {
59 .create = _alarm_view_delete_create,
60 .destroy = _alarm_view_delete_destroy,
61 .update = _alarm_view_delete_update,
62 .cleanup = _alarm_view_delete_cleanup,
63 .is_create = EINA_FALSE,
64 .layer = MAX_CLK_FWK_VIEW_LAYER,
67 static char *_gl_label_get_del(void *data, Evas_Object * obj, const char *part);
68 static Evas_Object *_gl_icon_get_del(void *data, Evas_Object * obj,
70 static Eina_Bool _gl_repeatday_state_get_del(const void *data,
73 static void _gl_sel_del(void *data, Evas_Object * obj, void *event_info);
74 static Elm_Genlist_Item_Class itc_del = {
75 .item_style = STRING_ALARM_DEL_NBEAT,
76 .func.text_get = _gl_label_get_del,
77 .func.content_get = _gl_icon_get_del,
78 .func.state_get = _gl_repeatday_state_get_del,
79 .func.del = default_alarm_data_list_pack_del,
82 /**********************************************************************
83 ******************Local function ref*************************************
84 ***********************************************************************/
87 static int _alarm_view_delete_cb_can(void *data)
89 return clk_view_change(&alarm_view_delete, &alarm_view_genlist, data);
93 static int _alarm_view_delete_cb_del(void *data)
95 retvm_if(!data, FAILED, "data null");
96 struct appdata *ad = (struct appdata *)data;
98 delete_view *view = ad->view_delete;
100 ret = _alarm_view_delete_delete_alarm(ad);
101 if (IS_EQUAL(0, view->total_number)) {
103 clk_view_change(&alarm_view_delete, &alarm_view_genlist,
110 static int _alarm_view_delete_create(void *data)
112 retvm_if(!data, FAILED, "data null");
113 struct appdata *ad = (struct appdata *)data;
117 ad->page = PAGE_ALARM_DELETE;
119 ad->view_delete = CALLOC(1, delete_view);
120 retvm_if(NULL_CHECK(ad->view_delete), FAILED, "malloc error");
122 ret = _alarm_view_delete_create_layout(ad);
123 ret |= _alarm_view_delete_update_layout(ad);
124 alm_show_view(ad, EINA_TRUE);
125 alarm_view_delete.is_create = EINA_TRUE;
126 alarm_view_delete.layer = 1;
132 static int _alarm_view_delete_destroy(void *data)
134 retvm_if(!data, FAILED, "data null");
136 struct appdata *ad = (struct appdata *)data;
137 delete_view *view = ad->view_delete;
139 EVAS_OBJECT_DELIF(view->eo_notify);
140 EVAS_OBJECT_DELIF(view->eo_notify_ly);
141 elm_naviframe_item_pop(ad->navi_bar);
142 alarm_view_delete.is_create = EINA_FALSE;
143 FREEIF(ad->view_delete);
149 static int _alarm_view_delete_update(void *data)
151 retvm_if(!data, FAILED, "data null");
153 struct appdata *ad = (struct appdata *)data;
156 ad->page = PAGE_ALARM_DELETE;
157 if (NULL != ad->view_delete->eo_notify
158 && ad->view_delete->chk_number != 0) {
159 evas_object_show(ad->view_delete->eo_notify);
161 //ret = _alarm_view_delete_update_layout(ad);
162 alm_show_view(ad, EINA_TRUE);
168 static int _alarm_view_delete_cleanup(void *data)
170 retvm_if(!data, FAILED, "data null");
172 struct appdata *ad = (struct appdata *)data;
173 delete_view *view = ad->view_delete;
175 EVAS_OBJECT_DELIF(view->eo_notify);
176 EVAS_OBJECT_DELIF(view->eo_notify_ly);
182 static int _alarm_delete_btn_set(struct appdata *ad)
184 retvm_if(!ad, FAILED, "ad null");
186 delete_view *view = ad->view_delete;
189 bVisible = IS_EQUAL(0, view->chk_number) ? EINA_FALSE : EINA_TRUE;
190 elm_object_item_disabled_set(view->eci_btn_lft, !bVisible);
197 * This function is used to create notify
198 * @param ad[in] pointer to struct appdata
199 * @return when success, return SUCCESS or FAILED if error
202 static int _alarm_delete_create_notify(struct appdata *ad, NOTIFY_TYPE type,
205 retvm_if(!ad, FAILED, "ad null");
206 delete_view *view = ad->view_delete;
207 if (!view->eo_notify) {
208 view->eo_notify = elm_notify_add(view->eo_layout);
209 elm_notify_orient_set(view->eo_notify,
210 ELM_NOTIFY_ORIENT_BOTTOM);
211 view->eo_notify_ly = elm_layout_add(view->eo_layout);
212 elm_layout_theme_set(view->eo_notify_ly, STRING_ALARM_STD,
213 STRING_ALARM_EDC_SELECTION_INFO,
214 STRING_ALARM_EDC_VERTI_BOTTOM_12);
215 elm_object_content_set(view->eo_notify, view->eo_notify_ly);
217 if (IS_EQUAL(0, count)) {
218 evas_object_hide(view->eo_notify);
222 char text[128] = { 0 };
223 if (IS_EQUAL(type, NOTIFY_TYPE_SELECTED)) {
224 if (IS_EQUAL(1, count)) {
225 snprintf(text, sizeof(text), "%s",
226 STRING_ALARM_IDS_ALM_BODY_1_ALM_SELECTED_);
228 snprintf(text, sizeof(text),
229 STRING_ALARM_IDS_ALM_BODY_PD_ALMS_SELECTED_,
233 if (IS_EQUAL(1, count)) {
234 snprintf(text, sizeof(text), "%s",
235 STRING_ALARM_IDS_ALM_POP_ALM_DELETED_);
237 snprintf(text, sizeof(text),
238 STRING_ALARM_IDS_ALM_POP_PD_ALMS_DELETED_,
243 // text set and timeout set
244 edje_object_part_text_set(_EDJ(view->eo_notify_ly),
245 STRING_ALARM_VIEW_ELM_TEXT, text);
246 if (IS_EQUAL(type, NOTIFY_TYPE_DELETED)) {
247 elm_notify_timeout_set(view->eo_notify, 5);
249 evas_object_show(view->eo_notify);
255 * This function is used to create select all edj
256 * @param ad[in] pointer to struct appdata
257 * @return when success, return EVAS_OBJECT or NULL if error
260 static Evas_Object *_alarm_delete_create_selectall(struct appdata *ad)
262 retvm_if(!ad, NULL, "ad null");
263 Evas_Object *eo = NULL;
264 Evas_Object *ck = NULL;
265 delete_view *view = ad->view_delete;
268 eo = load_edj(view->eo_layout, EDJ_NAME, STRING_ALARM_EDC_SELECT_ALL);
269 edje_object_part_text_set(_EDJ(eo), STRING_ALARM_EDC_TEXT,
270 STRING_ALARM_IDS_COM_BODY_SELECT_ALL_S_);
271 edje_object_signal_callback_add(_EDJ(eo),
272 STRING_ALARM_EDC_MOUSE_CLICKED_ALL,
273 STRING_ALARM_EDC_BG_RECT,
274 _alarm_delete_selectall_clicked_cb, ad);
276 ck = elm_check_add(eo);
277 elm_object_style_set(ck, STRING_ALARM_EDC_CLK_DEFAULT);
278 edje_object_part_swallow(_EDJ(eo), STRING_ALARM_EDC_CHECKBOX, ck);
280 view->eo_selectall_ly = eo;
281 view->eo_selectall_chk = ck;
282 view->bSelectAll = EINA_FALSE;
287 static void _alarm_delete_selectall_clicked_cb(void *data, Evas_Object * obj,
288 const char *emission,
291 retm_if(NULL_CHECK(data), "data null");
292 struct appdata *ad = (struct appdata *)data;
293 delete_view *view = ad->view_delete;
295 view->bSelectAll = !view->bSelectAll;
296 elm_check_state_set(view->eo_selectall_chk, view->bSelectAll);
299 (EINA_TRUE == view->bSelectAll) ? view->total_number : 0;
301 _alarm_delete_btn_set(ad);
303 Elm_Object_Item *gli = NULL;
304 gli = elm_genlist_first_item_get(view->eo_genlist);
305 retm_if(NULL_CHECK(gli), "Cannot get first item");
307 alarm_data_list_pack *adlp =
308 (alarm_data_list_pack *) elm_object_item_data_get(gli);
309 retm_if(!adlp, "elm_object_item_data_get NULL");
310 elm_check_state_set(adlp->eo_ck, view->bSelectAll);
311 adlp->ck = view->bSelectAll;
312 gli = elm_genlist_item_next_get(gli);
315 _alarm_delete_create_notify(ad, NOTIFY_TYPE_SELECTED, view->chk_number);
318 static void _alarm_delete_ck_cb(void *data, Evas_Object * obj, void *event_info)
320 retm_if(NULL_CHECK(data), "data null");
321 alarm_data_list_pack *adlp = (alarm_data_list_pack *) data;
322 struct appdata *ad = (struct appdata *)adlp->ad;
323 retm_if(NULL_CHECK(ad), "ad null");
324 delete_view *view = ad->view_delete;
325 retm_if(NULL_CHECK(view), "view null");
327 adlp->ck = !adlp->ck;
328 elm_check_state_set(adlp->eo_ck, adlp->ck);
331 adlp->ck ? view->chk_number + 1 : view->chk_number - 1;
333 IS_EQUAL(view->chk_number,
334 view->total_number) ? EINA_TRUE : EINA_FALSE;
335 elm_check_state_set(view->eo_selectall_chk, view->bSelectAll);
337 _alarm_delete_btn_set(ad);
339 _alarm_delete_create_notify(ad, NOTIFY_TYPE_SELECTED, view->chk_number);
344 * This function is used to get label,
345 * as struct Elm_Genlist_Item_Class, struct GenlistItemLabelGetFunc: label_get
346 * @param data[in] pointer to data
347 * @param obj[in] pointer to current evas object
348 * @param part[in] string to current part name
349 * @return when success, return label string or NULL if error
352 static char *_gl_label_get_del(void *data, Evas_Object * obj, const char *part)
354 retvm_if(NULL_CHECK(data), NULL, "data null");
355 char buf[ALARM_BUF_LEN] = { 0, };
356 alarm_data_list_pack *adlp = (alarm_data_list_pack *) data;
357 AData *pAlarmData = &adlp->alarm_data;
359 if (IS_STR_EQUAL(part, STRING_ALARM_ELM_TEXT_TOP)) {
360 char tmp[ALARM_BUF_LEN];
361 snprintf(tmp, sizeof(tmp), "%s",
362 alarm_icu_get_time_str(pAlarmData->stime,
363 pAlarmData->timezone, NULL));
365 (STRING_ALARM_IDS_ALM_BODY_MORNING_CALL,
367 snprintf(buf, sizeof(buf), "%s %s",
368 STRING_ALARM_IDS_ALM_BODY_MORNING_CALL_, tmp);
370 snprintf(buf, sizeof(buf), "%s %s", pAlarmData->name,
373 } else if (IS_STR_EQUAL(part, "elm.text.sun")) {
374 snprintf(buf, sizeof(buf), "%s", _("IDS_ALM_BODY_SUN"));
375 } else if (IS_STR_EQUAL(part, "elm.text.mon")) {
376 snprintf(buf, sizeof(buf), "%s", _("IDS_ALM_BODY_MON"));
377 } else if (IS_STR_EQUAL(part, "elm.text.tue")) {
378 snprintf(buf, sizeof(buf), "%s", _("IDS_ALM_BODY_TUE"));
379 } else if (IS_STR_EQUAL(part, "elm.text.wed")) {
380 snprintf(buf, sizeof(buf), "%s", _("IDS_ALM_BODY_WED"));
381 } else if (IS_STR_EQUAL(part, "elm.text.thu")) {
382 snprintf(buf, sizeof(buf), "%s", _("IDS_ALM_BODY_THU"));
383 } else if (IS_STR_EQUAL(part, "elm.text.fri")) {
384 snprintf(buf, sizeof(buf), "%s", _("IDS_ALM_BODY_FRI"));
385 } else if (IS_STR_EQUAL(part, "elm.text.sat")) {
386 snprintf(buf, sizeof(buf), "%s", _("IDS_ALM_BODY_SAT"));
393 * This function is used to get icon,
394 * as struct Elm_Genlist_Item_Class, struct GenlistItemIconGetFunc: icon_get
395 * @param data[in] pointer to data
396 * @param obj[in] pointer to current evas object
397 * @param part[in] string to current part name
398 * @return when success, return evas_object* or NULL if error
401 static Evas_Object *_gl_icon_get_del(void *data, Evas_Object * obj,
404 retvm_if(NULL_CHECK(data), NULL, "data null");
405 Evas_Object *ic = NULL;
406 alarm_data_list_pack *adlp = (alarm_data_list_pack *) data;
408 if (IS_STR_EQUAL(part, STRING_ALARM_ELM_SWALLOW_CHECK)) {
409 ic = elm_check_add(obj);
410 elm_object_style_set(ic, STRING_ALARM_EDC_CLK_DEFAULT);
411 elm_object_disabled_set(ic, EINA_TRUE);
412 elm_check_state_set(ic, adlp->ck);
413 // evas_object_smart_callback_add(ic, "changed",_alarm_delete_ck_cb, adlp);
416 // evas_object_propagate_events_set(ic, EINA_FALSE);
420 static Eina_Bool _gl_repeatday_state_get_del(const void *data,
424 alarm_data_list_pack *adlp = NULL;
425 struct appdata *ad = NULL;
426 Eina_Bool ret = EINA_FALSE;
428 //retvm_if(data == NULL, NULL, "Invalid argument: adlp is NULL\n");
429 adlp = (alarm_data_list_pack *) data;
430 ad = (struct appdata *)adlp->ad;
431 weekly = adlp->alarm_data.repeat_weekly;
432 if (IS_STR_EQUAL(part, "sun")) {
433 if (weekly & ALARM_DB_REPEAT_SUN) {
436 } else if (IS_STR_EQUAL(part, "mon")) {
437 if (weekly & ALARM_DB_REPEAT_MON) {
440 } else if (IS_STR_EQUAL(part, "tue")) {
441 if (weekly & ALARM_DB_REPEAT_TUE) {
444 } else if (IS_STR_EQUAL(part, "wed")) {
445 if (weekly & ALARM_DB_REPEAT_WED) {
448 } else if (IS_STR_EQUAL(part, "thu")) {
449 if (weekly & ALARM_DB_REPEAT_THU) {
452 } else if (IS_STR_EQUAL(part, "fri")) {
453 if (weekly & ALARM_DB_REPEAT_FRI) {
456 } else if (IS_STR_EQUAL(part, "sat")) {
457 if (weekly & ALARM_DB_REPEAT_SAT) {
466 * This function is used to set cb when item append.
467 * It will be called when user select the item
468 * @param data[in] pointer to data
469 * @param obj[in] pointer to current evas object
470 * @param event_info[in] pointer to event
474 static void _gl_sel_del(void *data, Evas_Object * obj, void *event_info)
476 retm_if(NULL_CHECK(data), "data error");
477 Elm_Object_Item *gli = (Elm_Object_Item *) (event_info);
478 elm_genlist_item_selected_set(gli, 0);
479 Evas_Event_Mouse_Up *ev = (Evas_Event_Mouse_Up *) event_info;
481 && (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD),
482 STRING_ALARM_VIEW_LONG_FOCUS);
484 alarm_data_list_pack *adlp = (alarm_data_list_pack *) data;
485 _alarm_delete_ck_cb(data, adlp->eo_ck, event_info);
490 * This function is used to load the view: delete view
491 * @param data[in] pointer to struct appdata
492 * @return when success, return SUCCESS or FAILED if error
495 static int _alarm_view_delete_create_layout(struct appdata *ad)
497 retvm_if(!ad, FAILED, "ad null");
499 delete_view *view = ad->view_delete;
500 retvm_if(!view, FAILED, "view null");
501 view->eo_parent = ad->parent;
502 view->eo_navibar = ad->navi_bar;
503 view->eo_layout = widget_create_layout(view->eo_navibar);
505 load_edj(view->eo_layout, EDJ_NAME, STRING_ALARM_EDC_PAGE_DELETE);
506 elm_object_part_content_set(view->eo_layout,
507 STRING_ALARM_ELM_SWALLOW_CONTENT,
510 view->eo_controlbar = widget_create_controlbar(view->eo_layout, NULL);
511 view->eci_btn_lft = elm_toolbar_item_append(view->eo_controlbar, ALARM_IMAGE_DEL, NULL, /*S_("IDS_COM_SK_BACK"), */
512 alarm_view_delete_btn_cb_del,
515 Elm_Object_Item *eci;
516 eci = elm_toolbar_item_append(view->eo_controlbar, NULL,
519 elm_object_item_disabled_set(eci, EINA_TRUE);
520 eci = elm_toolbar_item_append(view->eo_controlbar, NULL,
522 elm_object_item_disabled_set(eci, EINA_TRUE);
524 view->eci_btn_rht = elm_toolbar_item_append(view->eo_controlbar, ALARM_IMAGE_CLOSE, NULL, /*S_("IDS_COM_SK_DELETE"), */
525 alarm_view_delete_btn_cb_can,
529 widget_naviframe_push(view->eo_navibar,
530 STRING_ALARM_IDS_ALM_HEADER_SELECT_ALMS_,
531 NULL, NULL, view->eo_layout, "tabbar",
532 view->eo_controlbar);
535 elm_object_item_part_content_get(view->ei_naviframe,
536 ELM_NAVIFRAME_ITEM_PREV_BTN);
537 EVAS_OBJECT_DELIF(view->eo_btn_back);
539 view->eo_genlist = elm_genlist_add(view->eo_layout);
540 elm_object_part_content_set(view->eo_content,
541 STRING_ALARM_EDC_SWL_GENLIST,
544 view->eo_selectall_ly = _alarm_delete_create_selectall(ad);
545 elm_object_part_content_set(view->eo_content,
546 STRING_ALARM_EDC_SWL_SELECT_ALL,
547 view->eo_selectall_ly);
554 * This function is used to show and update the delete view
555 * @param data[in] pointer to struct appdata
556 * @return when success, return SUCCESS or FAILED if error
559 static int _alarm_view_delete_update_layout(struct appdata *ad)
561 retvm_if(!ad, FAILED, "ad is null");
563 delete_view *view = ad->view_delete;
565 elm_genlist_clear(view->eo_genlist);
566 view->total_number = 0;
569 alarmapp_db_genlist_get_without_morningcall(SORT_BY_TIME);
570 retvm_if(!list, SUCCESS, "no alarm");
574 for (cur = list, index = 0; cur; cur = cur->next, ++index) {
575 alarm_data_list_pack *adlp =
576 alarm_create_genlist_item_data(ad, NULL, EINA_FALSE, index,
578 retvm_if(NULL_CHECK(adlp), FAILED, "malloc is null");
579 elm_genlist_item_append(view->eo_genlist, &itc_del,
580 adlp, NULL, ELM_GENLIST_ITEM_NONE,
582 ++view->total_number;
585 view->chk_number = 0;
586 _alarm_delete_btn_set(ad);
587 alarmdb_free_data_list(list);
594 * This function is used to delete a alarm when user press the delete
595 * @param data[in] pointer to struct appdata
596 * @return when success, return SUCCESS or FAILED if error
599 static int _alarm_view_delete_delete_alarm(struct appdata *ad)
601 retvm_if(!ad, FAILED, "ad null");
602 alarm_data_list_pack *adlp = NULL;
603 Elm_Object_Item *gli, *tmp;
604 AData *pAlarmData = NULL;
605 delete_view *view = ad->view_delete;
608 gli = elm_genlist_first_item_get(view->eo_genlist);
609 retvm_if(!gli, FAILED, "Cannot get first item");
612 adlp = (alarm_data_list_pack *) elm_object_item_data_get(gli);
613 retvm_if(!adlp, FAILED, "adlp NULL");
614 pAlarmData = &adlp->alarm_data;
615 gli = elm_genlist_item_next_get(gli);
616 if (IS_EQUAL(adlp->ck, EINA_TRUE)) {
618 if (pAlarmData->enable) {
619 alarmapp_mgr_delete(pAlarmData);
622 alarm_genlist_name_array_del(pAlarmData->id);
623 alarmdb_del_data(pAlarmData->id);
624 elm_object_item_del(tmp);
629 view->chk_number = 0;
630 view->total_number -= index;
632 _alarm_delete_btn_set(ad);
634 _alarm_delete_create_notify(ad, NOTIFY_TYPE_DELETED, index);
635 //set VCONFKEY_ALARM_STATE
636 vconf_set_int(VCONFKEY_ALARM_STATE, alarmdb_get_num_of_enable());
640 /**********************************************************************
641 ******************Global function ref*************************************
642 ***********************************************************************/
645 void alarm_view_delete_btn_cb_can(void *data, Evas_Object * obj,
648 _alarm_view_delete_cb_can(data);
652 void alarm_view_delete_btn_cb_del(void *data, Evas_Object * obj,
655 _alarm_view_delete_cb_del(data);