diff options
author | Michael BOUCHAUD <michael.bouchaud@gmail.com> | 2012-05-03 20:16:34 +0000 |
---|---|---|
committer | Michael BOUCHAUD <michael.bouchaud@gmail.com> | 2012-05-03 20:16:34 +0000 |
commit | 7743a24db235b62a3860cce9000d7171b851eabf (patch) | |
tree | 1f59016ee3853163a35ab7dd127feba4d25fe8c0 /src/modules/conf_performance | |
parent | bce6efef04b122c699608989f47b2e612bced037 (diff) | |
download | enlightenment-7743a24db235b62a3860cce9000d7171b851eabf.tar.gz |
e: make e_powersave values configurable
SVN revision: 70698
Diffstat (limited to 'src/modules/conf_performance')
-rw-r--r-- | src/modules/conf_performance/Makefile.am | 4 | ||||
-rw-r--r-- | src/modules/conf_performance/e_int_config_powermanagement.c | 372 | ||||
-rw-r--r-- | src/modules/conf_performance/e_int_config_powermanagement.h | 9 | ||||
-rw-r--r-- | src/modules/conf_performance/e_mod_main.c | 2 | ||||
-rw-r--r-- | src/modules/conf_performance/e_mod_main.h | 1 |
5 files changed, 387 insertions, 1 deletions
diff --git a/src/modules/conf_performance/Makefile.am b/src/modules/conf_performance/Makefile.am index d403d1f0a0..a6c688cc23 100644 --- a/src/modules/conf_performance/Makefile.am +++ b/src/modules/conf_performance/Makefile.am @@ -23,7 +23,9 @@ module_la_SOURCES = e_mod_main.c \ e_int_config_performance.c \ e_int_config_performance.h \ e_int_config_engine.c \ - e_int_config_engine.h + e_int_config_engine.h \ + e_int_config_powermanagement.c \ + e_int_config_powermanagement.h module_la_LIBADD = @e_libs@ @dlopen_libs@ module_la_LDFLAGS = -module -avoid-version diff --git a/src/modules/conf_performance/e_int_config_powermanagement.c b/src/modules/conf_performance/e_int_config_powermanagement.c new file mode 100644 index 0000000000..a8a574517e --- /dev/null +++ b/src/modules/conf_performance/e_int_config_powermanagement.c @@ -0,0 +1,372 @@ +#include "e.h" + +static void *_create_data(E_Config_Dialog *cfd); +static void _free_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata); +static int _basic_apply(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata); +static int _basic_check_changed(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata); +static Evas_Object *_basic_create(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cfdata); +static void _cb_min_changed(void *data, Evas_Object *obj); +static void _cb_max_changed(void *data, Evas_Object *obj); + +struct _E_Config_Dialog_Data +{ + struct { + Eina_List *rmin; + Eina_List *rmax; + } gui; + double powersave_none; + double powersave_low; + double powersave_medium; + double powersave_high; + double powersave_extreme; + int powersave_min; + int powersave_max; +}; + +E_Config_Dialog * +e_int_config_powermanagement(E_Container *con, const char *params __UNUSED__) +{ + E_Config_Dialog *cfd; + E_Config_Dialog_View *v; + + if (e_config_dialog_find("E", "advanced/powermanagement")) return NULL; + v = E_NEW(E_Config_Dialog_View, 1); + + v->create_cfdata = _create_data; + v->free_cfdata = _free_data; + v->basic.apply_cfdata = _basic_apply; + v->basic.create_widgets = _basic_create; + v->basic.check_changed = _basic_check_changed; + + cfd = e_config_dialog_new(con, _("Power management Settings"), + "E", "advanced/powermanagement", + "preferences-system-powermanagement", 0, v, NULL); + return cfd; +} + +static void * +_create_data(E_Config_Dialog *cfd __UNUSED__) +{ + E_Config_Dialog_Data *cfdata; + + cfdata = E_NEW(E_Config_Dialog_Data, 1); + if (!cfdata) return NULL; + cfdata->powersave_none = e_config->powersave.none; + cfdata->powersave_low = e_config->powersave.low; + cfdata->powersave_medium = e_config->powersave.medium; + cfdata->powersave_high = e_config->powersave.high; + cfdata->powersave_extreme = e_config->powersave.extreme; + return cfdata; +} + +static void +_free_data(E_Config_Dialog *cfd __UNUSED__, E_Config_Dialog_Data *cfdata) +{ + eina_list_free(cfdata->gui.rmin); + eina_list_free(cfdata->gui.rmax); + E_FREE(cfdata); +} + +static int +_basic_apply(E_Config_Dialog *cfd __UNUSED__, E_Config_Dialog_Data *cfdata) +{ + e_config->powersave.none = cfdata->powersave_none; + e_config->powersave.low = cfdata->powersave_low; + e_config->powersave.medium = cfdata->powersave_medium; + e_config->powersave.high = cfdata->powersave_high; + e_config->powersave.extreme = cfdata->powersave_extreme; + if (e_config->powersave.min != cfdata->powersave_min + || e_config->powersave.max != cfdata->powersave_max) + { + e_config->powersave.min = cfdata->powersave_min; + e_config->powersave.max = cfdata->powersave_max; + ecore_event_add(E_EVENT_POWERSAVE_CONFIG_UPDATE, + NULL, NULL, NULL); + } + + e_powersave_mode_set(e_powersave_mode_get()); + e_config_save_queue(); + return 1; +} + +static int +_basic_check_changed(E_Config_Dialog *cfd __UNUSED__, E_Config_Dialog_Data *cfdata) +{ + return ((e_config->powersave.min != cfdata->powersave_min) || + (e_config->powersave.max != cfdata->powersave_max) || + (e_config->powersave.none != cfdata->powersave_none) || + (e_config->powersave.low != cfdata->powersave_low) || + (e_config->powersave.medium != cfdata->powersave_medium) || + (e_config->powersave.high != cfdata->powersave_high) || + (e_config->powersave.extreme != cfdata->powersave_extreme)); +} + +static Evas_Object * +_basic_create(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cfdata) +{ + Evas_Object *otb, *ob, *ol; + E_Radio_Group *rmin, *rmax; + + otb = e_widget_toolbook_add(evas, (24 * e_scale), (24 * e_scale)); + cfdata->powersave_min = e_config->powersave.min; + cfdata->powersave_max = e_config->powersave.max; + rmin = e_widget_radio_group_new(&(cfdata->powersave_min)); + rmax = e_widget_radio_group_new(&(cfdata->powersave_max)); + + ol = e_widget_table_add(evas, 0); + ob = e_widget_label_add(evas, _("Min")); + e_widget_table_object_align_append(ol, ob, + 0, 0, //place + 1, 1, //span + 1, 1, //fill + 0, 1, //expand + 0.0, 0.5 //align + ); + ob = e_widget_label_add(evas, _("Max")); + e_widget_table_object_align_append(ol, ob, + 1, 0, //place + 1, 1, //span + 1, 1, //fill + 0, 1, //expand + 0.0, 0.5 //align + ); + /* + ob = e_widget_label_add(evas, + _("Time to defer 'power expensive' activities")); + e_widget_table_object_align_append(ol, ob, + 2, 0, //place + 2, 1, //span + 1, 1, //fill + 1, 1, //expand + 0.0, 0.5 //align + );*/ + + ob = e_widget_radio_add(evas, NULL, E_POWERSAVE_MODE_NONE, rmin); + e_widget_table_object_align_append(ol, ob, + 0, 1, //place + 1, 1, //span + 1, 1, //fill + 0, 1, //expand + 0.0, 0.5 //align + ); + cfdata->gui.rmin = eina_list_append(cfdata->gui.rmin, ob); + e_widget_on_change_hook_set(ob, _cb_min_changed, cfdata); + ob = e_widget_radio_add(evas, NULL, E_POWERSAVE_MODE_NONE, rmax); + e_widget_table_object_align_append(ol, ob, + 1, 1, //place + 1, 1, //span + 1, 1, //fill + 0, 1, //expand + 0.0, 0.5 //align + ); + cfdata->gui.rmax = eina_list_append(cfdata->gui.rmax, ob); + e_widget_on_change_hook_set(ob, _cb_max_changed, cfdata); + ob = e_widget_label_add(evas, _("none")); + e_widget_table_object_align_append(ol, ob, + 2, 1, //place + 1, 1, //span + 0, 1, //fill + 0, 1, //expand + 0.0, 0.5 //align + ); + ob = e_widget_slider_add(evas, 1, 0, _("%1.2f minute"), 0.01, 1.0, 0, 0, + &(cfdata->powersave_none), NULL, 100); + e_widget_table_object_align_append(ol, ob, + 3, 1, //place + 1, 1, //span + 1, 1, //fill + 1, 1, //expand + 0.5, 0.5 //align + ); + + ob = e_widget_radio_add(evas, NULL, E_POWERSAVE_MODE_LOW, rmin); + e_widget_table_object_align_append(ol, ob, + 0, 2, //place + 1, 1, //span + 1, 1, //fill + 0, 1, //expand + 0.0, 0.5 //align + ); + cfdata->gui.rmin = eina_list_append(cfdata->gui.rmin, ob); + e_widget_on_change_hook_set(ob, _cb_min_changed, cfdata); + ob = e_widget_radio_add(evas, NULL, E_POWERSAVE_MODE_LOW, rmax); + e_widget_table_object_align_append(ol, ob, + 1, 2, //place + 1, 1, //span + 1, 1, //fill + 0, 1, //expand + 0.0, 0.5 //align + ); + cfdata->gui.rmax = eina_list_append(cfdata->gui.rmax, ob); + e_widget_on_change_hook_set(ob, _cb_max_changed, cfdata); + ob = e_widget_label_add(evas, _("low")); + e_widget_table_object_align_append(ol, ob, + 2, 2, //place + 1, 1, //span + 1, 1, //fill + 0, 1, //expand + 0.0, 0.5 //align + ); + ob = e_widget_slider_add(evas, 1, 0, _("%1.2f minutes"), 1.0, 10.0, 1, 0, + &(cfdata->powersave_low), NULL, 100); + e_widget_table_object_align_append(ol, ob, + 3, 2, //place + 1, 1, //span + 1, 1, //fill + 0, 1, //expand + 0.0, 0.5 //align + ); + + ob = e_widget_radio_add(evas, NULL, E_POWERSAVE_MODE_MEDIUM, rmin); + e_widget_table_object_align_append(ol, ob, + 0, 3, //place + 1, 1, //span + 1, 1, //fill + 0, 1, //expand + 0.0, 0.5 //align + ); + cfdata->gui.rmin = eina_list_append(cfdata->gui.rmin, ob); + e_widget_on_change_hook_set(ob, _cb_min_changed, cfdata); + ob = e_widget_radio_add(evas, NULL, E_POWERSAVE_MODE_MEDIUM, rmax); + e_widget_table_object_align_append(ol, ob, + 1, 3, //place + 1, 1, //span + 1, 1, //fill + 0, 1, //expand + 0.0, 0.5 //align + ); + cfdata->gui.rmax = eina_list_append(cfdata->gui.rmax, ob); + e_widget_on_change_hook_set(ob, _cb_max_changed, cfdata); + ob = e_widget_label_add(evas, _("medium")); + e_widget_table_object_align_append(ol, ob, + 2, 3, //place + 1, 1, //span + 1, 1, //fill + 0, 1, //expand + 0.0, 0.5 //align + ); + ob = e_widget_slider_add(evas, 1, 0, _("%.0f minutes"), 10.0, 120.0, 1, 0, + &(cfdata->powersave_medium), NULL, 100); + e_widget_table_object_align_append(ol, ob, + 3, 3, //place + 1, 1, //span + 1, 1, //fill + 0, 1, //expand + 0.0, 0.5 //align + ); + + ob = e_widget_radio_add(evas, NULL, E_POWERSAVE_MODE_HIGH, rmin); + e_widget_table_object_align_append(ol, ob, + 0, 4, //place + 1, 1, //span + 1, 1, //fill + 0, 1, //expand + 0.0, 0.5 //align + ); + cfdata->gui.rmin = eina_list_append(cfdata->gui.rmin, ob); + e_widget_on_change_hook_set(ob, _cb_min_changed, cfdata); + ob = e_widget_radio_add(evas, NULL, E_POWERSAVE_MODE_HIGH, rmax); + e_widget_table_object_align_append(ol, ob, + 1, 4, //place + 1, 1, //span + 1, 1, //fill + 0, 1, //expand + 0.0, 0.5 //align + ); + cfdata->gui.rmax = eina_list_append(cfdata->gui.rmax, ob); + e_widget_on_change_hook_set(ob, _cb_max_changed, cfdata); + ob = e_widget_label_add(evas, _("high")); + e_widget_table_object_align_append(ol, ob, + 2, 4, //place + 1, 1, //span + 1, 1, //fill + 0, 1, //expand + 0.0, 0.5 //align + ); + ob = e_widget_slider_add(evas, 1, 0, _("%.0f minutes"), 120.0, 1200.0, 1, 0, + &(cfdata->powersave_high), NULL, 100); + e_widget_table_object_align_append(ol, ob, + 3, 4, //place + 1, 1, //span + 1, 1, //fill + 0, 1, //expand + 0.0, 0.5 //align + ); + + ob = e_widget_radio_add(evas, NULL, E_POWERSAVE_MODE_EXTREME, rmin); + e_widget_table_object_align_append(ol, ob, + 0, 5, //place + 1, 1, //span + 1, 1, //fill + 0, 1, //expand + 0.0, 0.5 //align + ); + cfdata->gui.rmin = eina_list_append(cfdata->gui.rmin, ob); + e_widget_on_change_hook_set(ob, _cb_min_changed, cfdata); + ob = e_widget_radio_add(evas, NULL, E_POWERSAVE_MODE_EXTREME, rmax); + e_widget_table_object_align_append(ol, ob, + 1, 5, //place + 1, 1, //span + 1, 1, //fill + 0, 1, //expand + 0.0, 0.5 //align + ); + cfdata->gui.rmax = eina_list_append(cfdata->gui.rmax, ob); + e_widget_on_change_hook_set(ob, _cb_max_changed, cfdata); + ob = e_widget_label_add(evas, _("extreme")); + e_widget_table_object_align_append(ol, ob, + 2, 5, //place + 1, 1, //span + 1, 1, //fill + 0, 1, //expand + 0.0, 0.5 //align + ); + ob = e_widget_slider_add(evas, 1, 0, _("%.0f minutes"), 120.0, 2400.0, 1, 0, + &(cfdata->powersave_extreme), NULL, 100); + e_widget_table_object_align_append(ol, ob, + 3, 5, //place + 1, 1, //span + 1, 1, //fill + 0, 1, //expand + 0.0, 0.5 //align + ); + e_widget_toolbook_page_append(otb, NULL, _("Power managment"), ol, + 0, 0, 1, 1, 0.5, 0.5); + e_widget_toolbook_page_show(otb, 0); + e_dialog_resizable_set(cfd->dia, 1); + + return otb; +} + + +static void +_cb_min_changed(void *data, Evas_Object *obj __UNUSED__) +{ + E_Config_Dialog_Data *cfdata; + Evas_Object *o; + cfdata = data; + if (!cfdata) return; + if (cfdata->powersave_max < cfdata->powersave_min) + { + o = eina_list_nth(cfdata->gui.rmax, cfdata->powersave_min); + e_widget_radio_toggle_set(o, EINA_TRUE); + e_widget_change(o); + } + +} + +static void +_cb_max_changed(void *data, Evas_Object *obj __UNUSED__) +{ + E_Config_Dialog_Data *cfdata; + Evas_Object *o; + int toggle; + cfdata = data; + if (!cfdata) return; + if (cfdata->powersave_min > cfdata->powersave_max) + { + o = eina_list_nth(cfdata->gui.rmin, cfdata->powersave_max); + e_widget_radio_toggle_set(o, EINA_TRUE); + e_widget_change(o); + } +} diff --git a/src/modules/conf_performance/e_int_config_powermanagement.h b/src/modules/conf_performance/e_int_config_powermanagement.h new file mode 100644 index 0000000000..1733a833da --- /dev/null +++ b/src/modules/conf_performance/e_int_config_powermanagement.h @@ -0,0 +1,9 @@ +#ifdef E_TYPEDEFS +#else +#ifndef E_INT_CONFIG_POWERMANAGEMENT_H +#define E_INT_CONFIG_POWERMANAGEMENT_H + +E_Config_Dialog *e_int_config_powermanagement(E_Container *con, const char *params __UNUSED__); + +#endif +#endif diff --git a/src/modules/conf_performance/e_mod_main.c b/src/modules/conf_performance/e_mod_main.c index b587ce117c..13385067e4 100644 --- a/src/modules/conf_performance/e_mod_main.c +++ b/src/modules/conf_performance/e_mod_main.c @@ -17,6 +17,7 @@ e_modapi_init(E_Module *m) e_configure_registry_category_add("advanced", 80, _("Advanced"), NULL, "preferences-advanced"); e_configure_registry_item_add("advanced/performance", 20, _("Performance"), NULL, "preferences-system-performance", e_int_config_performance); e_configure_registry_item_add("advanced/engine", 50, _("Engine"), NULL, "preferences-engine", e_int_config_engine); + e_configure_registry_item_add("advanced/powermanagement", 50, _("Power management"), NULL, "preferences-powermanagement", e_int_config_powermanagement); conf_module = m; e_module_delayed_set(m, 1); return m; @@ -30,6 +31,7 @@ e_modapi_shutdown(E_Module *m __UNUSED__) while ((cfd = e_config_dialog_get("E", "advanced/performance"))) e_object_del(E_OBJECT(cfd)); e_configure_registry_item_del("advanced/engine"); e_configure_registry_item_del("advanced/performance"); + e_configure_registry_item_del("advanced/powermanagement"); e_configure_registry_category_del("advanced"); conf_module = NULL; return 1; diff --git a/src/modules/conf_performance/e_mod_main.h b/src/modules/conf_performance/e_mod_main.h index 534a16a754..76d7d1f2ea 100644 --- a/src/modules/conf_performance/e_mod_main.h +++ b/src/modules/conf_performance/e_mod_main.h @@ -8,6 +8,7 @@ #undef E_TYPEDEFS #include "e_int_config_performance.h" #include "e_int_config_engine.h" +#include "e_int_config_powermanagement.h" EAPI extern E_Module_Api e_modapi; |