Tizen 2.1 release
[platform/core/uifw/e17.git] / src / modules / conf_performance / e_int_config_powermanagement.c
1 #include "e.h"
2
3 static void *_create_data(E_Config_Dialog *cfd);
4 static void _free_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata);
5 static int _basic_apply(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata);
6 static int _basic_check_changed(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata);
7 static Evas_Object *_basic_create(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cfdata);
8 static void _cb_min_changed(void *data, Evas_Object *obj);
9 static void _cb_max_changed(void *data, Evas_Object *obj);
10
11 struct _E_Config_Dialog_Data
12 {
13    struct {
14         Eina_List *rmin;
15         Eina_List *rmax;
16    } gui;
17    double powersave_none;
18    double powersave_low;
19    double powersave_medium;
20    double powersave_high;
21    double powersave_extreme;
22    E_Powersave_Mode powersave_min;
23    E_Powersave_Mode powersave_max;
24 };
25
26 E_Config_Dialog *
27 e_int_config_powermanagement(E_Container *con, const char *params __UNUSED__)
28 {
29    E_Config_Dialog *cfd;
30    E_Config_Dialog_View *v;
31
32    if (e_config_dialog_find("E", "advanced/powermanagement")) return NULL;
33    v = E_NEW(E_Config_Dialog_View, 1);
34
35    v->create_cfdata = _create_data;
36    v->free_cfdata = _free_data;
37    v->basic.apply_cfdata = _basic_apply;
38    v->basic.create_widgets = _basic_create;
39    v->basic.check_changed = _basic_check_changed;
40
41    cfd = e_config_dialog_new(con, _("Power Management Settings"),
42                              "E", "advanced/powermanagement",
43                              "preferences-system-power-management", 0, v, NULL);
44    return cfd;
45 }
46
47 static void *
48 _create_data(E_Config_Dialog *cfd __UNUSED__)
49 {
50    E_Config_Dialog_Data *cfdata;
51
52    cfdata = E_NEW(E_Config_Dialog_Data, 1);
53    if (!cfdata) return NULL;
54    cfdata->powersave_none = e_config->powersave.none;
55    cfdata->powersave_low = e_config->powersave.low;
56    cfdata->powersave_medium = e_config->powersave.medium;
57    cfdata->powersave_high = e_config->powersave.high;
58    cfdata->powersave_extreme = e_config->powersave.extreme;
59    return cfdata;
60 }
61
62 static void
63 _free_data(E_Config_Dialog *cfd __UNUSED__, E_Config_Dialog_Data *cfdata)
64 {
65    eina_list_free(cfdata->gui.rmin);
66    eina_list_free(cfdata->gui.rmax);
67    E_FREE(cfdata);
68 }
69
70 static int
71 _basic_apply(E_Config_Dialog *cfd __UNUSED__, E_Config_Dialog_Data *cfdata)
72 {
73    e_config->powersave.none = cfdata->powersave_none;
74    e_config->powersave.low = cfdata->powersave_low;
75    e_config->powersave.medium = cfdata->powersave_medium;
76    e_config->powersave.high = cfdata->powersave_high;
77    e_config->powersave.extreme = cfdata->powersave_extreme;
78    if (e_config->powersave.min != cfdata->powersave_min
79        || e_config->powersave.max != cfdata->powersave_max)
80      {
81         e_config->powersave.min = cfdata->powersave_min;
82         e_config->powersave.max = cfdata->powersave_max;
83         ecore_event_add(E_EVENT_POWERSAVE_CONFIG_UPDATE,
84                         NULL, NULL, NULL);
85      }
86
87    e_powersave_mode_set(e_powersave_mode_get());
88    e_config_save_queue();
89    return 1;
90 }
91
92 static int
93 _basic_check_changed(E_Config_Dialog *cfd __UNUSED__, E_Config_Dialog_Data *cfdata)
94 {
95    return ((e_config->powersave.min != cfdata->powersave_min) ||
96            (e_config->powersave.max != cfdata->powersave_max) ||
97            (e_config->powersave.none != cfdata->powersave_none) ||
98            (e_config->powersave.low != cfdata->powersave_low) ||
99            (e_config->powersave.medium != cfdata->powersave_medium) ||
100            (e_config->powersave.high != cfdata->powersave_high) ||
101            (e_config->powersave.extreme != cfdata->powersave_extreme));
102 }
103
104 static Evas_Object *
105 _basic_create(E_Config_Dialog *cfd __UNUSED__, Evas *evas, E_Config_Dialog_Data *cfdata)
106 {
107    Evas_Object *ob, *ol;
108    E_Radio_Group *rmin, *rmax;
109    int y;
110    
111    cfdata->powersave_min = e_config->powersave.min;
112    cfdata->powersave_max = e_config->powersave.max;
113    rmin = e_widget_radio_group_new((int*) &(cfdata->powersave_min));
114    rmax = e_widget_radio_group_new((int*) &(cfdata->powersave_max));
115
116    ol = e_widget_table_add(evas, 0);
117    
118    y = 0;
119    ob = e_widget_label_add(evas,
120                            _("Levels Allowed"));
121    e_widget_table_object_align_append(ol, ob,
122                                       0, y,    //place
123                                       2, 1,    //span
124                                       1, 1,    //fill
125                                       1, 1,    //expand
126                                       0.5, 0.5 //align
127                                       );
128    ob = e_widget_label_add(evas,
129                            _("Time to defer power-hungry tasks"));
130    e_widget_table_object_align_append(ol, ob,
131                                       3, y,    //place
132                                       1, 1,    //span
133                                       1, 1,    //fill
134                                       1, 1,    //expand
135                                       0.5, 0.5 //align
136                                       );
137
138    
139    y++;
140    ob = e_widget_label_add(evas, _("Min"));
141    e_widget_table_object_align_append(ol, ob,
142                                       0, y,    //place
143                                       1, 1,    //span
144                                       1, 1,    //fill
145                                       0, 0,    //expand
146                                       0.5, 0.5 //align
147                                       );
148    ob = e_widget_label_add(evas, _("Max"));
149    e_widget_table_object_align_append(ol, ob,
150                                       1, y,    //place
151                                       1, 1,    //span
152                                       1, 1,    //fill
153                                       0, 0,    //expand
154                                       0.5, 0.5 //align
155                                       );
156    ob = e_widget_label_add(evas,
157                            _("Level"));
158    e_widget_table_object_align_append(ol, ob,
159                                       2, y,    //place
160                                       1, 1,    //span
161                                       1, 1,    //fill
162                                       1, 1,    //expand
163                                       0.5, 0.5 //align
164                                       );
165    ob = e_widget_label_add(evas,
166                            _("e.g. Saving to disk"));
167    e_widget_table_object_align_append(ol, ob,
168                                       3, y,    //place
169                                       1, 1,    //span
170                                       1, 1,    //fill
171                                       1, 1,    //expand
172                                       0.5, 0.5 //align
173                                       );
174    y++;
175    
176    ob = e_widget_radio_add(evas, "", E_POWERSAVE_MODE_NONE, rmin);
177    e_widget_table_object_align_append(ol, ob,
178                                       0, y,    //place
179                                       1, 1,    //span
180                                       1, 1,    //fill
181                                       0, 0,    //expand
182                                       0.0, 0.5 //align
183                                       );
184    cfdata->gui.rmin = eina_list_append(cfdata->gui.rmin, ob);
185    e_widget_on_change_hook_set(ob, _cb_min_changed, cfdata);
186    ob = e_widget_radio_add(evas, "", E_POWERSAVE_MODE_NONE, rmax);
187    e_widget_table_object_align_append(ol, ob,
188                                       1, y,    //place
189                                       1, 1,    //span
190                                       1, 1,    //fill
191                                       0, 0,    //expand
192                                       0.0, 0.5 //align
193                                       );
194    cfdata->gui.rmax = eina_list_append(cfdata->gui.rmax, ob);
195    e_widget_on_change_hook_set(ob, _cb_max_changed, cfdata);
196    ob = e_widget_label_add(evas, _("None"));
197    e_widget_table_object_align_append(ol, ob,
198                                       2, y,    //place
199                                       1, 1,    //span
200                                       0, 1,    //fill
201                                       0, 0,    //expand
202                                       0.0, 0.5 //align
203                                       );
204    ob = e_widget_slider_add(evas, 1, 0, _("%1.1f s"), 0.1, 1.0, 0, 0,
205                             &(cfdata->powersave_none), NULL, 100);
206    e_widget_table_object_align_append(ol, ob,
207                                       3, y,    //place
208                                       1, 1,    //span
209                                       1, 1,    //fill
210                                       1, 0,    //expand
211                                       0.5, 0.5 //align
212                                       );
213    y++;
214    
215    ob = e_widget_radio_add(evas, "", E_POWERSAVE_MODE_LOW, rmin);
216    e_widget_table_object_align_append(ol, ob,
217                                       0, y,    //place
218                                       1, 1,    //span
219                                       1, 1,    //fill
220                                       0, 0,    //expand
221                                       0.0, 0.5 //align
222                                       );
223    cfdata->gui.rmin = eina_list_append(cfdata->gui.rmin, ob);
224    e_widget_on_change_hook_set(ob, _cb_min_changed, cfdata);
225    ob = e_widget_radio_add(evas, "", E_POWERSAVE_MODE_LOW, rmax);
226    e_widget_table_object_align_append(ol, ob,
227                                       1, y,    //place
228                                       1, 1,    //span
229                                       1, 1,    //fill
230                                       0, 0,    //expand
231                                       0.0, 0.5 //align
232                                      );
233    cfdata->gui.rmax = eina_list_append(cfdata->gui.rmax, ob);
234    e_widget_on_change_hook_set(ob, _cb_max_changed, cfdata);
235    ob = e_widget_label_add(evas, _("Low"));
236    e_widget_table_object_align_append(ol, ob,
237                                       2, y,    //place
238                                       1, 1,    //span
239                                       1, 1,    //fill
240                                       0, 0,    //expand
241                                       0.0, 0.5 //align
242                                       );
243    ob = e_widget_slider_add(evas, 1, 0, _("%1.2f s"), 1.0, 10.0, 1, 0,
244                             &(cfdata->powersave_low), NULL, 100);
245    e_widget_table_object_align_append(ol, ob,
246                                       3, y,    //place
247                                       1, 1,    //span
248                                       1, 1,    //fill
249                                       0, 0,    //expand
250                                       0.0, 0.5 //align
251                                       );
252    y++;
253    
254    ob = e_widget_radio_add(evas, "", E_POWERSAVE_MODE_MEDIUM, rmin);
255    e_widget_table_object_align_append(ol, ob,
256                                       0, y,    //place
257                                       1, 1,    //span
258                                       1, 1,    //fill
259                                       0, 0,    //expand
260                                       0.0, 0.5 //align
261                                       );
262    cfdata->gui.rmin = eina_list_append(cfdata->gui.rmin, ob);
263    e_widget_on_change_hook_set(ob, _cb_min_changed, cfdata);
264    ob = e_widget_radio_add(evas, "", E_POWERSAVE_MODE_MEDIUM, rmax);
265    e_widget_table_object_align_append(ol, ob,
266                                       1, y,    //place
267                                       1, 1,    //span
268                                       1, 1,    //fill
269                                       0, 0,    //expand
270                                       0.0, 0.5 //align
271                                      );
272    cfdata->gui.rmax = eina_list_append(cfdata->gui.rmax, ob);
273    e_widget_on_change_hook_set(ob, _cb_max_changed, cfdata);
274    ob = e_widget_label_add(evas, _("Medium"));
275    e_widget_table_object_align_append(ol, ob,
276                                       2, y,    //place
277                                       1, 1,    //span
278                                       1, 1,    //fill
279                                       0, 0,    //expand
280                                       0.0, 0.5 //align
281                                      );
282    ob = e_widget_slider_add(evas, 1, 0, _("%.0f s"), 10.0, 120.0, 1, 0,
283                             &(cfdata->powersave_medium), NULL, 100);
284    e_widget_table_object_align_append(ol, ob,
285                                       3, y,    //place
286                                       1, 1,    //span
287                                       1, 1,    //fill
288                                       0, 0,    //expand
289                                       0.0, 0.5 //align
290                                      );
291    y++;
292    
293    ob = e_widget_radio_add(evas, "", E_POWERSAVE_MODE_HIGH, rmin);
294    e_widget_table_object_align_append(ol, ob,
295                                       0, y,    //place
296                                       1, 1,    //span
297                                       1, 1,    //fill
298                                       0, 0,    //expand
299                                       0.0, 0.5 //align
300                                       );
301    cfdata->gui.rmin = eina_list_append(cfdata->gui.rmin, ob);
302    e_widget_on_change_hook_set(ob, _cb_min_changed, cfdata);
303    ob = e_widget_radio_add(evas, "", E_POWERSAVE_MODE_HIGH, rmax);
304    e_widget_table_object_align_append(ol, ob,
305                                       1, y,    //place
306                                       1, 1,    //span
307                                       1, 1,    //fill
308                                       0, 0,    //expand
309                                       0.0, 0.5 //align
310                                      );
311    cfdata->gui.rmax = eina_list_append(cfdata->gui.rmax, ob);
312    e_widget_on_change_hook_set(ob, _cb_max_changed, cfdata);
313    ob = e_widget_label_add(evas, _("High"));
314    e_widget_table_object_align_append(ol, ob,
315                                       2, y,    //place
316                                       1, 1,    //span
317                                       1, 1,    //fill
318                                       0, 0,    //expand
319                                       0.0, 0.5 //align
320                                       );
321    ob = e_widget_slider_add(evas, 1, 0, _("%.0f s"), 120.0, 1200.0, 1, 0,
322                             &(cfdata->powersave_high), NULL, 100);
323    e_widget_table_object_align_append(ol, ob,
324                                       3, y,    //place
325                                       1, 1,    //span
326                                       1, 1,    //fill
327                                       0, 0,    //expand
328                                       0.0, 0.5 //align
329                                       );
330    y++;
331    
332    ob = e_widget_radio_add(evas, "", E_POWERSAVE_MODE_EXTREME, rmin);
333    e_widget_table_object_align_append(ol, ob,
334                                       0, y,    //place
335                                       1, 1,    //span
336                                       1, 1,    //fill
337                                       0, 0,    //expand
338                                       0.0, 0.5 //align
339                                       );
340    cfdata->gui.rmin = eina_list_append(cfdata->gui.rmin, ob);
341    e_widget_on_change_hook_set(ob, _cb_min_changed, cfdata);
342    ob = e_widget_radio_add(evas, "", E_POWERSAVE_MODE_EXTREME, rmax);
343    e_widget_table_object_align_append(ol, ob,
344                                       1, y,    //place
345                                       1, 1,    //span
346                                       1, 1,    //fill
347                                       0, 0,    //expand
348                                       0.0, 0.5 //align
349                                      );
350    cfdata->gui.rmax = eina_list_append(cfdata->gui.rmax, ob);
351    e_widget_on_change_hook_set(ob, _cb_max_changed, cfdata);
352    ob = e_widget_label_add(evas, _("Extreme"));
353    e_widget_table_object_align_append(ol, ob,
354                                       2, y,    //place
355                                       1, 1,    //span
356                                       1, 1,    //fill
357                                       0, 0,    //expand
358                                       0.0, 0.5 //align
359                                      );
360    ob = e_widget_slider_add(evas, 1, 0, _("%.0f s"), 120.0, 2400.0, 1, 0,
361                             &(cfdata->powersave_extreme), NULL, 100);
362    e_widget_table_object_align_append(ol, ob,
363                                       3, y,    //place
364                                       1, 1,    //span
365                                       1, 1,    //fill
366                                       0, 0,    //expand
367                                       0.0, 0.5 //align
368                                       );
369
370    return ol;
371 }
372
373
374 static void
375 _cb_min_changed(void *data, Evas_Object *obj __UNUSED__)
376 {
377    E_Config_Dialog_Data *cfdata;
378    Evas_Object *o;
379    cfdata = data;
380    if (!cfdata) return;
381    if (cfdata->powersave_max < cfdata->powersave_min)
382      {
383         o = eina_list_nth(cfdata->gui.rmax, cfdata->powersave_min);
384         e_widget_radio_toggle_set(o, EINA_TRUE);
385         e_widget_change(o);
386      }
387
388 }
389
390 static void
391 _cb_max_changed(void *data, Evas_Object *obj __UNUSED__)
392 {
393    E_Config_Dialog_Data *cfdata;
394    Evas_Object *o;
395
396    cfdata = data;
397    if (!cfdata) return;
398    if (cfdata->powersave_min > cfdata->powersave_max)
399      {
400         o = eina_list_nth(cfdata->gui.rmin, cfdata->powersave_max);
401         e_widget_radio_toggle_set(o, EINA_TRUE);
402         e_widget_change(o);
403      }
404 }