netstar pushed a commit to branch master. http://git.enlightenment.org/apps/evisum.git/commit/?id=35323ea227e5988d142b443d2362c031f8151dc4
commit 35323ea227e5988d142b443d2362c031f8151dc4 Author: Alastair Poole <nets...@gmail.com> Date: Sun Jun 28 20:02:07 2020 +0100 evisum: Traditional Make the UI simpler. Give everything a window. It's not clever to only allow one action at a time. I think it seemed cool because every other environment is simplifying the interface. I don't really agree with this. Also some "tabs" don't currently justify having the whole window. hashtag **** it! --- src/bin/system/machine.h | 3 + src/bin/ui/ui.c | 248 +++++++++++------------------------------------ src/bin/ui/ui.h | 27 ++---- src/bin/ui/ui_cpu.c | 172 +++++++++++++++++++------------- src/bin/ui/ui_cpu.h | 2 +- src/bin/ui/ui_disk.c | 127 +++++++++++++----------- src/bin/ui/ui_disk.h | 5 +- src/bin/ui/ui_memory.c | 221 +++++++++++++++++++++++------------------ src/bin/ui/ui_memory.h | 4 +- src/bin/ui/ui_misc.c | 154 +++++++++++++++++++++-------- src/bin/ui/ui_misc.h | 5 +- src/bin/ui/ui_util.c | 16 +++ src/bin/ui/ui_util.h | 9 +- 13 files changed, 501 insertions(+), 492 deletions(-) diff --git a/src/bin/system/machine.h b/src/bin/system/machine.h index ff04a62..862e8d4 100644 --- a/src/bin/system/machine.h +++ b/src/bin/system/machine.h @@ -90,6 +90,9 @@ system_cpu_usage_delayed_get(int *ncpu, int usecs); void system_memory_usage_get(meminfo_t *memory); +sensor_t ** +system_sensors_thermal_get(int *count); + void system_power_state_get(power_t *power); diff --git a/src/bin/ui/ui.c b/src/bin/ui/ui.c index 8341dc5..422da8c 100644 --- a/src/bin/ui/ui.c +++ b/src/bin/ui/ui.c @@ -715,8 +715,8 @@ _btn_state_clicked_cb(void *data, Evas_Object *obj EINA_UNUSED, } static void -_btn_quit_clicked_cb(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, - void *event_info EINA_UNUSED) +_quit_cb(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, + void *event_info EINA_UNUSED) { exit(0); } @@ -903,7 +903,7 @@ _item_pid_clicked_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info) } static void -_ui_tab_system_add(Ui *ui) +_ui_content_system_add(Ui *ui) { Evas_Object *parent, *box, *hbox, *frame, *table; Evas_Object *pb, *button, *plist; @@ -911,7 +911,7 @@ _ui_tab_system_add(Ui *ui) parent = ui->content; - ui->system_activity = ui->current_view = box = elm_box_add(parent); + ui->system_activity = box = elm_box_add(parent); evas_object_size_hint_weight_set(box, EXPAND, EXPAND); evas_object_size_hint_align_set(box, FILL, FILL); evas_object_show(box); @@ -1028,6 +1028,7 @@ _ui_tab_system_add(Ui *ui) evas_object_size_hint_weight_set(plist, EXPAND, EXPAND); evas_object_size_hint_align_set(plist, FILL, FILL); evas_object_show(plist); + elm_win_resize_object_add(ui->win, plist); elm_box_pack_end(box, table); elm_box_pack_end(box, plist); @@ -1055,111 +1056,46 @@ _ui_tab_system_add(Ui *ui) } static void -_tabs_hide(Ui *ui) +_about_clicked_cb(void *data, Evas_Object *obj EINA_UNUSED, + void *event_info EINA_UNUSED) { - ui->mem_visible = EINA_FALSE; - ui->misc_visible = EINA_FALSE; - ui->disk_visible = EINA_FALSE; - ui->cpu_visible = EINA_FALSE; - - evas_object_hide(ui->entry_search_border); - evas_object_hide(ui->system_activity); - evas_object_hide(ui->cpu_view); - evas_object_hide(ui->mem_view); - evas_object_hide(ui->disk_view); - evas_object_hide(ui->misc_view); -} - -static void -_transit_del_cb(void *data, Elm_Transit *transit) -{ - Ui *ui = data; - ui->transit = transit = NULL; } static void -_tab_state_changed(Ui *ui, Evas_Object *btn_active, Evas_Object *view) -{ - Elm_Transit *transit; - - if (ui->transit) return; - - elm_object_disabled_set(ui->btn_general, EINA_FALSE); - elm_object_disabled_set(ui->btn_cpu, EINA_FALSE); - elm_object_disabled_set(ui->btn_mem, EINA_FALSE); - elm_object_disabled_set(ui->btn_storage, EINA_FALSE); - elm_object_disabled_set(ui->btn_misc, EINA_FALSE); - elm_object_disabled_set(btn_active, EINA_TRUE); - - _tabs_hide(ui); - - evas_object_show(view); - - ui->transit = transit = elm_transit_add(); - elm_transit_object_add(transit, ui->current_view); - elm_transit_object_add(transit, view); - elm_transit_duration_set(transit, 0.5); - elm_transit_effect_blend_add(transit); - elm_transit_del_cb_set(transit, _transit_del_cb, ui); - elm_transit_go(transit); - - ui->current_view = view; -} - -static void -_tab_memory_activity_clicked_cb(void *data, Evas_Object *obj EINA_UNUSED, +_menu_memory_activity_clicked_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) { Ui *ui = data; - _tab_state_changed(ui, obj, ui->mem_view); - - ui->mem_visible = EINA_TRUE; + ui_win_memory_add(ui); } static void -_tab_system_activity_clicked_cb(void *data, Evas_Object *obj EINA_UNUSED, - void *event_info EINA_UNUSED) -{ - Ui *ui = data; - - _tab_state_changed(ui, obj, ui->system_activity); - - evas_object_show(ui->entry_search_border); -} - -static void -_tab_disk_activity_clicked_cb(void *data, Evas_Object *obj EINA_UNUSED, +_menu_disk_activity_clicked_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) { Ui *ui = data; - _tab_state_changed(ui, obj, ui->disk_view); - - ui->disk_visible = EINA_TRUE; + ui_win_disk_add(ui); } static void -_tab_misc_clicked_cb(void *data, Evas_Object *obj EINA_UNUSED, +_menu_misc_activity_clicked_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) { Ui *ui = data; - _tab_state_changed(ui, obj, ui->misc_view); - - ui->misc_visible = EINA_TRUE; + ui_win_misc_add(ui); } static void -_tab_cpu_activity_clicked_cb(void *data, Evas_Object *obj EINA_UNUSED, +_menu_cpu_activity_clicked_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) { Ui *ui = data; - _tab_state_changed(ui, obj, ui->cpu_view); - - ui->cpu_visible = EINA_TRUE; + ui_win_cpu_add(ui); } static void @@ -1199,9 +1135,9 @@ _evisum_search_keypress_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj, } static Evas_Object * -_ui_tabs_add(Evas_Object *parent, Ui *ui) +_ui_content_add(Evas_Object *parent, Ui *ui) { - Evas_Object *table, *box, *entry, *hbox, *frame, *btn; + Evas_Object *table, *box, *entry, *hbox, *frame; Evas_Object *border; ui->content = table = elm_table_add(parent); @@ -1213,89 +1149,9 @@ _ui_tabs_add(Evas_Object *parent, Ui *ui) frame = elm_frame_add(parent); evas_object_size_hint_weight_set(frame, EXPAND, 0); evas_object_size_hint_align_set(frame, FILL, FILL); - elm_object_text_set(frame, _("Options")); - elm_object_style_set(frame, "pad_medium"); + elm_object_style_set(frame, "pad_small"); evas_object_show(frame); - hbox = elm_box_add(parent); - evas_object_size_hint_weight_set(hbox, EXPAND, EXPAND); - evas_object_size_hint_align_set(hbox, FILL, FILL); - elm_box_horizontal_set(hbox, EINA_TRUE); - evas_object_show(hbox); - - border = elm_frame_add(parent); - evas_object_size_hint_weight_set(border, EXPAND, EXPAND); - evas_object_size_hint_align_set(border, FILL, FILL); - elm_object_style_set(border, "pad_small"); - elm_box_pack_end(hbox, border); - evas_object_show(border); - - border = elm_frame_add(parent); - evas_object_size_hint_weight_set(border, 0, EXPAND); - evas_object_size_hint_align_set(border, FILL, FILL); - elm_object_style_set(border, "pad_small"); - evas_object_show(border); - - btn = evisum_ui_tab_add(parent, &ui->btn_general, _("General"), - _tab_system_activity_clicked_cb, ui); - elm_object_disabled_set(ui->btn_general, EINA_TRUE); - elm_object_content_set(border, btn); - elm_box_pack_end(hbox, border); - - border = elm_frame_add(parent); - evas_object_size_hint_weight_set(border, 0, EXPAND); - evas_object_size_hint_align_set(border, FILL, FILL); - elm_object_style_set(border, "pad_small"); - evas_object_show(border); - - btn = evisum_ui_tab_add(parent, &ui->btn_cpu, _("CPU"), - _tab_cpu_activity_clicked_cb, ui); - elm_object_content_set(border, btn); - elm_box_pack_end(hbox, border); - - border = elm_frame_add(parent); - evas_object_size_hint_weight_set(border, 0, EXPAND); - evas_object_size_hint_align_set(border, FILL, FILL); - elm_object_style_set(border, "pad_small"); - evas_object_show(border); - - btn = evisum_ui_tab_add(parent, &ui->btn_mem, _("Memory"), - _tab_memory_activity_clicked_cb, ui); - elm_object_content_set(border, btn); - elm_box_pack_end(hbox, border); - - border = elm_frame_add(parent); - evas_object_size_hint_weight_set(border, 0, EXPAND); - evas_object_size_hint_align_set(border, FILL, FILL); - elm_object_style_set(border, "pad_small"); - evas_object_show(border); - - btn = evisum_ui_tab_add(parent, &ui->btn_storage, _("Storage"), - _tab_disk_activity_clicked_cb, ui); - elm_object_content_set(border, btn); - elm_box_pack_end(hbox, border); - - border = elm_frame_add(parent); - evas_object_size_hint_weight_set(border, 0, EXPAND); - evas_object_size_hint_align_set(border, FILL, FILL); - elm_object_style_set(border, "pad_small"); - evas_object_show(border); - - btn = evisum_ui_tab_add(parent, &ui->btn_misc, _("Misc"), - _tab_misc_clicked_cb, ui); - elm_object_content_set(border, btn); - elm_box_pack_end(hbox, border); - - border = elm_frame_add(parent); - evas_object_size_hint_weight_set(border, EXPAND, EXPAND); - evas_object_size_hint_align_set(border, FILL, FILL); - elm_object_style_set(border, "pad_small"); - elm_box_pack_end(hbox, border); - evas_object_show(border); - - elm_object_content_set(frame, hbox); - elm_table_pack(ui->content, frame, 0, 0, 1, 1); - hbox = elm_box_add(parent); evas_object_size_hint_weight_set(hbox, EXPAND, 0); evas_object_size_hint_align_set(hbox, FILL, FILL); @@ -1308,13 +1164,7 @@ _ui_tabs_add(Evas_Object *parent, Ui *ui) elm_box_horizontal_set(box, EINA_TRUE); evas_object_show(box); - frame = elm_frame_add(parent); - evas_object_size_hint_weight_set(frame, EXPAND, EXPAND); - evas_object_size_hint_align_set(frame, FILL, FILL); - elm_object_style_set(frame, "pad_small"); - evas_object_show(frame); - - ui->entry_search_border = border = elm_frame_add(parent); + border = elm_frame_add(parent); evas_object_size_hint_weight_set(border, EXPAND, EXPAND); evas_object_size_hint_align_set(border, FILL, FILL); elm_object_style_set(border, "pad_small"); @@ -1331,20 +1181,12 @@ _ui_tabs_add(Evas_Object *parent, Ui *ui) elm_object_content_set(border, entry); elm_box_pack_end(box, border); - border = elm_frame_add(parent); - evas_object_size_hint_align_set(border, FILL, FILL); - elm_object_style_set(border, "pad_small"); - evas_object_show(border); - - btn = evisum_ui_tab_add(parent, NULL, _("Close"), _btn_quit_clicked_cb, - ui); - elm_object_content_set(border, btn); - elm_box_pack_end(box, border); - elm_object_content_set(frame, box); elm_box_pack_end(hbox, frame); elm_table_pack(ui->content, hbox, 0, 2, 1, 1); + _ui_content_system_add(ui); + return table; } @@ -1370,7 +1212,11 @@ _evisum_key_down_cb(void *data, Evas *e, Evas_Object *obj, void *event_info) } control = evas_key_modifier_is_set(ev->modifiers, "Control"); - if (!control) return; + if (!control) + { + elm_object_focus_set(ui->entry_search, EINA_TRUE); + return; + } if (ev->keyname[0] == 'e' || ev->keyname[0] == 'E') ui->show_self = !ui->show_self; @@ -1483,10 +1329,6 @@ _system_info_all_poll_feedback_cb(void *data, Ecore_Thread *thread, void *msg) if (ecore_thread_check(thread)) goto out; - ui_tab_memory_update(ui, info); - ui_tab_disk_update(ui); - ui_tab_misc_update(ui, info); - for (int i = 0; i < info->cpu_count; i++) { cpu_usage += info->cores[i]->percent; @@ -1506,6 +1348,8 @@ _system_info_all_poll_feedback_cb(void *data, Ecore_Thread *thread, void *msg) elm_progressbar_unit_format_set(pb, eina_slstr_printf("%s / %s", evisum_size_format(info->memory.used), evisum_size_format(info->memory.total))); + + ui->network_usage = info->network_usage; out: system_info_all_free(info); } @@ -1532,6 +1376,29 @@ _ui_launch(Ui *ui) _evisum_search_keypress_cb, ui); } +static void +_menu_setup(Ui *ui) +{ + Evas_Object *menu; + Elm_Object_Item *menu_it; + + menu = elm_win_main_menu_get(ui->win); + menu_it = elm_menu_item_add(menu, NULL, NULL, _("File"), NULL, NULL); + elm_menu_item_add(menu, menu_it, NULL, _("Quit"), _quit_cb, NULL); + menu_it = elm_menu_item_add(menu, NULL, NULL, _("View"), NULL, NULL); + elm_menu_item_add(menu, menu_it, NULL, _("CPU"), _menu_cpu_activity_clicked_cb, ui); + elm_menu_item_add(menu, menu_it, NULL, _("Memory"), + _menu_memory_activity_clicked_cb, ui); + elm_menu_item_add(menu, menu_it, NULL, _("Storage"), + _menu_disk_activity_clicked_cb, ui); + elm_menu_item_add(menu, menu_it, NULL, _("Misc"), + _menu_misc_activity_clicked_cb, ui); + menu_it = elm_menu_item_add(menu, NULL, NULL, _("Help"), NULL, NULL); + elm_menu_item_add(menu, menu_it, NULL, _("About"), _about_clicked_cb, ui); + + evas_object_show(menu); +} + static Ui * _ui_init(Evas_Object *parent) { @@ -1544,9 +1411,6 @@ _ui_init(Evas_Object *parent) ui->sort_type = SORT_BY_PID; ui->selected_pid = -1; ui->program_pid = getpid(); - ui->disk_visible = EINA_TRUE; - ui->mem_visible = ui->misc_visible = EINA_TRUE; - ui->cpu_visible = EINA_FALSE; ui->cpu_times = NULL; ui->cpu_list = NULL; @@ -1558,13 +1422,9 @@ _ui_init(Evas_Object *parent) _config_load(ui); - _ui_tabs_add(parent, ui); - _ui_tab_system_add(ui); + _ui_content_add(parent, ui); - ui_tab_cpu_add(ui); - ui_tab_memory_add(ui); - ui_tab_disk_add(ui); - ui_tab_misc_add(ui); + _menu_setup(ui); ui->cache = evisum_ui_item_cache_new(ui->genlist_procs, _item_create, 50); @@ -1581,6 +1441,8 @@ evisum_ui_add(Evas_Object *parent) _ui_launch(ui); + elm_object_focus_set(ui->entry_search, EINA_TRUE); + return ui; } diff --git a/src/bin/ui/ui.h b/src/bin/ui/ui.h index 026506d..0822536 100644 --- a/src/bin/ui/ui.h +++ b/src/bin/ui/ui.h @@ -3,6 +3,7 @@ #include <Elementary.h> #include "gettext.h" +#include "system/machine.h" #include "system/process.h" #include "../evisum_config.h" #include "ui/ui_util.h" @@ -35,25 +36,11 @@ typedef struct Ui Evas_Object *menu; Evas_Object *scroller; Evas_Object *content; - Evas_Object *btn_general; - Evas_Object *btn_cpu; - Evas_Object *btn_mem; - Evas_Object *btn_storage; - Evas_Object *btn_misc; - Evas_Object *disk_view; Evas_Object *disk_activity; - Evas_Object *cpu_view; - Evas_Object *cpu_activity; - Evas_Object *mem_view; - Evas_Object *mem_activity; - Evas_Object *misc_view; Evas_Object *misc_activity; Evas_Object *system_activity; - Elm_Transit *transit; - Evas_Object *current_view; - Eina_Bool cpu_visible; Eina_Bool misc_visible; Eina_Bool disk_visible; @@ -62,12 +49,6 @@ typedef struct Ui Evas_Object *progress_cpu; Evas_Object *progress_mem; - Evas_Object *progress_mem_used; - Evas_Object *progress_mem_cached; - Evas_Object *progress_mem_buffered; - Evas_Object *progress_mem_shared; - Evas_Object *progress_mem_swap; - Evas_Object *btn_pid; Evas_Object *btn_uid; Evas_Object *btn_size; @@ -79,13 +60,16 @@ typedef struct Ui Evisum_Ui_Cache *cache; Evas_Object *genlist_procs; Evas_Object *entry_search; - Evas_Object *entry_search_border; Ecore_Thread *thread_system; Ecore_Thread *thread_process; Ecore_Thread *thread_cpu; Ecore_Timer *timer_pid; + Ecore_Timer *timer_memory; + Ecore_Timer *timer_disk; + Ecore_Timer *timer_misc; + pid_t selected_pid; pid_t program_pid; @@ -107,6 +91,7 @@ typedef struct Ui uint64_t incoming_max; uint64_t outgoing_max; + network_t network_usage; } Ui; Ui * diff --git a/src/bin/ui/ui_cpu.c b/src/bin/ui/ui_cpu.c index dcb2cd0..655c643 100644 --- a/src/bin/ui/ui_cpu.c +++ b/src/bin/ui/ui_cpu.c @@ -18,27 +18,29 @@ typedef struct { int pos; double value; double step; -} Animation; +} Animate_Data; typedef struct { - double *value; - Evas_Object *pb; + Ecore_Animator *animator; + Animate_Data *anim_data; + double *value; + Evas_Object *pb; } Progress; static void -loop_reset(Animation *anim) +loop_reset(Animate_Data *ad) { - anim->pos = anim->step = 0; + ad->pos = ad->step = 0; } static Eina_Bool -_bg_fill(Animation *anim) +_bg_fill(Animate_Data *ad) { uint32_t *pixels; Evas_Coord x, y, w, h; - evas_object_geometry_get(anim->bg, NULL, NULL, &w, &h); - pixels = evas_object_image_data_get(anim->obj, EINA_TRUE); + evas_object_geometry_get(ad->bg, NULL, NULL, &w, &h); + pixels = evas_object_image_data_get(ad->obj, EINA_TRUE); if (!pixels) return EINA_FALSE; for (y = 0; y < h; y++) { @@ -47,55 +49,53 @@ _bg_fill(Animation *anim) *(pixels++) = COLOR_BG; } } - anim->redraw = EINA_FALSE; + ad->redraw = EINA_FALSE; return EINA_TRUE; } static Eina_Bool -animator(void *data) +animate(void *data) { uint32_t *pixels; Evas_Object *line, *obj, *bg; Evas_Coord x, y, w, h, fill_y; double value; - Animation *anim = data; + Animate_Data *ad = data; - if (!anim->ui->cpu_visible) return EINA_TRUE; - - bg = anim->bg; line = anim->line; obj = anim->obj; + bg = ad->bg; line = ad->line; obj = ad->obj; evas_object_geometry_get(bg, &x, &y, &w, &h); evas_object_image_size_set(obj, w, h); - evas_object_move(line, x + w - anim->pos, y); + evas_object_move(line, x + w - ad->pos, y); evas_object_resize(line, 1, h); - if (anim->enabled) + if (ad->enabled) evas_object_show(line); else evas_object_hide(line); - if (anim->redraw) + if (ad->redraw) { - _bg_fill(anim); + _bg_fill(ad); return EINA_TRUE; } pixels = evas_object_image_data_get(obj, EINA_TRUE); if (!pixels) return EINA_TRUE; - value = anim->value > 0 ? anim->value : 1.0; + value = ad->value > 0 ? ad->value : 1.0; fill_y = h - (int) ((double)(h / 100.0) * value); - for (y = 0; anim->enabled && y < h; y++) + for (y = 0; ad->enabled && y < h; y++) { for (x = 0; x < w; x++) { - if (x == (w - anim->pos)) + if (x == (w - ad->pos)) { *(pixels) = COLOR_BG; } - if ((x == (w - anim->pos)) && (y >= fill_y)) + if ((x == (w - ad->pos)) && (y >= fill_y)) { if (y % 2) *(pixels) = COLOR_FG; @@ -104,11 +104,11 @@ animator(void *data) } } - anim->step += (double) (w * ecore_animator_frametime_get()) / 60.0; - anim->pos = anim->step; + ad->step += (double) (w * ecore_animator_frametime_get()) / 60.0; + ad->pos = ad->step; - if (anim->pos >= w) - loop_reset(anim); + if (ad->pos >= w) + loop_reset(ad); return EINA_TRUE; } @@ -117,21 +117,21 @@ static void _anim_resize_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) { - Animation *anim = data; + Animate_Data *ad = data; - anim->redraw = EINA_TRUE; - loop_reset(anim); + ad->redraw = EINA_TRUE; + loop_reset(ad); - evas_object_hide(anim->line); + evas_object_hide(ad->line); } static void _anim_move_cb(void *data, Evas_Object *obj EINA_UNUSED, - void *event_info EINA_UNUSED) + void *event_info EINA_UNUSED) { - Animation *anim = data; + Animate_Data *ad = data; - evas_object_hide(anim->line); + evas_object_hide(ad->line); } static void @@ -139,12 +139,12 @@ _btn_clicked_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) { Evas_Object *rect; - Animation *anim = data; + Animate_Data *ad = data; - anim->enabled = !anim->enabled; + ad->enabled = !ad->enabled; - rect = elm_object_part_content_get(anim->btn, "elm.swallow.content"); - if (!anim->enabled) + rect = elm_object_part_content_get(ad->btn, "elm.swallow.content"); + if (!ad->enabled) evas_object_color_set(rect, 0, 0, 0, 0); else evas_object_color_set(rect, 47, 153, 255, 255); @@ -183,38 +183,59 @@ _core_times_cb(void *data, Ecore_Thread *thread) } } +static void +_win_del_cb(void *data, Evas_Object *obj, + void *event_info EINA_UNUSED) +{ + Progress *progress; + Ui *ui = data; + + evas_object_hide(obj); + + ecore_thread_cancel(ui->thread_cpu); + ecore_thread_wait(ui->thread_cpu, 1.0); + + EINA_LIST_FREE(ui->cpu_list, progress) + { + ecore_animator_del(progress->animator); + free(progress->anim_data); + free(progress); + } + + evas_object_del(obj); + ui->cpu_visible = EINA_FALSE; +} + void -ui_tab_cpu_add(Ui *ui) +ui_win_cpu_add(Ui *ui) { - Evas_Object *parent, *box, *hbox, *scroller, *frame; + Evas_Object *win, *box, *hbox, *scroller, *frame; Evas_Object *pb, *tbl, *lbox, *btn, *rect; Evas_Object *bg, *line, *obj; int cpu_count; - parent = ui->content; + if (ui->cpu_visible) return; - ui->cpu_view = box = elm_box_add(parent); - evas_object_size_hint_weight_set(box, EXPAND, EXPAND); - evas_object_size_hint_align_set(box, FILL, FILL); - elm_table_pack(ui->content, ui->cpu_view, 0, 1, 1, 1); - evas_object_hide(box); + ui->cpu_visible = EINA_TRUE; + + win = elm_win_util_standard_add("evisum", _("CPU Usage")); + evas_object_size_hint_weight_set(win, EXPAND, EXPAND); + evas_object_size_hint_align_set(win, FILL, FILL); - ui->cpu_activity = hbox = elm_box_add(box); + hbox = elm_box_add(win); evas_object_size_hint_weight_set(hbox, EXPAND, EXPAND); evas_object_size_hint_align_set(hbox, FILL, FILL); elm_box_horizontal_set(hbox, EINA_TRUE); evas_object_show(hbox); - scroller = elm_scroller_add(parent); + scroller = elm_scroller_add(win); evas_object_size_hint_weight_set(scroller, EXPAND, EXPAND); evas_object_size_hint_align_set(scroller, FILL, FILL); elm_scroller_policy_set(scroller, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_AUTO); evas_object_show(scroller); - elm_object_content_set(scroller, hbox); - elm_box_pack_end(box, scroller); - box = elm_box_add(ui->content); + box = elm_box_add(hbox); evas_object_size_hint_align_set(box, FILL, FILL); evas_object_size_hint_weight_set(box, 0.1, EXPAND); evas_object_show(box); @@ -222,7 +243,7 @@ ui_tab_cpu_add(Ui *ui) cpu_count = system_cpu_online_count_get(); for (int i = 0; i < cpu_count; i++) { - lbox = elm_box_add(ui->content); + lbox = elm_box_add(box); evas_object_size_hint_align_set(lbox, FILL, FILL); evas_object_size_hint_weight_set(lbox, 0.1, EXPAND); evas_object_show(lbox); @@ -279,38 +300,49 @@ ui_tab_cpu_add(Ui *ui) evas_object_image_colorspace_set(obj, EVAS_COLORSPACE_ARGB8888); evas_object_show(obj); - Animation *anim = calloc(1, sizeof(Animation)); - anim->bg = bg; - anim->obj = obj; - anim->line = line; - anim->enabled = EINA_TRUE; - anim->btn = btn; - anim->cpu_id = i; - anim->ui = ui; - anim->redraw = EINA_TRUE; - - evas_object_smart_callback_add(btn, "clicked", _btn_clicked_cb, anim); - evas_object_smart_callback_add(tbl, "resize", _anim_resize_cb, anim); - evas_object_smart_callback_add(tbl, "move", _anim_move_cb, anim); - ecore_animator_add(animator, anim); - elm_table_pack(tbl, bg, 0, 1, 1, 1); elm_table_pack(tbl, obj, 0, 1, 1, 1); elm_table_pack(tbl, line, 0, 1, 1, 1); + elm_box_pack_end(lbox, tbl); elm_object_content_set(frame, lbox); elm_box_pack_end(box, frame); + Animate_Data *ad = calloc(1, sizeof(Animate_Data)); + if (!ad) return; + + ad->bg = bg; + ad->obj = obj; + ad->line = line; + ad->enabled = EINA_TRUE; + ad->btn = btn; + ad->cpu_id = i; + ad->ui = ui; + ad->redraw = EINA_TRUE; + + evas_object_smart_callback_add(btn, "clicked", _btn_clicked_cb, ad); + evas_object_smart_callback_add(tbl, "resize", _anim_resize_cb, ad); + evas_object_smart_callback_add(tbl, "move", _anim_move_cb, ad); + Progress *progress = calloc(1, sizeof(Progress)); - progress->value = calloc(1, sizeof(float *)); - progress->pb = pb; - progress->value = &anim->value; + if (progress) + { + progress->pb = pb; + progress->value = &ad->value; + progress->animator = ecore_animator_add(animate, ad); + progress->anim_data = ad; - ui->cpu_list = eina_list_append(ui->cpu_list, progress); + ui->cpu_list = eina_list_append(ui->cpu_list, progress); + } } ui->thread_cpu = ecore_thread_run(_core_times_cb, NULL, NULL, ui); elm_box_pack_end(hbox, box); + elm_object_content_set(scroller, hbox); + + elm_object_content_set(win, scroller); + evas_object_smart_callback_add(win, "delete,request", _win_del_cb, ui); + evisum_child_window_show(ui->win, win); } diff --git a/src/bin/ui/ui_cpu.h b/src/bin/ui/ui_cpu.h index e69fe7d..df1bb9c 100644 --- a/src/bin/ui/ui_cpu.h +++ b/src/bin/ui/ui_cpu.h @@ -5,6 +5,6 @@ #include "../system/machine.h" void -ui_tab_cpu_add(Ui *ui); +ui_win_cpu_add(Ui *ui); #endif diff --git a/src/bin/ui/ui_disk.c b/src/bin/ui/ui_disk.c index 1f70de3..33d564d 100644 --- a/src/bin/ui/ui_disk.c +++ b/src/bin/ui/ui_disk.c @@ -1,55 +1,6 @@ #include "ui_disk.h" #include "../system/disks.h" -void -ui_tab_disk_add(Ui *ui) -{ - Evas_Object *parent, *box, *hbox, *frame, *scroller; - Evas_Object *table, *rect; - - parent = ui->content; - - ui->disk_view = box = elm_box_add(parent); - evas_object_size_hint_weight_set(box, EXPAND, EXPAND); - evas_object_size_hint_align_set(box, FILL, FILL); - elm_table_pack(ui->content, ui->disk_view, 0, 1, 1, 1); - evas_object_hide(box); - - ui->disk_activity = hbox = elm_box_add(box); - evas_object_size_hint_weight_set(hbox, EXPAND, 0.0); - evas_object_size_hint_align_set(hbox, FILL, 0.5); - evas_object_show(hbox); - - frame = elm_frame_add(box); - evas_object_size_hint_weight_set(frame, EXPAND, EXPAND); - evas_object_size_hint_align_set(frame, FILL, FILL); - elm_object_style_set(frame, "pad_small"); - evas_object_show(frame); - - scroller = elm_scroller_add(parent); - evas_object_size_hint_weight_set(scroller, EXPAND, EXPAND); - evas_object_size_hint_align_set(scroller, FILL, FILL); - elm_scroller_policy_set(scroller, - ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_AUTO); - evas_object_show(scroller); - - table = elm_table_add(parent); - evas_object_size_hint_weight_set(table, EXPAND, EXPAND); - evas_object_size_hint_align_set(table, FILL, FILL); - evas_object_show(table); - - rect = evas_object_rectangle_add(evas_object_rectangle_add(parent)); - evas_object_size_hint_max_set(rect, MISC_MAX_WIDTH, -1); - evas_object_size_hint_min_set(rect, MISC_MIN_WIDTH, 1); - - elm_table_pack(table, rect, 0, 0, 1, 1); - elm_table_pack(table, hbox, 0, 0, 1, 1); - elm_object_content_set(scroller, table); - - elm_object_content_set(frame, scroller); - elm_box_pack_end(box, frame); -} - static char * _file_system_usage_format(File_System *inf) { @@ -168,15 +119,15 @@ _ui_disk_add(Ui *ui, File_System *inf) elm_box_pack_end(ui->disk_activity, frame); } -void -ui_tab_disk_update(Ui *ui) +static Eina_Bool +_disk_update(void *data) { + Ui *ui; Eina_List *disks; char *path; Eina_Bool zfs_mounted = EINA_FALSE; - if (!ui->disk_visible) - return; + ui = data; elm_box_clear(ui->disk_activity); @@ -186,7 +137,6 @@ ui_tab_disk_update(Ui *ui) File_System *fs = file_system_info_get(path); if (fs) { - // Check for ZFS mount. if (fs->type == file_system_id_by_name("ZFS")) zfs_mounted = EINA_TRUE; @@ -196,7 +146,74 @@ ui_tab_disk_update(Ui *ui) free(path); } - // Need to keep track of ZFS mounts (ARC memory usage). ui->zfs_mounted = zfs_mounted; + + return EINA_TRUE; +} + +static void +_win_del_cb(void *data, Evas_Object *obj EINA_UNUSED, + void *event_info EINA_UNUSED) +{ + Ui *ui = data; + + if (ui->timer_disk) + ecore_timer_del(ui->timer_disk); + ui->timer_disk = NULL; + + evas_object_del(obj); +} + +void +ui_win_disk_add(Ui *ui) +{ + Evas_Object *win, *box, *vbox, *scroller; + Evas_Object *table, *rect; + + if (ui->disk_visible) return; + ui->disk_visible = EINA_TRUE; + + win = elm_win_util_standard_add("evisum", _("Storage")); + evas_object_size_hint_weight_set(win, EXPAND, EXPAND); + evas_object_size_hint_align_set(win, FILL, FILL); + + box = elm_box_add(win); + evas_object_size_hint_weight_set(box, EXPAND, EXPAND); + evas_object_size_hint_align_set(box, FILL, FILL); + evas_object_show(box); + + ui->disk_activity = vbox = elm_box_add(win); + evas_object_size_hint_weight_set(vbox, EXPAND, 0.0); + evas_object_size_hint_align_set(vbox, FILL, 0.5); + evas_object_show(vbox); + + scroller = elm_scroller_add(win); + evas_object_size_hint_weight_set(scroller, EXPAND, EXPAND); + evas_object_size_hint_align_set(scroller, FILL, FILL); + elm_scroller_policy_set(scroller, + ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_AUTO); + evas_object_show(scroller); + + table = elm_table_add(win); + evas_object_size_hint_weight_set(table, EXPAND, EXPAND); + evas_object_size_hint_align_set(table, FILL, FILL); + evas_object_show(table); + + rect = evas_object_rectangle_add(evas_object_rectangle_add(win)); + evas_object_size_hint_max_set(rect, MISC_MAX_WIDTH, -1); + evas_object_size_hint_min_set(rect, MISC_MIN_WIDTH, 1); + + elm_table_pack(table, rect, 0, 0, 1, 1); + elm_table_pack(table, vbox, 0, 0, 1, 1); + + elm_object_content_set(scroller, table); + elm_box_pack_end(box, scroller); + elm_object_content_set(win, box); + + evas_object_smart_callback_add(win, "delete,request", _win_del_cb, ui); + evisum_child_window_show(ui->win, win); + _disk_update(ui); + + ui->timer_disk = ecore_timer_add(3.0, _disk_update, ui); } diff --git a/src/bin/ui/ui_disk.h b/src/bin/ui/ui_disk.h index 3b6de39..afc16f3 100644 --- a/src/bin/ui/ui_disk.h +++ b/src/bin/ui/ui_disk.h @@ -5,9 +5,6 @@ #include "system/disks.h" void -ui_tab_disk_add(Ui *ui); - -void -ui_tab_disk_update(Ui *ui); +ui_win_disk_add(Ui *ui); #endif diff --git a/src/bin/ui/ui_memory.c b/src/bin/ui/ui_memory.c index 4ffe17a..e660476 100644 --- a/src/bin/ui/ui_memory.c +++ b/src/bin/ui/ui_memory.c @@ -1,4 +1,13 @@ #include "ui_memory.h" +#include "system/filesystems.h" + +typedef struct { + Evas_Object *used; + Evas_Object *cached; + Evas_Object *buffered; + Evas_Object *shared; + Evas_Object *swap; +} Widgets; static Evas_Object * _label_mem(Evas_Object *parent, const char *text) @@ -24,158 +33,178 @@ _progress_add(Evas_Object *parent) return pb; } +static Eina_Bool +_memory_update(void *data) +{ + Widgets *widgets; + Evas_Object *pb; + double ratio, value; + meminfo_t memory; + + memset(&memory, 0, sizeof(memory)); + system_memory_usage_get(&memory); + + widgets = data; + + if (file_system_in_use("ZFS")) + memory.used += memory.zfs_arc_used; + + pb = widgets->used; + ratio = memory.total / 100.0; + value = memory.used / ratio; + elm_progressbar_value_set(pb, value / 100); + elm_progressbar_unit_format_set(pb, + eina_slstr_printf("%s / %s", + evisum_size_format(memory.used), + evisum_size_format(memory.total))); + + pb = widgets->cached; + ratio = memory.total / 100.0; + value = memory.cached / ratio; + elm_progressbar_value_set(pb, value / 100); + elm_progressbar_unit_format_set(pb, + eina_slstr_printf("%s / %s", + evisum_size_format(memory.cached), + evisum_size_format(memory.total))); + + pb = widgets->buffered; + ratio = memory.total / 100.0; + value = memory.buffered / ratio; + elm_progressbar_value_set(pb, value / 100); + elm_progressbar_unit_format_set(pb, + eina_slstr_printf("%s / %s", + evisum_size_format(memory.buffered), + evisum_size_format(memory.total))); + + pb = widgets->shared; + ratio = memory.total / 100.0; + value = memory.shared / ratio; + elm_progressbar_value_set(pb, value / 100); + elm_progressbar_unit_format_set(pb, + eina_slstr_printf("%s / %s", + evisum_size_format(memory.shared), + evisum_size_format(memory.total))); + + pb = widgets->swap; + if (memory.swap_total) + { + ratio = memory.swap_total / 100.0; + value = memory.swap_used / ratio; + } + else value = 0.0; + + elm_progressbar_value_set(pb, value / 100); + elm_progressbar_unit_format_set(pb, + eina_slstr_printf("%s / %s", + evisum_size_format(memory.swap_used), + evisum_size_format(memory.swap_total))); + + return EINA_TRUE; +} + +static void +_win_del_cb(void *data, Evas_Object *obj, + void *event_info EINA_UNUSED) +{ + Widgets *widgets; + Ui *ui = data; + + ecore_timer_del(ui->timer_memory); + ui->timer_memory = NULL; + + widgets = evas_object_data_get(obj, "widgets"); + if (widgets) free(widgets); + + evas_object_del(obj); + ui->mem_visible = EINA_FALSE; +} + void -ui_tab_memory_add(Ui *ui) +ui_win_memory_add(Ui *ui) { - Evas_Object *parent, *box, *hbox, *frame, *pb; - Evas_Object *scroller, *border, *rect, *label, *table; + Evas_Object *win, *box, *frame, *pb; + Evas_Object *border, *rect, *label, *table; - parent = ui->content; + if (ui->mem_visible) return; - ui->mem_view = box = elm_box_add(parent); - evas_object_size_hint_weight_set(box, EXPAND, EXPAND); - evas_object_size_hint_align_set(box, FILL, FILL); - elm_table_pack(ui->content, ui->mem_view, 0, 1, 1, 1); - evas_object_hide(box); + ui->mem_visible = EINA_TRUE; - ui->mem_activity = hbox = elm_box_add(box); - evas_object_size_hint_weight_set(hbox, EXPAND, EXPAND); - evas_object_size_hint_align_set(hbox, FILL, FILL); - evas_object_show(hbox); + Widgets *widgets = calloc(1, sizeof(Widgets)); + if (!widgets) return; - frame = elm_frame_add(box); + win = elm_win_util_standard_add("evisum", _("Memory Usage")); + evas_object_size_hint_weight_set(win, EXPAND, EXPAND); + evas_object_size_hint_align_set(win, FILL, FILL); + + frame = elm_frame_add(win); evas_object_size_hint_weight_set(frame, EXPAND, EXPAND); evas_object_size_hint_align_set(frame, FILL, FILL); elm_object_style_set(frame, "pad_small"); evas_object_show(frame); - scroller = elm_scroller_add(parent); - evas_object_size_hint_weight_set(scroller, EXPAND, EXPAND); - evas_object_size_hint_align_set(scroller, FILL, FILL); - elm_scroller_policy_set(scroller, - ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_AUTO); - evas_object_show(scroller); - - box = elm_box_add(ui->content); + box = elm_box_add(win); evas_object_size_hint_align_set(box, FILL, FILL); evas_object_size_hint_weight_set(box, EXPAND, EXPAND); evas_object_show(box); - table = elm_table_add(parent); + table = elm_table_add(win); evas_object_size_hint_weight_set(table, EXPAND, EXPAND); evas_object_size_hint_align_set(table, FILL, FILL); - elm_table_padding_set(table, 0, 40 * elm_config_scale_get()); evas_object_show(table); label = _label_mem(box, _("Used")); - ui->progress_mem_used = pb = _progress_add(table); + widgets->used = pb = _progress_add(table); elm_table_pack(table, label, 0, 0, 1, 1); elm_table_pack(table, pb, 1, 0, 1, 1); label = _label_mem(box, _("Cached")); - ui->progress_mem_cached = pb = _progress_add(table); + widgets->cached = pb = _progress_add(table); elm_table_pack(table, label, 0, 1, 1, 1); elm_table_pack(table, pb, 1, 1, 1, 1); label = _label_mem(box, _("Buffered")); - ui->progress_mem_buffered = pb = _progress_add(table); + widgets->buffered = pb = _progress_add(table); elm_table_pack(table, label, 0, 2, 1, 1); elm_table_pack(table, pb, 1, 2, 1, 1); label = _label_mem(box, _("Shared")); - ui->progress_mem_shared = pb = _progress_add(table); + widgets->shared = pb = _progress_add(table); elm_table_pack(table, label, 0, 3, 1, 1); elm_table_pack(table, pb, 1, 3, 1, 1); label = _label_mem(box, _("Swapped")); - ui->progress_mem_swap = pb = _progress_add(frame); + widgets->swap = pb = _progress_add(frame); elm_table_pack(table, label, 0, 4, 1, 1); elm_table_pack(table, pb, 1, 4, 1, 1); - border = elm_frame_add(parent); + border = elm_frame_add(win); elm_object_style_set(border, "pad_small"); evas_object_size_hint_weight_set(border, EXPAND, EXPAND); evas_object_size_hint_align_set(border, FILL, FILL); evas_object_show(border); elm_object_content_set(border, table); - table = elm_table_add(parent); + table = elm_table_add(win); evas_object_size_hint_weight_set(table, EXPAND, EXPAND); evas_object_size_hint_align_set(table, FILL, FILL); evas_object_show(table); - rect = evas_object_rectangle_add(evas_object_evas_get(parent)); + rect = evas_object_rectangle_add(evas_object_evas_get(win)); evas_object_size_hint_max_set(rect, MISC_MAX_WIDTH, -1); evas_object_size_hint_min_set(rect, MISC_MIN_WIDTH, 1); elm_table_pack(table, rect, 0, 0, 1, 1); elm_table_pack(table, border, 0, 0, 1, 1); - elm_object_content_set(scroller, table); - elm_object_content_set(frame, scroller); - elm_box_pack_end(ui->mem_view, frame); -} + elm_object_content_set(frame, table); + elm_object_content_set(win, frame); -void -ui_tab_memory_update(Ui *ui, Sys_Info *info) -{ - Evas_Object *pb; - double ratio, value; - - if (!ui->mem_visible) - return; + evas_object_data_set(win, "widgets", widgets); + evas_object_smart_callback_add(win, "delete,request", _win_del_cb, ui); + evisum_child_window_show(ui->win, win); + evas_object_resize(win, -1, -1); - if (ui->zfs_mounted) - info->memory.used += info->memory.zfs_arc_used; + _memory_update(widgets); - pb = ui->progress_mem_used; - ratio = info->memory.total / 100.0; - value = info->memory.used / ratio; - elm_progressbar_value_set(pb, value / 100); - elm_progressbar_unit_format_set(pb, - eina_slstr_printf("%s / %s", - evisum_size_format(info->memory.used), - evisum_size_format(info->memory.total))); - - pb = ui->progress_mem_cached; - ratio = info->memory.total / 100.0; - value = info->memory.cached / ratio; - elm_progressbar_value_set(pb, value / 100); - elm_progressbar_unit_format_set(pb, - eina_slstr_printf("%s / %s", - evisum_size_format(info->memory.cached), - evisum_size_format(info->memory.total))); - - pb = ui->progress_mem_buffered; - ratio = info->memory.total / 100.0; - value = info->memory.buffered / ratio; - elm_progressbar_value_set(pb, value / 100); - elm_progressbar_unit_format_set(pb, - eina_slstr_printf("%s / %s", - evisum_size_format(info->memory.buffered), - evisum_size_format(info->memory.total))); - - pb = ui->progress_mem_shared; - ratio = info->memory.total / 100.0; - value = info->memory.shared / ratio; - elm_progressbar_value_set(pb, value / 100); - elm_progressbar_unit_format_set(pb, - eina_slstr_printf("%s / %s", - evisum_size_format(info->memory.shared), - evisum_size_format(info->memory.total))); - - pb = ui->progress_mem_swap; - if (info->memory.swap_total) - { - ratio = info->memory.swap_total / 100.0; - value = info->memory.swap_used / ratio; - } - else value = 0.0; - - elm_progressbar_value_set(pb, value / 100); - elm_progressbar_unit_format_set(pb, - eina_slstr_printf("%s / %s", - evisum_size_format(info->memory.swap_used), - evisum_size_format(info->memory.swap_total))); + ui->timer_memory = ecore_timer_add(3.0, _memory_update, widgets); } - diff --git a/src/bin/ui/ui_memory.h b/src/bin/ui/ui_memory.h index 1515358..0cbe90c 100644 --- a/src/bin/ui/ui_memory.h +++ b/src/bin/ui/ui_memory.h @@ -5,9 +5,7 @@ #include "../system/machine.h" void -ui_tab_memory_add(Ui *ui); +ui_win_memory_add(Ui *ui); -void -ui_tab_memory_update(Ui *ui, Sys_Info *info); #endif diff --git a/src/bin/ui/ui_misc.c b/src/bin/ui/ui_misc.c index baab4ed..ccf3fc1 100644 --- a/src/bin/ui/ui_misc.c +++ b/src/bin/ui/ui_misc.c @@ -1,4 +1,5 @@ #include "ui_misc.h" +#include "system/machine.h" static Eina_Bool _battery_usage_add(Evas_Object *box, power_t *power) @@ -67,14 +68,14 @@ _battery_usage_add(Evas_Object *box, power_t *power) } static Eina_Bool -_sensor_usage_add(Evas_Object *box, Sys_Info *info) +_sensor_usage_add(Evas_Object *box, sensor_t **sensors, int count) { Evas_Object *frame, *vbox, *hbox, *pb, *ic, *label; sensor_t *snsr; - for (int i = 0; i < info->sensor_count; i++) + for (int i = 0; i < count; i++) { - snsr = info->sensors[i]; + snsr = sensors[i]; frame = elm_frame_add(box); evas_object_size_hint_align_set(frame, FILL, FILL); @@ -124,7 +125,7 @@ _sensor_usage_add(Evas_Object *box, Sys_Info *info) elm_box_pack_end(box, frame); } - return !!info->sensor_count; + return count; } static char * @@ -248,18 +249,111 @@ _separator_add(Evas_Object *box) elm_box_pack_end(box, hbox); } +static void +_misc_free(power_t *power, sensor_t **sensors, int sensor_count) +{ + for (int i = 0; i < power->battery_count; i++) + { + if (power->batteries[i]->name) + free(power->batteries[i]->name); +#if defined(__OpenBSD__) + if (power->batteries[i]->mibs) + free(power->batteries[i]->mibs); +#endif + free(power->batteries[i]); + } + if (power->batteries) + free(power->batteries); + + for (int i = 0; i < sensor_count; i++) + { + sensor_t *snsr = sensors[i]; + if (snsr->name) + free(snsr->name); + free(snsr); + } + if (sensors) + free(sensors); +} + +static Eina_Bool +_misc_update(void *data) +{ + Ui *ui; + power_t power; + sensor_t **sensors; + int sensor_count = 0; + Evas_Object *box, *frame; + + ui = data; + + elm_box_clear(ui->misc_activity); + + box = elm_box_add(ui->misc_activity); + evas_object_size_hint_align_set(box, FILL, FILL); + evas_object_size_hint_weight_set(box, EXPAND, EXPAND); + evas_object_show(box); + + _network_usage_add(ui, box, ui->network_usage.incoming, EINA_TRUE); + _network_usage_add(ui, box, ui->network_usage.outgoing, EINA_FALSE); + _separator_add(box); + + memset(&power, 0, sizeof(power)); + system_power_state_get(&power); + + if (_battery_usage_add(box, &power)) + _separator_add(box); + + sensors = system_sensors_thermal_get(&sensor_count); + if (sensors) + { + _sensor_usage_add(box, sensors, sensor_count); + _separator_add(box); + } + + _misc_free(&power, sensors, sensor_count); + + frame = elm_frame_add(ui->misc_activity); + evas_object_size_hint_align_set(frame, FILL, FILL); + evas_object_size_hint_weight_set(frame, EXPAND, EXPAND); + elm_object_style_set(frame, "pad_huge"); + evas_object_show(frame); + elm_object_content_set(frame, box); + elm_box_pack_end(ui->misc_activity, frame); + + return EINA_TRUE; +} + +static void +_win_del_cb(void *data, Evas_Object *obj EINA_UNUSED, + void *event_info EINA_UNUSED) +{ + Ui *ui = data; + + if (ui->timer_misc) + ecore_timer_del(ui->timer_misc); + ui->timer_misc = NULL; + + evas_object_del(obj); + ui->misc_visible = EINA_FALSE; +} + void -ui_tab_misc_add(Ui *ui) +ui_win_misc_add(Ui *ui) { - Evas_Object *parent, *box, *hbox, *frame, *scroller; + Evas_Object *win, *box, *hbox, *frame, *scroller; Evas_Object *table, *border, *rect; - parent = ui->content; + if (ui->misc_visible) return; + ui->misc_visible = EINA_TRUE; + + win = elm_win_util_standard_add("evisum", _("Stuff")); + evas_object_size_hint_weight_set(win, EXPAND, EXPAND); + evas_object_size_hint_align_set(win, FILL, FILL); - ui->misc_view = box = elm_box_add(parent); + box = elm_box_add(win); evas_object_size_hint_weight_set(box, EXPAND, EXPAND); evas_object_size_hint_align_set(box, FILL, FILL); - elm_table_pack(ui->content, ui->misc_view, 0, 1, 1, 1); evas_object_hide(box); ui->misc_activity = hbox = elm_box_add(box); @@ -273,7 +367,7 @@ ui_tab_misc_add(Ui *ui) evas_object_size_hint_align_set(frame, FILL, FILL); evas_object_show(frame); - scroller = elm_scroller_add(parent); + scroller = elm_scroller_add(win); evas_object_size_hint_weight_set(scroller, EXPAND, EXPAND); evas_object_size_hint_align_set(scroller, FILL, FILL); elm_scroller_policy_set(scroller, @@ -287,12 +381,12 @@ ui_tab_misc_add(Ui *ui) evas_object_show(border); elm_object_content_set(border, hbox); - table = elm_table_add(parent); + table = elm_table_add(win); evas_object_size_hint_weight_set(table, EXPAND, EXPAND); evas_object_size_hint_align_set(table, FILL, FILL); evas_object_show(table); - rect = evas_object_rectangle_add(evas_object_rectangle_add(parent)); + rect = evas_object_rectangle_add(evas_object_rectangle_add(win)); evas_object_size_hint_max_set(rect, MISC_MAX_WIDTH, -1); evas_object_size_hint_min_set(rect, MISC_MIN_WIDTH, 1); @@ -302,39 +396,13 @@ ui_tab_misc_add(Ui *ui) elm_object_content_set(scroller, table); elm_object_content_set(frame,scroller); elm_box_pack_end(box, frame); -} + elm_object_content_set(win, box); -void -ui_tab_misc_update(Ui *ui, Sys_Info *info) -{ - Evas_Object *box, *frame; + evas_object_smart_callback_add(win, "delete,request", _win_del_cb, ui); + evisum_child_window_show(ui->win, win); - if (!ui->misc_visible) - return; - - elm_box_clear(ui->misc_activity); + _misc_update(ui); - box = elm_box_add(ui->content); - evas_object_size_hint_align_set(box, FILL, FILL); - evas_object_size_hint_weight_set(box, EXPAND, EXPAND); - evas_object_show(box); - - _network_usage_add(ui, box, info->network_usage.incoming, EINA_TRUE); - _network_usage_add(ui, box, info->network_usage.outgoing, EINA_FALSE); - _separator_add(box); - if (_battery_usage_add(box, &info->power)) - _separator_add(box); - if (_sensor_usage_add(box, info)) - _separator_add(box); - - frame = elm_frame_add(ui->misc_activity); - evas_object_size_hint_align_set(frame, FILL, FILL); - evas_object_size_hint_weight_set(frame, EXPAND, EXPAND); - elm_object_style_set(frame, "pad_huge"); - evas_object_show(frame); - elm_object_content_set(frame, box); - - elm_box_pack_end(ui->misc_activity, frame); + ui->timer_misc = ecore_timer_add(3.0, _misc_update, ui); } - diff --git a/src/bin/ui/ui_misc.h b/src/bin/ui/ui_misc.h index d634197..1131415 100644 --- a/src/bin/ui/ui_misc.h +++ b/src/bin/ui/ui_misc.h @@ -5,9 +5,6 @@ #include "../system/machine.h" void -ui_tab_misc_add(Ui *ui); - -void -ui_tab_misc_update(Ui *ui, Sys_Info *info); +ui_win_misc_add(Ui *ui); #endif diff --git a/src/bin/ui/ui_util.c b/src/bin/ui/ui_util.c index 195414d..b77c24a 100644 --- a/src/bin/ui/ui_util.c +++ b/src/bin/ui/ui_util.c @@ -189,3 +189,19 @@ evisum_ui_textblock_font_size_get(Evas_Object *tb) return size; } + +void +evisum_child_window_show(Evas_Object *parent, Evas_Object *win) +{ + Evas_Coord x, y, w, h; + + evas_object_resize(win, UI_CHILD_WIN_WIDTH, UI_CHILD_WIN_HEIGHT); + evas_object_geometry_get(parent, &x, &y, &w, &h); + if (x > 0 && y > 0) + evas_object_move(win, x + 20, y + 10); + else + elm_win_center(win, EINA_TRUE, EINA_TRUE); + + evas_object_show(win); +} + diff --git a/src/bin/ui/ui_util.h b/src/bin/ui/ui_util.h index 9121893..d407c9f 100644 --- a/src/bin/ui/ui_util.h +++ b/src/bin/ui/ui_util.h @@ -10,8 +10,11 @@ #define TAB_BTN_HEIGHT 32 #define BTN_WIDTH 80 #define BTN_HEIGHT 24 -#define MISC_MAX_WIDTH 640 -#define MISC_MIN_WIDTH 480 + +#define UI_CHILD_WIN_WIDTH 640 +#define UI_CHILD_WIN_HEIGHT 480 +#define MISC_MAX_WIDTH 640 +#define MISC_MIN_WIDTH 480 Evas_Object * evisum_ui_tab_add(Evas_Object *parent, Evas_Object **alias, const char *text, @@ -33,5 +36,7 @@ evisum_ui_textblock_font_size_get(Evas_Object *tb); void evisum_ui_textblock_font_size_set(Evas_Object *tb, int new_size); +void +evisum_child_window_show(Evas_Object *parent, Evas_Object *win); #endif --