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))
129 _fill_sensors(E_Config_Dialog_Data *cfdata, const char *name)
131 Eina_List *therms, *l;
135 if ((therms = temperature_get_bus_files(name)))
139 EINA_LIST_FREE(therms, n)
141 if (ecore_file_exists(n))
145 sprintf(path, "%s", ecore_file_file_get(n));
147 if (len > 6) path[len - 6] = '\0';
149 eina_list_append(cfdata->sensors, strdup(path));
154 EINA_LIST_FOREACH(cfdata->sensors, l, n)
156 if (!strcmp(cfdata->inst->sensor_name, n)) break;
162 _free_data(E_Config_Dialog *cfd __UNUSED__, E_Config_Dialog_Data *cfdata)
166 cfdata->inst->config_dialog = NULL;
167 EINA_LIST_FREE(cfdata->sensors, sensor)
173 _basic_create(E_Config_Dialog *cfd __UNUSED__, Evas *evas, E_Config_Dialog_Data *cfdata)
175 Evas_Object *otb, *ol, *ow;
178 otb = e_widget_toolbook_add(evas, 24, 24);
186 ol = e_widget_list_add(evas, 0, 0);
187 rg = e_widget_radio_group_new(&(cfdata->sensor));
188 EINA_LIST_FOREACH(cfdata->sensors, l, name)
190 ow = e_widget_radio_add(evas, _(name), n, rg);
191 e_widget_list_object_append(ol, ow, 1, 0, 0.5);
194 e_widget_toolbook_page_append(otb, NULL, _("Sensors"), ol,
195 1, 0, 1, 0, 0.5, 0.0);
198 ol = e_widget_list_add(evas, 0, 0);
199 rg = e_widget_radio_group_new(&(cfdata->unit_method));
200 ow = e_widget_radio_add(evas, _("Celsius"), CELCIUS, rg);
201 e_widget_on_change_hook_set(ow, _cb_display_changed, cfdata);
202 e_widget_list_object_append(ol, ow, 1, 1, 0.5);
203 ow = e_widget_radio_add(evas, _("Fahrenheit"), FAHRENHEIT, rg);
204 e_widget_on_change_hook_set(ow, _cb_display_changed, cfdata);
205 e_widget_list_object_append(ol, ow, 1, 1, 0.5);
206 e_widget_toolbook_page_append(otb, NULL, _("Display Units"), ol,
207 0, 0, 0, 0, 0.5, 0.0);
209 ol = e_widget_list_add(evas, 0, 0);
210 ow = e_widget_slider_add(evas, 1, 0, _("%1.0f ticks"), 1, 1024, 4, 0,
211 NULL, &(cfdata->poll.interval), 150);
212 e_widget_list_object_append(ol, ow, 1, 1, 0.5);
213 e_widget_toolbook_page_append(otb, NULL, _("Check Interval"), ol,
214 1, 0, 1, 0, 0.5, 0.0);
216 ol = e_widget_list_add(evas, 0, 0);
217 ow = e_widget_label_add(evas, _("High Temperature"));
218 e_widget_list_object_append(ol, ow, 1, 1, 0.5);
219 if (cfdata->unit_method == FAHRENHEIT)
221 e_widget_slider_add(evas, 1, 0, _("%1.0f F"), 0, 230, 5, 0,
222 NULL, &(cfdata->temp.high), 150);
225 e_widget_slider_add(evas, 1, 0, _("%1.0f C"), 0, 110, 5, 0,
226 NULL, &(cfdata->temp.high), 150);
227 e_widget_list_object_append(ol, cfdata->o_high, 1, 1, 0.5);
229 ow = e_widget_label_add(evas, _("Low Temperature"));
230 e_widget_list_object_append(ol, ow, 1, 1, 0.5);
231 if (cfdata->unit_method == FAHRENHEIT)
233 e_widget_slider_add(evas, 1, 0, _("%1.0f F"), 0, 200, 5, 0,
234 NULL, &(cfdata->temp.low), 150);
237 e_widget_slider_add(evas, 1, 0, _("%1.0f C"), 0, 95, 5, 0,
238 NULL, &(cfdata->temp.low), 150);
239 e_widget_list_object_append(ol, cfdata->o_low, 1, 1, 0.5);
241 e_widget_toolbook_page_append(otb, NULL, _("Temperatures"), ol,
242 1, 0, 1, 0, 0.5, 0.0);
244 ol = e_widget_list_add(evas, 0, 0);
245 rg = e_widget_radio_group_new(&(cfdata->backend));
246 ow = e_widget_radio_add(evas, _("Internal"), TEMPGET, rg);
247 e_widget_list_object_append(ol, ow, 1, 1, 0.5);
248 ow = e_widget_radio_add(evas, _("udev"), UDEV, rg);
249 e_widget_list_object_append(ol, ow, 1, 1, 0.5);
250 e_widget_toolbook_page_append(otb, NULL, _("Hardware"), ol,
251 0, 0, 0, 0, 0.5, 0.0);
253 e_widget_toolbook_page_show(otb, 0);
258 _basic_apply(E_Config_Dialog *cfd __UNUSED__, E_Config_Dialog_Data *cfdata)
260 cfdata->inst->poll_interval = cfdata->poll.interval;
261 cfdata->inst->units = cfdata->unit_method;
262 cfdata->inst->low = cfdata->temp.low;
263 cfdata->inst->high = cfdata->temp.high;
265 cfdata->inst->backend = cfdata->backend;
268 eina_stringshare_replace(&cfdata->inst->sensor_name,
269 eina_list_nth(cfdata->sensors, cfdata->sensor));
271 e_config_save_queue();
272 temperature_face_update_config(cfdata->inst);
277 _cb_display_changed(void *data, Evas_Object *obj __UNUSED__)
279 E_Config_Dialog_Data *cfdata;
282 if (!(cfdata = data)) return;
283 if (cfdata->unit_method == FAHRENHEIT)
285 e_widget_slider_value_range_set(cfdata->o_low, 0, 200);
286 e_widget_slider_value_range_set(cfdata->o_high, 0, 230);
287 e_widget_slider_value_int_get(cfdata->o_low, &val);
288 e_widget_slider_value_int_set(cfdata->o_low, CEL_2_FAR(val));
289 e_widget_slider_value_int_get(cfdata->o_high, &val);
290 e_widget_slider_value_int_set(cfdata->o_high, CEL_2_FAR(val));
291 e_widget_slider_value_format_display_set(cfdata->o_low, _("%1.0f F"));
292 e_widget_slider_value_format_display_set(cfdata->o_high, _("%1.0f F"));
296 e_widget_slider_value_range_set(cfdata->o_low, 0, 95);
297 e_widget_slider_value_range_set(cfdata->o_high, 0, 110);
298 e_widget_slider_value_int_get(cfdata->o_low, &val);
299 e_widget_slider_value_int_set(cfdata->o_low, FAR_2_CEL(val));
300 e_widget_slider_value_int_get(cfdata->o_high, &val);
301 e_widget_slider_value_int_set(cfdata->o_high, FAR_2_CEL(val));
302 e_widget_slider_value_format_display_set(cfdata->o_low, _("%1.0f C"));
303 e_widget_slider_value_format_display_set(cfdata->o_high, _("%1.0f C"));