Enlightenment CVS committal Author : urandom Project : e_modules Module : cpu
Dir : e_modules/cpu Modified Files: Makefile.am cpu.edc e_mod_main.c e_mod_main.h Added Files: VeraBd.ttf e_mod_config.c Log Message: history chart of cpu usage. the module config file should be deleted. =================================================================== RCS file: /cvs/e/e_modules/cpu/Makefile.am,v retrieving revision 1.17 retrieving revision 1.18 diff -u -3 -r1.17 -r1.18 --- Makefile.am 30 Mar 2007 21:14:54 -0000 1.17 +++ Makefile.am 26 Aug 2007 11:32:08 -0000 1.18 @@ -13,6 +13,7 @@ EXTRA_DIST = $(files_DATA) \ cpu.edc \ VeraMono.ttf \ +VeraBd.ttf \ cpu.png \ e_modules-cpu.spec @@ -28,7 +29,8 @@ pkgdir = $(datadir)/$(MODULE_ARCH) pkg_LTLIBRARIES = module.la module_la_SOURCES = e_mod_main.c \ - e_mod_main.h + e_mod_main.h \ + e_mod_config.c module_la_LIBADD = @e_libs@ module_la_LDFLAGS = -module -avoid-version =================================================================== RCS file: /cvs/e/e_modules/cpu/cpu.edc,v retrieving revision 1.17 retrieving revision 1.18 diff -u -3 -r1.17 -r1.18 --- cpu.edc 23 May 2007 22:04:17 -0000 1.17 +++ cpu.edc 26 Aug 2007 11:32:08 -0000 1.18 @@ -6,6 +6,7 @@ fonts { font: "VeraMono.ttf" "VeraMono"; + font: "VeraBd.ttf" "VeraBold"; } styles @@ -17,74 +18,738 @@ } } -collections -{ - group - { - name: "modules/cpu/main"; - parts - { - part - { - name: "fade_clip"; - type: RECT; - mouse_events: 0; - description - { - state: "default" 0.0; - color: 255 255 255 255; - } - } - part - { - name: "cpu"; - clip_to: "fade_clip"; - description - { - state: "default" 0.0; - aspect: 1.0 1.0; - aspect_preference: BOTH; - align: 0.5 0.5; - rel1 - { - relative: 0.0 0.0; - } - rel2 - { - relative: 1.0 1.0; - } - image - { - normal: "cpu.png"; - } - } - } - part - { - name: "load"; - type: TEXTBLOCK; - effect: SOFT_SHADOW; - mouse_events: 0; - clip_to: "fade_clip"; - description - { - state: "default" 0.0; - align: 0.5 0.5; - rel1 - { - relative: 0.0 0.0; - to: "cpu"; - } - rel2 - { - relative: 1.0 1.0; - to: "cpu"; - } - text { - style: "cpu_style"; - min: 0 1; - } - } - } - } +collections { + group { + name: "modules/cpu/main"; + parts { + part { + name: "fade_clip"; + type: RECT; + mouse_events: 0; + description { + state: "default" 0.0; + color: 255 255 255 255; + } + } + part { + name: "cpu"; + clip_to: "fade_clip"; + description { + state: "default" 0.0; + aspect: 1.0 1.0; + aspect_preference: BOTH; + align: 0.5 0.5; + rel1.relative: 0.0 0.0; + rel2.relative: 1.0 1.0; + image.normal: "cpu.png"; + } + } + part { + name: "load"; + type: TEXTBLOCK; + effect: SOFT_SHADOW; + mouse_events: 0; + clip_to: "fade_clip"; + description { + state: "default" 0.0; + align: 0.5 0.5; + rel1 { + relative: 0.0 0.0; + to: "cpu"; + } + rel2 { + relative: 1.0 1.0; + to: "cpu"; + } + text { + style: "cpu_style"; + min: 0 1; + } + } + } + } + } + group { + name: "modules/cpu/popup"; + data { + item: "chart_color1" "0 59 179 170"; + item: "chart_color2" "4 179 0 170"; + item: "chart_color3" "180 0 0 170"; + item: "chart_color4" "179 55 0 170"; + } + + parts { + part { + name: "bg"; + type: RECT; + + description { + state: "default" 0.0; + min: 100 100; + color: 0 0 0 0; + } + description { + state: "cpu_count_2" 0.0; + inherit: "default" 0.0; + min: 200 100; + } + description { + state: "cpu_count_3" 0.0; + inherit: "default" 0.0; + min: 150 100; + } + description { + state: "cpu_count_4" 0.0; + inherit: "default" 0.0; + min: 150 150; + } + } + + part { + name: "chart1"; + type: SWALLOW; + + description { + state: "default" 0.0; + rel1 { + relative: 0.04 0.04; + offset: 0 0; + } + rel2 { + relative: 0.96 0.96; + offset: -1 -1; + } + color: 255 255 255 255; + } + description { + state: "cpu_count_2" 0.0; + inherit: "default" 0.0; + rel1.relative: 0.04 0.04; + rel2.relative: 0.48 0.96; + } + description { + state: "cpu_count_3" 0.0; + inherit: "default" 0.0; + rel1.relative: 0.04 0.04; + rel2.relative: 0.6 0.96; + } + description { + state: "cpu_count_4" 0.0; + inherit: "default" 0.0; + rel1.relative: 0.04 0.04; + rel2.relative: 0.48 0.48; + } + } + part { + name: "chart2"; + type: SWALLOW; + + description { + state: "default" 0.0; + visible: 0; + color: 255 255 255 255; + } + description { + state: "cpu_count_2" 0.0; + inherit: "default" 0.0; + visible: 1; + rel1.relative: 0.52 0.04; + rel2.relative: 0.96 0.96; + } + description { + state: "cpu_count_3" 0.0; + inherit: "default" 0.0; + visible: 1; + rel1.relative: 0.62 0.04; + rel2.relative: 0.96 0.48; + } + description { + state: "cpu_count_4" 0.0; + inherit: "default" 0.0; + visible: 1; + rel1.relative: 0.52 0.04; + rel2.relative: 0.96 0.48; + } + } + part { + name: "chart3"; + type: SWALLOW; + + description { + state: "default" 0.0; + visible: 0; + color: 255 255 255 255; + } + description { + state: "cpu_count_2" 0.0; + inherit: "default" 0.0; + } + description { + state: "cpu_count_3" 0.0; + inherit: "default" 0.0; + visible: 1; + rel1.relative: 0.62 0.52; + rel2.relative: 0.96 0.96; + } + description { + state: "cpu_count_4" 0.0; + inherit: "default" 0.0; + visible: 1; + rel1.relative: 0.04 0.52; + rel2.relative: 0.48 0.96; + } + } + part { + name: "chart4"; + type: SWALLOW; + + description { + state: "default" 0.0; + visible: 0; + color: 255 255 255 255; + } + description { + state: "cpu_count_2" 0.0; + inherit: "default" 0.0; + } + description { + state: "cpu_count_3" 0.0; + inherit: "default" 0.0; + } + description { + state: "cpu_count_4" 0.0; + inherit: "default" 0.0; + visible: 1; + rel1.relative: 0.52 0.52; + rel2.relative: 0.96 0.96; + } + } + + part { + name: "num1"; + type: TEXT; + effect: SOFT_SHADOW; + + description { + state: "default" 0.0; + fixed: 1 1; + rel1.relative: 0.5 0.5; + rel2.relative: 0.5 0.5; + color: 255 255 255 255; + color3: 0 0 0 42; + text { + text: "1"; + min: 1 1; + size: 30; + font: "VeraBold"; + align: 0.5 0.5; + } + } + description { + state: "cpu_count_2" 0.0; + inherit: "default" 0.0; + rel1.relative: 0.25 0.5; + rel2.relative: 0.25 0.5; + } + description { + state: "cpu_count_3" 0.0; + inherit: "default" 0.0; + rel1.relative: 0.33333 0.5; + rel2.relative: 0.33333 0.5; + } + description { + state: "cpu_count_4" 0.0; + inherit: "default" 0.0; + rel1.relative: 0.25 0.25; + rel2.relative: 0.25 0.25; + text.size: 20; + } + } + part { + name: "num2"; + type: TEXT; + effect: SOFT_SHADOW; + + description { + state: "default" 0.0; + fixed: 1 1; + visible: 0; + color: 255 255 255 255; + color3: 0 0 0 42; + text { + text: "2"; + min: 1 1; + size: 30; + font: "VeraBold"; + align: 0.5 0.5; + } + } + description { + state: "cpu_count_2" 0.0; + inherit: "default" 0.0; + visible: 1; + rel1.relative: 0.75 0.5; + rel2.relative: 0.75 0.5; + } + description { + state: "cpu_count_3" 0.0; + inherit: "default" 0.0; + visible: 1; + rel1.relative: 0.833333 0.25; + rel2.relative: 0.833333 0.25; + text.size: 20; + } + description { + state: "cpu_count_4" 0.0; + inherit: "default" 0.0; + visible: 1; + rel1.relative: 0.75 0.25; + rel2.relative: 0.75 0.25; + text.size: 20; + } + } + part { + name: "num3"; + type: TEXT; + effect: SOFT_SHADOW; + + description { + state: "default" 0.0; + fixed: 1 1; + color: 255 255 255 255; + color3: 0 0 0 42; + visible: 0; + text { + text: "3"; + min: 1 1; + size: 30; + font: "VeraBold"; + align: 0.5 0.5; + } + } + description { + state: "cpu_count_2" 0.0; + inherit: "default" 0.0; + } + description { + state: "cpu_count_3" 0.0; + inherit: "default" 0.0; + visible: 1; + rel1.relative: 0.833333 0.75; + rel2.relative: 0.833333 0.75; + text.size: 20; + } + description { + state: "cpu_count_4" 0.0; + inherit: "default" 0.0; + visible: 1; + rel1.relative: 0.25 0.75; + rel2.relative: 0.25 0.75; + text.size: 20; + } + } + part { + name: "num4"; + type: TEXT; + effect: SOFT_SHADOW; + + description { + state: "default" 0.0; + fixed: 1 1; + color: 255 255 255 255; + color3: 0 0 0 42; + visible: 0; + text { + text: "4"; + min: 1 1; + size: 30; + font: "VeraBold"; + align: 0.5 0.5; + } + } + description { + state: "cpu_count_2" 0.0; + inherit: "default" 0.0; + } + description { + state: "cpu_count_3" 0.0; + inherit: "default" 0.0; + } + description { + state: "cpu_count_4" 0.0; + inherit: "default" 0.0; + visible: 1; + rel1.relative: 0.75 0.75; + rel2.relative: 0.75 0.75; + text.size: 20; + } + } + part { + name: "y1"; + type: RECT; + + description { + state: "default" 0.0; + min: 1 1; + max: 1 9999; + fixed: 1 1; + rel1 { + relative: 0.04 0.04; + offset: -1 -4; + } + rel2 { + relative: 0.04 0.96; + offset: -1 2; + } + color: 0 0 0 255; + } + description { + state: "cpu_count_2" 0.0; + inherit: "default" 0.0; + rel1.relative: 0.04 0.04; + rel2.relative: 0.04 0.96; + } + description { + state: "cpu_count_3" 0.0; + inherit: "default" 0.0; + rel1.relative: 0.04 0.04; + rel2.relative: 0.04 0.96; + } + description { + state: "cpu_count_4" 0.0; + inherit: "default" 0.0; + rel1.relative: 0.04 0.04; + rel2.relative: 0.04 0.48; + } + } + part { + name: "y2"; + type: RECT; + + description { + state: "default" 0.0; + min: 1 1; + max: 1 9999; + fixed: 1 1; + visible: 0; + rel1.offset: -1 -4; + rel2.offset: -1 2; + color: 0 0 0 255; + } + description { + state: "cpu_count_2" 0.0; + inherit: "default" 0.0; + visible: 1; + rel1.relative: 0.52 0.04; + rel2.relative: 0.52 0.96; + } + description { + state: "cpu_count_3" 0.0; + inherit: "default" 0.0; + visible: 1; + rel1.relative: 0.62 0.04; + rel2.relative: 0.62 0.48; + } + description { + state: "cpu_count_4" 0.0; + inherit: "default" 0.0; + visible: 1; + rel1.relative: 0.52 0.04; + rel2.relative: 0.52 0.48; + } + } + part { + name: "y3"; + type: RECT; + + description { + state: "default" 0.0; + min: 1 1; + max: 1 9999; + fixed: 1 1; + visible: 0; + rel1.offset: -1 -4; + rel2.offset: -1 2; + color: 0 0 0 255; + } + description { + state: "cpu_count_2" 0.0; + inherit: "default" 0.0; + } + description { + state: "cpu_count_3" 0.0; + inherit: "default" 0.0; + visible: 1; + rel1.relative: 0.62 0.52; + rel2.relative: 0.62 0.96; + } + description { + state: "cpu_count_4" 0.0; + inherit: "default" 0.0; + visible: 1; + rel1.relative: 0.04 0.52; + rel2.relative: 0.04 0.96; + } + } + part { + name: "y4"; + type: RECT; + + description { + state: "default" 0.0; + min: 1 1; + max: 1 9999; + fixed: 1 1; + visible: 0; + rel1.offset: -1 -4; + rel2.offset: -1 2; + color: 0 0 0 255; + } + description { + state: "cpu_count_2" 0.0; + inherit: "default" 0.0; + } + description { + state: "cpu_count_3" 0.0; + inherit: "default" 0.0; + } + description { + state: "cpu_count_4" 0.0; + inherit: "default" 0.0; + visible: 1; + rel1.relative: 0.52 0.52; + rel2.relative: 0.52 0.96; + } + } + part { + name: "x1"; + type: RECT; + + description { + state: "default" 0.0; + min: 1 1; + max: 9999 1; + fixed: 1 1; + rel1 { + relative: 0.04 0.96; + offset: -4 0; + } + rel2 { + relative: 0.96 0.96; + offset: 2 0; + } + color: 0 0 0 255; + } + description { + state: "cpu_count_2" 0.0; + inherit: "default" 0.0; + rel2.relative: 0.48 0.96; + } + description { + state: "cpu_count_3" 0.0; + inherit: "default" 0.0; + rel2.relative: 0.6 0.96; + } + description { + state: "cpu_count_4" 0.0; + inherit: "default" 0.0; + rel1.relative: 0.04 0.48; + rel2.relative: 0.48 0.48; + } + } + part { + name: "x2"; + type: RECT; + + description { + state: "default" 0.0; + min: 1 1; + max: 9999 1; + fixed: 1 1; + visible: 0; + rel1.offset: -4 0; + rel2.offset: 2 0; + color: 0 0 0 255; + } + description { + state: "cpu_count_2" 0.0; + inherit: "default" 0.0; + visible: 1; + rel1.relative: 0.52 0.96; + rel2.relative: 0.96 0.96; + } + description { + state: "cpu_count_3" 0.0; + inherit: "default" 0.0; + visible: 1; + rel1.relative: 0.62 0.48; + rel2.relative: 0.96 0.48; + } + description { + state: "cpu_count_4" 0.0; + inherit: "default" 0.0; + visible: 1; + rel1.relative: 0.52 0.48; + rel2.relative: 0.96 0.48; + } + } + part { + name: "x3"; + type: RECT; + + description { + state: "default" 0.0; + min: 1 1; + max: 9999 1; + fixed: 1 1; + visible: 0; + rel1.offset: -4 0; + rel2.offset: 2 0; + color: 0 0 0 255; + } + description { + state: "cpu_count_2" 0.0; + inherit: "default" 0.0; + } + description { + state: "cpu_count_3" 0.0; + inherit: "default" 0.0; + visible: 1; + rel1.relative: 0.62 0.96; + rel2.relative: 0.96 0.96; + } + description { + state: "cpu_count_4" 0.0; + inherit: "default" 0.0; + visible: 1; + rel1.relative: 0.04 0.96; + rel2.relative: 0.48 0.96; + } + } + part { + name: "x4"; + type: RECT; + + description { + state: "default" 0.0; + min: 1 1; + max: 9999 1; + fixed: 1 1; + visible: 0; + rel1.offset: -4 0; + rel2.offset: 2 0; + color: 0 0 0 255; + } + description { + state: "cpu_count_2" 0.0; + inherit: "default" 0.0; + } + description { + state: "cpu_count_3" 0.0; + inherit: "default" 0.0; + } + description { + state: "cpu_count_4" 0.0; + inherit: "default" 0.0; + visible: 1; + rel1.relative: 0.52 0.96; + rel2.relative: 0.96 0.96; + } + } + } + programs { + program { + name: "1_cpu"; + signal: "e,state,orientation,1"; + source: "e"; + action: STATE_SET "default" 0.0; + target: "bg"; + target: "chart1"; + target: "chart2"; + target: "chart3"; + target: "chart4"; + target: "num1"; + target: "num2"; + target: "num3"; + target: "num4"; + target: "x1"; + target: "x2"; + target: "x3"; + target: "x4"; + target: "y1"; + target: "y2"; + target: "y3"; + target: "y4"; + } + program { + name: "2_cpu"; + signal: "e,state,orientation,2"; + source: "e"; + action: STATE_SET "cpu_count_2" 0.0; + target: "bg"; + target: "chart1"; + target: "chart2"; + target: "chart3"; + target: "chart4"; + target: "num1"; + target: "num2"; + target: "num3"; + target: "num4"; + target: "x1"; + target: "x2"; + target: "x3"; + target: "x4"; + target: "y1"; + target: "y2"; + target: "y3"; + target: "y4"; + } + program { + name: "3_cpu"; + signal: "e,state,orientation,3"; + source: "e"; + action: STATE_SET "cpu_count_3" 0.0; + target: "bg"; + target: "chart1"; + target: "chart2"; + target: "chart3"; + target: "chart4"; + target: "num1"; + target: "num2"; + target: "num3"; + target: "num4"; + target: "x1"; + target: "x2"; + target: "x3"; + target: "x4"; + target: "y1"; + target: "y2"; + target: "y3"; + target: "y4"; + } + program { + name: "4_cpu"; + signal: "e,state,orientation,4"; + source: "e"; + action: STATE_SET "cpu_count_4" 0.0; + target: "bg"; + target: "chart1"; + target: "chart2"; + target: "chart3"; + target: "chart4"; + target: "num1"; + target: "num2"; + target: "num3"; + target: "num4"; + target: "x1"; + target: "x2"; + target: "x3"; + target: "x4"; + target: "y1"; + target: "y2"; + target: "y3"; + target: "y4"; + } + } + } } =================================================================== RCS file: /cvs/e/e_modules/cpu/e_mod_main.c,v retrieving revision 1.36 retrieving revision 1.37 diff -u -3 -r1.36 -r1.37 --- e_mod_main.c 30 Mar 2007 21:14:54 -0000 1.36 +++ e_mod_main.c 26 Aug 2007 11:32:08 -0000 1.37 @@ -1,5 +1,5 @@ /* - * vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2 + * vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2(0 */ #include <e.h> #include "e_mod_main.h" @@ -18,6 +18,11 @@ E_Gadcon_Client *gcc; Cpu *cpu; Ecore_Timer *timer; + + E_Gadcon_Popup *popup; + Evas_Object *o_bg, *o_chart[4], *o_poly[4]; + Evas_List *points[4]; + int chart_colors[4][4]; }; struct _Cpu @@ -35,13 +40,12 @@ static int _set_cpu_load(void *data); static int _get_cpu_count(void); static int _get_cpu_load(void); -static void _button_cb_mouse_down(void *data, Evas *e, Evas_Object *obj, void *event_info); +static void _graph_values(Instance *inst); static void _menu_cb_post(void *data, E_Menu *m); -static void _cpu_menu_fast(void *data, E_Menu *m, E_Menu_Item *mi); -static void _cpu_menu_medium(void *data, E_Menu *m, E_Menu_Item *mi); -static void _cpu_menu_normal(void *data, E_Menu *m, E_Menu_Item *mi); -static void _cpu_menu_slow(void *data, E_Menu *m, E_Menu_Item *mi); -static void _cpu_menu_very_slow(void *data, E_Menu *m, E_Menu_Item *mi); +static void _cb_mouse_down(void *data, Evas *e, Evas_Object *obj, void *event_info); +static void _cb_mouse_in(void *data, Evas *e, Evas_Object *obj, void *event_info); +static void _cb_mouse_out(void *data, Evas *e, Evas_Object *obj, void *event_info); +static void _cpu_menu_cb_configure (void *data, E_Menu * m, E_Menu_Item * mi); static E_Config_DD *conf_edd = NULL; static E_Config_DD *conf_item_edd = NULL; @@ -50,7 +54,7 @@ static int cpu_count; static int cpu_stats[4]; -static float update_interval; +static float update_poll_time; static const E_Gadcon_Client_Class _gc_class = { @@ -65,7 +69,10 @@ Instance *inst; Config_Item *ci; E_Gadcon_Client *gcc; + const char *color_string; char buf[4096]; + int i; + cpu_count = _get_cpu_count(); @@ -83,21 +90,66 @@ cpu->o_icon = edje_object_add(gc->evas); if (!e_theme_edje_object_set(cpu->o_icon, - "base/theme/modules/cpu", "modules/cpu/main")) + "base/theme/modules", "modules/cpu/main")) edje_object_file_set(cpu->o_icon, buf, "modules/cpu/main"); evas_object_show(cpu->o_icon); gcc = e_gadcon_client_new(gc, name, id, style, cpu->o_icon); - gcc->data = inst; - inst->gcc = gcc; - inst->cpu = cpu; + gcc->data = inst; + inst->gcc = gcc; + inst->cpu = cpu; + + inst->popup = e_gadcon_popup_new(gcc, NULL); + inst->o_bg = edje_object_add(inst->popup->win->evas); + if (!e_theme_edje_object_set(inst->o_bg, + "base/theme/modules", "modules/cpu/popup")) + edje_object_file_set(inst->o_bg, buf, "modules/cpu/popup"); + + for (i = 0; i < cpu_count && i < 4; i++) + { + snprintf(buf, sizeof(buf), "chart%d", i + 1); + inst->o_chart[i] = edje_object_add(inst->popup->win->evas); + evas_object_layer_set(inst->o_chart[i], 1); + edje_object_part_swallow(inst->o_bg, buf, inst->o_chart[i]); + + inst->o_poly[i] = evas_object_polygon_add(inst->popup->win->evas); + evas_object_layer_set(inst->o_poly[i], 1); + evas_object_anti_alias_set(inst->o_poly[i], 1); + + evas_object_show(inst->o_chart[i]); + evas_object_show(inst->o_poly[i]); + + snprintf(buf, sizeof(buf), "chart_color%d", i + 1); + color_string = edje_object_data_get(inst->o_bg, buf); + if (!color_string || sscanf(color_string, "%d %d %d %d", + &inst->chart_colors[i][0], + &inst->chart_colors[i][1], + &inst->chart_colors[i][2], + &inst->chart_colors[i][3]) != 4) + { + inst->chart_colors[i][0] = 55; + inst->chart_colors[i][1] = 110; + inst->chart_colors[i][2] = 250; + inst->chart_colors[i][3] = 155; + } + } + + snprintf(buf, sizeof(buf), "e,state,orientation,%d", + cpu_count > 4 ? 4 : cpu_count); + edje_object_signal_emit(inst->o_bg, buf, "e"); + + e_gadcon_popup_content_set(inst->popup, inst->o_bg); cpu_conf->instances = evas_list_append(cpu_conf->instances, inst); evas_object_event_callback_add(cpu->o_icon, EVAS_CALLBACK_MOUSE_DOWN, - _button_cb_mouse_down, inst); + _cb_mouse_down, inst); + evas_object_event_callback_add(cpu->o_icon, EVAS_CALLBACK_MOUSE_IN, + _cb_mouse_in, inst); + evas_object_event_callback_add(cpu->o_icon, EVAS_CALLBACK_MOUSE_OUT, + _cb_mouse_out, inst); - inst->timer = ecore_timer_add(ci->interval, _set_cpu_load, inst); + inst->timer = ecore_timer_add(ci->poll_time, _set_cpu_load, inst); return gcc; } @@ -110,6 +162,8 @@ inst = gcc->data; cpu = inst->cpu; + if (inst->popup) + e_object_del(E_OBJECT(inst->popup)); if (inst->timer) ecore_timer_del(inst->timer); if (cpu->o_icon) @@ -161,15 +215,17 @@ if (!ci->id) continue; if (!strcmp(ci->id, id)) { - update_interval = ci->interval; + update_poll_time = ci->poll_time; return ci; } } ci = E_NEW(Config_Item, 1); ci->id = evas_stringshare_add(id); - ci->interval = 1; - update_interval = ci->interval; + ci->poll_time = 1; + ci->show_popup = 1; + ci->max_points = 20; + update_poll_time = ci->poll_time; cpu_conf->items = evas_list_append(cpu_conf->items, ci); return ci; @@ -178,10 +234,12 @@ static int _set_cpu_load(void *data) { - Instance *inst; - Cpu *cpu; - int i = 0; - char str[100], str_tmp[100]; + Instance *inst; + Cpu *cpu; + Config_Item *ci; + Evas_List *l; + int i = 0, *p; + char str[100], str_tmp[100]; if (cpu_count == -1) return 0; @@ -192,6 +250,30 @@ _get_cpu_load(); + ci = _config_item_get(inst->gcc->id); + + for (i = 0; i < cpu_count; i++) + { + p = (int *) malloc(sizeof(int)); + *p = cpu_stats[i]; + + if (evas_list_count(inst->points[i]) < ci->max_points) + { + inst->points[i] = evas_list_prepend(inst->points[i], p); + l = evas_list_last(inst->points[i]); + l->next = inst->points[i]; + inst->points[i]->prev = l; + } + else + { + inst->points[i] = inst->points[i]->prev; + if (inst->points[i]->data) free(inst->points[i]->data); + inst->points[i]->data = p; + } + } + + _graph_values(inst); + if (cpu_count == 1) snprintf(str, sizeof(str), "<br>%d%%", cpu_stats[0]); else @@ -258,7 +340,7 @@ new_used = cp_time[CP_USER] + cp_time[CP_NICE] + cp_time[CP_SYS]; new_tot = new_used + cp_time[CP_IDLE]; - cpu_stats[0] = (100 * (float)(new_used - old_used) / (float)(new_tot - old_tot)) / update_interval; + cpu_stats[0] = (100 * (float)(new_used - old_used) / (float)(new_tot - old_tot)) / update_poll_time; old_tot = new_tot; old_used = new_used; @@ -300,7 +382,7 @@ tmp_s = ((new_s - old_s[i])); } - cpu_stats[i] = (tmp_u + tmp_n + tmp_s) / update_interval; + cpu_stats[i] = (tmp_u + tmp_n + tmp_s) / update_poll_time; old_u[i] = new_u; old_n[i] = new_n; @@ -319,70 +401,113 @@ } static void -_button_cb_mouse_down(void *data, Evas *e, Evas_Object *obj, void *event_info) +_graph_values(Instance *inst) +{ + Config_Item *ci; + Evas_List *l; + int i, m, p, v, step = 3; + float coeff; + + if (!inst->popup->win->visible) return; + + ci = _config_item_get(inst->gcc->id); + for (i = 0; i < cpu_count; i++) + { + Evas_Coord w = 0, h = 0, x = 0, y = 0; + + evas_object_polygon_points_clear(inst->o_poly[i]); + evas_object_geometry_get(inst->o_chart[i], &x, &y, &w, &h); + + coeff = (float) -h / 100; + step = ((int) ((float) w / (float) ci->max_points + 0.5)); + if (step < 1) step = 1; + if (step * ci->max_points < w) step++; + + /* Lower right */ + evas_object_polygon_point_add(inst->o_poly[i], p = (x + w), m = (y + h)); + for (l = inst->points[i]; l && p >= x; l = l->next, p = p - step) + { + v = m + (*(int *) l->data) * coeff; + evas_object_polygon_point_add(inst->o_poly[i], p, v); + if (l->next == inst->points[i]) break; + } + if (p > x) + evas_object_polygon_point_add(inst->o_poly[i], p, m); + /* Lower left */ + evas_object_polygon_point_add(inst->o_poly[i], x, m); + evas_object_color_set(inst->o_poly[i], + inst->chart_colors[i][0], + inst->chart_colors[i][1], + inst->chart_colors[i][2], + inst->chart_colors[i][3]); + } +} + +void +_cpu_config_updated(const char *id) +{ + Evas_List *l; + Config_Item *ci; + + if (!cpu_conf) + return; + ci = _config_item_get(id); + for (l = cpu_conf->instances; l; l = l->next) + { + Instance *inst; + + inst = l->data; + if (!inst->gcc->id) + continue; + + if (!strcmp(inst->gcc->id, ci->id)) + { + if (inst->timer) + ecore_timer_del(inst->timer); + inst->timer = + ecore_timer_add(ci->poll_time, _set_cpu_load, inst); + + if (!ci->show_popup) + { + if (inst->popup->pinned) + e_gadcon_popup_toggle_pinned(inst->popup); + e_gadcon_popup_hide(inst->popup); + } + + break; + } + } +} + +static void +_cb_mouse_down(void *data, Evas *e, Evas_Object *obj, void *event_info) { Instance *inst; Evas_Event_Mouse_Down *ev; inst = data; ev = event_info; + if (ev->button == 1) + e_gadcon_popup_toggle_pinned(inst->popup); if ((ev->button == 3) && (!cpu_conf->menu)) { E_Menu *mn; E_Menu_Item *mi; int cx, cy, cw, ch; - Config_Item *ci; - - ci = _config_item_get(inst->gcc->id); - - mn = e_menu_new(); - cpu_conf->menu_interval = mn; - - mi = e_menu_item_new(mn); - e_menu_item_label_set(mi, _("Fast (0.5 sec)")); - e_menu_item_radio_set(mi, 1); - e_menu_item_radio_group_set(mi, 1); - if (ci->interval <= 0.5) e_menu_item_toggle_set(mi, 1); - e_menu_item_callback_set(mi, _cpu_menu_fast, inst); - - mi = e_menu_item_new(mn); - e_menu_item_label_set(mi, _("Medium (1 sec)")); - e_menu_item_radio_set(mi, 1); - e_menu_item_radio_group_set(mi, 1); - if (ci->interval > 0.5) e_menu_item_toggle_set(mi, 1); - e_menu_item_callback_set(mi, _cpu_menu_medium, inst); - - mi = e_menu_item_new(mn); - e_menu_item_label_set(mi, _("Normal (2 sec)")); - e_menu_item_radio_set(mi, 1); - e_menu_item_radio_group_set(mi, 1); - if (ci->interval >= 2.0) e_menu_item_toggle_set(mi, 1); - e_menu_item_callback_set(mi, _cpu_menu_normal, inst); - - mi = e_menu_item_new(mn); - e_menu_item_label_set(mi, _("Slow (5 sec)")); - e_menu_item_radio_set(mi, 1); - e_menu_item_radio_group_set(mi, 1); - if (ci->interval >= 5.0) e_menu_item_toggle_set(mi, 1); - e_menu_item_callback_set(mi, _cpu_menu_slow, inst); - - mi = e_menu_item_new(mn); - e_menu_item_label_set(mi, _("Very Slow (30 sec)")); - e_menu_item_radio_set(mi, 1); - e_menu_item_radio_group_set(mi, 1); - if (ci->interval >= 30.0) e_menu_item_toggle_set(mi, 1); - e_menu_item_callback_set(mi, _cpu_menu_very_slow, inst); mn = e_menu_new(); cpu_conf->menu = mn; e_menu_post_deactivate_callback_set(mn, _menu_cb_post, inst); mi = e_menu_item_new(mn); - e_menu_item_label_set(mi, _("Time Between Updates")); - e_menu_item_submenu_set(mi, cpu_conf->menu_interval); + e_menu_item_label_set(mi, _("Configuration")); + e_util_menu_item_edje_icon_set(mi, "enlightenment/configuration"); + e_menu_item_callback_set(mi, _cpu_menu_cb_configure, inst); + + mi = e_menu_item_new(mn); + e_menu_item_separator_set(mi, 1); e_gadcon_client_util_menu_items_append(inst->gcc, mn, 0); - e_gadcon_canvas_zone_geometry_get(inst->gcc->gadcon, &cx, &cy, &cw, &ch); e_menu_activate_mouse(mn, e_util_zone_current_get(e_manager_current_get()), @@ -393,90 +518,62 @@ } } -static void -_menu_cb_post(void *data, E_Menu *m) -{ - if (!cpu_conf->menu) return; - e_object_del(E_OBJECT(cpu_conf->menu)); - cpu_conf->menu = NULL; - if (cpu_conf->menu_interval) - e_object_del(E_OBJECT(cpu_conf->menu_interval)); - cpu_conf->menu_interval = NULL; -} - -static void -_cpu_menu_fast(void *data, E_Menu *m, E_Menu_Item *mi) +static void +_cb_mouse_in(void *data, Evas *e, Evas_Object *obj, void *event_info) { Instance *inst; Config_Item *ci; - - inst = data; + + if (!(inst = data)) return; ci = _config_item_get(inst->gcc->id); + if (!ci->show_popup) return; - ci->interval = 0.5; - ecore_timer_del(inst->timer); - inst->timer = ecore_timer_add(ci->interval, _set_cpu_load, inst); - e_config_save_queue(); + e_gadcon_popup_show(inst->popup); + _graph_values(inst); } -static void -_cpu_menu_medium(void *data, E_Menu *m, E_Menu_Item *mi) +static void +_cb_mouse_out(void *data, Evas *e, Evas_Object *obj, void *event_info) { Instance *inst; Config_Item *ci; - inst = data; + if (!(inst = data)) return; ci = _config_item_get(inst->gcc->id); + if (!ci->show_popup) return; - ci->interval = 1.0; - ecore_timer_del(inst->timer); - inst->timer = ecore_timer_add(ci->interval, _set_cpu_load, inst); - e_config_save_queue(); + e_gadcon_popup_hide(inst->popup); } static void -_cpu_menu_normal(void *data, E_Menu *m, E_Menu_Item *mi) +_menu_cb_post(void *data, E_Menu *m) { - Instance *inst; - Config_Item *ci; - - inst = data; - ci = _config_item_get(inst->gcc->id); - - ci->interval = 2.0; - ecore_timer_del(inst->timer); - inst->timer = ecore_timer_add(ci->interval, _set_cpu_load, inst); - e_config_save_queue(); + if (!cpu_conf->menu) return; + e_object_del(E_OBJECT(cpu_conf->menu)); + cpu_conf->menu = NULL; } - + static void -_cpu_menu_slow(void *data, E_Menu *m, E_Menu_Item *mi) +_cpu_menu_cb_configure (void *data, E_Menu * m, E_Menu_Item * mi) { Instance *inst; Config_Item *ci; - + int i, max = 0, w = 0; + inst = data; - ci = _config_item_get(inst->gcc->id); + ci = _config_item_get (inst->gcc->id); - ci->interval = 5.0; - ecore_timer_del(inst->timer); - inst->timer = ecore_timer_add(ci->interval, _set_cpu_load, inst); - e_config_save_queue(); -} + for (i = 0; i < cpu_count && i < 4; i++) + { + evas_object_geometry_get(inst->o_chart[i], + NULL, NULL, + &w, NULL); -static void -_cpu_menu_very_slow(void *data, E_Menu *m, E_Menu_Item *mi) -{ - Instance *inst; - Config_Item *ci; - - inst = data; - ci = _config_item_get(inst->gcc->id); + if (w > max) + max = w; + } - ci->interval = 30.0; - ecore_timer_del(inst->timer); - inst->timer = ecore_timer_add(ci->interval, _set_cpu_load, inst); - e_config_save_queue(); + _config_cpu_module(ci, max); } EAPI E_Module_Api e_modapi = @@ -495,7 +592,9 @@ #undef D #define D conf_item_edd E_CONFIG_VAL(D, T, id, STR); - E_CONFIG_VAL(D, T, interval, DOUBLE); + E_CONFIG_VAL(D, T, poll_time, DOUBLE); + E_CONFIG_VAL(D, T, show_popup, INT); + E_CONFIG_VAL(D, T, max_points, INT); #undef T #define T Config @@ -511,7 +610,9 @@ cpu_conf = E_NEW(Config, 1); ci = E_NEW(Config_Item, 1); ci->id = evas_stringshare_add("0"); - ci->interval = 1; + ci->poll_time = 1; + ci->show_popup = 1; + ci->max_points = 20; cpu_conf->items = evas_list_append(cpu_conf->items, ci); } @@ -535,7 +636,7 @@ cpu_conf->menu = NULL; } - while(cpu_conf->items) + while (cpu_conf->items) { Config_Item *ci; =================================================================== RCS file: /cvs/e/e_modules/cpu/e_mod_main.h,v retrieving revision 1.11 retrieving revision 1.12 diff -u -3 -r1.11 -r1.12 --- e_mod_main.h 30 Aug 2006 18:08:52 -0000 1.11 +++ e_mod_main.h 26 Aug 2007 11:32:08 -0000 1.12 @@ -16,7 +16,9 @@ struct _Config_Item { const char *id; - double interval; + double poll_time; + int show_popup; + int max_points; }; EAPI extern E_Module_Api e_modapi; @@ -26,7 +28,8 @@ EAPI int e_modapi_save (E_Module *m); EAPI int e_modapi_about (E_Module *m); -//void _config_cpu_module (Config_Item *ci); +void _cpu_config_updated (const char *id); +void _config_cpu_module (Config_Item *ci, int max); extern Config *cpu_conf; ------------------------------------------------------------------------- This SF.net email is sponsored by: Splunk Inc. Still grepping through log files to find problems? Stop. Now Search log events and configuration files using AJAX and a browser. Download your FREE copy of Splunk now >> http://get.splunk.com/ _______________________________________________ enlightenment-cvs mailing list enlightenment-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs