tizen 2.3.1 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_COM_BODY_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                         /*ad->data_backlight_always_on->group_style = SETTING_GROUP_STYLE_CENTER; */
89                         setting_genlist_item_groupstyle_set(ad->data_backlight_always_on, SETTING_GROUP_STYLE_TOP);
90                         __BACK_POINTER_SET(ad->data_backlight_always_on);
91                 } else {
92                         SETTING_TRACE_ERROR("ad->data_backlight_always_on is NULL");
93                 }
94
95         }
96         ad->data_backlight_15sec = setting_create_Gendial_field_1radio(scroller,
97                                                                        &itc_1text_1icon_2,
98                                                                        setting_display_backlight_mouse_up_Gendial_list_cb, ad,
99                                                                        SWALLOW_Type_1RADIO, rgd,
100                                                                        15,                              /* 15 sec */
101                                                                        SETTING_DISPLAY_TIME_15_SEC_STR, NULL);
102         if (ad->data_backlight_15sec) {
103                 ad->data_backlight_15sec->userdata = ad;
104                 setting_genlist_item_groupstyle_set(ad->data_backlight_15sec, (is_emul_bin ? SETTING_GROUP_STYLE_CENTER : SETTING_GROUP_STYLE_TOP));
105                 __BACK_POINTER_SET(ad->data_backlight_15sec);
106         } else {
107                 SETTING_TRACE_ERROR("ad->data_backlight_15sec is NULL");
108         }
109
110         ad->data_backlight_30sec = setting_create_Gendial_field_1radio(scroller,
111                                                                        &itc_1text_1icon_2,
112                                                                        setting_display_backlight_mouse_up_Gendial_list_cb, ad,
113                                                                        SWALLOW_Type_1RADIO, rgd,
114                                                                        30,                              /* 30 sec */
115                                                                        SETTING_DISPLAY_TIME_30_SEC_STR, NULL);
116         if (ad->data_backlight_30sec) {
117                 ad->data_backlight_30sec->userdata = ad;
118                 setting_genlist_item_groupstyle_set(ad->data_backlight_30sec, SETTING_GROUP_STYLE_CENTER);
119                 __BACK_POINTER_SET(ad->data_backlight_30sec);
120         } else {
121                 SETTING_TRACE_ERROR("ad->data_backlight_30sec is NULL");
122         }
123
124         ad->data_backlight_1min = setting_create_Gendial_field_1radio(scroller,
125                                                                       &itc_1text_1icon_2,
126                                                                       setting_display_backlight_mouse_up_Gendial_list_cb, ad,
127                                                                       SWALLOW_Type_1RADIO, rgd,
128                                                                       60,                               /* 60 sec */
129                                                                       SETTING_DISPLAY_TIME_1_MIN_STR, NULL);
130         if (ad->data_backlight_1min) {
131                 ad->data_backlight_1min->userdata = ad;
132                 setting_genlist_item_groupstyle_set(ad->data_backlight_1min, SETTING_GROUP_STYLE_CENTER);
133                 __BACK_POINTER_SET(ad->data_backlight_1min);
134         } else {
135                 SETTING_TRACE_ERROR("ad->data_backlight_1min is NULL");
136         }
137
138         ad->data_backlight_2min = setting_create_Gendial_field_1radio(scroller,
139                                                                       &itc_1text_1icon_2,
140                                                                       setting_display_backlight_mouse_up_Gendial_list_cb, ad,
141                                                                       SWALLOW_Type_1RADIO, rgd,
142                                                                       120,                              /* 2min */
143                                                                       SETTING_DISPLAY_TIME_2_MIN_STR, NULL);
144         if (ad->data_backlight_2min) {
145                 ad->data_backlight_2min->userdata = ad;
146                 setting_genlist_item_groupstyle_set(ad->data_backlight_2min, SETTING_GROUP_STYLE_CENTER);
147                 __BACK_POINTER_SET(ad->data_backlight_2min);
148         } else {
149                 SETTING_TRACE_ERROR("ad->data_backlight_2min is NULL");
150         }
151
152         ad->data_backlight_5min = setting_create_Gendial_field_1radio(scroller,
153                                                                       &itc_1text_1icon_2,
154                                                                       setting_display_backlight_mouse_up_Gendial_list_cb, ad,
155                                                                       SWALLOW_Type_1RADIO, rgd,
156                                                                       300,                              /* 5min */
157                                                                       SETTING_DISPLAY_TIME_5_MIN_STR, NULL);
158         if (ad->data_backlight_5min) {
159                 ad->data_backlight_5min->userdata = ad;
160                 setting_genlist_item_groupstyle_set(ad->data_backlight_5min, SETTING_GROUP_STYLE_CENTER);
161                 __BACK_POINTER_SET(ad->data_backlight_5min);
162         } else {
163                 SETTING_TRACE_ERROR("ad->data_backlight_5min is NULL");
164         }
165
166         ad->data_backlight_10min = setting_create_Gendial_field_1radio(scroller,
167                                                                        &itc_1text_1icon_2,
168                                                                        setting_display_backlight_mouse_up_Gendial_list_cb, ad,
169                                                                        SWALLOW_Type_1RADIO, rgd,
170                                                                        600,                             /* 10min */
171                                                                        SETTING_DISPLAY_TIME_10_MIN_STR, NULL);
172         if (ad->data_backlight_10min) {
173                 ad->data_backlight_10min->userdata = ad;
174                 setting_genlist_item_groupstyle_set(ad->data_backlight_10min, SETTING_GROUP_STYLE_BOTTOM);
175                 __BACK_POINTER_SET(ad->data_backlight_10min);
176         } else {
177                 SETTING_TRACE_ERROR("ad->data_backlight_10min is NULL");
178         }
179
180         setting_update_chk_status(rgd, INT_SLP_SETTING_LCD_TIMEOUT_NORMAL);
181
182         setting_view_display_backlight.is_create = 1;
183         return SETTING_RETURN_SUCCESS;
184 }
185
186 static int setting_display_backlight_destroy(void *cb)
187 {
188         SETTING_TRACE_BEGIN;
189         /* error check */
190         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
191         retv_if(!(setting_view_display_backlight.is_create), SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
192         SettingDisplayUG *ad = (SettingDisplayUG *) cb;
193         if (ad->ly_main != NULL) {
194                 evas_object_del(ad->ly_main);
195                 ad->ly_main = NULL;
196         }
197         setting_view_display_backlight.is_create = 0;
198         return SETTING_RETURN_SUCCESS;
199 }
200
201 static int setting_display_backlight_update(void *cb)
202 {
203         SETTING_TRACE_BEGIN;
204         /* error check */
205         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
206         return SETTING_RETURN_SUCCESS;
207 }
208
209 static int setting_display_backlight_cleanup(void *cb)
210 {
211         SETTING_TRACE_BEGIN;
212         /* error check */
213         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
214
215         return SETTING_RETURN_SUCCESS;
216 }
217
218 /* ***************************************************
219  **
220  **call back func
221  **
222  ****************************************************/
223 static void
224 setting_display_backlight_mouse_up_Gendial_list_cb(void *data, Evas_Object *obj,
225                                                    void *event_info)
226 {
227         SETTING_TRACE_BEGIN;
228         /* error check */
229         setting_retm_if(data == NULL, "Data parameter is NULL");
230
231         retm_if(event_info == NULL, "Invalid argument: event info is NULL");
232         Elm_Object_Item *item = (Elm_Object_Item *) event_info;
233         elm_genlist_item_selected_set(item, 0);
234         Setting_GenGroupItem_Data *list_item =
235             (Setting_GenGroupItem_Data *) elm_object_item_data_get(item);
236
237         SETTING_TRACE("clicking item[%s]", _(list_item->keyStr));
238         SETTING_TRACE("chk_status[%d]", list_item->chk_status);
239
240         int list_val = list_item->chk_status;
241         int old_val = elm_radio_value_get(list_item->eo_check);
242         int val;
243         int err = 0;
244         setting_get_int_slp_key(INT_SLP_SETTING_LCD_TIMEOUT_NORMAL, &val, &err);
245         if (list_val == old_val && list_val == val) {
246                 SETTING_TRACE_DEBUG("Selected same type");
247                 return;
248         }
249
250         int ret = setting_set_int_slp_key(INT_SLP_SETTING_LCD_TIMEOUT_NORMAL, list_item->chk_status, &err);
251         if (ret != 0) {
252                 SETTING_TRACE_ERROR("set vconf failed");
253                 elm_radio_value_set(list_item->eo_check, val);
254                 return;
255         }
256         elm_radio_value_set(list_item->eo_check, list_item->chk_status);
257 }
258
259
260
261 static void
262 setting_display_backlight_click_softkey_back_cb(void *data, Evas_Object *obj,
263                                                 void *event_info)
264 {
265         SETTING_TRACE_BEGIN;
266         /* error check */
267         retm_if(data == NULL, "[Setting > Security] Data parameter is NULL");
268
269         SettingDisplayUG *ad = (SettingDisplayUG *) data;
270         /* Send destroy request */
271         ug_destroy_me(ad->ug);
272         return;
273         SETTING_TRACE_END;
274 }