diff --git a/src/modules/sysinfo/memusage/memusage.c b/src/modules/sysinfo/memusage/memusage.c index 1cc8b645d..9576f4262 100644 --- a/src/modules/sysinfo/memusage/memusage.c +++ b/src/modules/sysinfo/memusage/memusage.c @@ -16,6 +16,55 @@ struct _Thread_Config unsigned long swp_active; }; +static void +_memusage_popup_update(Instance *inst) +{ + Evas_Object *pbar; + int val_mb, val_perc; + char buf[128]; + + if (!inst->cfg->memusage.popup) + return; + + if (inst->cfg->memusage.mem_total) + { + pbar = evas_object_data_get(inst->cfg->memusage.popup, "mem_active_pbar"); + val_mb = inst->cfg->memusage.mem_active / 1024; + val_perc = 100 * ((float)inst->cfg->memusage.mem_active / + (float)inst->cfg->memusage.mem_total); + snprintf(buf, sizeof(buf), "%d MB (%d %%)", val_mb, val_perc); + elm_progressbar_value_set(pbar, (float)val_perc / 100); + elm_progressbar_unit_format_set(pbar, buf); + + pbar = evas_object_data_get(inst->cfg->memusage.popup, "mem_buffers_pbar"); + val_mb = inst->cfg->memusage.mem_buffers / 1024; + val_perc = 100 * ((float)inst->cfg->memusage.mem_buffers / + (float)inst->cfg->memusage.mem_total); + snprintf(buf, sizeof(buf), "%d MB (%d %%)", val_mb, val_perc); + elm_progressbar_value_set(pbar, (float)val_perc / 100); + elm_progressbar_unit_format_set(pbar, buf); + + pbar = evas_object_data_get(inst->cfg->memusage.popup, "mem_cached_pbar"); + val_mb = inst->cfg->memusage.mem_cached / 1024; + val_perc = 100 * ((float)inst->cfg->memusage.mem_cached / + (float)inst->cfg->memusage.mem_total); + snprintf(buf, sizeof(buf), "%d MB (%d %%)", val_mb, val_perc); + elm_progressbar_value_set(pbar, (float)val_perc / 100); + elm_progressbar_unit_format_set(pbar, buf); + } + + if (inst->cfg->memusage.swp_total) + { + pbar = evas_object_data_get(inst->cfg->memusage.popup, "swap_pbar"); + val_mb = inst->cfg->memusage.swp_active / 1024; + val_perc = 100 * ((float)inst->cfg->memusage.swp_active / + (float)inst->cfg->memusage.swp_total); + snprintf(buf, sizeof(buf), "%d MB (%d %%)", val_mb, val_perc); + elm_progressbar_value_set(pbar, (float)val_perc / 100); + elm_progressbar_unit_format_set(pbar, buf); + } +} + static void _memusage_face_update(Instance *inst) { @@ -37,13 +86,7 @@ _memusage_face_update(Instance *inst) free(msg); if (inst->cfg->memusage.popup) - { - char text[4096]; - snprintf(text, sizeof(text), "%s: %d%%
%s: %d%%", - _("Total Memory Usage"), inst->cfg->memusage.mem_percent, - _("Total Swap Usage"), inst->cfg->memusage.swp_percent); - elm_object_text_set(inst->cfg->memusage.popup_label, text); - } + _memusage_popup_update(inst); } static Evas_Object * @@ -71,13 +114,105 @@ _memusage_popup_deleted(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_U inst->cfg->memusage.popup = NULL; } +static Evas_Object * +_memusage_popup_create(Instance *inst) +{ + Evas_Object *popup, *box, *table, *frame, *label, *pbar; + char buf[128]; + + // popup + vert box + popup = elm_ctxpopup_add(e_comp->elm); + elm_object_style_set(popup, "noblock"); + evas_object_smart_callback_add(popup, "dismissed", + _memusage_popup_dismissed, inst); + evas_object_event_callback_add(popup, EVAS_CALLBACK_DEL, + _memusage_popup_deleted, inst); + + box = elm_box_add(popup); + elm_box_horizontal_set(box, EINA_FALSE); + E_EXPAND(box); E_FILL(box); + elm_object_content_set(popup, box); + evas_object_show(box); + + // mem frame + table + frame = elm_frame_add(popup); + E_EXPAND(frame); E_FILL(frame); + snprintf(buf, sizeof(buf), _("Memory usage (available %ld MB)"), + inst->cfg->memusage.mem_total / 1024); + elm_object_text_set(frame, buf); + elm_box_pack_end(box, frame); + evas_object_show(frame); + + table = elm_table_add(frame); + E_EXPAND(table); E_FILL(table); + elm_object_content_set(frame, table); + evas_object_show(table); + + label = elm_label_add(table); + E_EXPAND(label); E_ALIGN(label, 0.0, 0.5); + elm_object_text_set(label, _("Active")); + elm_table_pack(table, label, 0, 1, 1, 1); + evas_object_show(label); + pbar = elm_progressbar_add(table); + E_EXPAND(pbar); E_FILL(pbar); + elm_progressbar_span_size_set(pbar, 200 * e_scale); + elm_table_pack(table, pbar, 1, 1, 1, 1); + evas_object_show(pbar); + evas_object_data_set(popup, "mem_active_pbar", pbar); + + label = elm_label_add(table); + E_EXPAND(label); E_ALIGN(label, 0.0, 0.5); + elm_object_text_set(label, _("Buffers")); + elm_table_pack(table, label, 0, 2, 1, 1); + evas_object_show(label); + pbar = elm_progressbar_add(table); + E_EXPAND(pbar); E_FILL(pbar); + elm_progressbar_span_size_set(pbar, 200 * e_scale); + elm_table_pack(table, pbar, 1, 2, 1, 1); + evas_object_show(pbar); + evas_object_data_set(popup, "mem_buffers_pbar", pbar); + + label = elm_label_add(table); + E_EXPAND(label); E_ALIGN(label, 0.0, 0.5); + elm_object_text_set(label, _("Cached")); + elm_table_pack(table, label, 0, 3, 1, 1); + evas_object_show(label); + pbar = elm_progressbar_add(table); + E_EXPAND(pbar); E_FILL(pbar); + elm_progressbar_span_size_set(pbar, 200 * e_scale); + elm_table_pack(table, pbar, 1, 3, 1, 1); + evas_object_show(pbar); + evas_object_data_set(popup, "mem_cached_pbar", pbar); + + // swp frame + frame = elm_frame_add(popup); + E_EXPAND(frame); E_FILL(frame); + snprintf(buf, sizeof(buf), _("Swap usage (available %ld MB)"), + inst->cfg->memusage.swp_total / 1024); + elm_object_text_set(frame, buf); + elm_box_pack_end(box, frame); + evas_object_show(frame); + + pbar = elm_progressbar_add(frame); + E_EXPAND(pbar); E_FILL(pbar); + elm_object_content_set(frame, pbar); + evas_object_show(pbar); + evas_object_data_set(popup, "swap_pbar", pbar); + + // show and place the popup + e_comp_object_util_autoclose(popup, NULL, NULL, NULL); + evas_object_show(popup); + e_gadget_util_ctxpopup_place(inst->o_main, popup, + inst->cfg->memusage.o_gadget); + + return popup; +} + static void _memusage_mouse_down_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_data) { - Evas_Object *label, *popup; Evas_Event_Mouse_Down *ev = event_data; Instance *inst = data; - char text[4096]; if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) return; if (ev->button != 3) @@ -86,30 +221,12 @@ _memusage_mouse_down_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_U { elm_ctxpopup_dismiss(inst->cfg->memusage.popup); inst->cfg->memusage.popup = NULL; - return; } - popup = elm_ctxpopup_add(e_comp->elm); - elm_object_style_set(popup, "noblock"); - evas_object_smart_callback_add(popup, "dismissed", - _memusage_popup_dismissed, inst); - evas_object_event_callback_add(popup, EVAS_CALLBACK_DEL, - _memusage_popup_deleted, inst); - - snprintf(text, sizeof(text), "%s: %d%%
%s: %d%%", - _("Total Memory Usage"), inst->cfg->memusage.mem_percent, - _("Total Swap Usage"), inst->cfg->memusage.swp_percent); - label = elm_label_add(popup); - elm_object_style_set(label, "marker"); - elm_object_text_set(label, text); - elm_object_content_set(popup, label); - evas_object_show(label); - inst->cfg->memusage.popup_label = label; - - e_comp_object_util_autoclose(popup, NULL, NULL, NULL); - evas_object_show(popup); - e_gadget_util_ctxpopup_place(inst->o_main, popup, - inst->cfg->memusage.o_gadget); - inst->cfg->memusage.popup = popup; + else + { + inst->cfg->memusage.popup = _memusage_popup_create(inst); + _memusage_popup_update(inst); + } } else { diff --git a/src/modules/sysinfo/sysinfo.h b/src/modules/sysinfo/sysinfo.h index 41d672e98..e91ca673a 100644 --- a/src/modules/sysinfo/sysinfo.h +++ b/src/modules/sysinfo/sysinfo.h @@ -203,7 +203,6 @@ struct _Config_Item { Evas_Object *o_gadget; Evas_Object *popup; - Evas_Object *popup_label; Evas_Object *configure; int poll_interval; int mem_percent;