This commit is contained in:
Alastair Poole 2018-06-11 11:12:02 +01:00
parent 19e6c8e745
commit 53a0a5bf49
2 changed files with 266 additions and 9 deletions

269
src/ui.c
View File

@ -18,6 +18,8 @@ static long _memory_used = 0;
static void _disk_view_update(Ui *ui);
static void _extra_view_update(Ui *ui, results_t *results);
static void _cpu_view_update(Ui *ui, results_t *results);
static void _memory_view_update(Ui *ui, results_t *results);
static void
_system_stats_thread(void *data, Ecore_Thread *thread)
@ -51,9 +53,14 @@ _system_stats_thread_feedback_cb(void *data, Ecore_Thread *thread, void *msg)
double cpu_usage = 0.0;
int i;
if (ecore_thread_check(thread))
return;
ui = data;
results = msg;
_cpu_view_update(ui, results);
_memory_view_update(ui, results);
_disk_view_update(ui);
_extra_view_update(ui, results);
@ -947,19 +954,17 @@ _progress_outgoing_format_free_cb(char *str)
}
static void
_extra_view_update(Ui *ui, results_t *results)
_cpu_view_update(Ui *ui, results_t *results)
{
Evas_Object *box, *frame, *progress;
int i;
if (!ui->extra_visible)
if (!ui->cpu_visible)
return;
_results = results;
elm_box_clear(ui->cpu_activity);
elm_box_clear(ui->extra_activity);
box = elm_box_add(ui->disk_activity);
box = elm_box_add(ui->content);
evas_object_size_hint_align_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL);
evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_show(box);
@ -988,6 +993,114 @@ _extra_view_update(Ui *ui, results_t *results)
elm_box_pack_end(box, frame);
}
elm_box_pack_end(ui->cpu_activity, box);
}
static void
_memory_view_update(Ui *ui, results_t *results)
{
Evas_Object *box, *frame, *progress;
double ratio, value;
if (!ui->mem_visible)
return;
elm_box_clear(ui->mem_activity);
box = elm_box_add(ui->content);
evas_object_size_hint_align_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL);
evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_show(box);
frame = elm_frame_add(box);
evas_object_size_hint_align_set(frame, EVAS_HINT_FILL, 0);
evas_object_size_hint_weight_set(frame, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
elm_object_text_set(frame, "Memory Used");
evas_object_show(frame);
progress = elm_progressbar_add(frame);
evas_object_size_hint_align_set(progress, EVAS_HINT_FILL, EVAS_HINT_FILL);
evas_object_size_hint_weight_set(progress, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
elm_progressbar_span_size_set(progress, 1.0);
elm_progressbar_unit_format_set(progress, eina_slstr_printf("%lu M / %lu M", results->memory.used, results->memory.total));
ratio = results->memory.total / 100.0;
value = results->memory.used / ratio;
elm_progressbar_value_set(progress, value / 100);
evas_object_show(progress);
elm_object_content_set(frame, progress);
elm_box_pack_end(box, frame);
frame = elm_frame_add(box);
evas_object_size_hint_align_set(frame, EVAS_HINT_FILL, 0);
evas_object_size_hint_weight_set(frame, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
elm_object_text_set(frame, "Memory Cached");
evas_object_show(frame);
progress = elm_progressbar_add(frame);
evas_object_size_hint_align_set(progress, EVAS_HINT_FILL, EVAS_HINT_FILL);
evas_object_size_hint_weight_set(progress, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
elm_progressbar_span_size_set(progress, 1.0);
elm_progressbar_unit_format_set(progress, eina_slstr_printf("%lu M / %lu M", results->memory.cached, results->memory.total));
ratio = results->memory.total / 100.0;
value = results->memory.cached / ratio;
elm_progressbar_value_set(progress, value / 100);
evas_object_show(progress);
elm_object_content_set(frame, progress);
elm_box_pack_end(box, frame);
frame = elm_frame_add(box);
evas_object_size_hint_align_set(frame, EVAS_HINT_FILL, 0);
evas_object_size_hint_weight_set(frame, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
elm_object_text_set(frame, "Memory Buffered");
evas_object_show(frame);
progress = elm_progressbar_add(frame);
evas_object_size_hint_align_set(progress, EVAS_HINT_FILL, EVAS_HINT_FILL);
evas_object_size_hint_weight_set(progress, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
elm_progressbar_span_size_set(progress, 1.0);
elm_progressbar_unit_format_set(progress, eina_slstr_printf("%lu M / %lu M", results->memory.buffered, results->memory.total));
ratio = results->memory.total / 100.0;
value = results->memory.buffered / ratio;
elm_progressbar_value_set(progress, value / 100);
evas_object_show(progress);
elm_object_content_set(frame, progress);
elm_box_pack_end(box, frame);
frame = elm_frame_add(box);
evas_object_size_hint_align_set(frame, EVAS_HINT_FILL, 0);
evas_object_size_hint_weight_set(frame, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
elm_object_text_set(frame, "Memory Shared");
evas_object_show(frame);
progress = elm_progressbar_add(frame);
evas_object_size_hint_align_set(progress, EVAS_HINT_FILL, EVAS_HINT_FILL);
evas_object_size_hint_weight_set(progress, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
elm_progressbar_span_size_set(progress, 1.0);
elm_progressbar_unit_format_set(progress, eina_slstr_printf("%lu M / %lu M", results->memory.shared, results->memory.total));
ratio = results->memory.total / 100.0;
value = results->memory.shared / ratio;
elm_progressbar_value_set(progress, value / 100);
evas_object_show(progress);
elm_object_content_set(frame, progress);
elm_box_pack_end(box, frame);
elm_box_pack_end(ui->mem_activity, box);
}
static void
_extra_view_update(Ui *ui, results_t *results)
{
Evas_Object *box, *frame, *progress;
int i;
if (!ui->extra_visible)
return;
_results = results;
elm_box_clear(ui->extra_activity);
box = elm_box_add(ui->content);
evas_object_size_hint_align_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL);
evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_show(box);
if (results->power.battery_count)
{
frame = elm_frame_add(box);
@ -1059,7 +1172,6 @@ _extra_view_update(Ui *ui, results_t *results)
elm_box_pack_end(ui->extra_activity, box);
}
static void
_ui_system_view_add(Ui *ui)
{
@ -1701,6 +1813,95 @@ _ui_extra_view_add(Ui *ui)
elm_box_pack_end(box, frame);
}
static void
_ui_cpu_view_add(Ui *ui)
{
Evas_Object *parent, *box, *hbox, *frame, *scroller;
parent = ui->content;
ui->cpu_view = box = elm_box_add(parent);
evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_size_hint_align_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL);
elm_table_pack(ui->content, ui->cpu_view, 0, 1, 1, 1);
evas_object_hide(box);
ui->cpu_activity = hbox = elm_box_add(box);
evas_object_size_hint_weight_set(hbox, EVAS_HINT_EXPAND, 0);
evas_object_size_hint_align_set(hbox, EVAS_HINT_FILL, EVAS_HINT_FILL);
evas_object_show(hbox);
frame = elm_frame_add(box);
evas_object_size_hint_weight_set(frame, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_size_hint_align_set(frame, EVAS_HINT_FILL, EVAS_HINT_FILL);
elm_object_text_set(frame, "CPU");
evas_object_show(frame);
scroller = elm_scroller_add(parent);
evas_object_size_hint_weight_set(scroller, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_size_hint_align_set(scroller, EVAS_HINT_FILL, EVAS_HINT_FILL);
elm_scroller_policy_set(scroller, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_ON);
evas_object_show(scroller);
elm_object_content_set(scroller, hbox);
elm_object_content_set(frame, scroller);
elm_box_pack_end(box, frame);
}
static void
_ui_memory_view_add(Ui *ui)
{
Evas_Object *parent, *box, *hbox, *frame, *scroller;
parent = ui->content;
ui->mem_view = box = elm_box_add(parent);
evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_size_hint_align_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL);
elm_table_pack(ui->content, ui->mem_view, 0, 1, 1, 1);
evas_object_hide(box);
ui->mem_activity = hbox = elm_box_add(box);
evas_object_size_hint_weight_set(hbox, EVAS_HINT_EXPAND, 0);
evas_object_size_hint_align_set(hbox, EVAS_HINT_FILL, EVAS_HINT_FILL);
evas_object_show(hbox);
frame = elm_frame_add(box);
evas_object_size_hint_weight_set(frame, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_size_hint_align_set(frame, EVAS_HINT_FILL, EVAS_HINT_FILL);
elm_object_text_set(frame, "Memory");
evas_object_show(frame);
scroller = elm_scroller_add(parent);
evas_object_size_hint_weight_set(scroller, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_size_hint_align_set(scroller, EVAS_HINT_FILL, EVAS_HINT_FILL);
elm_scroller_policy_set(scroller, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_ON);
evas_object_show(scroller);
elm_object_content_set(scroller, hbox);
elm_object_content_set(frame, scroller);
elm_box_pack_end(box, frame);
}
static void
_tab_memory_activity_clicked_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
{
Ui *ui;
ui = data;
ui->mem_visible = EINA_TRUE;
ui->extra_visible = EINA_FALSE;
ui->disk_visible = EINA_FALSE;
ui->cpu_visible = EINA_FALSE;
evas_object_show(ui->mem_view);
evas_object_hide(ui->system_activity);
evas_object_hide(ui->panel);
evas_object_hide(ui->disk_view);
evas_object_hide(ui->extra_view);
evas_object_hide(ui->cpu_view);
}
static void
_tab_system_activity_clicked_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
@ -1711,11 +1912,15 @@ _tab_system_activity_clicked_cb(void *data, Evas_Object *obj EINA_UNUSED, void *
ui->extra_visible = EINA_FALSE;
ui->disk_visible = EINA_FALSE;
ui->cpu_visible = EINA_FALSE;
ui->mem_visible = EINA_FALSE;
evas_object_show(ui->system_activity);
evas_object_show(ui->panel);
evas_object_hide(ui->disk_view);
evas_object_hide(ui->extra_view);
evas_object_hide(ui->cpu_view);
evas_object_hide(ui->mem_view);
}
static void
@ -1727,11 +1932,15 @@ _tab_disk_activity_clicked_cb(void *data, Evas_Object *obj EINA_UNUSED, void *ev
ui->extra_visible = EINA_FALSE;
ui->disk_visible = EINA_TRUE;
ui->cpu_visible = EINA_FALSE;
ui->mem_visible = EINA_FALSE;
evas_object_show(ui->disk_view);
evas_object_hide(ui->system_activity);
evas_object_hide(ui->panel);
evas_object_hide(ui->extra_view);
evas_object_hide(ui->cpu_view);
evas_object_hide(ui->mem_view);
}
static void
@ -1743,11 +1952,35 @@ _tab_extra_clicked_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info
ui->extra_visible = EINA_TRUE;
ui->disk_visible = EINA_FALSE;
ui->cpu_visible = EINA_FALSE;
ui->mem_visible = EINA_FALSE;
evas_object_show(ui->extra_view);
evas_object_hide(ui->system_activity);
evas_object_hide(ui->panel);
evas_object_hide(ui->disk_view);
evas_object_hide(ui->cpu_view);
evas_object_hide(ui->mem_view);
}
static void
_tab_cpu_activity_clicked_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
{
Ui *ui;
ui = data;
ui->mem_visible = EINA_FALSE;
ui->extra_visible = EINA_FALSE;
ui->disk_visible = EINA_FALSE;
ui->cpu_visible = EINA_TRUE;
evas_object_show(ui->cpu_view);
evas_object_hide(ui->extra_view);
evas_object_hide(ui->system_activity);
evas_object_hide(ui->panel);
evas_object_hide(ui->disk_view);
evas_object_hide(ui->mem_view);
}
static Evas_Object *
@ -1785,7 +2018,23 @@ _ui_tabs_add(Evas_Object *parent, Ui *ui)
button = elm_button_add(hbox);
evas_object_size_hint_weight_set(button, 1.0, EVAS_HINT_EXPAND);
evas_object_size_hint_align_set(button, EVAS_HINT_FILL, EVAS_HINT_FILL);
elm_object_text_set(button, "Disk Usage");
elm_object_text_set(button, "CPU");
evas_object_show(button);
elm_box_pack_end(hbox, button);
evas_object_smart_callback_add(button, "clicked", _tab_cpu_activity_clicked_cb, ui);
button = elm_button_add(hbox);
evas_object_size_hint_weight_set(button, 1.0, EVAS_HINT_EXPAND);
evas_object_size_hint_align_set(button, EVAS_HINT_FILL, EVAS_HINT_FILL);
elm_object_text_set(button, "Memory");
evas_object_show(button);
elm_box_pack_end(hbox, button);
evas_object_smart_callback_add(button, "clicked", _tab_memory_activity_clicked_cb, ui);
button = elm_button_add(hbox);
evas_object_size_hint_weight_set(button, 1.0, EVAS_HINT_EXPAND);
evas_object_size_hint_align_set(button, EVAS_HINT_FILL, EVAS_HINT_FILL);
elm_object_text_set(button, "Storage");
evas_object_show(button);
elm_box_pack_end(hbox, button);
evas_object_smart_callback_add(button, "clicked", _tab_disk_activity_clicked_cb, ui);
@ -1842,7 +2091,7 @@ ui_add(Evas_Object *parent)
ui->selected_pid = -1;
ui->program_pid = getpid();
ui->panel_visible = EINA_TRUE;
ui->disk_visible = ui->extra_visible = EINA_TRUE;
ui->disk_visible = ui->cpu_visible = ui->mem_visible = ui->extra_visible = EINA_TRUE;
memset(ui->cpu_times, 0, PID_MAX * sizeof(int64_t));
@ -1860,6 +2109,8 @@ ui_add(Evas_Object *parent)
/* Setup the user interfeace */
_ui_system_view_add(ui);
_ui_process_panel_add(ui);
_ui_cpu_view_add(ui);
_ui_memory_view_add(ui);
_ui_disk_view_add(ui);
_ui_extra_view_add(ui);

View File

@ -50,12 +50,18 @@ typedef struct Ui
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 *extra_view;
Evas_Object *extra_activity;
Evas_Object *system_activity;
Eina_Bool cpu_visible;
Eina_Bool extra_visible;
Eina_Bool disk_visible;
Eina_Bool mem_visible;
Evas_Object *progress_cpu;
Evas_Object *progress_mem;