diff options
author | Marian Gasparovic <[email protected]> | 2018-02-04 18:36:36 +0100 |
---|---|---|
committer | raveit65 <[email protected]> | 2018-02-04 19:15:28 +0100 |
commit | e6d55cba85fc49b3dfac8150c397540bda369847 (patch) | |
tree | de6d8272b079641679b718258d4be7d9adc1594d | |
parent | 560c27fb0638d41fe39ad0e0719dd6153b17eea0 (diff) | |
download | mate-applets-e6d55cba85fc49b3dfac8150c397540bda369847.tar.bz2 mate-applets-e6d55cba85fc49b3dfac8150c397540bda369847.tar.xz |
Scaling network graph using thresholds defined by user
-rw-r--r-- | multiload/docs/C/index.docbook | 240 | ||||
-rw-r--r-- | multiload/global.h | 4 | ||||
-rw-r--r-- | multiload/linux-proc.c | 30 | ||||
-rw-r--r-- | multiload/load-graph.c | 88 | ||||
-rw-r--r-- | multiload/main.c | 33 | ||||
-rw-r--r-- | multiload/org.mate.panel.applet.multiload.gschema.xml.in | 20 | ||||
-rw-r--r-- | multiload/properties.c | 240 |
7 files changed, 477 insertions, 178 deletions
diff --git a/multiload/docs/C/index.docbook b/multiload/docs/C/index.docbook index e6eeecca..119d903d 100644 --- a/multiload/docs/C/index.docbook +++ b/multiload/docs/C/index.docbook @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" +<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd" [ <!ENTITY legal SYSTEM "legal.xml"> <!ENTITY appletversion "1.10.2"> @@ -7,7 +7,7 @@ <!ENTITY date "July 2015"> <!ENTITY applet "System Monitor"> ]> -<!-- +<!-- (Do not remove this comment block.) Maintained by the MATE Documentation Project http://wiki.mate-desktop.org/dev-doc:doc-team-guide @@ -19,10 +19,10 @@ <article id="index" lang="en"> <!-- please do not change the id; for translations, change lang to --> <!-- appropriate code --> - <articleinfo> - <title>&applet; Manual</title> + <articleinfo> + <title>&applet; Manual</title> <abstract role="description"> - <para>&applet; displays system load information in graphical + <para>&applet; displays system load information in graphical format in a panel.</para> </abstract> <copyright> @@ -37,11 +37,11 @@ <year>2004</year> <holder>Sun Microsystems</holder> </copyright> - <copyright> - <year>2003</year> - <year>2004</year> - <holder>Chee Bin HOH</holder> - </copyright> + <copyright> + <year>2003</year> + <year>2004</year> + <holder>Chee Bin HOH</holder> + </copyright> <!-- translators: uncomment this: <copyright> @@ -50,19 +50,19 @@ </copyright> --> - <publisher role="maintainer"> - <publishername> MATE Documentation Project </publishername> - </publisher> + <publisher role="maintainer"> + <publishername> MATE Documentation Project </publishername> + </publisher> <publisher> <publishername> GNOME Documentation Project </publishername> </publisher> &legal; -<!-- This file contains link to license for the documentation (GNU FDL), and - other legal stuff such as "NO WARRANTY" statement. Please do not change +<!-- This file contains link to license for the documentation (GNU FDL), and + other legal stuff such as "NO WARRANTY" statement. Please do not change any of this. --> - <authorgroup> + <authorgroup> <author> <firstname>MATE Documentation Team</firstname> @@ -80,13 +80,13 @@ </address></affiliation> </author> - <author> - <firstname>Chee Bin</firstname> - <surname>HOH</surname> - <affiliation> + <author> + <firstname>Chee Bin</firstname> + <surname>HOH</surname> + <affiliation> <orgname>GNOME Documentation Project</orgname> <address><email>[email protected]</email></address> - </affiliation> + </affiliation> </author> <author> @@ -100,17 +100,17 @@ <!-- This is appropriate place for other contributors: translators, maintainers, etc. Commented out by default. <othercredit role="translator"> - <firstname>Latin</firstname> - <surname>Translator 1</surname> - <affiliation> - <orgname>Latin Translation Team</orgname> - <address> <email>[email protected]</email> </address> + <firstname>Latin</firstname> + <surname>Translator 1</surname> + <affiliation> + <orgname>Latin Translation Team</orgname> + <address> <email>[email protected]</email> </address> </affiliation> <contrib>Latin translation</contrib> </othercredit> --> </authorgroup> - + <releaseinfo revision="1.10.2" role="review"/> <revhistory> @@ -130,40 +130,40 @@ <para role="author">Davyd Madeley</para> </revdescription> </revision> - + <revision> - <revnumber>Version 2.8</revnumber> - <date>August 2004</date> - <revdescription> + <revnumber>Version 2.8</revnumber> + <date>August 2004</date> + <revdescription> <para role="author">Angela Boyle</para> <para role="publisher">GNOME Documentation Project</para> - </revdescription> - </revision> + </revdescription> + </revision> - <revision> - <revnumber>System Monitor Applet Manual V2.1</revnumber> - <date>February 2004</date> - <revdescription> + <revision> + <revnumber>System Monitor Applet Manual V2.1</revnumber> + <date>February 2004</date> + <revdescription> <para role="author">Sun GNOME Documentation Team</para> <para role="publisher">GNOME Documentation Project</para> - </revdescription> - </revision> + </revdescription> + </revision> - <revision> - <revnumber>System Monitor Applet Manual V2.0</revnumber> - <date>July 2003</date> - <revdescription> + <revision> + <revnumber>System Monitor Applet Manual V2.0</revnumber> + <date>July 2003</date> + <revdescription> <para role="author">Chee Bin HOH <email>[email protected]</email> - </para> + </para> <para role="publisher">GNOME Documentation Project</para> - </revdescription> - </revision> + </revdescription> + </revision> - </revhistory> + </revhistory> <releaseinfo> This manual describes version &appletversion; of &applet;. - </releaseinfo> + </releaseinfo> <legalnotice> <title>Feedback</title> <para> To report a bug or make a suggestion regarding the &applet; applet or this @@ -173,39 +173,39 @@ </legalnotice> </articleinfo> - <indexterm zone="index"> - <primary>&applet; Applet</primary> - </indexterm> - <indexterm zone="index"> - <primary>&applet;</primary> + <indexterm zone="index"> + <primary>&applet; Applet</primary> + </indexterm> + <indexterm zone="index"> + <primary>&applet;</primary> </indexterm> <!-- ============= Document Body ============================= --> <!-- ============= Introduction ============================== --> - <sect1 id="multiload-introduction"> - <title>Introduction</title> + <sect1 id="multiload-introduction"> + <title>Introduction</title> <!-- ==== Figure ============================================= --> - <figure id="system-monitor-applet-fig"> - <title>&applet;</title> - <screenshot> - <mediaobject> + <figure id="system-monitor-applet-fig"> + <title>&applet;</title> + <screenshot> + <mediaobject> <imageobject><imagedata fileref="figures/system-monitor-applet_window.png" - format="PNG"/> + format="PNG"/> </imageobject> - <textobject> + <textobject> <phrase>Shows &applet;. Displays a graph for system CPU load. - </phrase> - </textobject> - </mediaobject> - </screenshot> - </figure> + </phrase> + </textobject> + </mediaobject> + </screenshot> + </figure> <!-- ==== End of Figure ======================================= --> <para> The <application>&applet;</application> displays system load information in graphical format in a panel. - You can configure <application>&applet;</application> to display + You can configure <application>&applet;</application> to display the following information for your system: </para> <itemizedlist> @@ -221,45 +221,45 @@ </listitem> <listitem> <para> - Network traffic + Network traffic </para> </listitem> <listitem> <para> - Usage of swap space + Usage of swap space </para> </listitem> <listitem> <para> - Average system load + Average system load </para> </listitem> <listitem><para>Disk load</para></listitem> </itemizedlist> - <sect2 id="multiload-introduction-add"> - <title>To Add &applet; to a Panel</title> + <sect2 id="multiload-introduction-add"> + <title>To Add &applet; to a Panel</title> <para>To add <application>&applet;</application> to a panel, right-click on the panel, then choose <guimenuitem>Add to Panel</guimenuitem>. Select <application>&applet;</application> in the <application>Add to the panel</application> dialog, then click <guibutton>OK</guibutton>.</para> <para> - The layout of the <application>&applet;</application> varies + The layout of the <application>&applet;</application> varies depending on the size and type of panel in which the applet resides. - </para> + </para> </sect2> </sect1> <!-- ================ Usage ================================ --> -<!-- Use this section to describe how to use the applet to perform the tasks for +<!-- Use this section to describe how to use the applet to perform the tasks for which the applet is designed. --> - <sect1 id="multiload-usage"> - <title>Viewing Graphs</title> + <sect1 id="multiload-usage"> + <title>Viewing Graphs</title> <!-- ================ displaying addistional graphics======================== --> - <sect2 id="multiload-usage-graphs"> - <title>Displaying Additional Graphs</title> + <sect2 id="multiload-usage-graphs"> + <title>Displaying Additional Graphs</title> <para>To configure the <application>&applet;</application> applet, right-click on the applet, then choose <guimenuitem>Preferences</guimenuitem>. Under <guilabel>Monitored Resources</guilabel> you can choose which graphics you want to display:</para> <itemizedlist> <listitem> @@ -311,26 +311,26 @@ </itemizedlist> </sect2> <!-- ================ displaying current usage of system resources================== --> - <sect2 id="multiload-usage-current"> - <title>To Display the Current Usage of a System Resource</title> + <sect2 id="multiload-usage-current"> + <title>To Display the Current Usage of a System Resource</title> <para> - To display the current usage of a system resource, + To display the current usage of a system resource, position the mouse pointer over the corresponding graph in the applet. A tooltip displays the current usage as a percentage. </para> </sect2> <!-- ================ displaying additional info================== --> - <sect2 id="multiload-usage-extra"> + <sect2 id="multiload-usage-extra"> <title>To Display Additional System Monitor Information</title> <para> - To display additional system monitor information, right-click on the applet, + To display additional system monitor information, right-click on the applet, then choose <guimenuitem>Open System Monitor</guimenuitem> to start the - <application>System Monitor</application> application. + <application>System Monitor</application> application. </para> <para> - The <application>System Monitor</application> application + The <application>System Monitor</application> application enables you to monitor system processes and usage of system resources. - You can use the <application>System Monitor</application> application + You can use the <application>System Monitor</application> application to modify the behavior of your system. </para> </sect2> @@ -339,21 +339,21 @@ <!-- ============= Preferences =========================== --> <sect1 id="multiload-prefs"> - <title>Customizing Appearance</title> - <figure id="system-monitor-prefs-fig"> - <title>Preferences Dialog</title> - <screenshot> - <mediaobject> + <title>Customizing Appearance</title> + <figure id="system-monitor-prefs-fig"> + <title>Preferences Dialog</title> + <screenshot> + <mediaobject> <imageobject><imagedata fileref="figures/multiload-preferences.png" - format="PNG"/> + format="PNG"/> </imageobject> - <textobject> + <textobject> <phrase>Preferences Dialog - </phrase> - </textobject> - </mediaobject> - </screenshot> - </figure> + </phrase> + </textobject> + </mediaobject> + </screenshot> + </figure> <sect2 id="multiload-size"> <title>To Change the Width</title> <para>In the right-click menu, go to <guimenuitem>Preferences</guimenuitem>. Under <guilabel>Options</guilabel>, use the <guilabel>System monitor width</guilabel> spin box to specify the width of each <application>&applet;</application> graph in pixels.</para> @@ -364,7 +364,7 @@ </para> </sect2> <!-- ================ changing graph colors======================== --> - <sect2 id="multiload-usage-colors"> + <sect2 id="multiload-usage-colors"> <title>Changing the Colors in a Graph</title> <para> To change the colors in a graph, perform the following steps: @@ -515,25 +515,30 @@ </thead> <tbody> <row valign="top"> - <entry><para><guilabel>SLIP</guilabel></para></entry> - <entry><para>Serial Line Internet Protocol network connection</para></entry> + <entry><para><guilabel>In</guilabel></para></entry> + <entry><para>Incoming traffic</para></entry> + </row> + <row valign="top"> + <entry><para><guilabel>Out</guilabel></para></entry> + <entry><para>Outgoing traffic</para></entry> </row> <row valign="top"> - <entry><para><guilabel>PLIP</guilabel></para></entry> - <entry><para>Parallel Line Internet Protocol network connection</para></entry> + <entry><para><guilabel>Local</guilabel></para></entry> + <entry><para>Traffic over loopback</para></entry> </row> <row valign="top"> - <entry><para><guilabel>Ethernet</guilabel></para></entry> - <entry><para>Ethernet network connection</para></entry> + <entry><para><guilabel>Background</guilabel></para></entry> + <entry><para>Graph background color</para></entry> </row> <row valign="top"> - <entry><para><guilabel>Other</guilabel></para></entry> - <entry><para>Network connection other than SLIP, PLIP, or Ethernet</para></entry> + <entry><para><guilabel>Gridline</guilabel></para></entry> + <entry><para>Color of horizontal gridline when scaling graph</para></entry> </row> <row valign="top"> - <entry><para><guilabel>Background</guilabel></para></entry> - <entry><para>No network connection</para></entry> + <entry><para><guilabel>Indicator</guilabel></para></entry> + <entry><para>Color of indicator showing which threshold was reached</para></entry> </row> + </tbody> </tgroup> </informaltable> @@ -648,5 +653,20 @@ </listitem> </itemizedlist> </sect2> + <!-- ================ Explaining thresholds======================== --> + <sect2 id="network thresholds"> + <title>Network speed thresholds</title> + <para> + Thresholds together with indicator allow network graph to scale and better represent actual workload. + If combined network traffic (in + out + loopback) is below threshold1, no indicator is shown, y-axis + on network graph go from 0 to threshold1. When trafic is more than threshold1, one indicator will be + shown and y-axis now go from 0 to threshold2. When threshold2 is reached, two indicator will be shown + and y-axis go from 0 to threshold3. When threshold3 is reached, three indicators are shown and y-axis + go form 0 to whatever is current maximum in graph. + </para> + <para> + Gridlines are hard to explain, just observe and they are obvious. + </para> + </sect2> </sect1> </article> diff --git a/multiload/global.h b/multiload/global.h index 2c88c579..606db7e4 100644 --- a/multiload/global.h +++ b/multiload/global.h @@ -49,6 +49,10 @@ struct _LoadGraph { double loadavg1; NetSpeed *netspeed_in; NetSpeed *netspeed_out; + guint net_threshold; + guint net_threshold1; + guint net_threshold2; + guint net_threshold3; gboolean visible; gboolean tooltip_update; diff --git a/multiload/linux-proc.c b/multiload/linux-proc.c index 96754092..0e4624d6 100644 --- a/multiload/linux-proc.c +++ b/multiload/linux-proc.c @@ -373,26 +373,22 @@ GetNet (int Maximum, int data [4], LoadGraph *g) int max; int total = 0; - for (i = 0; i < COUNT_TYPES; i++) - { - /* protect against weirdness */ - if (present[i] >= past[i]) - delta[i] = (present[i] - past[i]); - else - delta[i] = 0; - total += delta[i]; - } + for (i = 0; i < COUNT_TYPES; i++) + { + /* protect against weirdness */ + if (present[i] >= past[i]) + delta[i] = (present[i] - past[i]); + else + delta[i] = 0; + total += delta[i]; + } - max = autoscaler_get_max(&scaler, total); + //max = autoscaler_get_max(&scaler, total); - for (i = 0; i < COUNT_TYPES; i++) - data[i] = rint (Maximum * (float)delta[i] / max); - } + for (i = 0; i < COUNT_TYPES; i++) + data[i] = delta[i]; - //data[4] = Maximum - data[3] - data[2] - data[1] - data[0]; - data[COUNT_TYPES] = Maximum; - for (i = 0; i < COUNT_TYPES; i++) - data[COUNT_TYPES] -= data[i]; + } memcpy(past, present, sizeof past); } diff --git a/multiload/load-graph.c b/multiload/load-graph.c index e3d0c12c..5eb90e8f 100644 --- a/multiload/load-graph.c +++ b/multiload/load-graph.c @@ -66,8 +66,8 @@ load_graph_draw (LoadGraph *g) cairo_set_line_cap (cr, CAIRO_LINE_CAP_ROUND); cairo_set_line_join (cr, CAIRO_LINE_JOIN_ROUND); - /* all graphs except Load go this path */ - if (g->id != 4) + /* all graphs except Load and Net go this path */ + if (g->id != 4 && g->id != 2) { for (i = 0; i < g->draw_width; i++) g->pos [i] = g->draw_height - 1; @@ -87,7 +87,91 @@ load_graph_draw (LoadGraph *g) } cairo_stroke (cr); } + } + /* This is for network graph */ + else if (g->id == 2) + { + guint maxnet = 1; + gint segments = 1; + gint combined = 0; + for (i = 0; i < g->draw_width; i++) + { + g->pos [i] = g->draw_height - 1; + combined = 0; + combined += g->data[i][0]; + combined += g->data[i][1]; + combined += g->data[i][2]; + if (combined > maxnet) + maxnet = combined; + } + //printf("max = %d ", maxnet); + guint level = 0; + GdkRGBA grid_color; + if (maxnet > g->net_threshold3) { + g->net_threshold = g->net_threshold3; + level = 3; + } + else + if (maxnet > g->net_threshold2) { + g->net_threshold = g->net_threshold2; + level = 2; + } + else { + g->net_threshold = g->net_threshold1; + level = 1; + if (maxnet < g->net_threshold1) + level = 0; + } + + //printf("level %d maxnet = %d ", level, maxnet); + maxnet = maxnet/g->net_threshold; + segments = MAX (maxnet+1,1); + float ratio = (float)g->draw_height/g->net_threshold/segments; + //printf("segments %d ratio = %f t1=%ld t2=%ld t3=%ld t=%ld\n", segments, ratio, g->net_threshold1, g->net_threshold2, g->net_threshold3, g->net_threshold); + + for (j = 0; j < g->n-1; j++) + { + gdk_cairo_set_source_rgba (cr, &(g->colors [j])); + + for (i = 0; i < g->draw_width; i++) + { + cairo_move_to (cr, g->draw_width - i - 0.5, g->pos[i] + 0.5); + cairo_line_to (cr, g->draw_width - i - 0.5, g->pos[i] - 0.5 - ((g->data [i][j] * ratio))); + g->pos [i] -= ((g->data [i][j] * ratio)); + } + cairo_stroke (cr); + } + + for (j = g->n-1; j < g->n; j++) + { + gdk_cairo_set_source_rgba (cr, &(g->colors [j])); + for (i = 0; i < g->draw_width; i++) + { + cairo_move_to (cr, g->draw_width - i - 0.5, g->pos[i] + 0.5); + cairo_line_to (cr, g->draw_width - i - 0.5, 0.5); + } + cairo_stroke (cr); + } + /* draw grid lines if needed */ + gdk_cairo_set_source_rgba (cr, &(g->colors [4])); + double spacing = 0; + for (k = 0; k < segments -1; k++) + { + spacing = ((double) g->draw_height/segments) * (k+1); + cairo_move_to (cr, 0.5, spacing); + cairo_line_to (cr, g->draw_width-0.5, spacing); + } + cairo_stroke (cr); + /* draw indicator if needed */ + if (level > 0) + { + gdk_cairo_set_source_rgba (cr, &(g->colors [5])); + for (k = 0; k< level; k++ ) + cairo_rectangle(cr, 0.5, (k*2) * g->draw_height/5, 5, g->draw_height/5); + cairo_fill(cr); + } + cairo_stroke (cr); } /* this is Load graph */ else diff --git a/multiload/main.c b/multiload/main.c index f117e8c2..8ce5b70d 100644 --- a/multiload/main.c +++ b/multiload/main.c @@ -73,17 +73,10 @@ help_cb (GtkAction *action, GError *error = NULL; -#if GTK_CHECK_VERSION (3, 22, 0) gtk_show_uri_on_window (NULL, "help:mate-multiload", gtk_get_current_event_time (), &error); -#else - gtk_show_uri (gtk_widget_get_screen (GTK_WIDGET (ma->applet)), - "help:mate-multiload", - gtk_get_current_event_time (), - &error); -#endif if (error) { /* FIXME: the user needs to see this */ g_warning ("help error: %s\n", error->message); @@ -363,17 +356,31 @@ multiload_create_graphs(MultiloadApplet *ma) } graph_types[] = { { _("CPU Load"), "cpuload", 5, GetLoad }, { _("Memory Load"), "memload", 5, GetMemory }, - { _("Net Load"), "netload2", 4, GetNet }, + { _("Net Load"), "netload2", 6, GetNet }, { _("Swap Load"), "swapload", 2, GetSwap }, { _("Load Average"), "loadavg", 3, GetLoadAvg }, { _("Disk Load"), "diskload", 3, GetDiskLoad } }; gint speed, size; + guint net_threshold1; + guint net_threshold2; + guint net_threshold3; gint i; speed = g_settings_get_int (ma->settings, "speed"); size = g_settings_get_int (ma->settings, "size"); + net_threshold1 = g_settings_get_uint (ma->settings, "netthreshold1"); + net_threshold2 = g_settings_get_uint (ma->settings, "netthreshold2"); + net_threshold3 = g_settings_get_uint (ma->settings, "netthreshold3"); + if (net_threshold1 >= net_threshold2) + { + net_threshold1 = net_threshold2 - 1; + } + if (net_threshold2 >= net_threshold3) + { + net_threshold3 = net_threshold2 + 1; + } speed = MAX (speed, 50); size = CLAMP (size, 10, 400); @@ -403,8 +410,14 @@ multiload_create_graphs(MultiloadApplet *ma) graph_types[i].name, graph_types[i].callback); } - /* for Load graph, colors[2] is grid line color, it should not be used in loop in load-graph.c */ - ma->graphs[4]->n = 2; + /* for Network graph, colors[4] is grid line color, it should not be used in loop in load-graph.c */ + /* for Network graph, colors[5] is indicator color, it should not be used in loop in load-graph.c */ + ma->graphs[2]->n = 4; + ma->graphs[2]->net_threshold1 = net_threshold1; + ma->graphs[2]->net_threshold2 = net_threshold2; + ma->graphs[2]->net_threshold3 = net_threshold3; + /* for Load graph, colors[2] is grid line color, it should not be used in loop in load-graph.c */ + ma->graphs[4]->n = 2; } /* remove the old graphs and rebuild them */ diff --git a/multiload/org.mate.panel.applet.multiload.gschema.xml.in b/multiload/org.mate.panel.applet.multiload.gschema.xml.in index 206ebee3..d0d27a32 100644 --- a/multiload/org.mate.panel.applet.multiload.gschema.xml.in +++ b/multiload/org.mate.panel.applet.multiload.gschema.xml.in @@ -89,6 +89,26 @@ <default>'#000000'</default> <summary>Network graph background color</summary> </key> + <key name="netload2-color4" type="s"> + <default>'#ffffff'</default> + <summary>Grid line color</summary> + </key> + <key name="netload2-color5" type="s"> + <default>'#0000ff'</default> + <summary>Indicator color</summary> + </key> + <key name="netthreshold1" type="u"> + <default>1000000</default> + <summary>Network threshold 1 in bytes</summary> + </key> + <key name="netthreshold2" type="u"> + <default>10000000</default> + <summary>Network threshold 2 in bytes</summary> + </key> + <key name="netthreshold3" type="u"> + <default>100000000</default> + <summary>Network threshold 3 in bytes</summary> + </key> <key name="swapload-color0" type="s"> <default>'#8b00c3'</default> <summary>Graph color for user-related swap usage</summary> diff --git a/multiload/properties.c b/multiload/properties.c index 017f88da..9eb8683c 100644 --- a/multiload/properties.c +++ b/multiload/properties.c @@ -30,6 +30,9 @@ #define PROP_SPEED 6 #define PROP_SIZE 7 +#define PROP_NET_THRESHOLD1 8 +#define PROP_NET_THRESHOLD2 9 +#define PROP_NET_THRESHOLD3 10 #define HIG_IDENTATION " " #define NEVER_SENSITIVE "never_sensitive" @@ -83,17 +86,10 @@ properties_close_cb (GtkWidget *widget, gint arg, MultiloadApplet *ma) { case GTK_RESPONSE_HELP: -#if GTK_CHECK_VERSION (3, 22, 0) gtk_show_uri_on_window (NULL, "help:mate-multiload/multiload-prefs", gtk_get_current_event_time (), &error); -#else - gtk_show_uri (gtk_widget_get_screen (GTK_WIDGET (ma->applet)), - "help:mate-multiload/multiload-prefs", - gtk_get_current_event_time (), - &error); -#endif if (error) { /* FIXME: the user needs to see this */ g_warning ("help error: %s\n", error->message); @@ -147,15 +143,16 @@ static void spin_button_changed_cb(GtkWidget *widget, gpointer name) { MultiloadApplet *ma; - gint value, prop_type, i; + gint value; + gint prop_type, i; ma = g_object_get_data(G_OBJECT(widget), "MultiloadApplet"); prop_type = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(widget), "prop_type")); value = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(widget)); /* FIXME: the first toggle button to be checked/dechecked does not work, but after that everything is cool. what gives? */ - g_settings_set_int (ma->settings, (gchar *)name, value); - g_settings_set_int (ma->settings, (gchar *)name, value); + g_settings_set_uint (ma->settings, (gchar *)name, value); + g_settings_set_uint (ma->settings, (gchar *)name, value); switch(prop_type) { @@ -190,6 +187,51 @@ spin_button_changed_cb(GtkWidget *widget, gpointer name) } break; + case PROP_NET_THRESHOLD1: + { + if (value >= ma->graphs[2]->net_threshold2) + { + gtk_spin_button_set_value(GTK_SPIN_BUTTON(widget), + (gdouble)g_settings_get_uint (ma->settings, "netthreshold2") - 1); + ma->graphs[2]->net_threshold1 = g_settings_get_uint (ma->settings, "netthreshold2") - 1; + } + else + ma->graphs[2]->net_threshold1 = value; + + break; + } + case PROP_NET_THRESHOLD2: + { + if (value >= ma->graphs[2]->net_threshold3) + { + gtk_spin_button_set_value(GTK_SPIN_BUTTON(widget), + (gdouble)g_settings_get_uint (ma->settings, "netthreshold3") - 1); + ma->graphs[2]->net_threshold2 = g_settings_get_uint (ma->settings, "netthreshold3") - 1; + } + else if (value <= ma->graphs[2]->net_threshold1) + { + gtk_spin_button_set_value(GTK_SPIN_BUTTON(widget), + (gdouble)g_settings_get_uint (ma->settings, "netthreshold1") + 1); + ma->graphs[2]->net_threshold2 = g_settings_get_uint (ma->settings, "netthreshold1") + 1; + } + else + ma->graphs[2]->net_threshold2 = value; + + break; + } + case PROP_NET_THRESHOLD3: + { + if (value <= ma->graphs[2]->net_threshold2) + { + gtk_spin_button_set_value(GTK_SPIN_BUTTON(widget), + (gdouble)g_settings_get_uint (ma->settings, "netthreshold2") + 1); + ma->graphs[2]->net_threshold3 = g_settings_get_uint (ma->settings, "netthreshold2") + 1; + } + else + ma->graphs[2]->net_threshold3 = value; + break; + } + } default: g_assert_not_reached(); @@ -329,11 +371,7 @@ fill_properties(GtkWidget *dialog, MultiloadApplet *ma) label = gtk_label_new_with_mnemonic (_(title)); gtk_label_set_use_markup (GTK_LABEL (label), TRUE); gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT); -#if GTK_CHECK_VERSION (3, 16, 0) gtk_label_set_xalign (GTK_LABEL (label), 0.0); -#else - gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5); -#endif gtk_box_pack_start (GTK_BOX (category_vbox), label, FALSE, FALSE, 0); g_free (title); @@ -438,11 +476,7 @@ fill_properties(GtkWidget *dialog, MultiloadApplet *ma) label = gtk_label_new (title); gtk_label_set_use_markup (GTK_LABEL (label), TRUE); gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT); -#if GTK_CHECK_VERSION (3, 16, 0) gtk_label_set_xalign (GTK_LABEL (label), 0.0); -#else - gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5); -#endif gtk_box_pack_start (GTK_BOX (category_vbox), label, FALSE, FALSE, 0); gtk_widget_show (label); g_free (title); @@ -473,11 +507,7 @@ fill_properties(GtkWidget *dialog, MultiloadApplet *ma) label_text = g_strdup(_("System m_onitor height: ")); label = gtk_label_new_with_mnemonic(label_text); -#if GTK_CHECK_VERSION (3, 16, 0) gtk_label_set_xalign (GTK_LABEL (label), 0.0f); -#else - gtk_misc_set_alignment (GTK_MISC (label), 0.0f, 0.5f); -#endif gtk_size_group_add_widget (label_size, label); gtk_box_pack_start (GTK_BOX (control_hbox), label, FALSE, FALSE, 0); @@ -506,11 +536,7 @@ fill_properties(GtkWidget *dialog, MultiloadApplet *ma) gtk_box_pack_start (GTK_BOX (hbox), spin_button, FALSE, FALSE, 0); label = gtk_label_new (_("pixels")); -#if GTK_CHECK_VERSION (3, 16, 0) gtk_label_set_xalign (GTK_LABEL (label), 0.0f); -#else - gtk_misc_set_alignment (GTK_MISC (label), 0.0f, 0.5f); -#endif gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0); control_hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 12); @@ -518,11 +544,7 @@ fill_properties(GtkWidget *dialog, MultiloadApplet *ma) gtk_widget_show (control_hbox); label = gtk_label_new_with_mnemonic(_("Sys_tem monitor update interval: ")); -#if GTK_CHECK_VERSION (3, 16, 0) gtk_label_set_xalign (GTK_LABEL (label), 0.0f); -#else - gtk_misc_set_alignment (GTK_MISC (label), 0.0f, 0.5f); -#endif gtk_size_group_add_widget (label_size, label); gtk_box_pack_start (GTK_BOX (control_hbox), label, FALSE, FALSE, 0); @@ -548,11 +570,7 @@ fill_properties(GtkWidget *dialog, MultiloadApplet *ma) } label = gtk_label_new(_("milliseconds")); -#if GTK_CHECK_VERSION (3, 16, 0) gtk_label_set_xalign (GTK_LABEL (label), 0.0f); -#else - gtk_misc_set_alignment (GTK_MISC (label), 0.0f, 0.5f); -#endif gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0); g_free(label_text); @@ -566,11 +584,7 @@ fill_properties(GtkWidget *dialog, MultiloadApplet *ma) label = gtk_label_new (title); gtk_label_set_use_markup (GTK_LABEL (label), TRUE); gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT); -#if GTK_CHECK_VERSION (3, 16, 0) gtk_label_set_xalign (GTK_LABEL (label), 0.0); -#else - gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5); -#endif gtk_box_pack_start (GTK_BOX (category_vbox), label, FALSE, FALSE, 0); gtk_widget_show (label); g_free (title); @@ -613,6 +627,8 @@ fill_properties(GtkWidget *dialog, MultiloadApplet *ma) add_color_selector(page, _("_Out"), "netload2-color1", ma); add_color_selector (page, _("_Local"), "netload2-color2", ma); add_color_selector(page, _("_Background"), "netload2-color3", ma); + add_color_selector(page, _("_Gridline"), "netload2-color4", ma); + add_color_selector(page, _("_Indicator"), "netload2-color5", ma); page = add_page(ma->notebook, _("Swap Space")); gtk_container_set_border_width (GTK_CONTAINER (page), 12); @@ -623,7 +639,7 @@ fill_properties(GtkWidget *dialog, MultiloadApplet *ma) gtk_container_set_border_width (GTK_CONTAINER (page), 12); add_color_selector(page, _("_Average"), "loadavg-color0", ma); add_color_selector(page, _("_Background"), "loadavg-color1", ma); - add_color_selector(page, _("_Gridline"), "loadavg-color2", ma); + add_color_selector(page, _("_Gridline"), "loadavg-color2", ma); page = add_page (ma->notebook, _("Harddisk")); gtk_container_set_border_width (GTK_CONTAINER (page), 12); @@ -631,6 +647,152 @@ fill_properties(GtkWidget *dialog, MultiloadApplet *ma) add_color_selector (page, _("_Write"), "diskload-color1", ma); add_color_selector (page, _("_Background"), "diskload-color2", ma); + title = g_strconcat ("<span weight=\"bold\">", _("Network speed thresholds"), "</span>", NULL); + label = gtk_label_new (title); + gtk_label_set_use_markup (GTK_LABEL (label), TRUE); + gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT); + gtk_label_set_xalign (GTK_LABEL (label), 0.0); + gtk_box_pack_start (GTK_BOX (category_vbox), label, FALSE, FALSE, 0); + gtk_widget_show (label); + g_free (title); + + hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); + gtk_box_pack_start (GTK_BOX (category_vbox), hbox, TRUE, TRUE, 0); + gtk_widget_show (hbox); + + indent = gtk_label_new (HIG_IDENTATION); + gtk_label_set_justify (GTK_LABEL (indent), GTK_JUSTIFY_LEFT); + gtk_box_pack_start (GTK_BOX (hbox), indent, FALSE, FALSE, 0); + gtk_widget_show (indent); + + control_vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6); + gtk_box_pack_start (GTK_BOX (hbox), control_vbox, TRUE, TRUE, 0); + gtk_widget_show (control_vbox); + + control_hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 12); + gtk_box_pack_start (GTK_BOX (control_vbox), control_hbox, TRUE, TRUE, 0); + gtk_widget_show (control_hbox); + + label_size = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL); + + orient = mate_panel_applet_get_orient(ma->applet); + label_text = g_strdup(_("Threshold 1: ")); + label = gtk_label_new_with_mnemonic(label_text); + gtk_label_set_xalign (GTK_LABEL (label), 0.0f); + gtk_size_group_add_widget (label_size, label); + gtk_box_pack_start (GTK_BOX (control_hbox), label, FALSE, FALSE, 0); + + hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6); + gtk_box_pack_start (GTK_BOX (control_hbox), hbox, TRUE, TRUE, 0); + gtk_widget_show (hbox); + + spin_size = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL); + + spin_button = gtk_spin_button_new_with_range(10, 1000000000, 5); + gtk_label_set_mnemonic_widget (GTK_LABEL (label), spin_button); + g_object_set_data(G_OBJECT(spin_button), "MultiloadApplet", ma); + g_object_set_data(G_OBJECT(spin_button), "prop_type", + GUINT_TO_POINTER(PROP_NET_THRESHOLD1)); + gtk_spin_button_set_value(GTK_SPIN_BUTTON(spin_button), + (gdouble)g_settings_get_uint(ma->settings, "netthreshold1")); + g_signal_connect(G_OBJECT(spin_button), "value_changed", + G_CALLBACK(spin_button_changed_cb), "netthreshold1"); + + if ( ! g_settings_is_writable (ma->settings, "netthreshold1")) + { + hard_set_sensitive (label, FALSE); + hard_set_sensitive (hbox, FALSE); + } + + gtk_size_group_add_widget (spin_size, spin_button); + gtk_box_pack_start (GTK_BOX (hbox), spin_button, FALSE, FALSE, 0); + + label = gtk_label_new (_("bytes")); + gtk_label_set_xalign (GTK_LABEL (label), 0.0f); + gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0); + + control_hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 12); + gtk_box_pack_start (GTK_BOX (control_vbox), control_hbox, TRUE, TRUE, 0); + gtk_widget_show (control_hbox); + + label = gtk_label_new_with_mnemonic(_("Threshold 2: ")); + gtk_label_set_xalign (GTK_LABEL (label), 0.0f); + gtk_size_group_add_widget (label_size, label); + gtk_box_pack_start (GTK_BOX (control_hbox), label, FALSE, FALSE, 0); + + hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6); + gtk_box_pack_start (GTK_BOX (control_hbox), hbox, TRUE, TRUE, 0); + gtk_widget_show (hbox); + + spin_button = gtk_spin_button_new_with_range(10, 1000000000, 5); + gtk_label_set_mnemonic_widget (GTK_LABEL (label), spin_button); + g_object_set_data(G_OBJECT(spin_button), "MultiloadApplet", ma); + g_object_set_data(G_OBJECT(spin_button), "prop_type", + GINT_TO_POINTER(PROP_NET_THRESHOLD2)); + gtk_spin_button_set_value(GTK_SPIN_BUTTON(spin_button), + (gdouble)g_settings_get_uint (ma->settings, "netthreshold2")); + g_signal_connect(G_OBJECT(spin_button), "value_changed", + G_CALLBACK(spin_button_changed_cb), "netthreshold2"); + gtk_size_group_add_widget (spin_size, spin_button); + gtk_box_pack_start (GTK_BOX (hbox), spin_button, FALSE, FALSE, 0); + + if ( ! g_settings_is_writable (ma->settings, "netthreshold2")) + { + hard_set_sensitive (label, FALSE); + hard_set_sensitive (hbox, FALSE); + } + + label = gtk_label_new(_("bytes")); + gtk_label_set_xalign (GTK_LABEL (label), 0.0f); + gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0); + + control_hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 12); + gtk_box_pack_start (GTK_BOX (control_vbox), control_hbox, TRUE, TRUE, 0); + gtk_widget_show (control_hbox); + + label = gtk_label_new_with_mnemonic(_("Threshold 3: ")); + gtk_label_set_xalign (GTK_LABEL (label), 0.0f); + gtk_size_group_add_widget (label_size, label); + gtk_box_pack_start (GTK_BOX (control_hbox), label, FALSE, FALSE, 0); + + hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6); + gtk_box_pack_start (GTK_BOX (control_hbox), hbox, TRUE, TRUE, 0); + gtk_widget_show (hbox); + + spin_button = gtk_spin_button_new_with_range(10, 1000000000, 5); + gtk_label_set_mnemonic_widget (GTK_LABEL (label), spin_button); + g_object_set_data(G_OBJECT(spin_button), "MultiloadApplet", ma); + g_object_set_data(G_OBJECT(spin_button), "prop_type", + GINT_TO_POINTER(PROP_NET_THRESHOLD3)); + gtk_spin_button_set_value(GTK_SPIN_BUTTON(spin_button), + (gdouble)g_settings_get_uint (ma->settings, "netthreshold3")); + g_signal_connect(G_OBJECT(spin_button), "value_changed", + G_CALLBACK(spin_button_changed_cb), "netthreshold3"); + gtk_size_group_add_widget (spin_size, spin_button); + gtk_box_pack_start (GTK_BOX (hbox), spin_button, FALSE, FALSE, 0); + + if ( ! g_settings_is_writable (ma->settings, "netthreshold3")) + { + hard_set_sensitive (label, FALSE); + hard_set_sensitive (hbox, FALSE); + } + + label = gtk_label_new(_("bytes")); + gtk_label_set_xalign (GTK_LABEL (label), 0.0f); + gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0); + + g_free(label_text); + + category_vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6); + gtk_box_pack_start (GTK_BOX (categories_vbox), category_vbox, TRUE, TRUE, 0); + + control_hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 12); + gtk_box_pack_start (GTK_BOX (control_vbox), control_hbox, TRUE, TRUE, 0); + gtk_widget_show (control_hbox); + + gtk_widget_show (category_vbox); + + return; } |