2 #include "e_mod_main.h"
4 #define FAR_2_CEL(x) ((x - 32) / 9.0) * 5.0
5 #define CEL_2_FAR(x) (x * 9.0 / 5.0) + 32
7 struct _E_Config_Dialog_Data
26 Evas_Object *o_high, *o_low;
31 /* local function prototypes */
32 static void *_create_data(E_Config_Dialog *cfd);
33 static void _fill_data_tempget(E_Config_Dialog_Data *cfdata);
34 static void _fill_sensors(E_Config_Dialog_Data *cfdata, const char *name);
35 static void _free_data(E_Config_Dialog *cfd __UNUSED__, E_Config_Dialog_Data *cfdata);
36 static Evas_Object *_basic_create(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cfdata);
37 static int _basic_apply(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata);
38 static void _cb_display_changed(void *data, Evas_Object *obj __UNUSED__);
41 config_temperature_module(Config_Face *inst)
43 E_Config_Dialog_View *v;
46 v = E_NEW(E_Config_Dialog_View, 1);
47 v->create_cfdata = _create_data;
48 v->free_cfdata = _free_data;
49 v->basic.create_widgets = _basic_create;
50 v->basic.apply_cfdata = _basic_apply;
52 snprintf(buff, sizeof(buff),
53 "%s/e-module-temperature.edj", inst->module->dir);
55 e_config_dialog_new(e_container_current_get(e_manager_current_get()),
56 _("Temperature Settings"), "E",
57 "_e_mod_temperature_config_dialog", buff, 0, v, inst);
60 /* local function prototypes */
62 _create_data(E_Config_Dialog *cfd)
64 E_Config_Dialog_Data *cfdata;
66 cfdata = E_NEW(E_Config_Dialog_Data, 1);
67 cfdata->inst = cfd->data;
68 _fill_data_tempget(cfdata);
73 _fill_data_tempget(E_Config_Dialog_Data *cfdata)
75 cfdata->unit_method = cfdata->inst->units;
76 cfdata->poll.interval = cfdata->inst->poll_interval;
77 cfdata->temp.low = cfdata->inst->low;
78 cfdata->temp.high = cfdata->inst->high;
81 cfdata->backend = cfdata->inst->backend;
82 if (cfdata->backend == TEMPGET)
85 switch (cfdata->inst->sensor_type)
87 case SENSOR_TYPE_NONE:
88 case SENSOR_TYPE_FREEBSD:
89 case SENSOR_TYPE_OMNIBOOK:
90 case SENSOR_TYPE_LINUX_MACMINI:
91 case SENSOR_TYPE_LINUX_PBOOK:
92 case SENSOR_TYPE_LINUX_INTELCORETEMP:
94 case SENSOR_TYPE_LINUX_I2C:
95 _fill_sensors(cfdata, "i2c");
97 case SENSOR_TYPE_LINUX_PCI:
98 _fill_sensors(cfdata, "pci");
100 case SENSOR_TYPE_LINUX_ACPI:
104 if ((l = ecore_file_ls("/proc/acpi/thermal_zone")))
109 EINA_LIST_FREE(l, name)
112 eina_list_append(cfdata->sensors, name);
113 if (!strcmp(cfdata->inst->sensor_name, name))
120 case SENSOR_TYPE_LINUX_SYS:
124 if ((l = ecore_file_ls("/sys/class/thermal")))
129 EINA_LIST_FREE(l, name)
131 if (!strncmp(name, "thermal", 7))
134 eina_list_append(cfdata->sensors, name);
135 if (!strcmp(cfdata->inst->sensor_name, name))
152 _fill_sensors(E_Config_Dialog_Data *cfdata, const char *name)
154 Eina_List *therms, *l;
158 if ((therms = temperature_get_bus_files(name)))
162 EINA_LIST_FREE(therms, n)
164 if (ecore_file_exists(n))
168 sprintf(path, "%s", ecore_file_file_get(n));
170 if (len > 6) path[len - 6] = '\0';
172 eina_list_append(cfdata->sensors, strdup(path));
177 EINA_LIST_FOREACH(cfdata->sensors, l, n)
179 if (!strcmp(cfdata->inst->sensor_name, n)) break;
185 _free_data(E_Config_Dialog *cfd __UNUSED__, E_Config_Dialog_Data *cfdata)
189 cfdata->inst->config_dialog = NULL;
190 EINA_LIST_FREE(cfdata->sensors, sensor)
196 _basic_create(E_Config_Dialog *cfd __UNUSED__, Evas *evas, E_Config_Dialog_Data *cfdata)
198 Evas_Object *otb, *ol, *ow;
201 otb = e_widget_toolbook_add(evas, 24, 24);
209 ol = e_widget_list_add(evas, 0, 0);
210 rg = e_widget_radio_group_new(&(cfdata->sensor));
211 EINA_LIST_FOREACH(cfdata->sensors, l, name)
213 ow = e_widget_radio_add(evas, _(name), n, rg);
214 e_widget_list_object_append(ol, ow, 1, 0, 0.5);
217 e_widget_toolbook_page_append(otb, NULL, _("Sensors"), ol,
218 1, 0, 1, 0, 0.5, 0.0);
221 ol = e_widget_list_add(evas, 0, 0);
222 rg = e_widget_radio_group_new(&(cfdata->unit_method));
223 ow = e_widget_radio_add(evas, _("Celsius"), CELCIUS, rg);
224 e_widget_on_change_hook_set(ow, _cb_display_changed, cfdata);
225 e_widget_list_object_append(ol, ow, 1, 1, 0.5);
226 ow = e_widget_radio_add(evas, _("Fahrenheit"), FAHRENHEIT, rg);
227 e_widget_on_change_hook_set(ow, _cb_display_changed, cfdata);
228 e_widget_list_object_append(ol, ow, 1, 1, 0.5);
229 e_widget_toolbook_page_append(otb, NULL, _("Display Units"), ol,
230 0, 0, 0, 0, 0.5, 0.0);
232 ol = e_widget_list_add(evas, 0, 0);
233 ow = e_widget_slider_add(evas, 1, 0, _("%1.0f ticks"), 1, 1024, 4, 0,
234 NULL, &(cfdata->poll.interval), 150);
235 e_widget_list_object_append(ol, ow, 1, 1, 0.5);
236 e_widget_toolbook_page_append(otb, NULL, _("Check Interval"), ol,
237 1, 0, 1, 0, 0.5, 0.0);
239 ol = e_widget_list_add(evas, 0, 0);
240 ow = e_widget_label_add(evas, _("High Temperature"));
241 e_widget_list_object_append(ol, ow, 1, 1, 0.5);
242 if (cfdata->unit_method == FAHRENHEIT)
244 e_widget_slider_add(evas, 1, 0, _("%1.0f F"), 0, 230, 5, 0,
245 NULL, &(cfdata->temp.high), 150);
248 e_widget_slider_add(evas, 1, 0, _("%1.0f C"), 0, 110, 5, 0,
249 NULL, &(cfdata->temp.high), 150);
250 e_widget_list_object_append(ol, cfdata->o_high, 1, 1, 0.5);
252 ow = e_widget_label_add(evas, _("Low Temperature"));
253 e_widget_list_object_append(ol, ow, 1, 1, 0.5);
254 if (cfdata->unit_method == FAHRENHEIT)
256 e_widget_slider_add(evas, 1, 0, _("%1.0f F"), 0, 200, 5, 0,
257 NULL, &(cfdata->temp.low), 150);
260 e_widget_slider_add(evas, 1, 0, _("%1.0f C"), 0, 95, 5, 0,
261 NULL, &(cfdata->temp.low), 150);
262 e_widget_list_object_append(ol, cfdata->o_low, 1, 1, 0.5);
264 e_widget_toolbook_page_append(otb, NULL, _("Temperatures"), ol,
265 1, 0, 1, 0, 0.5, 0.0);
267 ol = e_widget_list_add(evas, 0, 0);
268 rg = e_widget_radio_group_new(&(cfdata->backend));
269 ow = e_widget_radio_add(evas, _("Internal"), TEMPGET, rg);
270 e_widget_list_object_append(ol, ow, 1, 1, 0.5);
271 ow = e_widget_radio_add(evas, _("udev"), UDEV, rg);
272 e_widget_list_object_append(ol, ow, 1, 1, 0.5);
273 e_widget_toolbook_page_append(otb, NULL, _("Hardware"), ol,
274 0, 0, 0, 0, 0.5, 0.0);
276 e_widget_toolbook_page_show(otb, 0);
281 _basic_apply(E_Config_Dialog *cfd __UNUSED__, E_Config_Dialog_Data *cfdata)
283 cfdata->inst->poll_interval = cfdata->poll.interval;
284 cfdata->inst->units = cfdata->unit_method;
285 cfdata->inst->low = cfdata->temp.low;
286 cfdata->inst->high = cfdata->temp.high;
288 cfdata->inst->backend = cfdata->backend;
291 eina_stringshare_replace(&cfdata->inst->sensor_name,
292 eina_list_nth(cfdata->sensors, cfdata->sensor));
294 e_config_save_queue();
295 temperature_face_update_config(cfdata->inst);
300 _cb_display_changed(void *data, Evas_Object *obj __UNUSED__)
302 E_Config_Dialog_Data *cfdata;
305 if (!(cfdata = data)) return;
306 if (cfdata->unit_method == FAHRENHEIT)
308 e_widget_slider_value_range_set(cfdata->o_low, 0, 200);
309 e_widget_slider_value_range_set(cfdata->o_high, 0, 230);
310 e_widget_slider_value_int_get(cfdata->o_low, &val);
311 e_widget_slider_value_int_set(cfdata->o_low, CEL_2_FAR(val));
312 e_widget_slider_value_int_get(cfdata->o_high, &val);
313 e_widget_slider_value_int_set(cfdata->o_high, CEL_2_FAR(val));
314 e_widget_slider_value_format_display_set(cfdata->o_low, _("%1.0f F"));
315 e_widget_slider_value_format_display_set(cfdata->o_high, _("%1.0f F"));
319 e_widget_slider_value_range_set(cfdata->o_low, 0, 95);
320 e_widget_slider_value_range_set(cfdata->o_high, 0, 110);
321 e_widget_slider_value_int_get(cfdata->o_low, &val);
322 e_widget_slider_value_int_set(cfdata->o_low, FAR_2_CEL(val));
323 e_widget_slider_value_int_get(cfdata->o_high, &val);
324 e_widget_slider_value_int_set(cfdata->o_high, FAR_2_CEL(val));
325 e_widget_slider_value_format_display_set(cfdata->o_low, _("%1.0f C"));
326 e_widget_slider_value_format_display_set(cfdata->o_high, _("%1.0f C"));