netstar pushed a commit to branch master. http://git.enlightenment.org/apps/evisum.git/commit/?id=a48cedb30cf96e4be70391be450c29c0f3fd9082
commit a48cedb30cf96e4be70391be450c29c0f3fd9082 Author: Alastair Poole <nets...@gmail.com> Date: Wed Dec 23 14:54:59 2020 +0000 sensors: nice n simple. This will do for the moment. --- src/bin/ui/ui_sensors.c | 169 ++++++++++++++++-------------------------------- 1 file changed, 56 insertions(+), 113 deletions(-) diff --git a/src/bin/ui/ui_sensors.c b/src/bin/ui/ui_sensors.c index 2b051aa..d5daa5d 100644 --- a/src/bin/ui/ui_sensors.c +++ b/src/bin/ui/ui_sensors.c @@ -8,13 +8,11 @@ typedef struct Eina_List *sensors; Eina_List *batteries; - Evas_Object *combobox; + Evas_Object *genlist; Elm_Genlist_Item_Class *itc; - Elm_Object_Item *selected_it; sensor_t *sensor; - Evas_Object *power_fr; Evas_Object *thermal_pb; Ui *ui; @@ -70,7 +68,7 @@ _sensors_refresh(Ui_Data *pd) pd->sensors = eina_list_sort(pd->sensors, n, _sort_cb); - elm_genlist_clear(pd->combobox); + elm_genlist_clear(pd->genlist); } static void @@ -96,7 +94,8 @@ _sensors_update(void *data, Ecore_Thread *thread) system_power_state_get(&msg->power); - ecore_thread_feedback(thread, msg); + if (eina_lock_take_try(&_lock)) + ecore_thread_feedback(thread, msg); if (ecore_thread_check(thread)) break; @@ -109,37 +108,42 @@ _sensors_update(void *data, Ecore_Thread *thread) static void _sensors_update_feedback_cb(void *data, Ecore_Thread *thread, void *msgdata) { + Data *msg; + Ui_Data *pd; sensor_t *s; - Ui_Data *pd = data; Eina_List *l; - Data *msg = msgdata; + int i = 0; + + msg = msgdata; + pd = data; EINA_LIST_FREE(pd->sensors, s) - elm_genlist_item_append(pd->combobox, pd->itc, s, + elm_genlist_item_append(pd->genlist, pd->itc, s, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL); - if (msg->thermal_valid) - elm_progressbar_value_set(pd->thermal_pb, msg->thermal_temp / 100); - - l = eina_list_nth_list(pd->batteries, 0); - if (l) + if (msg->thermal_valid && pd->sensor) { - if (msg->power.have_ac) - elm_object_text_set(pd->power_fr, _("Power (AC)")); - else - elm_object_text_set(pd->power_fr, _("Power")); + elm_progressbar_value_set(pd->thermal_pb, msg->thermal_temp / 100); + elm_object_tooltip_text_set(pd->thermal_pb, pd->sensor->name); } - for (int i = 0; l && msg->power.battery_count; i++) + + l = eina_list_nth_list(pd->batteries, 0); + while (l && msg->power.battery_count) { if (msg->power.batteries[i]->present) { Bat *bat = eina_list_data_get(l); + elm_object_tooltip_text_set(bat->pb, + msg->power.batteries[i]->name); double perc = (double) msg->power.batteries[i]->percent / 100; elm_progressbar_value_set(bat->pb, perc); } l = eina_list_next(l); + i++; } system_power_state_free(&msg->power); + + eina_lock_release(&_lock); } static void @@ -151,22 +155,7 @@ _item_del(void *data, Evas_Object *obj) } static void -_combo_expanded_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info) -{ - Elm_Object_Item *it; - Ui_Data *pd = data; - - if (pd->selected_it) - it = pd->selected_it; - else - it = elm_genlist_selected_item_get(obj); - - if (it) - elm_genlist_item_selected_set(it, 1); -} - -static void -_combo_item_pressed_cb(void *data, Evas_Object *obj, void *event_info) +_genlist_item_pressed_cb(void *data, Evas_Object *obj, void *event_info) { Ui_Data *pd; Elm_Object_Item *it; @@ -174,13 +163,11 @@ _combo_item_pressed_cb(void *data, Evas_Object *obj, void *event_info) char buf[64]; pd = data; - it = pd->selected_it = event_info; + it = event_info; pd->sensor = s = elm_object_item_data_get(it); _name_set(buf, sizeof(buf), s); elm_object_text_set(obj, buf); - - elm_combobox_hover_end(obj); } static Evas_Object * @@ -219,6 +206,8 @@ _win_del_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, Ui_Data *pd = data; Ui *ui = pd->ui; + eina_lock_take(&_lock); + ecore_thread_cancel(ui->sensors.thread); ecore_thread_wait(ui->sensors.thread, 0.5); ui->sensors.thread = NULL; @@ -231,6 +220,9 @@ _win_del_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, elm_genlist_item_class_free(pd->itc); free(pd); + + eina_lock_release(&_lock); + eina_lock_free(&_lock); } static void @@ -245,7 +237,7 @@ void ui_win_sensors_add(Ui *ui) { Evas_Object *win, *content, *bx, *tbl, *fr; - Evas_Object *combo, *rec, *lb, *ic, *pb; + Evas_Object *genlist, *pb; Elm_Genlist_Item_Class *itc; power_t power; Evas_Coord x = 0, y = 0; @@ -260,6 +252,8 @@ ui_win_sensors_add(Ui *ui) if (!pd) return; pd->ui = ui; + eina_lock_new(&_lock); + ui->sensors.win = win = elm_win_util_standard_add("evisum", _("Sensors")); elm_win_autodel_set(win, EINA_TRUE); evas_object_size_hint_weight_set(win, EXPAND, EXPAND); @@ -274,24 +268,16 @@ ui_win_sensors_add(Ui *ui) evas_object_size_hint_weight_set(content, EXPAND, EXPAND); evas_object_size_hint_align_set(content, FILL, FILL); evas_object_show(content); - elm_object_content_set(win, content); + + fr = elm_frame_add(win); + evas_object_size_hint_weight_set(fr, EXPAND, EXPAND); + evas_object_size_hint_align_set(fr, FILL, FILL); + elm_object_style_set(fr, "pad_small"); + evas_object_show(fr); + elm_object_content_set(fr, content); + elm_object_content_set(win, fr); system_power_state_get(&power); - if (power.battery_count) - { - pd->power_fr = fr = elm_frame_add(win); - evas_object_size_hint_weight_set(fr, EXPAND, EXPAND); - evas_object_size_hint_align_set(fr, FILL, FILL); - elm_object_text_set(fr, _("Power")); - evas_object_show(fr); - - bx = elm_box_add(win); - evas_object_size_hint_weight_set(bx, EXPAND, EXPAND); - evas_object_size_hint_align_set(bx, FILL, FILL); - evas_object_show(bx); - elm_object_content_set(fr, bx); - elm_box_pack_end(content, fr); - } for (int i = 0; i < power.battery_count; i++) { @@ -301,28 +287,9 @@ ui_win_sensors_add(Ui *ui) if (!bat) return; tbl = elm_table_add(win); - evas_object_size_hint_weight_set(tbl, EXPAND, 0.5); + evas_object_size_hint_weight_set(tbl, EXPAND, 0); evas_object_size_hint_align_set(tbl, FILL, FILL); evas_object_show(tbl); - elm_box_pack_end(bx, tbl); - - rec = evas_object_rectangle_add(evas_object_evas_get(win)); - evas_object_size_hint_min_set(rec, 1, ELM_SCALE_SIZE(48)); - elm_table_pack(tbl, rec, 0, 0, 1, 1); - - ic = elm_icon_add(win); - elm_icon_standard_set(ic, evisum_icon_path_get("battery")); - evas_object_size_hint_min_set(ic, ELM_SCALE_SIZE(32), ELM_SCALE_SIZE(32)); - evas_object_show(ic); - elm_table_pack(tbl, ic, 0, 0, 1, 1); - elm_object_content_set(fr, bx); - elm_box_pack_end(content, fr); - - lb = elm_label_add(win); - elm_object_text_set(lb, eina_slstr_printf("<small>%s</>", power.batteries[i]->name)); - evas_object_size_hint_weight_set(lb, EXPAND, 0); - evas_object_size_hint_align_set(lb, 0.5, 0.5); - evas_object_show(lb); pb = elm_progressbar_add(win); evas_object_size_hint_weight_set(pb, EXPAND, EXPAND); @@ -330,62 +297,38 @@ ui_win_sensors_add(Ui *ui) evas_object_show(pb); bat->pb = pb; - elm_table_pack(tbl, pb, 1, 0, 1, 1); - elm_table_pack(tbl, lb, 1, 0, 1, 1); + elm_table_pack(tbl, pb, 0, 0, 1, 1); - elm_box_pack_end(bx, tbl); + elm_box_pack_end(content, tbl); pd->batteries = eina_list_append(pd->batteries, bat); } system_power_state_free(&power); - fr = elm_frame_add(win); - evas_object_size_hint_weight_set(fr, EXPAND, EXPAND); - evas_object_size_hint_align_set(fr, FILL, FILL); - elm_object_text_set(fr, _("Thermal")); - evas_object_show(fr); - bx = elm_box_add(win); evas_object_size_hint_weight_set(bx, EXPAND, EXPAND); evas_object_size_hint_align_set(bx, FILL, FILL); evas_object_show(bx); - pd->combobox = combo = elm_combobox_add(win); - evas_object_size_hint_weight_set(combo, EXPAND, 0); - evas_object_size_hint_align_set(combo, FILL, FILL); - elm_object_text_set(combo, _("Select...")); - elm_genlist_multi_select_set(combo, 0); - evas_object_smart_callback_add(combo, "item,pressed", _combo_item_pressed_cb, pd); - evas_object_smart_callback_add(combo, "expanded", _combo_expanded_cb, pd); - evas_object_show(combo); - elm_box_pack_end(bx, combo); - - tbl = elm_table_add(win); - evas_object_size_hint_weight_set(tbl, EXPAND, EXPAND); - evas_object_size_hint_align_set(tbl, FILL, FILL); - elm_table_align_set(tbl, 0, 0.5); - evas_object_show(tbl); - elm_box_pack_end(bx, tbl); - - rec = evas_object_rectangle_add(evas_object_evas_get(win)); - evas_object_size_hint_min_set(rec, 1, ELM_SCALE_SIZE(48)); - elm_table_pack(tbl, rec, 0, 0, 1, 1); - - ic = elm_icon_add(win); - elm_icon_standard_set(ic, evisum_icon_path_get("sensor")); - evas_object_size_hint_min_set(ic, ELM_SCALE_SIZE(32), ELM_SCALE_SIZE(32)); - evas_object_show(ic); - elm_table_pack(tbl, ic, 0, 0, 1, 1); - elm_object_content_set(fr, bx); - elm_box_pack_end(content, fr); + elm_box_pack_end(content, bx); pd->thermal_pb = pb = elm_progressbar_add(win); - evas_object_size_hint_weight_set(pb, EXPAND, EXPAND); + evas_object_size_hint_weight_set(pb, EXPAND, 0); evas_object_size_hint_align_set(pb, FILL, FILL); elm_progressbar_unit_format_set(pb, "%1.1f°C"); evas_object_show(pb); - elm_table_pack(tbl, pb, 1, 0, 1, 1); + elm_box_pack_end(bx, pb); + + pd->genlist = genlist = elm_genlist_add(win); + evas_object_size_hint_weight_set(genlist, EXPAND, EXPAND); + evas_object_size_hint_align_set(genlist, FILL, FILL); + elm_object_text_set(genlist, _("Select...")); + elm_genlist_multi_select_set(genlist, 0); + evas_object_smart_callback_add(genlist, "selected", _genlist_item_pressed_cb, pd); + elm_object_focus_allow_set(genlist, 0); + evas_object_show(genlist); + elm_box_pack_end(bx, genlist); pd->itc = itc = elm_genlist_item_class_new(); itc->item_style = "full"; --