Merge "Fix N_SE-10046" into 2.0_beta
[apps/core/preloaded/settings.git] / setting-display / src / setting-display-screen-mode.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-display-screen-mode.h>
22 #include <Ecore_X.h>
23
24 static int setting_display_screen_mode_create(void *cb);
25 static int setting_display_screen_mode_destroy(void *cb);
26 static int setting_display_screen_mode_update(void *cb);
27 static int setting_display_screen_mode_cleanup(void *cb);
28
29 static char* str_in_arr[] = {"Dynamic", "Standard", "Natural", "Movie"};
30 static char* str_out_arr[] = {Keystr_Dynamic, Keystr_Standard, Keystr_Natural, Keystr_Movie};
31
32 static void  setting_display_screen_mode_mouse_up_Gendial_list_radio_cb(void *data, Evas_Object *obj, void *event_info);
33
34 setting_view setting_view_display_screen_mode = {
35         .create = setting_display_screen_mode_create,
36         .destroy = setting_display_screen_mode_destroy,
37         .update = setting_display_screen_mode_update,
38         .cleanup = setting_display_screen_mode_cleanup,
39 };
40
41 /* ***************************************************
42  *
43  *basic func
44  *
45  ***************************************************/
46 static int setting_display_screen_mode_create(void *cb)
47 {
48         SETTING_TRACE_BEGIN;
49         /* error check */
50         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
51
52         SettingDisplayUG *ad = (SettingDisplayUG *) cb;
53
54         setting_call_back_func gl_sel_cb = NULL;
55         Evas_Object *scroller = NULL;
56         Setting_GenGroupItem_Data *item_data = NULL;
57
58         /* add basic layout */
59         Evas_Object *view_layout = elm_layout_add(ad->win_main_layout);
60         elm_layout_file_set(view_layout, SETTING_THEME_EDJ_NAME, "search_layout");
61         evas_object_size_hint_weight_set(view_layout, EVAS_HINT_EXPAND, 0.0);
62         evas_object_show(view_layout);
63
64         Evas_Object *sub_layout = elm_layout_add(view_layout);
65         elm_layout_file_set(sub_layout, SETTING_THEME_EDJ_NAME, "screen_mode");
66         evas_object_size_hint_weight_set(sub_layout, EVAS_HINT_EXPAND, 0.0);
67         evas_object_show(sub_layout);
68
69         Evas_Object *image = elm_image_add(view_layout);
70         elm_image_file_set(image, IMG_SCREEN_MODE, NULL);
71         elm_image_resizable_set(image, EINA_TRUE, EINA_TRUE);
72         evas_object_show(image);
73
74         elm_object_part_content_set(sub_layout, "content", image);
75         elm_object_part_content_set(view_layout, "search_bar", sub_layout);
76
77         int w = 0;
78         int h = 0;
79         elm_image_object_size_get(image, &w, &h);
80         SETTING_TRACE("w = %d, h = %d", w, h);
81         setting_resize_object(image, w * WIDGET_SCALE_FACTOR, h * WIDGET_SCALE_FACTOR);
82
83         setting_push_layout_navi_bar(_(Keystr_ScreenMode), _("IDS_COM_BODY_BACK"),
84                                    NULL, NULL,
85                                    setting_display_screen_mode_click_softkey_back_cb,
86                                    NULL, NULL, ad, view_layout, ad->navi_bar, NULL);
87
88         scroller = elm_genlist_add(ad->navi_bar);
89         retvm_if(scroller == NULL, SETTING_RETURN_FAIL, "scroller == NULL");
90         elm_object_style_set(scroller, "dialogue");
91         elm_genlist_clear(scroller);    /* first to clear list */
92
93         elm_object_part_content_set(view_layout, "search_list", scroller);
94
95         Elm_Object_Item *item = elm_genlist_item_append(scroller,
96                                                         &(itc_sep_line),
97                                                         NULL, NULL,
98                                                         ELM_GENLIST_ITEM_NONE,
99                                                         NULL, NULL);
100         elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
101
102
103         //gl_sel_cb = setting_mouse_up_Gendial_list_radio_cb;
104         gl_sel_cb = setting_display_screen_mode_mouse_up_Gendial_list_radio_cb;
105
106         Evas_Object *radio = elm_radio_add(scroller);
107         elm_radio_state_value_set(radio, -1);
108
109         char* curmode = vconf_get_str(VCONFKEY_SETAPPL_SCREENMODE_SELNAME);
110         SETTING_TRACE(">>> CUR SCREEN MODE : %s ", curmode);
111
112         int i = 0;
113
114         for (i=0; i< sizeof(str_in_arr)/sizeof(str_in_arr[0]) ;i++)
115         {
116                 item_data = setting_create_Gendial_field_1radio(scroller,
117                                                         &(itc_1text_1icon_2),
118                                                         gl_sel_cb,
119                                                         radio,  /* sel data */
120                                                         SWALLOW_Type_1RADIO,
121                                                         radio, i,
122                                                         str_out_arr[i], NULL);
123                 if (item_data) {
124                         item_data->userdata = ad;
125                 } else {
126                         SETTING_TRACE_ERROR("item_data is NULL");
127                 }
128         }
129
130         // set toggle
131         int j;
132         for (j=0; j< sizeof(str_in_arr)/sizeof(str_in_arr[0]) ;j++) {
133                 if (0 == strcmp(str_in_arr[j], curmode)) {
134                 elm_radio_value_set(radio, j);
135                         break;
136                 }
137         }
138
139         setting_view_display_screen_mode.is_create = 1;
140         return SETTING_RETURN_SUCCESS;
141 }
142
143 static int setting_display_screen_mode_destroy(void *cb)
144 {
145         SETTING_TRACE_BEGIN;
146         /* error check */
147         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
148
149         SettingDisplayUG *ad = (SettingDisplayUG *) cb;
150
151         elm_naviframe_item_pop(ad->navi_bar);
152
153         setting_view_display_screen_mode.is_create = 0;
154
155         return SETTING_RETURN_SUCCESS;
156 }
157
158 static int setting_display_screen_mode_update(void *cb)
159 {
160         SETTING_TRACE_BEGIN;
161         /* error check */
162         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
163
164         return SETTING_RETURN_SUCCESS;
165 }
166
167 static int setting_display_screen_mode_cleanup(void *cb)
168 {
169         SETTING_TRACE_BEGIN;
170         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
171
172         SettingDisplayUG *ad = (SettingDisplayUG *) cb;
173
174         setting_display_screen_mode_destroy(ad);
175
176         return SETTING_RETURN_SUCCESS;
177 }
178
179 /* ***************************************************
180  *
181  *general func
182  *
183  ***************************************************/
184
185 static void
186 setting_display_screen_mode_click_softkey_back_cb(void *data, Evas_Object *obj, void *event_info)
187 {
188         SETTING_TRACE_BEGIN;
189         /* error check */
190         setting_retm_if(data == NULL,
191                         "[Setting > Display] Data parameter is NULL");
192
193         SettingDisplayUG *ad = (SettingDisplayUG *) data;
194
195         setting_view_change(&setting_view_display_screen_mode, &setting_view_display_main, ad);
196         SETTING_TRACE_END;
197 }
198
199
200 static void
201 setting_display_screen_mode_mouse_up_Gendial_list_radio_cb(void *data, Evas_Object *obj, void *event_info)
202 {
203     SETTING_TRACE_BEGIN;
204     /* error check */
205     setting_retm_if(data == NULL, "Data parameter is NULL");
206     setting_retm_if(event_info == NULL,
207             "Invalid argument: event info is NULL");
208
209     Evas_Object *radio = (Evas_Object *) data;
210     Elm_Object_Item *item = (Elm_Object_Item *) event_info;
211     elm_genlist_item_selected_set(item, 0); 
212
213     Setting_GenGroupItem_Data *list_item =
214         (Setting_GenGroupItem_Data *) elm_object_item_data_get(item);
215     //SettingDisplayUG *ad = (SettingDisplayUG *) list_item->userdata;
216
217     elm_radio_value_set(radio, list_item->chk_status);
218         vconf_set_str(VCONFKEY_SETAPPL_SCREENMODE_SELNAME, str_in_arr[list_item->chk_status]);
219         /* Set status to device manager */
220         device_set_image_enhance_mode(list_item->chk_status);
221         SETTING_TRACE(">>> AFTER VCONF SET : %s ", str_in_arr[list_item->chk_status]);
222 }