tizen 2.4 release
[apps/home/settings.git] / setting-display / src / setting-display-backlight.c
1 /*
2  * setting
3  *
4  * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd.
5  *
6  * Contact: MyoungJune Park <mj2004.park@samsung.com>
7  *
8  * Licensed under the Apache License, Version 2.0 (the "License");
9  * you may not use this file except in compliance with the License.
10  * You may obtain a copy of the License at
11  *
12  * http://www.apache.org/licenses/LICENSE-2.0
13  *
14  * Unless required by applicable law or agreed to in writing, software
15  * distributed under the License is distributed on an "AS IS" BASIS,
16  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17  * See the License for the specific language governing permissions and
18  * limitations under the License.
19  *
20  */
21 #include <setting-common-data-type.h>
22 #include <setting-common-data-slp-setting.h>
23 #include <setting-common-draw-widget.h>
24 #include <setting-common-view.h>
25
26 #include <setting-display-backlight.h>
27
28 static int setting_display_backlight_create(void *cb);
29 static int setting_display_backlight_destroy(void *cb);
30 static int setting_display_backlight_update(void *cb);
31 static int setting_display_backlight_cleanup(void *cb);
32
33 setting_view setting_view_display_backlight = {
34         .create = setting_display_backlight_create,
35         .destroy = setting_display_backlight_destroy,
36         .update = setting_display_backlight_update,
37         .cleanup = setting_display_backlight_cleanup,
38 };
39
40 /* ***************************************************
41  **
42  **basic func
43  **
44  ****************************************************/
45 static int setting_display_backlight_create(void *cb)
46 {
47         SETTING_TRACE_BEGIN;
48         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
49
50         SettingDisplayUG *ad = (SettingDisplayUG *) cb;
51
52         /* add basic layout */
53
54         Evas_Object *scroller = NULL;
55         ad->ly_main =
56             setting_create_layout_navi_bar_genlist(ad->win_main_layout,
57                                                    ad->win_get,
58                                                    _(KeyStr_BacklightTime),
59                                                    _("IDS_ST_BUTTON_BACK"),
60                                                    NULL,
61                                                    setting_display_backlight_click_softkey_back_cb,
62                                                    NULL, ad, &scroller,
63                                                    &(ad->navi_bar));
64
65         Evas_Object *rgd = elm_radio_add(scroller);
66         /*elm_radio_state_value_set(rgd, -1); */
67         elm_radio_value_set(rgd, -1);
68
69         /* separator */
70         Elm_Object_Item *item = elm_genlist_item_append(scroller, &itc_seperator, NULL, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
71         elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
72
73         evas_object_smart_callback_add(scroller, "realized", __gl_realized_cb, NULL);
74
75         /* to do : radio menu */
76         int is_emul_bin = FALSE;
77         if (isEmulBin()) {
78                 is_emul_bin = TRUE;
79                 ad->data_backlight_always_on = setting_create_Gendial_field_1radio(scroller,
80                                                                                    &itc_1text_1icon_2,
81                                                                                    setting_display_backlight_mouse_up_Gendial_list_cb, ad,
82                                                                                    SWALLOW_Type_1RADIO, rgd,
83                                                                                    0,                   /* Always ON */
84                                                                                    "IDS_ST_BODY_ALWAYS_ON", NULL);
85
86                 if (ad->data_backlight_always_on) {
87                         ad->data_backlight_always_on->userdata = ad;
88                         __BACK_POINTER_SET(ad->data_backlight_always_on);
89                 } else {
90                         SETTING_TRACE_ERROR("ad->data_backlight_always_on is NULL");
91                 }
92
93         }
94         ad->data_backlight_15sec = setting_create_Gendial_field_1radio(scroller,
95                                                                        &itc_1text_1icon_2,
96                                                                        setting_display_backlight_mouse_up_Gendial_list_cb, ad,
97                                                                        SWALLOW_Type_1RADIO, rgd,
98                                                                        15,                              /* 15 sec */
99                                                                        SETTING_DISPLAY_TIME_15_SEC_STR, NULL);
100         if (ad->data_backlight_15sec) {
101                 ad->data_backlight_15sec->userdata = ad;
102                 __BACK_POINTER_SET(ad->data_backlight_15sec);
103         } else {
104                 SETTING_TRACE_ERROR("ad->data_backlight_15sec is NULL");
105         }
106
107         ad->data_backlight_30sec = setting_create_Gendial_field_1radio(scroller,
108                                                                        &itc_1text_1icon_2,
109                                                                        setting_display_backlight_mouse_up_Gendial_list_cb, ad,
110                                                                        SWALLOW_Type_1RADIO, rgd,
111                                                                        30,                              /* 30 sec */
112                                                                        SETTING_DISPLAY_TIME_30_SEC_STR, NULL);
113         if (ad->data_backlight_30sec) {
114                 ad->data_backlight_30sec->userdata = ad;
115                 __BACK_POINTER_SET(ad->data_backlight_30sec);
116         } else {
117                 SETTING_TRACE_ERROR("ad->data_backlight_30sec is NULL");
118         }
119
120         ad->data_backlight_1min = setting_create_Gendial_field_1radio(scroller,
121                                                                       &itc_1text_1icon_2,
122                                                                       setting_display_backlight_mouse_up_Gendial_list_cb, ad,
123                                                                       SWALLOW_Type_1RADIO, rgd,
124                                                                       60,                               /* 60 sec */
125                                                                       SETTING_DISPLAY_TIME_1_MIN_STR, NULL);
126         if (ad->data_backlight_1min) {
127                 ad->data_backlight_1min->userdata = ad;
128                 __BACK_POINTER_SET(ad->data_backlight_1min);
129         } else {
130                 SETTING_TRACE_ERROR("ad->data_backlight_1min is NULL");
131         }
132
133         ad->data_backlight_2min = setting_create_Gendial_field_1radio(scroller,
134                                                                       &itc_1text_1icon_2,
135                                                                       setting_display_backlight_mouse_up_Gendial_list_cb, ad,
136                                                                       SWALLOW_Type_1RADIO, rgd,
137                                                                       120,                              /* 2min */
138                                                                       SETTING_DISPLAY_TIME_2_MIN_STR, NULL);
139         if (ad->data_backlight_2min) {
140                 ad->data_backlight_2min->userdata = ad;
141                 __BACK_POINTER_SET(ad->data_backlight_2min);
142         } else {
143                 SETTING_TRACE_ERROR("ad->data_backlight_2min is NULL");
144         }
145
146         ad->data_backlight_5min = setting_create_Gendial_field_1radio(scroller,
147                                                                       &itc_1text_1icon_2,
148                                                                       setting_display_backlight_mouse_up_Gendial_list_cb, ad,
149                                                                       SWALLOW_Type_1RADIO, rgd,
150                                                                       300,                              /* 5min */
151                                                                       SETTING_DISPLAY_TIME_5_MIN_STR, NULL);
152         if (ad->data_backlight_5min) {
153                 ad->data_backlight_5min->userdata = ad;
154                 __BACK_POINTER_SET(ad->data_backlight_5min);
155         } else {
156                 SETTING_TRACE_ERROR("ad->data_backlight_5min is NULL");
157         }
158
159         ad->data_backlight_10min = setting_create_Gendial_field_1radio(scroller,
160                                                                        &itc_1text_1icon_2,
161                                                                        setting_display_backlight_mouse_up_Gendial_list_cb, ad,
162                                                                        SWALLOW_Type_1RADIO, rgd,
163                                                                        600,                             /* 10min */
164                                                                        SETTING_DISPLAY_TIME_10_MIN_STR, NULL);
165         if (ad->data_backlight_10min) {
166                 ad->data_backlight_10min->userdata = ad;
167                 __BACK_POINTER_SET(ad->data_backlight_10min);
168         } else {
169                 SETTING_TRACE_ERROR("ad->data_backlight_10min is NULL");
170         }
171
172         setting_update_chk_status(rgd, INT_SLP_SETTING_LCD_TIMEOUT_NORMAL);
173
174         setting_view_display_backlight.is_create = 1;
175         return SETTING_RETURN_SUCCESS;
176 }
177
178 static int setting_display_backlight_destroy(void *cb)
179 {
180         SETTING_TRACE_BEGIN;
181         /* error check */
182         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
183         retv_if(!(setting_view_display_backlight.is_create), SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
184         SettingDisplayUG *ad = (SettingDisplayUG *) cb;
185         if (ad->ly_main != NULL) {
186                 evas_object_del(ad->ly_main);
187                 ad->ly_main = NULL;
188         }
189         setting_view_display_backlight.is_create = 0;
190         return SETTING_RETURN_SUCCESS;
191 }
192
193 static int setting_display_backlight_update(void *cb)
194 {
195         SETTING_TRACE_BEGIN;
196         /* error check */
197         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
198         return SETTING_RETURN_SUCCESS;
199 }
200
201 static int setting_display_backlight_cleanup(void *cb)
202 {
203         SETTING_TRACE_BEGIN;
204         /* error check */
205         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
206
207         return SETTING_RETURN_SUCCESS;
208 }
209
210 /* ***************************************************
211  **
212  **call back func
213  **
214  ****************************************************/
215 static void
216 setting_display_backlight_mouse_up_Gendial_list_cb(void *data, Evas_Object *obj,
217                                                    void *event_info)
218 {
219         SETTING_TRACE_BEGIN;
220         /* error check */
221         setting_retm_if(data == NULL, "Data parameter is NULL");
222
223         retm_if(event_info == NULL, "Invalid argument: event info is NULL");
224         Elm_Object_Item *item = (Elm_Object_Item *) event_info;
225         elm_genlist_item_selected_set(item, 0);
226         Setting_GenGroupItem_Data *list_item =
227             (Setting_GenGroupItem_Data *) elm_object_item_data_get(item);
228         setting_retm_if(NULL == list_item, "list_item is NULL");
229
230         SETTING_TRACE("clicking item[%s]", _(list_item->keyStr));
231         SETTING_TRACE("chk_status[%d]", list_item->chk_status);
232
233         int list_val = list_item->chk_status;
234         int old_val = elm_radio_value_get(list_item->eo_check);
235         int val;
236         int err = 0;
237         setting_get_int_slp_key(INT_SLP_SETTING_LCD_TIMEOUT_NORMAL, &val, &err);
238         if (list_val == old_val && list_val == val) {
239                 SETTING_TRACE_DEBUG("Selected same type");
240                 return;
241         }
242
243         int ret = setting_set_int_slp_key(INT_SLP_SETTING_LCD_TIMEOUT_NORMAL, list_item->chk_status, &err);
244         if (ret != 0) {
245                 SETTING_TRACE_ERROR("set vconf failed");
246                 elm_radio_value_set(list_item->eo_check, val);
247                 return;
248         }
249         elm_radio_value_set(list_item->eo_check, list_item->chk_status);
250 }
251
252
253
254 static void
255 setting_display_backlight_click_softkey_back_cb(void *data, Evas_Object *obj,
256                                                 void *event_info)
257 {
258         SETTING_TRACE_BEGIN;
259         /* error check */
260         retm_if(data == NULL, "[Setting > Security] Data parameter is NULL");
261
262         SettingDisplayUG *ad = (SettingDisplayUG *) data;
263         /* Send destroy request */
264         ug_destroy_me(ad->ug);
265         return;
266         SETTING_TRACE_END;
267 }