netstar pushed a commit to branch master. http://git.enlightenment.org/apps/evisum.git/commit/?id=3f8e2c8025011a92f43bc8283293318b65a29964
commit 3f8e2c8025011a92f43bc8283293318b65a29964 Author: Alastair Poole <nets...@gmail.com> Date: Thu Apr 1 11:10:28 2021 +0100 RFC: statusbar things.... --- src/bin/main.c | 42 +++++++++++++++++++++++- src/bin/ui/evisum_ui.h | 11 +++++++ src/bin/ui/ui_process_list.c | 76 ++++++++++++++++++++++++++++++++++++-------- 3 files changed, 115 insertions(+), 14 deletions(-) diff --git a/src/bin/main.c b/src/bin/main.c index 0c46f28..2df45ca 100644 --- a/src/bin/main.c +++ b/src/bin/main.c @@ -35,12 +35,32 @@ static void _background_poller_cb(void *data, Ecore_Thread *thread) { meminfo_t memory; + power_t power; + int32_t poll_count = 0; + Battery *bat; Evisum_Ui *ui = data; system_memory_usage_get(&memory); ui->mem_total = memory.total; ui->mem_used = memory.used; + system_power_state_get(&power); + if (power.battery_count) + { + ui->have_power = power.have_ac; + for (int i = 0; i < power.battery_count; i++) + { + if (!power.batteries[i]->present) continue; + bat = calloc(1, sizeof(Battery)); + bat->index = i; + snprintf(bat->model, sizeof(bat->model), "%s", power.batteries[i]->model); + snprintf(bat->vendor, sizeof(bat->vendor), "%s", power.batteries[i]->vendor); + bat->usage = power.batteries[i]->percent; + ui->batteries = eina_list_append(ui->batteries, bat); + } + } + system_power_state_free(&power); + while (!ecore_thread_check(thread)) { int ncpu; @@ -53,14 +73,34 @@ _background_poller_cb(void *data, Ecore_Thread *thread) } free(cores); - memset(&memory, 0, sizeof(meminfo_t)); system_memory_usage_get(&memory); ui->mem_used = memory.used; if (file_system_in_use("ZFS")) ui->mem_used += memory.zfs_arc_used; ui->cpu_usage = percent / system_cpu_online_count_get(); + + if ((!(poll_count % 4)) && (ui->batteries)) + { + Eina_List *l; + system_power_state_get(&power); + ui->have_power = power.have_ac; + for (int i = 0; i < power.battery_count; i++) + { + if (!power.batteries[i]->present) continue; + l = eina_list_nth_list(ui->batteries, i); + if (!l) continue; + bat = eina_list_data_get(l); + bat->usage = power.batteries[i]->percent; + } + system_power_state_free(&power); + } + + poll_count++; } + + EINA_LIST_FREE(ui->batteries, bat) + free(bat); } int diff --git a/src/bin/ui/evisum_ui.h b/src/bin/ui/evisum_ui.h index f763725..332ad16 100644 --- a/src/bin/ui/evisum_ui.h +++ b/src/bin/ui/evisum_ui.h @@ -27,6 +27,8 @@ typedef struct _Evisum_Ui double cpu_usage; uint64_t mem_total; uint64_t mem_used; + Eina_List *batteries; + Eina_Bool have_power; Eina_Bool kthreads_has_rss; struct @@ -102,6 +104,15 @@ typedef struct _Evisum_Ui } network; } Evisum_Ui; +typedef struct _Battery +{ + int index; + double usage; + char model[256]; + char vendor[256]; + Evas_Object *pb; +} Battery; + Evisum_Ui * evisum_ui_init(void); diff --git a/src/bin/ui/ui_process_list.c b/src/bin/ui/ui_process_list.c index cd2d3b8..657019b 100644 --- a/src/bin/ui/ui_process_list.c +++ b/src/bin/ui/ui_process_list.c @@ -85,6 +85,7 @@ typedef struct struct { Evas_Object *fr; + Evas_Object *hbx; Evas_Object *pb_cpu; Evas_Object *pb_mem; Evas_Object *lb; @@ -910,6 +911,8 @@ _summary_update(Win_Data *wd) { Evisum_Ui *ui; Eina_Strbuf *buf; + Battery *bat; + Eina_List *l; buf = eina_strbuf_new(); @@ -943,6 +946,8 @@ _summary_update(Win_Data *wd) eina_strbuf_append_printf(buf, "%s / %s ", evisum_size_format(ui->mem_used), evisum_size_format(ui->mem_total)); elm_object_part_text_set(wd->summary.pb_mem, "elm.text.status", eina_strbuf_string_get(buf)); + EINA_LIST_FOREACH(ui->batteries, l, bat) + elm_progressbar_value_set(bat->pb, bat->usage / 100.0); eina_strbuf_free(buf); } @@ -966,6 +971,45 @@ _summary_total(Win_Data *wd, Proc_Info *proc) wd->summary.dsleep++; } +static void +_first_run_tasks(Win_Data *wd) +{ + Evisum_Ui *ui = wd->ui; + Battery *bat; + Eina_List *l; + Evas_Object *hbx, *ic, *pb, *bx; + + hbx = wd->summary.hbx; + + EINA_LIST_FOREACH(ui->batteries, l, bat) + { + ic = elm_icon_add(wd->win); + elm_icon_standard_set(ic, evisum_icon_path_get("sensor")); + evas_object_size_hint_min_set(ic, ELM_SCALE_SIZE(16), ELM_SCALE_SIZE(16)); + evas_object_size_hint_weight_set(ic, 0, EXPAND); + elm_box_pack_end(hbx, ic); + evas_object_show(ic); + + bat->pb = pb = elm_progressbar_add(wd->win); + elm_object_tooltip_text_set(pb, eina_slstr_printf("%s (%s)", bat->model, bat->vendor)); + elm_progressbar_span_size_set(pb, 140); + elm_progressbar_value_set(pb, bat->usage / 100.0); + elm_box_pack_end(hbx, pb); + evas_object_show(pb); + } + + bx = elm_box_add(wd->win); + evas_object_size_hint_weight_set(bx, EXPAND, EXPAND); + evas_object_size_hint_align_set(bx, FILL, FILL); + elm_box_pack_end(hbx, bx); + evas_object_show(bx); + elm_box_pack_end(hbx, wd->summary.lb); + + wd->first_run = 0; + + ecore_timer_add(2.0, _bring_in, wd); +} + static Eina_List * _process_list_sort(Eina_List *list, Win_Data *wd) { @@ -1189,8 +1233,7 @@ _process_list_feedback_cb(void *data, Ecore_Thread *thread EINA_UNUSED, #endif if (wd->first_run) { - wd->first_run = 0; - ecore_timer_add(2.0, _bring_in, wd); + _first_run_tasks(wd); } wd->poll_count++; @@ -1603,8 +1646,8 @@ static Evas_Object * _content_add(Win_Data *wd, Evas_Object *parent) { Evas_Object *tb, *btn, *glist; - Evas_Object *fr, *hbx, *bx, *pb, *lb; - Evisum_Ui *ui = wd->ui; + Evas_Object *fr, *hbx, *ic, *pb, *lb; + Evisum_Ui *ui = wd->ui tb = elm_table_add(parent); evas_object_size_hint_weight_set(tb, EXPAND, EXPAND); @@ -1832,33 +1875,40 @@ _content_add(Win_Data *wd, Evas_Object *parent) evas_object_size_hint_weight_set(fr, EXPAND, 0); evas_object_size_hint_align_set(fr, FILL, FILL); - hbx = elm_box_add(parent); + wd->summary.hbx = hbx = elm_box_add(parent); elm_box_horizontal_set(hbx, 1); evas_object_size_hint_weight_set(hbx, 1.0, 0); evas_object_size_hint_align_set(hbx, FILL, FILL); evas_object_show(hbx); + ic = elm_icon_add(parent); + elm_icon_standard_set(ic, evisum_icon_path_get("cpu")); + evas_object_size_hint_min_set(ic, ELM_SCALE_SIZE(16), ELM_SCALE_SIZE(16)); + evas_object_size_hint_weight_set(ic, 0, EXPAND); + elm_box_pack_end(hbx, ic); + evas_object_show(ic); + wd->summary.pb_cpu = pb = elm_progressbar_add(parent); elm_progressbar_unit_format_set(pb, "%1.2f %%"); elm_progressbar_span_size_set(pb, 140); - evas_object_show(pb); elm_box_pack_end(hbx, pb); + evas_object_show(pb); + + ic = elm_icon_add(parent); + elm_icon_standard_set(ic, evisum_icon_path_get("memory")); + evas_object_size_hint_min_set(ic, ELM_SCALE_SIZE(16), ELM_SCALE_SIZE(16)); + evas_object_size_hint_weight_set(ic, 0, EXPAND); + elm_box_pack_end(hbx, ic); + evas_object_show(ic); wd->summary.pb_mem = pb= elm_progressbar_add(parent); elm_progressbar_span_size_set(pb, 140); evas_object_show(pb); elm_box_pack_end(hbx, pb); - bx = elm_box_add(parent); - evas_object_size_hint_weight_set(bx, EXPAND, EXPAND); - evas_object_size_hint_align_set(bx, FILL, FILL); - evas_object_show(bx); - elm_box_pack_end(hbx, bx); - wd->summary.lb = lb = elm_label_add(parent); evas_object_size_hint_weight_set(lb, EXPAND, 0); evas_object_size_hint_align_set(lb, 1.0, FILL); - elm_box_pack_end(hbx, lb); evas_object_show(lb); elm_object_content_set(fr, hbx); --