okra pushed a commit to branch master.

http://git.enlightenment.org/core/enlightenment.git/commit/?id=6ebb68777c1f78ade034d3e5d7b506a290165c33

commit 6ebb68777c1f78ade034d3e5d7b506a290165c33
Author: Stephen 'Okra' Houston <[email protected]>
Date:   Thu Jan 19 14:17:05 2017 -0600

    Enlightenment - Sysinfo Gadget - Allow configuring of max speeds for 
netstatus gadget.
---
 src/modules/sysinfo/cpumonitor/cpumonitor.c      |   1 +
 src/modules/sysinfo/mod.c                        |  32 ++-
 src/modules/sysinfo/netstatus/netstatus.c        |  15 +-
 src/modules/sysinfo/netstatus/netstatus.h        |  13 +
 src/modules/sysinfo/netstatus/netstatus_config.c | 292 +++++++++++++++++++++--
 src/modules/sysinfo/netstatus/netstatus_proc.c   |  14 +-
 src/modules/sysinfo/sysinfo.c                    |   5 +
 src/modules/sysinfo/sysinfo.h                    |  13 +
 8 files changed, 346 insertions(+), 39 deletions(-)

diff --git a/src/modules/sysinfo/cpumonitor/cpumonitor.c 
b/src/modules/sysinfo/cpumonitor/cpumonitor.c
index a4c712a..187dbb4 100644
--- a/src/modules/sysinfo/cpumonitor/cpumonitor.c
+++ b/src/modules/sysinfo/cpumonitor/cpumonitor.c
@@ -298,6 +298,7 @@ _cpumonitor_created_cb(void *data, Evas_Object *obj, void 
*event_data EINA_UNUSE
    e_gadget_configure_cb_set(inst->o_main, _cpumonitor_configure_cb);
 
    inst->cfg->cpumonitor.o_gadget = elm_box_add(inst->o_main);
+   elm_box_padding_set(inst->cfg->cpumonitor.o_gadget, 0, 0);
    if (orient == E_GADGET_SITE_ORIENT_VERTICAL)
      elm_box_horizontal_set(inst->cfg->cpumonitor.o_gadget, EINA_FALSE);
    else
diff --git a/src/modules/sysinfo/mod.c b/src/modules/sysinfo/mod.c
index 8ef8361..746a2d2 100644
--- a/src/modules/sysinfo/mod.c
+++ b/src/modules/sysinfo/mod.c
@@ -1,5 +1,7 @@
 #include "sysinfo.h"
 
+#define CONFIG_VERSION 1
+
 static E_Config_DD *conf_edd = NULL;
 static E_Config_DD *conf_item_edd = NULL;
 Eina_List *sysinfo_instances = NULL;
@@ -9,12 +11,16 @@ Config *sysinfo_config = NULL;
 EINTERN void
 sysinfo_init(void)
 {
+   Eina_List *l;
+   Config_Item *ci;
+
    conf_item_edd = E_CONFIG_DD_NEW("Sysinfo_Config_Item", Config_Item);
 #undef T
 #undef D
 #define T Config_Item
 #define D conf_item_edd
    E_CONFIG_VAL(D, T, id, INT);
+   E_CONFIG_VAL(D, T, version, INT);
    E_CONFIG_VAL(D, T, esm, INT);
    E_CONFIG_VAL(D, T, batman.poll_interval, INT);
    E_CONFIG_VAL(D, T, batman.alert, INT);
@@ -22,7 +28,7 @@ sysinfo_init(void)
    E_CONFIG_VAL(D, T, batman.alert_timeout, INT);
    E_CONFIG_VAL(D, T, batman.suspend_below, INT);
    E_CONFIG_VAL(D, T, batman.force_mode, INT);
-   #if defined HAVE_EEZE || defined __OpenBSD__ || defined __NetBSD__
+#if defined HAVE_EEZE || defined __OpenBSD__ || defined __NetBSD__
    E_CONFIG_VAL(D, T, batman.fuzzy, INT);
 #endif
    E_CONFIG_VAL(D, T, batman.desktop_notifications, INT);
@@ -42,6 +48,11 @@ sysinfo_init(void)
    E_CONFIG_VAL(D, T, cpumonitor.poll_interval, INT);
    E_CONFIG_VAL(D, T, memusage.poll_interval, INT);
    E_CONFIG_VAL(D, T, netstatus.poll_interval, INT);
+   E_CONFIG_VAL(D, T, netstatus.automax, INT);
+   E_CONFIG_VAL(D, T, netstatus.inmax, INT);
+   E_CONFIG_VAL(D, T, netstatus.receive_units, INT);
+   E_CONFIG_VAL(D, T, netstatus.outmax, INT);
+   E_CONFIG_VAL(D, T, netstatus.send_units, INT);
 
    conf_edd = E_CONFIG_DD_NEW("Sysinfo_Config", Config);
 #undef T
@@ -54,11 +65,10 @@ sysinfo_init(void)
 
    if (!sysinfo_config)
      {
-        Config_Item *ci;
-
         sysinfo_config = E_NEW(Config, 1);
         ci = E_NEW(Config_Item, 1);
         ci->id = 0;
+        ci->version = CONFIG_VERSION;
         ci->esm = E_SYSINFO_MODULE_NONE;
 
         ci->batman.poll_interval = 512;
@@ -102,6 +112,9 @@ sysinfo_init(void)
         ci->memusage.popup = NULL;
         ci->memusage.configure = NULL;
         ci->netstatus.poll_interval = 32;
+        ci->netstatus.automax = EINA_TRUE;
+        ci->netstatus.receive_units = NETSTATUS_UNIT_BYTES;
+        ci->netstatus.send_units = NETSTATUS_UNIT_BYTES;
         ci->netstatus.in = 0;
         ci->netstatus.out = 0;
         ci->netstatus.inmax = 0;
@@ -133,6 +146,19 @@ sysinfo_init(void)
 
         sysinfo_config->items = eina_list_append(sysinfo_config->items, ci);
      }
+   EINA_LIST_FOREACH(sysinfo_config->items, l, ci)
+     {
+        if (ci->esm == E_SYSINFO_MODULE_NETSTATUS || ci->esm == 
E_SYSINFO_MODULE_SYSINFO)
+          {
+             if (ci->version < CONFIG_VERSION)
+               {
+                  ci->version = CONFIG_VERSION;
+                  ci->netstatus.automax = EINA_TRUE;
+                  ci->netstatus.receive_units = NETSTATUS_UNIT_BYTES;
+                  ci->netstatus.send_units = NETSTATUS_UNIT_BYTES;
+               }
+          }
+     }
    e_gadget_type_add("Batman", batman_create, NULL);
    e_gadget_type_add("Thermal", thermal_create, NULL);
    e_gadget_type_add("CpuClock", cpuclock_create, NULL);
diff --git a/src/modules/sysinfo/netstatus/netstatus.c 
b/src/modules/sysinfo/netstatus/netstatus.c
index 4c2633f..93f4a62 100644
--- a/src/modules/sysinfo/netstatus/netstatus.c
+++ b/src/modules/sysinfo/netstatus/netstatus.c
@@ -206,9 +206,6 @@ _netstatus_created_cb(void *data, Evas_Object *obj, void 
*event_data EINA_UNUSED
 
    e_gadget_configure_cb_set(inst->o_main, _netstatus_configure_cb);
 
-   inst->cfg->netstatus.inmax = 0;
-   inst->cfg->netstatus.outmax = 0;
-
    inst->cfg->netstatus.o_gadget = elm_layout_add(inst->o_main);
    e_theme_edje_object_set(inst->cfg->netstatus.o_gadget, 
"base/theme/modules/netstatus",
                            "e/modules/netstatus/main");
@@ -224,9 +221,6 @@ _netstatus_created_cb(void *data, Evas_Object *obj, void 
*event_data EINA_UNUSED
 Evas_Object *
 sysinfo_netstatus_create(Evas_Object *parent, Instance *inst)
 {
-   inst->cfg->netstatus.inmax = 0;
-   inst->cfg->netstatus.outmax = 0;
-
    inst->cfg->netstatus.o_gadget = elm_layout_add(parent);
    e_theme_edje_object_set(inst->cfg->netstatus.o_gadget, 
"base/theme/modules/netstatus",
                            "e/modules/netstatus/main");
@@ -260,10 +254,13 @@ _conf_item_get(int *id)
 
    ci->esm = E_SYSINFO_MODULE_NETSTATUS;
    ci->netstatus.poll_interval = 32;
-   ci->netstatus.in = 0;
-   ci->netstatus.out = 0;
+   ci->netstatus.automax = EINA_TRUE;
    ci->netstatus.inmax = 0;
    ci->netstatus.outmax = 0;
+   ci->netstatus.receive_units = NETSTATUS_UNIT_BYTES;
+   ci->netstatus.send_units = NETSTATUS_UNIT_BYTES;
+   ci->netstatus.in = 0;
+   ci->netstatus.out = 0;
    ci->netstatus.incurrent = 0;
    ci->netstatus.outcurrent = 0;
    ci->netstatus.inpercent = 0;
@@ -287,8 +284,6 @@ netstatus_create(Evas_Object *parent, int *id, 
E_Gadget_Site_Orient orient EINA_
    *id = inst->cfg->id;
    inst->cfg->netstatus.in = 0;
    inst->cfg->netstatus.out = 0;
-   inst->cfg->netstatus.inmax = 0;
-   inst->cfg->netstatus.outmax = 0;
    inst->cfg->netstatus.incurrent = 0;
    inst->cfg->netstatus.outcurrent = 0;
    inst->cfg->netstatus.inpercent = 0;
diff --git a/src/modules/sysinfo/netstatus/netstatus.h 
b/src/modules/sysinfo/netstatus/netstatus.h
index c13e218..5f1772e 100644
--- a/src/modules/sysinfo/netstatus/netstatus.h
+++ b/src/modules/sysinfo/netstatus/netstatus.h
@@ -3,6 +3,19 @@
 
 #include "../sysinfo.h"
 
+typedef struct _Netstatus_Config Netstatus_Config;
+struct _Netstatus_Config
+{
+   Instance *inst;
+   Evas_Object *transfer_check;
+   Evas_Object *receive_max;
+   Evas_Object *receive_units;
+   Evas_Object *send_max;
+   Evas_Object *send_units;
+   int receive_unit_adjust;
+   int send_unit_adjust;
+};
+
 void _netstatus_config_updated(Instance *inst);
 void _netstatus_proc_getrstatus(Instance *inst);
 void _netstatus_proc_gettstatus(Instance *inst);
diff --git a/src/modules/sysinfo/netstatus/netstatus_config.c 
b/src/modules/sysinfo/netstatus/netstatus_config.c
index fc11edd..00b235e 100644
--- a/src/modules/sysinfo/netstatus/netstatus_config.c
+++ b/src/modules/sysinfo/netstatus/netstatus_config.c
@@ -3,16 +3,19 @@
 static void
 _config_close(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, 
void *event_info EINA_UNUSED)
 {
-   Instance *inst = data;
+   Netstatus_Config *nc = data;
+   Instance *inst = nc->inst;
 
    E_FREE_FUNC(inst->cfg->netstatus.configure, evas_object_del);
+   E_FREE_FUNC(nc, free);
    e_config_save_queue();
 }
 
 static void
-_config_changed(void *data, Evas_Object *obj, void *event_info EINA_UNUSED)
+_poll_changed(void *data, Evas_Object *obj, void *event_info EINA_UNUSED)
 {
-   Instance *inst = data;
+   Netstatus_Config *nc = data;
+   Instance *inst = nc->inst;
    int value = elm_radio_value_get(obj);
 
    switch(value)
@@ -35,44 +38,159 @@ _config_changed(void *data, Evas_Object *obj, void 
*event_info EINA_UNUSED)
         default:
           inst->cfg->netstatus.poll_interval = 32;
      }
+
+   e_config_save_queue();
+   _netstatus_config_updated(inst);
+}
+
+static void
+_update_receive_maximums(void *data, Evas_Object *obj EINA_UNUSED, void 
*event_info EINA_UNUSED)
+{
+   Netstatus_Config *nc = data;
+   Instance *inst = nc->inst;
+   int value = elm_slider_value_get(nc->receive_max);
+
+   inst->cfg->netstatus.inmax = value * nc->receive_unit_adjust;
+   e_config_save_queue();
+   _netstatus_config_updated(inst);
+}
+
+static void
+_update_send_maximums(void *data, Evas_Object *obj EINA_UNUSED, void 
*event_info EINA_UNUSED)
+{
+   Netstatus_Config *nc = data;
+   Instance *inst = nc->inst;
+   int value = elm_slider_value_get(nc->send_max);
+
+   inst->cfg->netstatus.outmax = value * nc->send_unit_adjust;
    e_config_save_queue();
    _netstatus_config_updated(inst);
 }
-   
+
+static void
+_receive_hover_changed(void *data, Evas_Object *obj EINA_UNUSED, void 
*event_info)
+{
+   Netstatus_Config *nc = data;
+   Instance *inst = nc->inst;
+   const char *txt = elm_object_item_text_get(event_info);
+
+   if (!strcmp(txt, _("Bytes")))
+     {
+        inst->cfg->netstatus.receive_units = NETSTATUS_UNIT_BYTES;
+        nc->receive_unit_adjust = 1;
+     }
+   if (!strcmp(txt, _("KB")))
+     {
+        inst->cfg->netstatus.receive_units = NETSTATUS_UNIT_KB;
+        nc->receive_unit_adjust = 1024;
+     }
+   if (!strcmp(txt, _("MB")))
+     {
+        inst->cfg->netstatus.receive_units = NETSTATUS_UNIT_MB;
+        nc->receive_unit_adjust = 2048;
+     }
+   if (!strcmp(txt, _("GB")))
+     {
+        inst->cfg->netstatus.receive_units = NETSTATUS_UNIT_GB;
+        nc->receive_unit_adjust = 3072;
+     }
+   _update_receive_maximums(nc, NULL, NULL);
+}
+
+static void
+_send_hover_changed(void *data, Evas_Object *obj EINA_UNUSED, void *event_info)
+{
+   Netstatus_Config *nc = data;
+   Instance *inst = nc->inst;
+   const char *txt = elm_object_item_text_get(event_info);
+
+   if (!strcmp(txt, _("Bytes")))
+     {
+        inst->cfg->netstatus.send_units = NETSTATUS_UNIT_BYTES;
+        nc->send_unit_adjust = 1;
+     }
+   if (!strcmp(txt, _("KB")))
+     {
+        inst->cfg->netstatus.send_units = NETSTATUS_UNIT_KB;
+        nc->send_unit_adjust = 1024;
+     }
+   if (!strcmp(txt, _("MB")))
+     {
+        inst->cfg->netstatus.send_units = NETSTATUS_UNIT_MB;
+        nc->send_unit_adjust = 2048;
+     }
+   if (!strcmp(txt, _("GB")))
+     {
+        inst->cfg->netstatus.send_units = NETSTATUS_UNIT_GB;
+        nc->send_unit_adjust = 3072;
+     }
+   _update_send_maximums(nc, NULL, NULL);
+}
+
+static void
+_check_changed(void *data, Evas_Object *obj EINA_UNUSED, void *event_info 
EINA_UNUSED)
+{
+   Netstatus_Config *nc = data;
+   Instance *inst = nc->inst;
+
+   if (elm_check_state_get(nc->transfer_check))
+     {
+        elm_object_disabled_set(nc->receive_max, EINA_TRUE);
+        elm_object_disabled_set(nc->receive_units, EINA_TRUE);
+        elm_object_disabled_set(nc->send_max, EINA_TRUE);
+        elm_object_disabled_set(nc->send_units, EINA_TRUE);
+        inst->cfg->netstatus.automax = EINA_TRUE;
+     }
+   else
+     {
+        elm_object_disabled_set(nc->receive_max, EINA_FALSE);
+        elm_object_disabled_set(nc->receive_units, EINA_FALSE);
+        elm_object_disabled_set(nc->send_max, EINA_FALSE);
+        elm_object_disabled_set(nc->send_units, EINA_FALSE);\
+        inst->cfg->netstatus.automax = EINA_FALSE;
+        _update_receive_maximums(nc, NULL, NULL);
+        _update_send_maximums(nc, NULL, NULL);
+     }
+}
+
 Evas_Object *
 netstatus_configure(Instance *inst)
 {
-   Evas_Object *popup, *frame, *box, *o, *group, *lbl;
+   Evas_Object *popup, *frame, *main_box, *box, *o, *group, *lbl;
+   Evas_Object *hover, *slider, *check;
    E_Zone *zone = e_zone_current_get();
+   Netstatus_Config *nc = E_NEW(Netstatus_Config, 1);
+
+   nc->inst = inst;
 
    popup = elm_popup_add(e_comp->elm);
    E_EXPAND(popup);
    elm_popup_allow_events_set(popup, 1);
    elm_popup_scrollable_set(popup, 1);
 
-   box = elm_box_add(popup);
-   elm_box_horizontal_set(box, EINA_FALSE);
-   E_EXPAND(box);
-   E_FILL(box);
-   evas_object_show(box);
-   elm_object_content_set(popup, box);
+   main_box = elm_box_add(popup);
+   elm_box_horizontal_set(main_box, EINA_FALSE);
+   E_EXPAND(main_box);
+   E_FILL(main_box);
+   evas_object_show(main_box);
+   elm_object_content_set(popup, main_box);
 
-   lbl = elm_label_add(box);
+   lbl = elm_label_add(main_box);
    evas_object_size_hint_weight_set(lbl, EVAS_HINT_EXPAND, 0.0);
    evas_object_size_hint_align_set(lbl, EVAS_HINT_FILL, EVAS_HINT_FILL);
    elm_object_style_set(lbl, "marker");
    elm_object_text_set(lbl, _("NetStatus Configuration"));
-   elm_box_pack_end(box, lbl);
+   elm_box_pack_end(main_box, lbl);
    evas_object_show(lbl);
 
-   frame = elm_frame_add(box);
+   frame = elm_frame_add(main_box);
    elm_object_text_set(frame, _("Update Poll Interval"));
    E_EXPAND(frame);
    E_FILL(frame);
-   elm_box_pack_end(box, frame);
+   elm_box_pack_end(main_box, frame);
    evas_object_show(frame);
 
-   box = elm_box_add(popup);
+   box = elm_box_add(frame);
    elm_box_horizontal_set(box, EINA_FALSE);
    E_EXPAND(box);
    evas_object_show(box);
@@ -83,7 +201,7 @@ netstatus_configure(Instance *inst)
    E_ALIGN(o, 0, 0);
    elm_object_text_set(o, _("Fast (4 ticks)"));
    elm_box_pack_end(box, o);
-   evas_object_smart_callback_add(o, "changed", _config_changed, inst);
+   evas_object_smart_callback_add(o, "changed", _poll_changed, inst);
    evas_object_show(o);
    group = o;
 
@@ -94,7 +212,7 @@ netstatus_configure(Instance *inst)
    E_ALIGN(o, 0, 0);
    elm_object_text_set(o, _("Medium (8 ticks)"));
    elm_box_pack_end(box, o);
-   evas_object_smart_callback_add(o, "changed", _config_changed, inst);
+   evas_object_smart_callback_add(o, "changed", _poll_changed, inst);
    evas_object_show(o);
 
    o = elm_radio_add(box);
@@ -104,7 +222,7 @@ netstatus_configure(Instance *inst)
    E_ALIGN(o, 0, 0);
    elm_object_text_set(o, _("Normal (32 ticks)"));
    elm_box_pack_end(box, o);
-   evas_object_smart_callback_add(o, "changed", _config_changed, inst);
+   evas_object_smart_callback_add(o, "changed", _poll_changed, inst);
    evas_object_show(o);
 
    o = elm_radio_add(box);
@@ -113,7 +231,7 @@ netstatus_configure(Instance *inst)
    E_ALIGN(o, 0, 0);
    elm_object_text_set(o, _("Slow (64 ticks)"));
    elm_box_pack_end(box, o);
-   evas_object_smart_callback_add(o, "changed", _config_changed, inst);
+   evas_object_smart_callback_add(o, "changed", _poll_changed, inst);
    evas_object_show(o);
 
    o = elm_radio_add(box);
@@ -123,7 +241,7 @@ netstatus_configure(Instance *inst)
    E_ALIGN(o, 0, 0);
    elm_object_text_set(o, _("Very Slow (256 ticks)"));
    elm_box_pack_end(box, o);
-   evas_object_smart_callback_add(o, "changed", _config_changed, inst);
+   evas_object_smart_callback_add(o, "changed", _poll_changed, inst);
    evas_object_show(o);
 
    switch(inst->cfg->netstatus.poll_interval)
@@ -148,13 +266,143 @@ netstatus_configure(Instance *inst)
      }
 
    elm_object_content_set(frame, box);
+
+   frame = elm_frame_add(main_box);
+   elm_object_text_set(frame, _("Maximum Transfer Speed"));
+   E_EXPAND(frame);
+   E_FILL(frame);
+   elm_box_pack_end(main_box, frame);
+   evas_object_show(frame);
+
+   box = elm_box_add(frame);
+   elm_box_horizontal_set(box, EINA_FALSE);
+   E_EXPAND(box);
+   evas_object_show(box);
+
+   check = elm_check_add(box);
+   elm_object_text_set(check, _("Use Automatic Maximums"));
+   elm_check_state_set(check, inst->cfg->netstatus.automax);
+   evas_object_size_hint_align_set(check, EVAS_HINT_FILL, 0.5);
+   evas_object_size_hint_weight_set(check, EVAS_HINT_EXPAND, 0.0);
+   evas_object_smart_callback_add(check, "changed", _check_changed, nc);
+   elm_box_pack_end(box, check);
+   evas_object_show(check);
+   nc->transfer_check = check;
+
+   slider = elm_slider_add(box);
+   elm_object_text_set(slider, _("Receive:"));
+   elm_slider_unit_format_set(slider, "%1.0f");
+   elm_slider_indicator_format_set(slider, "%1.0f");
+   elm_slider_min_max_set(slider, 0, 1000);
+   elm_slider_value_set(slider, inst->cfg->netstatus.inmax);
+   elm_slider_step_set(slider, 10);
+   elm_slider_span_size_set(slider, 100);
+   evas_object_size_hint_align_set(slider, EVAS_HINT_FILL, 0.5);
+   evas_object_size_hint_weight_set(slider, EVAS_HINT_EXPAND, 0.0);
+   evas_object_smart_callback_add(slider, "delay,changed", 
_update_receive_maximums, nc);
+   if (inst->cfg->netstatus.automax) elm_object_disabled_set(slider, 
EINA_TRUE);
+   elm_box_pack_end(box, slider);
+   evas_object_show(slider);
+   nc->receive_max = slider;
+
+   hover = elm_hoversel_add(box);
+   elm_hoversel_auto_update_set(hover, EINA_TRUE);
+   elm_hoversel_hover_parent_set(hover, popup);
+   elm_hoversel_item_add(hover, _("Bytes"), NULL, ELM_ICON_NONE, NULL, NULL);
+   if (inst->cfg->netstatus.receive_units == NETSTATUS_UNIT_BYTES)
+     {
+        elm_object_text_set(hover, _("Bytes"));
+        nc->receive_unit_adjust = 1;
+     }
+   elm_hoversel_item_add(hover, _("KB"), NULL, ELM_ICON_NONE, NULL, NULL);
+   if (inst->cfg->netstatus.receive_units == NETSTATUS_UNIT_KB)
+     {
+        elm_object_text_set(hover, _("KB"));
+        nc->receive_unit_adjust = 1024;
+     }
+   elm_hoversel_item_add(hover, _("MB"), NULL, ELM_ICON_NONE, NULL, NULL);
+   if (inst->cfg->netstatus.receive_units == NETSTATUS_UNIT_MB)
+     {
+        elm_object_text_set(hover, _("MB"));
+        nc->receive_unit_adjust = 2048;
+     }
+   elm_hoversel_item_add(hover, _("GB"), NULL, ELM_ICON_NONE, NULL, NULL);
+   if (inst->cfg->netstatus.receive_units == NETSTATUS_UNIT_GB)
+     {
+        elm_object_text_set(hover, _("GB"));
+        nc->receive_unit_adjust = 3072;
+     }
+   evas_object_size_hint_align_set(hover, EVAS_HINT_FILL, 0.5);
+   evas_object_size_hint_weight_set(hover, EVAS_HINT_EXPAND, 0.0);
+   if (inst->cfg->netstatus.automax) elm_object_disabled_set(hover, EINA_TRUE);
+   evas_object_smart_callback_add(hover, "selected", _receive_hover_changed, 
nc);
+   elm_box_pack_end(box, hover);
+   evas_object_show(hover);
+   nc->receive_units = hover;
+
+   elm_slider_value_set(nc->receive_max, ceil(inst->cfg->netstatus.inmax / 
nc->receive_unit_adjust));
+
+   slider = elm_slider_add(box);
+   elm_object_text_set(slider, _("Send:"));
+   elm_slider_unit_format_set(slider, "%1.0f");
+   elm_slider_indicator_format_set(slider, "%1.0f");
+   elm_slider_min_max_set(slider, 0, 1000);
+   elm_slider_value_set(slider, inst->cfg->netstatus.outmax);
+   elm_slider_step_set(slider, 10);
+   elm_slider_span_size_set(slider, 100);
+   evas_object_size_hint_align_set(slider, EVAS_HINT_FILL, 0.5);
+   evas_object_size_hint_weight_set(slider, EVAS_HINT_EXPAND, 0.0);
+   evas_object_smart_callback_add(slider, "delay,changed", 
_update_send_maximums, nc);
+   if (inst->cfg->netstatus.automax) elm_object_disabled_set(slider, 
EINA_TRUE);
+   elm_box_pack_end(box, slider);
+   evas_object_show(slider);
+   nc->send_max = slider;
+
+   hover = elm_hoversel_add(box);
+   elm_hoversel_auto_update_set(hover, EINA_TRUE);
+   elm_hoversel_hover_parent_set(hover, popup);
+   elm_hoversel_item_add(hover, _("Bytes"), NULL, ELM_ICON_NONE, NULL, nc);
+   if (inst->cfg->netstatus.send_units == NETSTATUS_UNIT_BYTES)
+     {
+        elm_object_text_set(hover, _("Bytes"));
+        nc->send_unit_adjust = 1;
+     }
+   elm_hoversel_item_add(hover, _("KB"), NULL, ELM_ICON_NONE, NULL, nc);
+   if (inst->cfg->netstatus.send_units == NETSTATUS_UNIT_KB)
+     {
+        elm_object_text_set(hover, _("KB"));
+        nc->send_unit_adjust = 1024;
+     }
+   elm_hoversel_item_add(hover, _("MB"), NULL, ELM_ICON_NONE, NULL, nc);
+   if (inst->cfg->netstatus.send_units == NETSTATUS_UNIT_MB)
+     {
+        elm_object_text_set(hover, _("MB"));
+        nc->send_unit_adjust = 2048;
+     }
+   elm_hoversel_item_add(hover, _("GB"), NULL, ELM_ICON_NONE, NULL, nc);
+   if (inst->cfg->netstatus.send_units == NETSTATUS_UNIT_GB)
+     {
+        elm_object_text_set(hover, _("GB"));
+        nc->send_unit_adjust = 3072;
+     }
+   evas_object_size_hint_align_set(hover, EVAS_HINT_FILL, 0.5);
+   evas_object_size_hint_weight_set(hover, EVAS_HINT_EXPAND, 0.0);
+   if (inst->cfg->netstatus.automax) elm_object_disabled_set(hover, EINA_TRUE);
+   evas_object_smart_callback_add(hover, "selected", _send_hover_changed, nc);
+   elm_box_pack_end(box, hover);
+   evas_object_show(hover);
+   nc->send_units = hover;
+
+   elm_slider_value_set(nc->send_max, ceil(inst->cfg->netstatus.outmax / 
nc->send_unit_adjust));
+
+   elm_object_content_set(frame, box);
    popup = e_comp_object_util_add(popup, E_COMP_OBJECT_TYPE_NONE);
    evas_object_layer_set(popup, E_LAYER_POPUP);
    evas_object_resize(popup, zone->w / 4, zone->h / 3);
    e_comp_object_util_center_on_zone(popup, zone);
    evas_object_show(popup);
    e_comp_object_util_autoclose(popup, NULL, 
e_comp_object_util_autoclose_on_escape, NULL);
-   evas_object_event_callback_add(popup, EVAS_CALLBACK_DEL, _config_close, 
inst);
+   evas_object_event_callback_add(popup, EVAS_CALLBACK_DEL, _config_close, nc);
 
    return inst->cfg->netstatus.configure = popup;
 }
diff --git a/src/modules/sysinfo/netstatus/netstatus_proc.c 
b/src/modules/sysinfo/netstatus/netstatus_proc.c
index 86d6ae3..b2f56f0 100644
--- a/src/modules/sysinfo/netstatus/netstatus_proc.c
+++ b/src/modules/sysinfo/netstatus/netstatus_proc.c
@@ -29,8 +29,11 @@ _netstatus_proc_getrstatus(Instance *inst)
    else
      {
         inst->cfg->netstatus.in = tot_in;
-        if (diffin > inst->cfg->netstatus.inmax)
-          inst->cfg->netstatus.inmax = diffin;
+        if (inst->cfg->netstatus.automax)
+          {
+             if (diffin > inst->cfg->netstatus.inmax)
+               inst->cfg->netstatus.inmax = diffin;
+          }
         inst->cfg->netstatus.incurrent = diffin;
         if (inst->cfg->netstatus.inmax > 0)
           percent = 100 * ((float)inst->cfg->netstatus.incurrent / 
(float)inst->cfg->netstatus.inmax);
@@ -84,8 +87,11 @@ _netstatus_proc_gettstatus(Instance *inst)
    else
      {
         inst->cfg->netstatus.out = tot_out;
-        if (diffout > inst->cfg->netstatus.outmax)
-          inst->cfg->netstatus.outmax = diffout;
+        if (inst->cfg->netstatus.automax)
+          {
+             if (diffout > inst->cfg->netstatus.outmax)
+               inst->cfg->netstatus.outmax = diffout;
+          }
         inst->cfg->netstatus.outcurrent = diffout;
         if (inst->cfg->netstatus.outcurrent > 0)
           percent = 100 * ((float)inst->cfg->netstatus.outcurrent / 
(float)inst->cfg->netstatus.outmax);
diff --git a/src/modules/sysinfo/sysinfo.c b/src/modules/sysinfo/sysinfo.c
index 05433fb..c36455a 100644
--- a/src/modules/sysinfo/sysinfo.c
+++ b/src/modules/sysinfo/sysinfo.c
@@ -135,6 +135,11 @@ _conf_item_get(int *id)
    ci->netstatus.outstring = NULL;
    ci->netstatus.popup = NULL;
    ci->netstatus.configure = NULL;
+   ci->netstatus.automax = EINA_TRUE;
+   ci->netstatus.inmax = 0;
+   ci->netstatus.outmax = 0;
+   ci->netstatus.receive_units = NETSTATUS_UNIT_BYTES;
+   ci->netstatus.send_units = NETSTATUS_UNIT_BYTES;
 
    sysinfo_config->items = eina_list_append(sysinfo_config->items, ci);
 
diff --git a/src/modules/sysinfo/sysinfo.h b/src/modules/sysinfo/sysinfo.h
index 2c41a91..b3dcb02 100644
--- a/src/modules/sysinfo/sysinfo.h
+++ b/src/modules/sysinfo/sysinfo.h
@@ -27,6 +27,15 @@ enum _E_Sysinfo_Module
    E_SYSINFO_MODULE_SYSINFO
 };
 
+typedef enum _Netstatus_Unit Netstatus_Unit;
+enum _Netstatus_Unit
+{
+   NETSTATUS_UNIT_BYTES = 0,
+   NETSTATUS_UNIT_KB,
+   NETSTATUS_UNIT_MB,
+   NETSTATUS_UNIT_GB
+};
+
 typedef enum _Sensor_Type
 {
    SENSOR_TYPE_NONE,
@@ -112,6 +121,7 @@ struct _Config
 struct _Config_Item
 {
    int                     id;
+   int                     version;
    E_Sysinfo_Module        esm;
    struct
    {
@@ -203,6 +213,9 @@ struct _Config_Item
       Evas_Object         *o_gadget;
       Evas_Object         *popup;
       Evas_Object         *configure;
+      Eina_Bool            automax;
+      Netstatus_Unit       receive_units;
+      Netstatus_Unit       send_units;
       int                  poll_interval;
       long                 in;
       long                 out;

-- 


Reply via email to