2 #include "e_mod_main.h"
4 struct _E_Config_Dialog_Data
15 int force_mode; // 0 == auto, 1 == batget, 2 == subsystem
18 Evas_Object *show_alert_label;
19 Evas_Object *show_alert_time;
20 Evas_Object *show_alert_percent;
21 Evas_Object *dismiss_alert_label;
22 Evas_Object *alert_timeout;
30 static void *_create_data(E_Config_Dialog *cfd);
31 static void _free_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata);
32 static Evas_Object *_basic_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cfdata);
33 static int _basic_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata);
34 static int _basic_check_changed(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata);
35 static Evas_Object *_advanced_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cfdata);
36 static int _advanced_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata);
37 static int _advanced_check_changed(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata);
38 static void _cb_radio_changed(void *data, Evas_Object *obj __UNUSED__);
41 e_int_config_battery_module(E_Container *con, const char *params __UNUSED__)
44 E_Config_Dialog_View *v;
47 v = E_NEW(E_Config_Dialog_View, 1);
48 v->create_cfdata = _create_data;
49 v->free_cfdata = _free_data;
50 v->basic.apply_cfdata = _basic_apply_data;
51 v->basic.create_widgets = _basic_create_widgets;
52 v->basic.check_changed = _basic_check_changed;
53 v->advanced.apply_cfdata = _advanced_apply_data;
54 v->advanced.create_widgets = _advanced_create_widgets;
55 v->advanced.check_changed = _advanced_check_changed;
57 snprintf(buf, sizeof(buf), "%s/e-module-battery.edj",
58 e_module_dir_get(battery_config->module));
59 cfd = e_config_dialog_new(con, _("Battery Monitor Settings"),
60 "E", "_e_mod_battery_config_dialog",
62 battery_config->config_dialog = cfd;
67 _fill_data(E_Config_Dialog_Data *cfdata)
69 if (!battery_config) return;
70 cfdata->alert_time = battery_config->alert;
71 cfdata->alert_percent = battery_config->alert_p;
72 cfdata->poll_interval = battery_config->poll_interval;
73 cfdata->alert_timeout = battery_config->alert_timeout;
74 cfdata->force_mode = battery_config->force_mode;
76 cfdata->fuzzy = battery_config->fuzzy;
79 if ((cfdata->alert_time > 0) || (cfdata->alert_percent > 0))
80 cfdata->show_alert = 1;
82 cfdata->show_alert = 0;
84 if (cfdata->alert_timeout > 0)
85 cfdata->dismiss_alert = 1;
87 cfdata->dismiss_alert = 0;
91 _ensure_alert_time(E_Config_Dialog_Data *cfdata)
93 if ((cfdata->alert_time > 0) || (cfdata->alert_percent > 0))
96 // must handle the case where user toggled the checkbox but set no threshold
97 cfdata->alert_time = 5;
101 _create_data(E_Config_Dialog *cfd __UNUSED__)
103 E_Config_Dialog_Data *cfdata;
105 cfdata = E_NEW(E_Config_Dialog_Data, 1);
111 _free_data(E_Config_Dialog *cfd __UNUSED__, E_Config_Dialog_Data *cfdata)
113 if (!battery_config) return;
114 battery_config->config_dialog = NULL;
119 _basic_create_widgets(E_Config_Dialog *cfd __UNUSED__, Evas *evas, E_Config_Dialog_Data *cfdata)
123 o = e_widget_list_add(evas, 0, 0);
124 ob = e_widget_check_add(evas, _("Show alert when battery is low"),
125 &(cfdata->show_alert));
126 e_widget_list_object_append(o, ob, 1, 0, 0.5);
131 _basic_apply_data(E_Config_Dialog *cfd __UNUSED__, E_Config_Dialog_Data *cfdata)
133 if (!battery_config) return 0;
135 if (cfdata->show_alert)
137 _ensure_alert_time(cfdata);
138 battery_config->alert = cfdata->alert_time;
139 battery_config->alert_p = cfdata->alert_percent;
143 battery_config->alert = 0;
144 battery_config->alert_p = 0;
147 _battery_config_updated();
148 e_config_save_queue();
153 _basic_check_changed(E_Config_Dialog *cfd __UNUSED__, E_Config_Dialog_Data *cfdata)
155 int old_show_alert = ((battery_config->alert > 0) ||
156 (battery_config->alert_p > 0));
158 return (cfdata->show_alert != old_show_alert);
162 _cb_show_alert_changed(void *data, Evas_Object *obj __UNUSED__)
164 E_Config_Dialog_Data *cfdata = data;
165 Eina_Bool show_alert = cfdata->show_alert;
166 Eina_Bool dismiss_alert = cfdata->show_alert && cfdata->dismiss_alert;
168 e_widget_disabled_set(cfdata->ui.show_alert_label, !show_alert);
169 e_widget_disabled_set(cfdata->ui.show_alert_time, !show_alert);
170 e_widget_disabled_set(cfdata->ui.show_alert_percent, !show_alert);
171 e_widget_disabled_set(cfdata->ui.dismiss_alert_label, !show_alert);
173 e_widget_disabled_set(cfdata->ui.alert_timeout, !dismiss_alert);
177 _cb_dismiss_alert_changed(void *data, Evas_Object *obj __UNUSED__)
179 E_Config_Dialog_Data *cfdata = data;
180 Eina_Bool dismiss_alert = cfdata->show_alert && cfdata->dismiss_alert;
182 e_widget_disabled_set(cfdata->ui.alert_timeout, !dismiss_alert);
186 _cb_radio_changed(void *data, Evas_Object *obj __UNUSED__)
188 E_Config_Dialog_Data *cfdata;
191 if (!(cfdata = data)) return;
192 fuzzy = (cfdata->force_mode == SUBSYSTEM);
194 e_widget_disabled_set(cfdata->ui.fuzzy, !fuzzy);
199 _advanced_create_widgets(E_Config_Dialog *cfd __UNUSED__, Evas *evas, E_Config_Dialog_Data *cfdata)
201 Evas_Object *o, *ob, *otb;
204 otb = e_widget_toolbook_add(evas, (48 * e_scale), (48 * e_scale));
206 /* Use Sliders for both cfg options */
207 o = e_widget_table_add(evas, 0);
209 ob = e_widget_label_add(evas, _("Check every:"));
210 e_widget_table_object_append(o, ob, 0, 0, 1, 1, 1, 0, 1, 0);
211 ob = e_widget_slider_add(evas, 1, 0, _("%1.0f ticks"), 1, 256, 4, 0,
212 NULL, &(cfdata->poll_interval), 100);
213 e_widget_table_object_append(o, ob, 0, 1, 1, 1, 1, 0, 1, 0);
214 e_widget_toolbook_page_append(otb, NULL, _("Polling"), o, 1, 0, 1, 0,
217 o = e_widget_table_add(evas, 0);
218 ob = e_widget_check_add(evas, _("Show low battery alert"),
219 &(cfdata->show_alert));
220 e_widget_on_change_hook_set(ob, _cb_show_alert_changed, cfdata);
221 e_widget_table_object_append(o, ob, 0, 0, 1, 1, 1, 1, 1, 0);
222 ob = e_widget_label_add(evas, _("Alert when at:"));
223 cfdata->ui.show_alert_label = ob;
224 e_widget_table_object_append(o, ob, 0, 1, 1, 1, 1, 0, 1, 1);
225 ob = e_widget_slider_add(evas, 1, 0, _("%1.0f min"), 0, 60, 1, 0, NULL,
226 &(cfdata->alert_time), 100);
227 cfdata->ui.show_alert_time = ob;
228 e_widget_table_object_append(o, ob, 0, 2, 1, 1, 1, 0, 1, 0);
229 ob = e_widget_slider_add(evas, 1, 0, _("%1.0f %%"), 0, 100, 1, 0, NULL,
230 &(cfdata->alert_percent), 100);
231 cfdata->ui.show_alert_percent = ob;
232 e_widget_table_object_append(o, ob, 0, 3, 1, 1, 1, 0, 1, 0);
233 ob = e_widget_check_add(evas, _("Auto dismiss in..."),
234 &(cfdata->dismiss_alert));
235 cfdata->ui.dismiss_alert_label = ob;
236 e_widget_on_change_hook_set(ob, _cb_dismiss_alert_changed, cfdata);
237 e_widget_table_object_append(o, ob, 0, 4, 1, 1, 1, 1, 1, 0);
238 ob = e_widget_slider_add(evas, 1, 0, _("%1.0f sec"), 1, 300, 1, 0, NULL,
239 &(cfdata->alert_timeout), 100);
240 cfdata->ui.alert_timeout = ob;
241 e_widget_table_object_append(o, ob, 0, 5, 1, 1, 1, 0, 1, 0);
243 _cb_show_alert_changed(cfdata, NULL);
245 e_widget_toolbook_page_append(otb, NULL, _("Alert"), o, 1, 0, 1, 0,
248 o = e_widget_list_add(evas, 0, 0);
250 rg = e_widget_radio_group_new(&(cfdata->force_mode));
251 ob = e_widget_radio_add(evas, _("Auto Detect"), UNKNOWN, rg);
252 e_widget_on_change_hook_set(ob, _cb_radio_changed, cfdata);
253 e_widget_list_object_append(o, ob, 1, 0, 0.0);
254 ob = e_widget_radio_add(evas, _("Internal"), NOSUBSYSTEM, rg);
255 e_widget_on_change_hook_set(ob, _cb_radio_changed, cfdata);
256 e_widget_list_object_append(o, ob, 1, 0, 0.0);
258 ob = e_widget_radio_add(evas, _("udev"), SUBSYSTEM, rg);
259 e_widget_on_change_hook_set(ob, _cb_radio_changed, cfdata);
260 e_widget_list_object_append(o, ob, 1, 0, 0.0);
261 ob = e_widget_check_add(evas, _("Fuzzy Mode"),
263 cfdata->ui.fuzzy = ob;
265 ob = e_widget_radio_add(evas, _("HAL"), 2, rg);
266 e_widget_on_change_hook_set(ob, _cb_radio_changed, cfdata);
268 e_widget_list_object_append(o, ob, 1, 0, 0.0);
270 e_widget_toolbook_page_append(otb, NULL, _("Hardware"), o, 1, 0, 1, 0,
273 e_widget_toolbook_page_show(otb, 0);
278 _advanced_apply_data(E_Config_Dialog *cfd __UNUSED__, E_Config_Dialog_Data *cfdata)
280 if (!battery_config) return 0;
282 battery_config->poll_interval = cfdata->poll_interval;
284 battery_config->fuzzy = cfdata->fuzzy;
287 if (cfdata->show_alert)
289 _ensure_alert_time(cfdata);
290 battery_config->alert = cfdata->alert_time;
291 battery_config->alert_p = cfdata->alert_percent;
295 battery_config->alert = 0;
296 battery_config->alert_p = 0;
299 if ((cfdata->dismiss_alert) && (cfdata->alert_timeout > 0))
300 battery_config->alert_timeout = cfdata->alert_timeout;
302 battery_config->alert_timeout = 0;
304 battery_config->force_mode = cfdata->force_mode;
306 _battery_config_updated();
307 e_config_save_queue();
312 _advanced_check_changed(E_Config_Dialog *cfd __UNUSED__, E_Config_Dialog_Data *cfdata)
314 int old_show_alert = ((battery_config->alert > 0) ||
315 (battery_config->alert_p > 0));
316 int old_dismiss_alert = (battery_config->alert_timeout > 0);
318 return ((cfdata->alert_time != battery_config->alert) ||
319 (cfdata->alert_percent != battery_config->alert_p) ||
320 (cfdata->poll_interval != battery_config->poll_interval) ||
321 (cfdata->alert_timeout != battery_config->alert_timeout) ||
323 (cfdata->fuzzy != battery_config->fuzzy) ||
325 (cfdata->force_mode != battery_config->force_mode) ||
326 (cfdata->show_alert != old_show_alert) ||
327 (cfdata->dismiss_alert != old_dismiss_alert));