[Goodies-commits] r3613 - in xfce4-cpugraph-plugin/trunk: . panel-plugin po

ludovic mercier lidiriel at xfce.org
Thu Nov 22 08:17:51 CET 2007


Author: lidiriel
Date: 2007-11-22 07:17:50 +0000 (Thu, 22 Nov 2007)
New Revision: 3613

Added:
   xfce4-cpugraph-plugin/trunk/panel-plugin/cpu_os.c
   xfce4-cpugraph-plugin/trunk/panel-plugin/cpu_os.h
   xfce4-cpugraph-plugin/trunk/panel-plugin/option.c
   xfce4-cpugraph-plugin/trunk/panel-plugin/option.h
   xfce4-cpugraph-plugin/trunk/panel-plugin/settings.c
   xfce4-cpugraph-plugin/trunk/panel-plugin/settings.h
Removed:
   xfce4-cpugraph-plugin/trunk/panel-plugin/os.c
   xfce4-cpugraph-plugin/trunk/panel-plugin/os.h
Modified:
   xfce4-cpugraph-plugin/trunk/AUTHORS
   xfce4-cpugraph-plugin/trunk/ChangeLog
   xfce4-cpugraph-plugin/trunk/NEWS
   xfce4-cpugraph-plugin/trunk/TODO
   xfce4-cpugraph-plugin/trunk/configure.ac
   xfce4-cpugraph-plugin/trunk/panel-plugin/Makefile.am
   xfce4-cpugraph-plugin/trunk/panel-plugin/cpu.c
   xfce4-cpugraph-plugin/trunk/panel-plugin/cpu.h
   xfce4-cpugraph-plugin/trunk/panel-plugin/mode.c
   xfce4-cpugraph-plugin/trunk/panel-plugin/mode.h
   xfce4-cpugraph-plugin/trunk/po/POTFILES.in
Log:
Prepare new release.
cleanup and refactoring code
add and remove some functionnality see changelog and todo.
The big one is the plugin display each cpucore activity

Modified: xfce4-cpugraph-plugin/trunk/AUTHORS
===================================================================
--- xfce4-cpugraph-plugin/trunk/AUTHORS	2007-11-21 00:30:55 UTC (rev 3612)
+++ xfce4-cpugraph-plugin/trunk/AUTHORS	2007-11-22 07:17:50 UTC (rev 3613)
@@ -1,2 +1,4 @@
 Alexander Nordfelth <alex.nordfelth at telia.com>
-gatopeich <gatoguan-os at yahoo.com>
\ No newline at end of file
+gatopeich <gatoguan-os at yahoo.com>
+lidiriel <lidiriel at coriolys.org>
+Angelo Miguel Arrifano <miknix at gmail.com>

Modified: xfce4-cpugraph-plugin/trunk/ChangeLog
===================================================================
--- xfce4-cpugraph-plugin/trunk/ChangeLog	2007-11-21 00:30:55 UTC (rev 3612)
+++ xfce4-cpugraph-plugin/trunk/ChangeLog	2007-11-22 07:17:50 UTC (rev 3613)
@@ -1,12 +1,20 @@
+2007-11-22  ludovic mercier  <lidiriel at coriolys.org>
+
+	* panel-plugin: Split code in several files, cleanup and 
+	refactoring code. Remove timescaling, remove *BSD code, remove 
+	fire color and frequency modes.
+	Add bar graph for each cpu core.
+	Add grid view mode
+	Add associate command (default is xterm top)
+
 2007-05-07 22:30 phase
 
-	* panel-plugin/cpu.c, cpu.h, os.c, os.h:
-	Added 'cpufreq' color mode, which ranges from color #1 to
-	color #2 proportionally to CPU scaling frequency.
-	Added 'Non-linear time scale." as an on/off option.
-	Added scaling detection so new color mode can work, and
-	tweaked Linux CPU usage code a little bit to account for new
-	stats in kernel v2.6, also optimize resources.
+	* panel-plugin/cpu.c, cpu.h, os.c, os.h: Added 'cpufreq' color
+	mode, which ranges from color #1 to color #2 proportionally to CPU
+	scaling frequency.  Added 'Non-linear time scale." as an on/off
+	option.  Added scaling detection so new color mode can work, and
+	tweaked Linux CPU usage code a little bit to account for new stats
+	in kernel v2.6, also optimize resources.
 
 2004-06-12 03:00 phase
 

Modified: xfce4-cpugraph-plugin/trunk/NEWS
===================================================================
--- xfce4-cpugraph-plugin/trunk/NEWS	2007-11-21 00:30:55 UTC (rev 3612)
+++ xfce4-cpugraph-plugin/trunk/NEWS	2007-11-22 07:17:50 UTC (rev 3613)
@@ -3,3 +3,14 @@
 - Ported to Xfce 4.4 panel API
 - Use xfce4-dev-tools
 - Use real frame widget
+
+0.4.0
+=====
+- Cleanup/Refactoring all code
+- Split in several file
+- Add one cpu bar graph activity for each cpu core
+- Remove fire and frequency color mode (go back in futur)
+- Remove time scalling view mode (go back in futur)
+- Remove *BSD code (go back in next released)
+- Add a new view mode : the grid
+- Add an associate customizable command

Modified: xfce4-cpugraph-plugin/trunk/TODO
===================================================================
--- xfce4-cpugraph-plugin/trunk/TODO	2007-11-21 00:30:55 UTC (rev 3612)
+++ xfce4-cpugraph-plugin/trunk/TODO	2007-11-22 07:17:50 UTC (rev 3613)
@@ -1 +1,6 @@
-* Even more modes :)
+* Even more modes
+* Add *BSD code in cpu_os (see 0.3.0)
+* Add Frequency color mode ? (see 0.3.0)
+* Add Fire color mode (see 0.3.0)
+* Add Time scalling
+* Continue to cleanup/refactoring code

Modified: xfce4-cpugraph-plugin/trunk/configure.ac
===================================================================
--- xfce4-cpugraph-plugin/trunk/configure.ac	2007-11-21 00:30:55 UTC (rev 3612)
+++ xfce4-cpugraph-plugin/trunk/configure.ac	2007-11-22 07:17:50 UTC (rev 3613)
@@ -5,7 +5,7 @@
 dnl 2004 Alexander Nordfelth <alex.nordfelth at telia.com>
 dnl
 
-m4_define([cpugraph_version],[0.3.0])
+m4_define([cpugraph_version],[0.4.0])
 
 AC_INIT([xfce4-cpugraph-plugin], [cpugraph_version],
 	[xfce-goodies-dev at lists.berlios.de])

Modified: xfce4-cpugraph-plugin/trunk/panel-plugin/Makefile.am
===================================================================
--- xfce4-cpugraph-plugin/trunk/panel-plugin/Makefile.am	2007-11-21 00:30:55 UTC (rev 3612)
+++ xfce4-cpugraph-plugin/trunk/panel-plugin/Makefile.am	2007-11-22 07:17:50 UTC (rev 3613)
@@ -9,12 +9,16 @@
 	@LIBXFCE4PANEL_LIBS@
 
 xfce4_cpugraph_plugin_SOURCES =					\
-	mode.c						\
-	mode.h						\
-	cpu.c							\
-	cpu.h							\
-	os.c							\
-	os.h
+	mode.c		\
+	mode.h		\
+	option.c \
+	option.h \
+	settings.c \
+	settings.h \
+	cpu.c		\
+	cpu.h		\
+	cpu_os.c	\
+	cpu_os.h
 
 # .desktop file
 #

Modified: xfce4-cpugraph-plugin/trunk/panel-plugin/cpu.c
===================================================================
--- xfce4-cpugraph-plugin/trunk/panel-plugin/cpu.c	2007-11-21 00:30:55 UTC (rev 3612)
+++ xfce4-cpugraph-plugin/trunk/panel-plugin/cpu.c	2007-11-22 07:17:50 UTC (rev 3613)
@@ -1,6 +1,35 @@
+/*  cpu.c
+ *  Part of xfce4-cpugraph-plugin
+ *
+ *  Copyright (c) Alexander Nordfelth <alex.nordfelth at telia.com>
+ *  Copyright (c) gatopeich <gatoguan-os at yahoo.com>
+ *  Copyright (c) 2007-2008 Angelo Arrifano <miknix at gmail.com>
+ *  Copyright (c) 2007-2008 Lidiriel <lidiriel at coriolys.org>
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU Library General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+ 
 #include "cpu.h"
 #include "mode.h"
+#include "option.h"
+#include "settings.h"
+#include "cpu_os.h"
 
+
+static GtkTooltips *tooltips = NULL;
+
 guint16
 _lerp (double t, guint16 a, guint16 b)
 {
@@ -40,183 +69,33 @@
 void
 Kill (XfcePanelPlugin * plugin, CPUGraph * base)
 {
-    if (base->m_TimeoutID)
-        g_source_remove (base->m_TimeoutID);
+	gint i;
+	cpuLoadMon_free();
+	for(i=0; i<base->nrCores-1 ; i++)
+		gtk_widget_destroy(base->m_pBar[i]);
 
-    if (base->m_History)
-        g_free (base->m_History);
+	gtk_widget_destroy(base->m_Box);
+	free(base->m_pBar);
+	if (base->m_TimeoutID)
+		g_source_remove (base->m_TimeoutID);
 
-    g_object_unref (base->m_Tooltip);
+	if (base->m_History)
+		g_free (base->m_History);
 
-    g_free (base);
-}
+	g_object_unref (base->m_Tooltip);
 
-void
-ReadSettings (XfcePanelPlugin * plugin, CPUGraph * base)
-{
-    const char *value;
-    char *file;
-    XfceRc *rc;
-    int update;
-
-    base->m_Width = 40;
-
-    base->m_ForeGround1.red = 0;
-    base->m_ForeGround1.green = 65535;
-    base->m_ForeGround1.blue = 0;
-
-    base->m_ForeGround2.red = 65535;
-    base->m_ForeGround2.green = 0;
-    base->m_ForeGround2.blue = 0;
-
-    base->m_ForeGround3.red = 0;
-    base->m_ForeGround3.green = 0;
-    base->m_ForeGround3.blue = 65535;
-
-    base->m_BackGround.red = 65535;
-    base->m_BackGround.green = 65535;
-    base->m_BackGround.blue = 65535;
-
-    base->m_TimeScale = 0;
-    base->m_Frame = 0;
-    base->m_AssociateCommand = "xterm top";
-    base->m_ColorMode = 0;
-    base->m_Mode = 0;
-
-    if ((file = xfce_panel_plugin_lookup_rc_file (plugin)) != NULL)
-
-    {
-        rc = xfce_rc_simple_open (file, TRUE);
-        g_free (file);
-
-        if (rc)
-        {
-            base->m_UpdateInterval =
-                xfce_rc_read_int_entry (rc, "UpdateInterval",
-                                        base->m_UpdateInterval);
-
-            base->m_TimeScale =
-                xfce_rc_read_int_entry (rc, "TimeScale",
-                                        base->m_TimeScale);
-
-            base->m_Width =
-                xfce_rc_read_int_entry (rc, "Width", base->m_Width);
-
-            base->m_Mode = xfce_rc_read_int_entry (rc, "Mode", base->m_Mode);
-
-            base->m_Frame =
-                xfce_rc_read_int_entry (rc, "Frame", base->m_Frame);
-
-            if (value = xfce_rc_read_entry (rc, "AssociateCommand", base->m_AssociateCommand)) {
-              base->m_AssociateCommand = g_strdup(value);
-            }
-
-            base->m_ColorMode =
-                xfce_rc_read_int_entry (rc, "ColorMode", base->m_ColorMode);
-
-            if ((value = xfce_rc_read_entry (rc, "Foreground1", NULL)))
-            {
-                gdk_color_parse (value, &base->m_ForeGround1);
-            }
-            if ((value = xfce_rc_read_entry (rc, "Foreground2", NULL)))
-            {
-                gdk_color_parse (value, &base->m_ForeGround2);
-            }
-            if ((value = xfce_rc_read_entry (rc, "Background", NULL)))
-            {
-                gdk_color_parse (value, &base->m_BackGround);
-            }
-            if ((value = xfce_rc_read_entry (rc, "Foreground3", NULL)))
-            {
-                gdk_color_parse (value, &base->m_ForeGround3);
-            }
-
-            xfce_rc_close (rc);
-        }
-    }
-
-    SetHistorySize (base, base->m_Width);
-
-    if (base->m_TimeoutID)
-        g_source_remove (base->m_TimeoutID);
-    switch (base->m_UpdateInterval)
-    {
-        case 0:
-            update = 250;
-            break;
-        case 1:
-            update = 500;
-            break;
-        case 2:
-            update = 750;
-            break;
-        default:
-            update = 1000;
-    }
-    base->m_TimeoutID = g_timeout_add (update, (GtkFunction) UpdateCPU, base);
-
-    gtk_frame_set_shadow_type (GTK_FRAME (base->m_FrameWidget),
-            base->m_Frame ? GTK_SHADOW_IN : GTK_SHADOW_NONE);
+	g_free (base);
 }
 
-void
-WriteSettings (XfcePanelPlugin *plugin, CPUGraph *base)
-{
-    char value[10];
-    XfceRc *rc;
-    char *file;
 
-    if (!(file = xfce_panel_plugin_save_location (plugin, TRUE)))
-        return;
-
-    rc = xfce_rc_simple_open (file, FALSE);
-    g_free (file);
-
-    if (!rc)
-        return;
-
-    xfce_rc_write_int_entry (rc, "UpdateInterval", base->m_UpdateInterval);
-
-    xfce_rc_write_int_entry (rc, "TimeScale", base->m_TimeScale);
-
-    xfce_rc_write_int_entry (rc, "Width", base->m_Width);
-
-    xfce_rc_write_int_entry (rc, "Mode", base->m_Mode);
-
-    xfce_rc_write_int_entry (rc, "Frame", base->m_Frame);
-
-    xfce_rc_write_entry (rc, "AssociateCommand", base->m_AssociateCommand ? base->m_AssociateCommand : "");
-
-    xfce_rc_write_int_entry (rc, "ColorMode", base->m_ColorMode);
-
-    g_snprintf (value, 8, "#%02X%02X%02X", base->m_ForeGround1.red >> 8,
-                                           base->m_ForeGround1.green >> 8,
-                                           base->m_ForeGround1.blue >> 8);
-    xfce_rc_write_entry (rc, "Foreground1", value);
-
-    g_snprintf (value, 8, "#%02X%02X%02X", base->m_ForeGround2.red >> 8,
-                                           base->m_ForeGround2.green >> 8,
-                                           base->m_ForeGround2.blue >> 8);
-    xfce_rc_write_entry (rc, "Foreground2", value);
-
-    g_snprintf (value, 8, "#%02X%02X%02X", base->m_BackGround.red >> 8,
-                                           base->m_BackGround.green >> 8,
-                                           base->m_BackGround.blue >> 8);
-    xfce_rc_write_entry (rc, "Background", value);
-
-    g_snprintf (value, 8, "#%02X%02X%02X", base->m_ForeGround3.red >> 8,
-                                           base->m_ForeGround3.green >> 8,
-                                           base->m_ForeGround3.blue >> 8);
-    xfce_rc_write_entry (rc, "Foreground3", value);
-
-    xfce_rc_close (rc);
-}
-
 CPUGraph *
 CreateControl (XfcePanelPlugin * plugin)
 {
     GtkWidget *frame, *ebox;
+    GtkOrientation orientation;
+    GtkProgressBarOrientation barOrientation;
     CPUGraph *base = g_new0 (CPUGraph, 1);
+    gint i;
 
     base->plugin = plugin;
 
@@ -224,19 +103,67 @@
     gtk_widget_show (ebox);
     gtk_container_add (GTK_CONTAINER (plugin), ebox);
 
+    xfce_panel_plugin_add_action_widget (plugin, ebox);
+
+    orientation = xfce_panel_plugin_get_orientation(plugin);
+    if(orientation == GTK_ORIENTATION_HORIZONTAL)
+      barOrientation = GTK_PROGRESS_BOTTOM_TO_TOP;
+    else
+      barOrientation = GTK_PROGRESS_LEFT_TO_RIGHT;
+
+    base->m_Box = xfce_hvbox_new(orientation, FALSE, 0);
+    gtk_widget_show(base->m_Box);
+    gtk_container_add(GTK_CONTAINER(ebox), base->m_Box);
+    
+    gtk_container_set_border_width(GTK_CONTAINER(frame), BORDER / 2);
+ 
+    /* <-- Multicore stuff */
+    if((base->nrCores = cpuLoadMon_init() - 1) < 0)
+      DBG("Cannot init base monitor!\n");
+
+    base->m_pBar =
+        (GtkWidget **) malloc(sizeof(GtkWidget *) * base->nrCores);
+
+    for(i=0; i<base->nrCores; i++) {
+      base->m_pBar[i] = GTK_WIDGET(gtk_progress_bar_new());
+      gtk_progress_bar_set_orientation(
+                                       GTK_PROGRESS_BAR(base->m_pBar[i]),
+                                       barOrientation);
+     
+      gtk_box_pack_start(
+                         GTK_BOX(base->m_Box),
+                         base->m_pBar[i],
+                         FALSE,
+                         FALSE,
+                         0);
+     
+    
+      gtk_widget_show(base->m_pBar[i]);
+    }
+
+    /* <-- End of multicore stuff */
+
     base->m_FrameWidget = frame = gtk_frame_new (NULL);
     gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_IN);
+ 
+
+    gtk_box_pack_start(
+                  GTK_BOX(base->m_Box),
+                  frame,
+                  TRUE,
+                  TRUE,
+                  2);
     gtk_widget_show (frame);
-    gtk_container_add (GTK_CONTAINER (ebox), frame);
 
-    xfce_panel_plugin_add_action_widget (plugin, ebox);
-    g_signal_connect (ebox, "button-press-event", G_CALLBACK (LaunchCommand), base);
-    
+
+
+
+
+
     base->m_DrawArea = gtk_drawing_area_new ();
     gtk_widget_set_app_paintable (base->m_DrawArea, TRUE);
-    gtk_widget_show (base->m_DrawArea);
-        
     gtk_container_add (GTK_CONTAINER (frame), GTK_WIDGET (base->m_DrawArea));
+    gtk_widget_show (base->m_DrawArea);
 
     xfce_panel_plugin_add_action_widget (plugin, base->m_DrawArea);
 
@@ -244,6 +171,7 @@
     g_object_ref (base->m_Tooltip);
     gtk_object_sink (GTK_OBJECT (base->m_Tooltip));
 
+    g_signal_connect (ebox, "button-press-event", G_CALLBACK (LaunchCommand), base);
     g_signal_connect_after (base->m_DrawArea, "expose-event",
                       G_CALLBACK (DrawAreaExposeEvent), base);
 
@@ -253,39 +181,106 @@
 void
 SetOrientation (XfcePanelPlugin * plugin, GtkOrientation orientation, CPUGraph *base)
 {
-    UserSetSize (base);
+  GtkProgressBarOrientation barOrientation;
+	gpointer p_pBar[base->nrCores];
+  gpointer p_FrameWidget;
+	gint i;
 
-    gtk_widget_queue_draw (base->m_DrawArea);
+  /* <-- Multicore stuff */
+
+	orientation = xfce_panel_plugin_get_orientation(plugin);
+	if(orientation == GTK_ORIENTATION_HORIZONTAL)
+		barOrientation = GTK_PROGRESS_BOTTOM_TO_TOP;
+	else
+		barOrientation = GTK_PROGRESS_LEFT_TO_RIGHT;
+
+  /* Unpack progress bars */
+	for(i=0; i<base->nrCores; i++)
+	{
+		/* reference progress bars to keep them alive */
+		p_pBar[i] = g_object_ref(base->m_pBar[i]);
+		gtk_container_remove(
+                         GTK_CONTAINER(base->m_Box),
+                         GTK_WIDGET(base->m_pBar[i]));
+	}
+  p_FrameWidget = g_object_ref(base->m_FrameWidget);
+	gtk_container_remove(
+                       GTK_CONTAINER(base->m_Box),
+                       GTK_WIDGET(base->m_FrameWidget));
+
+	
+	xfce_hvbox_set_orientation(XFCE_HVBOX(base->m_Box), orientation);
+
+	/* Pack progress bars again into hvbox */
+	for(i=0; i<base->nrCores; i++)
+	{
+		gtk_progress_bar_set_orientation(
+                                     GTK_PROGRESS_BAR(base->m_pBar[i]),
+                                     barOrientation);	
+		gtk_box_pack_start(
+                       GTK_BOX(base->m_Box),
+                       base->m_pBar[i],
+                       FALSE,
+                       FALSE,
+                       1);
+		/* We dont need anymore this reference */
+		g_object_unref(p_pBar[i]);
+	}
+	gtk_box_pack_start(
+                     GTK_BOX(base->m_Box),
+                     base->m_FrameWidget,
+                     TRUE,
+                     TRUE,
+                     2);
+  g_object_unref(p_FrameWidget);
+  
+  UserSetSize (base);
+
+  gtk_widget_queue_draw (base->m_DrawArea);
 }
 
 void
 UpdateTooltip (CPUGraph * base)
 {
     char tooltip[32];
-
-    int pos = snprintf (tooltip, 32, "Usage: %d%%", base->m_CPUUsage*100/CPU_SCALE);
+    int pos = snprintf (tooltip, 32, "Usage: %d%%", base->m_CPUUsage);
     if( scaling_cur_freq )
         snprintf (tooltip+pos, 32-pos, " (%d MHz)", scaling_cur_freq/1000);
     gtk_tooltips_set_tip (GTK_TOOLTIPS (base->m_Tooltip),
-                          base->m_FrameWidget->parent, tooltip, NULL);
+                          base->m_Box->parent, tooltip, NULL);
 }
 
+/**
+ * size : size of pannel height/width
+ * BORDER : use for size of bar
+ */
 gboolean
 SetSize (XfcePanelPlugin *plugin, int size, CPUGraph *base)
 {
-    gtk_container_set_border_width (GTK_CONTAINER (base->m_FrameWidget),
-                                    size > 26 ? 2 : 0);
-
+    gint i, coreWidth;
+    gtk_container_set_border_width (GTK_CONTAINER (base->m_FrameWidget), 0);
     if (xfce_panel_plugin_get_orientation (plugin) ==
             GTK_ORIENTATION_HORIZONTAL)
     {
-        gtk_widget_set_size_request (GTK_WIDGET (plugin),
-                                     base->m_Width, size);
+      for(i=0; i<base->nrCores; i++)
+          gtk_widget_set_size_request(
+                                GTK_WIDGET(base->m_pBar[i]),
+                                BORDER,
+                                size);
+
+      coreWidth = base->nrCores*BORDER;
+      gtk_widget_set_size_request (GTK_WIDGET (plugin),
+                                   base->m_Width+coreWidth, size);
     }
     else
     {
         gtk_widget_set_size_request (GTK_WIDGET (plugin),
                                      size, base->m_Width);
+        for(i=0; i<base->nrCores; i++)
+          gtk_widget_set_size_request(
+                                GTK_WIDGET(base->m_pBar[i]),
+                                size,
+                                BORDER);
     }
 
     return TRUE;
@@ -294,427 +289,37 @@
 void
 UserSetSize (CPUGraph * base)
 {
-    SetSize (base->plugin, xfce_panel_plugin_get_size (base->plugin), base);
+  SetSize (base->plugin, xfce_panel_plugin_get_size (base->plugin), base);
 }
 
-static void
-DialogResponse (GtkWidget *dlg, int response, CPUGraph *base)
-{
-    ApplyChanges (base);
-    gtk_widget_destroy (dlg);
-    xfce_panel_plugin_unblock_menu (base->plugin);
-    WriteSettings (base->plugin, base);
-}
 
-void
-CreateOptions (XfcePanelPlugin *plugin, CPUGraph *base)
-{
-    GtkWidget *dlg, *header;
-    GtkBox *vbox, *vbox2, *hbox;
-    GtkWidget *label;
-    GtkSizeGroup *sg;
-    SOptions *op = &base->m_Options;
-
-    xfce_panel_plugin_block_menu (plugin);
-
-    dlg = gtk_dialog_new_with_buttons (_("Configure CPU Graph"),
-                GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (plugin))),
-                GTK_DIALOG_DESTROY_WITH_PARENT |
-                GTK_DIALOG_NO_SEPARATOR,
-                GTK_STOCK_CLOSE, GTK_RESPONSE_OK,
-                NULL);
-
-    base->m_OptionsDialog = dlg;
-
-    g_signal_connect (dlg, "response", G_CALLBACK (DialogResponse), base);
-
-    gtk_container_set_border_width (GTK_CONTAINER (dlg), 2);
-
-    header = xfce_create_header (NULL, _("CPU Graph"));
-    gtk_widget_set_size_request (GTK_BIN (header)->child, -1, 32);
-    gtk_container_set_border_width (GTK_CONTAINER (header), BORDER - 2);
-    gtk_widget_show (header);
-    gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dlg)->vbox), header,
-                        FALSE, TRUE, 0);
-
-    vbox = GTK_BOX (gtk_vbox_new(FALSE, BORDER));
-    gtk_container_set_border_width (GTK_CONTAINER (vbox), BORDER );
-    gtk_widget_show(GTK_WIDGET (vbox));
-
-    sg = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL);
-
-    /* Update Interval */
-
-    hbox = GTK_BOX (gtk_hbox_new (FALSE, BORDER));
-    gtk_widget_show (GTK_WIDGET (hbox));
-    gtk_box_pack_start (GTK_BOX (vbox), GTK_WIDGET (hbox), FALSE, FALSE, 0);
-    label = gtk_label_new (_("Update Interval: "));
-    gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
-    gtk_size_group_add_widget (sg, label);
-    gtk_widget_show (label);
-    gtk_box_pack_start (GTK_BOX (hbox), GTK_WIDGET (label), FALSE, FALSE, 0);
-
-    op->m_UpdateOption = gtk_option_menu_new ();
-    gtk_widget_show (op->m_UpdateOption);
-    gtk_box_pack_start (GTK_BOX (hbox), op->m_UpdateOption, FALSE, FALSE, 0);
-
-    op->m_UpdateMenu = gtk_menu_new ();
-    gtk_option_menu_set_menu (GTK_OPTION_MENU (op->m_UpdateOption),
-                              op->m_UpdateMenu);
-
-    op->m_UpdateMenuItem =
-        gtk_menu_item_new_with_label (_("Fastest (~250ms)"));
-    gtk_widget_show (op->m_UpdateMenuItem);
-    gtk_menu_shell_append (GTK_MENU_SHELL (op->m_UpdateMenu),
-                           op->m_UpdateMenuItem);
-
-    op->m_UpdateMenuItem = gtk_menu_item_new_with_label (_("Fast (~500ms)"));
-    gtk_widget_show (op->m_UpdateMenuItem);
-    gtk_menu_shell_append (GTK_MENU_SHELL (op->m_UpdateMenu),
-                           op->m_UpdateMenuItem);
-
-    op->m_UpdateMenuItem =
-        gtk_menu_item_new_with_label (_("Normal (~750ms)"));
-    gtk_widget_show (op->m_UpdateMenuItem);
-    gtk_menu_shell_append (GTK_MENU_SHELL (op->m_UpdateMenu),
-                           op->m_UpdateMenuItem);
-
-    op->m_UpdateMenuItem = gtk_menu_item_new_with_label (_("Slow (~1s)"));
-    gtk_widget_show (op->m_UpdateMenuItem);
-    gtk_menu_shell_append (GTK_MENU_SHELL (op->m_UpdateMenu),
-                           op->m_UpdateMenuItem);
-
-    gtk_option_menu_set_history (GTK_OPTION_MENU (op->m_UpdateOption),
-                                 base->m_UpdateInterval);
-
-    g_signal_connect (op->m_UpdateOption, "changed",
-                      G_CALLBACK (UpdateChange), base);
-
-    /* Width */
-
-    hbox = GTK_BOX (gtk_hbox_new (FALSE, BORDER));
-    gtk_widget_show (GTK_WIDGET (hbox));
-    gtk_box_pack_start (GTK_BOX (vbox), GTK_WIDGET (hbox), FALSE, FALSE, 0);
-
-    if (xfce_panel_plugin_get_orientation (plugin) ==
-            GTK_ORIENTATION_HORIZONTAL)
-        label = gtk_label_new (_("Width:"));
-    else
-        label = gtk_label_new (_("Height:"));
-    gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
-    gtk_size_group_add_widget (sg, label);
-    gtk_widget_show (label);
-    gtk_box_pack_start (GTK_BOX (hbox), GTK_WIDGET (label), FALSE, FALSE, 0);
-
-    op->m_Width =
-        gtk_spin_button_new_with_range (10, 128, 1);
-    gtk_spin_button_set_value (GTK_SPIN_BUTTON (op->m_Width), base->m_Width);
-    gtk_widget_show (op->m_Width);
-    gtk_box_pack_start (GTK_BOX (hbox), GTK_WIDGET (op->m_Width), FALSE,
-                        FALSE, 0);
-    g_signal_connect (op->m_Width, "value-changed", G_CALLBACK (SpinChange),
-                      &base->m_Width);
-
-    /* TimeScale */
-    hbox = GTK_BOX (gtk_hbox_new (FALSE, BORDER));
-    gtk_widget_show (GTK_WIDGET (hbox));
-    gtk_box_pack_start (GTK_BOX (vbox), GTK_WIDGET (hbox), FALSE, FALSE, 0);
-
-    op->m_TimeScale = gtk_check_button_new_with_mnemonic (_("Non-linear time-scale"));
-    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (op->m_TimeScale),
-                                  base->m_TimeScale);
-    gtk_widget_show (op->m_TimeScale);
-    gtk_box_pack_start (GTK_BOX (hbox), GTK_WIDGET (op->m_TimeScale), FALSE,
-                        FALSE, 0);
-    g_signal_connect (op->m_TimeScale, "toggled", G_CALLBACK (TimeScaleChange),
-                      base);
-    gtk_size_group_add_widget (sg, op->m_TimeScale);
-
-    /* Frame */
-
-    hbox = GTK_BOX (gtk_hbox_new (FALSE, BORDER));
-    gtk_widget_show (GTK_WIDGET (hbox));
-    gtk_box_pack_start (GTK_BOX (vbox), GTK_WIDGET (hbox), FALSE, FALSE, 0);
-
-    op->m_GraphFrame = gtk_check_button_new_with_mnemonic (_("Show frame"));
-    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (op->m_GraphFrame),
-                                  base->m_Frame);
-    gtk_widget_show (op->m_GraphFrame);
-    gtk_box_pack_start (GTK_BOX (hbox), GTK_WIDGET (op->m_GraphFrame), FALSE,
-                        FALSE, 0);
-    g_signal_connect (op->m_GraphFrame, "toggled", G_CALLBACK (FrameChange),
-                      base);
-    gtk_size_group_add_widget (sg, op->m_GraphFrame);
-
-    vbox2 = GTK_BOX (gtk_vbox_new (FALSE, BORDER));
-    gtk_widget_show (GTK_WIDGET (vbox2));
-    gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
-
-    /* Associate Command */
-
-    hbox = GTK_BOX (gtk_hbox_new (FALSE, BORDER));
-    gtk_widget_show (GTK_WIDGET (hbox));
-   	gtk_box_pack_start (GTK_BOX (vbox), GTK_WIDGET (hbox), FALSE, FALSE, 0);
-    label = gtk_label_new (_("Associated command :"));
-    gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
-    gtk_size_group_add_widget (sg, label);
-    gtk_widget_show (label);
-    gtk_box_pack_start (GTK_BOX (hbox), GTK_WIDGET (label), FALSE, FALSE, 0);
-    op->m_AssociateCommand = gtk_entry_new ();
-    gtk_entry_set_max_length (GTK_ENTRY(op->m_AssociateCommand), 32);
-    gtk_entry_set_text (GTK_ENTRY(op->m_AssociateCommand), base->m_AssociateCommand);
-    gtk_widget_show (op->m_AssociateCommand);
-    gtk_box_pack_start (GTK_BOX (hbox), GTK_WIDGET (op->m_AssociateCommand), FALSE, FALSE, 0);
-    g_signal_connect (op->m_AssociateCommand, "changed", G_CALLBACK (AssociateCommandChange), base);
-
-    /* Foreground 1 */
-
-    hbox = GTK_BOX (gtk_hbox_new (FALSE, BORDER));
-    gtk_widget_show (GTK_WIDGET (hbox));
-    gtk_box_pack_start (GTK_BOX (vbox2), GTK_WIDGET (hbox), FALSE, FALSE, 0);
-
-    label = gtk_label_new (_("Color 1:"));
-    gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
-    gtk_size_group_add_widget (sg, label);
-    gtk_widget_show (label);
-    gtk_box_pack_start (GTK_BOX (hbox), GTK_WIDGET (label), FALSE, FALSE, 0);
-
-    op->m_FG1 = gtk_button_new ();
-    op->m_ColorDA = gtk_drawing_area_new ();
-
-    gtk_widget_modify_bg (op->m_ColorDA, GTK_STATE_NORMAL,
-                          &base->m_ForeGround1);
-    gtk_widget_set_size_request (op->m_ColorDA, 12, 12);
-    gtk_container_add (GTK_CONTAINER (op->m_FG1), op->m_ColorDA);
-    gtk_widget_show (GTK_WIDGET (op->m_FG1));
-    gtk_widget_show (GTK_WIDGET (op->m_ColorDA));
-    gtk_box_pack_start (GTK_BOX (hbox), GTK_WIDGET (op->m_FG1), FALSE, FALSE,
-                        0);
-
-    g_signal_connect (op->m_FG1, "clicked", G_CALLBACK (ChangeColor1), base);
-
-    /* Foreground2 */
-
-    hbox = GTK_BOX (gtk_hbox_new (FALSE, BORDER));
-    gtk_widget_show (GTK_WIDGET (hbox));
-    gtk_box_pack_start (GTK_BOX (vbox2), GTK_WIDGET (hbox), FALSE, FALSE, 0);
-
-    label = gtk_label_new (_("Color 2:"));
-    gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
-    gtk_size_group_add_widget (sg, label);
-    gtk_widget_show (label);
-    gtk_box_pack_start (GTK_BOX (hbox), GTK_WIDGET (label), FALSE, FALSE, 0);
-
-    op->m_FG2 = gtk_button_new ();
-    op->m_ColorDA2 = gtk_drawing_area_new ();
-
-    gtk_widget_modify_bg (op->m_ColorDA2, GTK_STATE_NORMAL,
-                          &base->m_ForeGround2);
-    gtk_widget_set_size_request (op->m_ColorDA2, 12, 12);
-    gtk_container_add (GTK_CONTAINER (op->m_FG2), op->m_ColorDA2);
-    gtk_widget_show (GTK_WIDGET (op->m_FG2));
-    gtk_widget_show (GTK_WIDGET (op->m_ColorDA2));
-    gtk_box_pack_start (GTK_BOX (hbox), GTK_WIDGET (op->m_FG2), FALSE, FALSE,
-                        0);
-
-    g_signal_connect (op->m_FG2, "clicked", G_CALLBACK (ChangeColor2), base);
-
-    if (base->m_Mode == 1)
-        gtk_widget_set_sensitive (GTK_WIDGET (base->m_Options.m_FG2), TRUE);
-
-    /* Foreground3 */
-
-    hbox = GTK_BOX (gtk_hbox_new (FALSE, BORDER));
-    gtk_widget_show (GTK_WIDGET (hbox));
-    gtk_box_pack_start (GTK_BOX (vbox2), GTK_WIDGET (hbox), FALSE, FALSE, 0);
-
-    label = gtk_label_new (_("Color 3:"));
-    gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
-    gtk_size_group_add_widget (sg, label);
-    gtk_widget_show (label);
-    gtk_box_pack_start (GTK_BOX (hbox), GTK_WIDGET (label), FALSE, FALSE, 0);
-    op->m_FG3 = gtk_button_new ();
-    op->m_ColorDA5 = gtk_drawing_area_new ();
-    gtk_widget_modify_bg (op->m_ColorDA5, GTK_STATE_NORMAL,
-                          &base->m_ForeGround3);
-    gtk_widget_set_size_request (op->m_ColorDA5, 12, 12);
-    gtk_container_add (GTK_CONTAINER (op->m_FG3), op->m_ColorDA5);
-    gtk_widget_show (GTK_WIDGET (op->m_FG3));
-    gtk_widget_show (GTK_WIDGET (op->m_ColorDA5));
-    gtk_box_pack_start (GTK_BOX (hbox), GTK_WIDGET (op->m_FG3), FALSE, FALSE,
-                        0);
-    g_signal_connect (op->m_FG3, "clicked", G_CALLBACK (ChangeColor4), base);
-
-    if (base->m_Mode == 0 || base->m_Mode == 2 || base->m_ColorMode == 0)
-        gtk_widget_set_sensitive (GTK_WIDGET (base->m_Options.m_FG3), FALSE);
-    else
-        gtk_widget_set_sensitive (GTK_WIDGET (base->m_Options.m_FG3), TRUE);
-
-
-    /* Background */
-
-    hbox = GTK_BOX (gtk_hbox_new (FALSE, BORDER));
-    gtk_widget_show (GTK_WIDGET (hbox));
-    gtk_box_pack_start (GTK_BOX (vbox2), GTK_WIDGET (hbox), FALSE, FALSE, 0);
-
-    label = gtk_label_new (_("Background:"));
-    gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
-    gtk_size_group_add_widget (sg, label);
-    gtk_widget_show (label);
-    gtk_box_pack_start (GTK_BOX (hbox), GTK_WIDGET (label), FALSE, FALSE, 0);
-
-    op->m_BG = gtk_button_new ();
-    op->m_ColorDA3 = gtk_drawing_area_new ();
-
-    gtk_widget_modify_bg (op->m_ColorDA3, GTK_STATE_NORMAL,
-                          &base->m_BackGround);
-    gtk_widget_set_size_request (op->m_ColorDA3, 12, 12);
-    gtk_container_add (GTK_CONTAINER (op->m_BG), op->m_ColorDA3);
-    gtk_widget_show (GTK_WIDGET (op->m_BG));
-    gtk_widget_show (GTK_WIDGET (op->m_ColorDA3));
-    gtk_box_pack_start (GTK_BOX (hbox), GTK_WIDGET (op->m_BG), FALSE, FALSE,
-                        0);
-
-    g_signal_connect (op->m_BG, "clicked", G_CALLBACK (ChangeColor3), base);
-
-    /* Modes */
-
-    hbox = GTK_BOX (gtk_hbox_new (FALSE, BORDER));
-    gtk_widget_show (GTK_WIDGET (hbox));
-    gtk_box_pack_start (GTK_BOX (vbox2), GTK_WIDGET (hbox), FALSE, FALSE, 0);
-
-    label = gtk_label_new (_("Mode:"));
-    gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
-    gtk_size_group_add_widget (sg, label);
-    gtk_widget_show (label);
-    gtk_box_pack_start (GTK_BOX (hbox), GTK_WIDGET (label), FALSE, FALSE, 0);
-
-    op->m_OptionMenu = gtk_option_menu_new ();
-    gtk_widget_show (op->m_OptionMenu);
-    gtk_box_pack_start (GTK_BOX (hbox), op->m_OptionMenu, FALSE, FALSE, 0);
-
-    op->m_Menu = gtk_menu_new ();
-    gtk_option_menu_set_menu (GTK_OPTION_MENU (op->m_OptionMenu), op->m_Menu);
-
-    op->m_MenuItem = gtk_menu_item_new_with_label (_("Normal"));
-    gtk_widget_show (op->m_MenuItem);
-    gtk_menu_shell_append (GTK_MENU_SHELL (op->m_Menu), op->m_MenuItem);
-
-    op->m_MenuItem = gtk_menu_item_new_with_label (_("LED"));
-    gtk_widget_show (op->m_MenuItem);
-    gtk_menu_shell_append (GTK_MENU_SHELL (op->m_Menu), op->m_MenuItem);
-
-    op->m_MenuItem = gtk_menu_item_new_with_label (_("No history"));
-    gtk_widget_show (op->m_MenuItem);
-    gtk_menu_shell_append (GTK_MENU_SHELL (op->m_Menu), op->m_MenuItem);
-
-    gtk_option_menu_set_history (GTK_OPTION_MENU (op->m_OptionMenu),
-                                 base->m_Mode);
-
-    g_signal_connect (op->m_OptionMenu, "changed", G_CALLBACK (ModeChange),
-                      base);
-
-    /* Color mode */
-
-    hbox = GTK_BOX (gtk_hbox_new (FALSE, BORDER));
-    gtk_widget_show (GTK_WIDGET (hbox));
-    gtk_box_pack_start (GTK_BOX (vbox2), GTK_WIDGET (hbox), FALSE, FALSE, 0);
-    label = gtk_label_new (_("Color mode: "));
-    gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
-    gtk_size_group_add_widget (sg, label);
-    gtk_widget_show (label);
-    gtk_box_pack_start (GTK_BOX (hbox), GTK_WIDGET (label), FALSE, FALSE, 0);
-
-    op->m_ModeOption = gtk_option_menu_new ();
-    gtk_widget_show (op->m_ModeOption);
-    gtk_box_pack_start (GTK_BOX (hbox), op->m_ModeOption, FALSE, FALSE, 0);
-
-    op->m_ModeMenu = gtk_menu_new ();
-    gtk_option_menu_set_menu (GTK_OPTION_MENU (op->m_ModeOption),
-                              op->m_ModeMenu);
-
-    op->m_ModeMenuItem = gtk_menu_item_new_with_label (_("None"));
-    gtk_widget_show (op->m_ModeMenuItem);
-    gtk_menu_shell_append (GTK_MENU_SHELL (op->m_ModeMenu),
-                           op->m_ModeMenuItem);
-
-    op->m_ModeMenuItem = gtk_menu_item_new_with_label (_("Gradient"));
-    gtk_widget_show (op->m_ModeMenuItem);
-    gtk_menu_shell_append (GTK_MENU_SHELL (op->m_ModeMenu),
-                           op->m_ModeMenuItem);
-
-    op->m_ModeMenuItem = gtk_menu_item_new_with_label (_("Fire"));
-    gtk_widget_show (op->m_ModeMenuItem);
-    gtk_menu_shell_append (GTK_MENU_SHELL (op->m_ModeMenu),
-                           op->m_ModeMenuItem);
-
-    op->m_ModeMenuItem = gtk_menu_item_new_with_label ("cpufreq");
-    gtk_widget_show (op->m_ModeMenuItem);
-    gtk_menu_shell_append (GTK_MENU_SHELL (op->m_ModeMenu),
-                            op->m_ModeMenuItem);
-
-    gtk_option_menu_set_history (GTK_OPTION_MENU (op->m_ModeOption),
-                                 base->m_ColorMode);
-
-    g_signal_connect (op->m_ModeOption, "changed",
-                      G_CALLBACK (ColorModeChange), base);
-
-    gtk_widget_show_all (GTK_WIDGET (hbox));
-
-    op->m_Notebook = gtk_notebook_new ();
-    gtk_container_set_border_width (GTK_CONTAINER (op->m_Notebook),
-                                    BORDER - 2);
-    label = gtk_label_new (_("Appearance"));
-    gtk_notebook_append_page (GTK_NOTEBOOK (op->m_Notebook),
-                              GTK_WIDGET (vbox2), GTK_WIDGET (label));
-    label = gtk_label_new (_("Advanced"));
-    gtk_notebook_append_page (GTK_NOTEBOOK (op->m_Notebook),
-                              GTK_WIDGET (vbox), GTK_WIDGET (label));
-    gtk_widget_show (op->m_Notebook);
-
-    gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dlg)->vbox),
-                        GTK_WIDGET (op->m_Notebook), TRUE, TRUE, 0);
-
-    gtk_widget_show (dlg);
-}
-
 gboolean
 UpdateCPU (CPUGraph * base)
 {
-    base->m_CPUUsage = GetCPUUsage (&base->m_OldUsage, &base->m_OldTotal);
+  gint i;
+  cpuLoadData *data = cpuLoadMon_read();
 
-    if(base->m_TimeScale)
-    {
-        int i = base->m_Values - 1;
-        int j = i + base->m_Values;
-        while(i > 0)
-        {
-            int a, b;
+  base->m_CPUUsage = data[0].value * 100.0;
 
-            a = base->m_History[i], b = base->m_History[i-1];
-            if( a < b ) a++;
-            int factor = (i*2);
-            base->m_History[i--] = ( a*(factor-1) + b )/factor;
+  for(i=0; i<base->nrCores; i++){
+    gtk_progress_bar_set_fraction(
+                                  GTK_PROGRESS_BAR(base->m_pBar[i]),
+                                  (gdouble)data[i+1].value);
+  }
 
-            a = base->m_History[j], b = base->m_History[j-1];
-            if( a < b ) a++;
-            base->m_History[j--] = ( a*(factor-1) + b )/factor;
-        }
-    } else {
-        memmove (base->m_History + 1
-                , base->m_History
-                , (base->m_Values*2-1)*sizeof(int));
-    }
-    base->m_History[0] = base->m_CPUUsage;
-    base->m_History[base->m_Values] = scaling_cur_freq;
+  memmove (base->m_History + 1, base->m_History,
+           (base->m_Values-1)*sizeof(float));
+  base->m_History[0] = data[0].value;
 
-    /* Tooltip */
-    UpdateTooltip (base);
+  /* Tooltip */
+  UpdateTooltip (base);
 
-    /* Draw the graph. */
-    gtk_widget_queue_draw (base->m_DrawArea);
+  //fprintf(stderr, "update cpu %f\n", base->m_History[0]);
 
-    return TRUE;
+  /* Draw the graph. */
+  gtk_widget_queue_draw (base->m_DrawArea);
+
+  return TRUE;
 }
 
 void
@@ -734,21 +339,22 @@
 
     gdk_draw_rectangle (da->window, bg, TRUE, 0, 0, w, h);
 
+    /*fprintf(stderr, "mode selected %d\n", base->m_Mode);*/
+
     if (base->m_Mode == 0)
     {
-      drawGraphMode0(base, fg1, da, w, h);
+      drawGraphNormal(base, fg1, da, w, h);
     }
     else if (base->m_Mode == 1)
     {
-      drawGraphMode1(base, fg1, fg2, da, w, h);
+      drawGraphLED(base, fg1, fg2, da, w, h);
     }
     else if (base->m_Mode == 2)
     {
-      drawGraphMode2(base, fg1, fg2, da, w, h);
+      drawGraphNoHistory(base, fg1, fg2, da, w, h);
     }
-    else if (base->m_Mode == 4)
-    {
-      drawGraphMode4(base, fg1, da, w, h);
+    else if (base->m_Mode == 3){
+      drawGraphGrid(base, fg1, fg2, da, w, h);
     }
 
     g_object_unref (fg2);
@@ -794,6 +400,8 @@
     base->m_TimeoutID = g_timeout_add (update, (GtkFunction) UpdateCPU, base);
 
     UserSetSize (base);
+
+    fprintf(stderr, "m_Width %d\n", base->m_Width);
     SetHistorySize (base, base->m_Width);
 }
 
@@ -905,56 +513,44 @@
 void
 SetHistorySize (CPUGraph * base, int size)
 {
-    int i;
+    gint i;
+    cpuLoadData *data = cpuLoadMon_read();
+    float usage = data[0].value;
+
     base->m_History =
-        (long *) realloc (base->m_History, 2 * size * sizeof (long));
+        (float *) realloc (base->m_History, size * sizeof (float));
 
-    base->m_OldUsage = base->m_OldTotal = 0;
-    int usage = GetCPUUsage (&base->m_OldUsage, &base->m_OldTotal);
-
-    for (i = size - 1; i >= base->m_Values; i--)
+    for (i = size - 1; i >= 0; i--)
     {
-        base->m_History[i] = usage;
-        base->m_History[i+size] = scaling_cur_freq;
+      base->m_History[i] = usage;
     }
     base->m_Values = size;
 
 }
 
 void
+SetSensitive(CPUGraph *base, GtkWidget *fgA, GtkWidget *fgB,
+             gboolean flag1, gboolean flag2){
+  if (base->m_ColorMode > 0)
+    gtk_widget_set_sensitive (GTK_WIDGET (fgA), flag1);
+  else
+    gtk_widget_set_sensitive (GTK_WIDGET (fgA), !flag1);
+  gtk_widget_set_sensitive (GTK_WIDGET (fgB), flag2);
+}
+
+void
 ModeChange (GtkOptionMenu * om, CPUGraph * base)
 {
-    base->m_Mode = gtk_option_menu_get_history (om);
-    if (base->m_Mode == 0)
-    {
-        if (base->m_ColorMode > 0)
-            gtk_widget_set_sensitive (GTK_WIDGET (base->m_Options.m_FG2),
-                                      TRUE);
-        else
-            gtk_widget_set_sensitive (GTK_WIDGET (base->m_Options.m_FG2),
-                                      FALSE);
-        gtk_widget_set_sensitive (GTK_WIDGET (base->m_Options.m_FG3), FALSE);
-    }
-    else if (base->m_Mode == 1)
-    {
-        if (base->m_ColorMode > 0)
-            gtk_widget_set_sensitive (GTK_WIDGET (base->m_Options.m_FG3),
-                                      TRUE);
-        else
-            gtk_widget_set_sensitive (GTK_WIDGET (base->m_Options.m_FG3),
-                                      FALSE);
-        gtk_widget_set_sensitive (GTK_WIDGET (base->m_Options.m_FG2), TRUE);
-    }
-    else if (base->m_Mode == 2)
-    {
-        if (base->m_ColorMode > 0)
-            gtk_widget_set_sensitive (GTK_WIDGET (base->m_Options.m_FG2),
-                                      TRUE);
-        else
-            gtk_widget_set_sensitive (GTK_WIDGET (base->m_Options.m_FG2),
-                                      FALSE);
-        gtk_widget_set_sensitive (GTK_WIDGET (base->m_Options.m_FG3), FALSE);
-    }
+  base->m_Mode = gtk_option_menu_get_history (om);
+  if (base->m_Mode == 0){
+    SetSensitive(base, base->m_Options.m_FG2, base->m_Options.m_FG3, TRUE, FALSE);
+  }
+  else if (base->m_Mode == 1){
+    SetSensitive(base, base->m_Options.m_FG3, base->m_Options.m_FG2, TRUE, TRUE);
+  }
+  else if (base->m_Mode == 2){
+    SetSensitive(base, base->m_Options.m_FG2, base->m_Options.m_FG3, TRUE, FALSE);
+  }
 }
 void
 UpdateChange (GtkOptionMenu * om, CPUGraph * base)

Modified: xfce4-cpugraph-plugin/trunk/panel-plugin/cpu.h
===================================================================
--- xfce4-cpugraph-plugin/trunk/panel-plugin/cpu.h	2007-11-21 00:30:55 UTC (rev 3612)
+++ xfce4-cpugraph-plugin/trunk/panel-plugin/cpu.h	2007-11-22 07:17:50 UTC (rev 3613)
@@ -1,3 +1,26 @@
+/*  cpu.h
+ *  Part of xfce4-cpugraph-plugin
+ *
+ *  Copyright (c) Alexander Nordfelth <alex.nordfelth at telia.com>
+ *  Copyright (c) gatopeich <gatoguan-os at yahoo.com>
+ *  Copyright (c) 2007-2008 Angelo Arrifano <miknix at gmail.com>
+ *  Copyright (c) 2007-2008 Lidiriel <lidiriel at coriolys.org>
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU Library General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+ 
 #ifndef __XFCE_CPU_H__
 #define __XFCE_CPU_H__
 
@@ -14,8 +37,9 @@
 #include <libxfce4util/libxfce4util.h>
 #include <libxfcegui4/libxfcegui4.h>
 #include <libxfce4panel/xfce-panel-plugin.h>
+#include <libxfce4panel/xfce-hvbox.h>
 
-#include "os.h"
+#include "cpu_os.h"
 
 
 #define BORDER  8
@@ -68,32 +92,34 @@
 	GtkWidget *m_FrameWidget;
 	GtkWidget *m_DrawArea;
 	GtkWidget *m_OptionsDialog;
+	GtkWidget *m_Box;
+	GtkWidget **m_pBar;
 	SOptions m_Options;
 
-   	int m_UpdateInterval; // Number of ms between updates.
+	int m_UpdateInterval; // Number of ms between updates.
 	int m_TimeScale; // Wether to use non-linear time scale.
-   	int m_Width; // The width of the plugin.
-   	int m_Mode; // Eventual mode of the plugin.
+	int m_Width; // The width of the plugin.
+	int m_Mode; // Eventual mode of the plugin.
 	int m_ColorMode;
 	int m_Frame;
-	gchar  * m_AssociateCommand;
+	gchar * m_AssociateCommand;
+	guint nrCores; // Number of cores (not including total cpu)
 
-   	GdkColor m_ForeGround1; // Inactive color.
-   	GdkColor m_ForeGround2; // Active color.
+	GdkColor m_ForeGround1; // Inactive color.
+	GdkColor m_ForeGround2; // Active color.
 	GdkColor m_ForeGround3;
-   	GdkColor m_BackGround; // Background color.
+	GdkColor m_BackGround; // Background color.
 
 	GtkTooltips *m_Tooltip; // Eventual tooltip.
 
 	guint m_TimeoutID; // Timeout ID for the tooltip;
 	long m_CPUUsage;
-	long *m_History;
+	float *m_History;
 	int m_Values;
 
 	int m_Orientation;
 
-	int m_OldUsage;
-	int m_OldTotal;
+
 }CPUGraph;
 
 CPUGraph *CreateControl (XfcePanelPlugin *plugin);
@@ -119,6 +145,7 @@
 void ChangeColor5 (GtkButton *button, CPUGraph *base);
 void ChangeColor (int color, CPUGraph *base);
 void SpinChange (GtkSpinButton *sb, int *value);
+void SetSensitive (CPUGraph *base, GtkWidget *fgA, GtkWidget *fgB, gboolean flag1, gboolean flag2);
 void UpdateChange (GtkOptionMenu *om, CPUGraph *base);
 void ModeChange (GtkOptionMenu *om, CPUGraph *base);
 void ApplyChanges (CPUGraph *base);

Added: xfce4-cpugraph-plugin/trunk/panel-plugin/cpu_os.c
===================================================================
--- xfce4-cpugraph-plugin/trunk/panel-plugin/cpu_os.c	                        (rev 0)
+++ xfce4-cpugraph-plugin/trunk/panel-plugin/cpu_os.c	2007-11-22 07:17:50 UTC (rev 3613)
@@ -0,0 +1,166 @@
+/*  cpu_os.c
+ *  Part of xfce4-cpugraph-plugin
+ *
+ *  Copyright (c) Alexander Nordfelth <alex.nordfelth at telia.com>
+ *  Copyright (c) gatopeich <gatoguan-os at yahoo.com>
+ *  Copyright (c) 2007-2008 Angelo Arrifano <miknix at gmail.com>
+ *  Copyright (c) 2007-2008 Lidiriel <lidiriel at coriolys.org>
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU Library General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "cpu.h"
+
+#define PROC_STAT "/proc/stat"
+#define PROCMAXLNLEN 256 /* should make it */
+
+int scaling_cur_freq=0;
+int scaling_min_freq=-1;
+int scaling_max_freq=0;
+
+cpuLoadData *data = NULL;
+int nrCpus = 0;
+
+#if defined (__linux__)
+int cpuLoadMon_init()
+{
+	FILE *fStat = NULL;
+	char  cpuStr[PROCMAXLNLEN];
+	int   cpuNr = -1;
+
+	/* Check if previously initalized */
+	if(data != NULL) return(-2);
+
+	/* Open proc stat file */
+	if(!(fStat = fopen(PROC_STAT, "r"))) return(-1);
+
+	/* Read each cpu line at time */
+	do
+	{
+		if(!fgets(cpuStr, PROCMAXLNLEN, fStat)) return(cpuNr);
+		cpuNr++;
+	}
+	while(strncmp(cpuStr, "cpu", 3) == 0);
+
+	/* Alloc storage for cpu data stuff */
+	data = (cpuLoadData *) calloc(cpuNr, sizeof(cpuLoadData));
+	if(data == NULL) return(-3);
+
+	fclose(fStat);
+	return(nrCpus=cpuNr);
+}
+
+void cpuLoadMon_free()
+{
+	/* free cpu data */
+	free(data);
+	data = NULL;
+
+	/* Reset values */
+	nrCpus = 0;
+}
+
+
+cpuLoadData *cpuLoadMon_read(){
+	FILE *fStat = NULL;
+	char cpuStr[PROCMAXLNLEN];
+	unsigned long user, nice, system, idle;
+	unsigned long used, total;
+	int cpuNr = 0;
+
+
+	/* Check if callable */
+	if((data == NULL) || (nrCpus == 0)) return(NULL);
+
+	/* Open proc stat file */
+	if(!(fStat = fopen(PROC_STAT, "r"))) return(NULL);
+
+	/* Read each cpu line at time */
+	do
+	{
+		if(!fgets(cpuStr, PROCMAXLNLEN, fStat)) return(data);
+		sscanf(cpuStr, "%*s %ld %ld %ld %ld", &user, &nice, &system, &idle);
+
+		used = user + nice + system;
+		total = used + idle;
+		if((total - data[cpuNr].pTotal) != 0)
+		{
+			data[cpuNr].value = (float)(used - data[cpuNr].pUsed)
+				/ (float)(total - data[cpuNr].pTotal);
+		}
+		else
+		{
+			data[cpuNr].value = 0;
+		}
+		data[cpuNr].pUsed = used;
+		data[cpuNr].pTotal = total;
+		cpuNr++;
+	}
+	while((cpuNr < nrCpus) && (strncmp(cpuStr, "cpu", 3) == 0));
+
+	fclose(fStat);
+
+  /* init current, min and max frequency */
+  /* TODO integrate with usage data */
+  if( -1 != scaling_max_freq)
+  {
+    FILE *fp;
+    if( scaling_max_freq )
+    {
+      fp = fopen("/sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq", "r");
+      if( NULL != fp )
+      {
+        fscanf(fp, "%d", &scaling_cur_freq);
+        fclose(fp);
+      }
+    } else {
+      scaling_max_freq = -1;
+      fp = fopen("/sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq", "r");
+      if( NULL != fp )
+      {
+        if (1 == fscanf(fp, "%d", &scaling_min_freq) )
+        {
+          fclose(fp);
+          fp = fopen("/sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq", "r");
+          if( NULL != fp)
+          {
+            fscanf(fp, "%d", &scaling_max_freq);
+            if( scaling_max_freq < 1 ) scaling_max_freq = -1;
+            fclose(fp);
+          }
+        } else {
+          fclose(fp);
+        }
+      }
+    }
+  }
+
+
+	return(data);
+}
+/* TODO FreeBSD */
+/* TODO NetBSD */
+/* TODO OpenBSD */
+#else
+#error "Your're OS is not supported"
+#endif


Property changes on: xfce4-cpugraph-plugin/trunk/panel-plugin/cpu_os.c
___________________________________________________________________
Name: svn:eol-style
   + native

Added: xfce4-cpugraph-plugin/trunk/panel-plugin/cpu_os.h
===================================================================
--- xfce4-cpugraph-plugin/trunk/panel-plugin/cpu_os.h	                        (rev 0)
+++ xfce4-cpugraph-plugin/trunk/panel-plugin/cpu_os.h	2007-11-22 07:17:50 UTC (rev 3613)
@@ -0,0 +1,46 @@
+/*  cpu_os.h
+ *  Part of xfce4-cpugraph-plugin
+ *
+ *  Copyright (c) Alexander Nordfelth <alex.nordfelth at telia.com>
+ *  Copyright (c) gatopeich <gatoguan-os at yahoo.com>
+ *  Copyright (c) 2007-2008 Angelo Arrifano <miknix at gmail.com>
+ *  Copyright (c) 2007-2008 Lidiriel <lidiriel at coriolys.org>
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU Library General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef _CPU_OS_H
+#define _CPU_OS_H
+
+#define CPU_SCALE 1;/*00000*/
+
+extern int scaling_cur_freq;
+extern int scaling_max_freq;
+extern int scaling_min_freq;
+
+typedef struct s_cpuLoadData
+{
+	float         value;  /* cpu utilization % */
+	unsigned long pUsed;  /* Previous value of used cpu time */
+	unsigned long pTotal; /* Previous value of total cpu time */
+} cpuLoadData;
+
+int cpuLoadMon_init();
+
+void cpuLoadMon_free();
+
+cpuLoadData *cpuLoadMon_read();
+
+#endif /* _CPU_OS_H */


Property changes on: xfce4-cpugraph-plugin/trunk/panel-plugin/cpu_os.h
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: xfce4-cpugraph-plugin/trunk/panel-plugin/mode.c
===================================================================
--- xfce4-cpugraph-plugin/trunk/panel-plugin/mode.c	2007-11-21 00:30:55 UTC (rev 3612)
+++ xfce4-cpugraph-plugin/trunk/panel-plugin/mode.c	2007-11-22 07:17:50 UTC (rev 3613)
@@ -1,67 +1,60 @@
+/*  mode.c
+ *  Part of xfce4-cpugraph-plugin
+ *
+ *  Copyright (c) Alexander Nordfelth <alex.nordfelth at telia.com>
+ *  Copyright (c) gatopeich <gatoguan-os at yahoo.com>
+ *  Copyright (c) 2007-2008 Angelo Arrifano <miknix at gmail.com>
+ *  Copyright (c) 2007-2008 Lidiriel <lidiriel at coriolys.org>
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU Library General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
 #include "mode.h"
 
-/*** MODE 0 ***/
-void drawGraphMode0 (CPUGraph *base, GdkGC *fg1, GtkWidget *da, int w, int h){
+/*** MODE 0 : Normal ***/
+void drawGraphNormal (CPUGraph *base, GdkGC *fg1, GtkWidget *da, int w, int h){
   int x, y;
 
+  //fprintf(stderr, "usage %f\n", base->m_History[0]);
   for (x = w; x >= 0; x--)
   {
-    long usage = h * base->m_History[w - x] / CPU_SCALE;
+    long usage = h * base->m_History[w - x];
 
     if(usage == 0) continue;
 
-    if (base->m_ColorMode == 0) {
+    if (base->m_ColorMode == 0) { /* none color mode */
       gdk_gc_set_rgb_fg_color (fg1, &base->m_ForeGround1);
-
-      if(base->m_Frame)
-        gdk_draw_line (da->window, fg1, x+1, h+1-usage, x+1, h);
-      else
-        gdk_draw_line (da->window, fg1, x, h-usage, x, h-1);
+      gdk_draw_line (da->window, fg1, x, h-usage, x, h-1);
     }
-    else if (base->m_ColorMode == 3) /* cpu freq. based */
-    {
-      GdkColor color;
-      double t = (double) (base->m_History[base->m_Values+ w - x] - scaling_min_freq)
-        / (scaling_max_freq - scaling_min_freq);
-
-      color.red = _lerp (t, base->m_ForeGround1.red,
-                         base->m_ForeGround2.red);
-      color.green = _lerp (t, base->m_ForeGround1.green,
-                           base->m_ForeGround2.green);
-      color.blue = _lerp (t, base->m_ForeGround1.blue,
-                          base->m_ForeGround2.blue);
-      gdk_gc_set_rgb_fg_color (fg1, &color);
-
-      if(base->m_Frame)
-        gdk_draw_line (da->window, fg1
-                       , x+1, h+1-usage, x+1, h);
-      else
-        gdk_draw_line (da->window, fg1
-                       , x, h-usage, x, h-1);
-    }
-    else /* 1 or 2 */
-    {
+    if(base->m_ColorMode == 1){ /* color mode == 1 : gradient */
       int tmp = 0;
-      int length = h - (h - usage);
-      for (y = h; y >= h - usage; y--, tmp++)
+      for (y = h; y >= h - usage; y--)
       {
-        if (base->m_ColorMode > 0)
-        {
-          GdkColor color;
-          double t =
-            (base->m_ColorMode == 1) ? (tmp / (double) (h)) :
-            (tmp / (double) (length));
-          color.red =
-            _lerp (t, base->m_ForeGround1.red,
-                   base->m_ForeGround2.red);
-          color.green =
-            _lerp (t, base->m_ForeGround1.green,
-                   base->m_ForeGround2.green);
-          color.blue =
-            _lerp (t, base->m_ForeGround1.blue,
-                   base->m_ForeGround2.blue);
-          gdk_gc_set_rgb_fg_color (fg1, &color);
-        }
+        GdkColor color;
+        double t = tmp / (double) (h);
+        color.red =
+          _lerp (t, base->m_ForeGround1.red,
+                 base->m_ForeGround2.red);
+        color.green =
+          _lerp (t, base->m_ForeGround1.green,
+                 base->m_ForeGround2.green);
+        color.blue =
+          _lerp (t, base->m_ForeGround1.blue,
+                 base->m_ForeGround2.blue);
+        gdk_gc_set_rgb_fg_color (fg1, &color);
+        tmp++;
         gdk_draw_point (da->window, fg1, x, y);
       }
     }
@@ -69,31 +62,25 @@
 }
 
 
-/*** MODE 1 ***/
-void drawGraphMode1 (CPUGraph *base, GdkGC *fg1, GdkGC *fg2, GtkWidget *da, int w, int h){
+/*** MODE 1 : LED ***/
+void drawGraphLED (CPUGraph *base, GdkGC *fg1, GdkGC *fg2, GtkWidget *da, int w, int h){
   int nrx = (w + 1) / 3.0;
   int nry = (h + 1) / 2.0;
-  float tstep = nry / CPU_SCALE;
   int x, y;
 
+  gdk_gc_set_rgb_fg_color (fg1, &base->m_ForeGround1);
+  gdk_gc_set_rgb_fg_color (fg2, &base->m_ForeGround2);
+
   for (x = nrx ; x >= 0; x--)
   {
-    float usage = base->m_History[nrx - x] * tstep;
     int tmp = 0;
-    int length = usage;
+    int limit = nry * (1 - base->m_History[nrx - x]);
 
-    gdk_gc_set_rgb_fg_color (fg2, &base->m_ForeGround2);
     for (y = nry; y >= 0; y--)
     {
-      GdkGC *draw = fg2;
-
-      if (base->m_ColorMode > 0)
-      {
+      if (base->m_ColorMode == 1){// color mode == 1 gradient
         GdkColor color;
-        double t =
-          (base->m_ColorMode == 1) ?
-          (tmp / (double) (nry)) :
-          (tmp / (double) (length));
+        double t = tmp / (double) (nry);
         color.red =
           _lerp (t, base->m_ForeGround2.red,
                  base->m_ForeGround3.red);
@@ -103,33 +90,31 @@
         color.blue =
           _lerp (t, base->m_ForeGround2.blue,
                  base->m_ForeGround3.blue);
-        gdk_gc_set_rgb_fg_color (fg1, &color);
+        gdk_gc_set_rgb_fg_color (fg2, &color);
         tmp++;
-        draw = fg1;
       }
-
       gdk_draw_rectangle (da->window,
-                          draw,
+                          (y > limit) ? fg1 : fg2,
                           TRUE, x * 3, y * 2, 2, 1);
     }
   }
 }
 
-/*** MODE 2 ***/
-void drawGraphMode2(CPUGraph *base, GdkGC *fg1, GdkGC *fg2, GtkWidget *da, int w, int h){
-  int y;
-  long usage = h * base->m_History[0] / CPU_SCALE;
-  int tmp = 0;
-  int length = usage;
+/*** MODE 2 : No History ***/
+void drawGraphNoHistory(CPUGraph *base, GdkGC *fg1, GdkGC *fg2, GtkWidget *da, int w, int h){
+  int y, tmp, limit;
+  long usage = h * base->m_History[0];
 
-  for (y = h; y >= h - usage; y--)
-  {
-    if (base->m_ColorMode > 0)
-    {
+  if (base->m_ColorMode == 0) { /* none color mode */
+    gdk_gc_set_rgb_fg_color (fg1, &base->m_ForeGround1);
+    /* gdk_draw_rectangle(xMin, yMin, xLength, yLength) origin=top-left */
+    gdk_draw_rectangle (da->window, fg1, TRUE, 0, h-usage, w, usage);
+  }else if(base->m_ColorMode == 1){ /* color mode == 1 : gradient */
+    tmp = 0;
+    limit = h-1-usage;
+    for (y = h-1; y >= limit; y--){
       GdkColor color;
-      double t =
-        (base->m_ColorMode == 1) ? (tmp / (double) (h)) :
-        (tmp / (double) (length));
+      double t = tmp / (double) (h);
       color.red =
         _lerp (t, base->m_ForeGround1.red,
                base->m_ForeGround2.red);
@@ -139,20 +124,39 @@
       color.blue =
         _lerp (t, base->m_ForeGround1.blue,
                base->m_ForeGround2.blue);
-      gdk_gc_set_rgb_fg_color (fg2, &color);
+      gdk_gc_set_rgb_fg_color (fg1, &color);
       tmp++;
+      gdk_draw_line (da->window, fg1, 0, y, w-1, y);
     }
-    gdk_draw_line (da->window,
-                   (base->m_ColorMode > 0) ? fg2 : fg1,
-                   0, y, w, y);
   }
 }
 
-/*** MODE 4 ***/
-void drawGraphMode4(CPUGraph *base, GdkGC *fg1, GtkWidget *da, int w, int h){
-  gdk_draw_rectangle (da->window,
-                      fg1,
-                      TRUE,
-                      0, (h - (base->m_History[0]*h/CPU_SCALE)),
-                      w, (base->m_History[0]*h/CPU_SCALE));
+/*** MODE 3 : Grid ***/
+void drawGraphGrid (CPUGraph *base, GdkGC *fg1, GdkGC *fg2, GtkWidget *da, int w, int h){
+  int nrx = w / 6.0;
+  int nry = h / 4.0;
+  int x, y;
+
+  point last, current;
+  last.x = -1;
+
+  /* draw grid */
+  gdk_gc_set_rgb_fg_color (fg1, &base->m_ForeGround1);
+  for(x = nrx; x >= 0; x--){
+    gdk_draw_line (da->window, fg1, x*6, 0, x*6, h);
+  }
+  for(y = nry; y>=0; y--){
+    gdk_draw_line (da->window, fg1, 0, y*4, w, y*4);
+  }
+
+  /* draw data */
+  gdk_gc_set_rgb_fg_color (fg2, &base->m_ForeGround2);
+  for (x = w; x >= 0; x--)
+  {
+    current.x = x;
+    current.y = (h-1) * (1-base->m_History[w - x]);
+    if(last.x == -1) last = current;
+    gdk_draw_line (da->window, fg2, current.x, current.y, last.x, last.y);
+    last = current;
+    }
 }

Modified: xfce4-cpugraph-plugin/trunk/panel-plugin/mode.h
===================================================================
--- xfce4-cpugraph-plugin/trunk/panel-plugin/mode.h	2007-11-21 00:30:55 UTC (rev 3612)
+++ xfce4-cpugraph-plugin/trunk/panel-plugin/mode.h	2007-11-22 07:17:50 UTC (rev 3613)
@@ -1,3 +1,26 @@
+/*  mode.h
+ *  Part of xfce4-cpugraph-plugin
+ *
+ *  Copyright (c) Alexander Nordfelth <alex.nordfelth at telia.com>
+ *  Copyright (c) gatopeich <gatoguan-os at yahoo.com>
+ *  Copyright (c) 2007-2008 Angelo Arrifano <miknix at gmail.com>
+ *  Copyright (c) 2007-2008 Lidiriel <lidiriel at coriolys.org>
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU Library General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
 #ifndef __XFCE_MODE_H__
 #define __XFCE_MODE_H__
 
@@ -3,8 +26,14 @@
 #include "cpu.h"
 
-void drawGraphMode0(CPUGraph *base, GdkGC *fg1, GtkWidget *da, int w, int h);
-void drawGraphMode1(CPUGraph *base, GdkGC *fg1, GdkGC *fg2, GtkWidget *da, int w, int h);
-void drawGraphMode2(CPUGraph *base, GdkGC *fg1, GdkGC *fg2, GtkWidget *da, int w, int h);
-void drawGraphMode4(CPUGraph *base, GdkGC *fg1, GtkWidget *da, int w, int h);
+typedef struct {
+  long x;
+  long y;
+} point;
 
+
+void drawGraphNormal(CPUGraph *base, GdkGC *fg1, GtkWidget *da, int w, int h);
+void drawGraphLED(CPUGraph *base, GdkGC *fg1, GdkGC *fg2, GtkWidget *da, int w, int h);
+void drawGraphNoHistory(CPUGraph *base, GdkGC *fg1, GdkGC *fg2, GtkWidget *da, int w, int h);
+void drawGraphGrid(CPUGraph *base, GdkGC *fg1, GdkGC *fg2, GtkWidget *da, int w, int h);
+
 #endif

Added: xfce4-cpugraph-plugin/trunk/panel-plugin/option.c
===================================================================
--- xfce4-cpugraph-plugin/trunk/panel-plugin/option.c	                        (rev 0)
+++ xfce4-cpugraph-plugin/trunk/panel-plugin/option.c	2007-11-22 07:17:50 UTC (rev 3613)
@@ -0,0 +1,386 @@
+/*  option.c
+ *  Part of xfce4-cpugraph-plugin
+ *
+ *  Copyright (c) Alexander Nordfelth <alex.nordfelth at telia.com>
+ *  Copyright (c) gatopeich <gatoguan-os at yahoo.com>
+ *  Copyright (c) 2007-2008 Angelo Arrifano <miknix at gmail.com>
+ *  Copyright (c) 2007-2008 Lidiriel <lidiriel at coriolys.org>
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU Library General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include "option.h"
+
+static void
+DialogResponse (GtkWidget *dlg, int response, CPUGraph *base)
+{
+    ApplyChanges (base);
+    gtk_widget_destroy (dlg);
+    xfce_panel_plugin_unblock_menu (base->plugin);
+    WriteSettings (base->plugin, base);
+}
+
+
+void
+CreateOptions (XfcePanelPlugin *plugin, CPUGraph *base)
+{
+    GtkWidget *dlg, *header;
+    GtkBox *vbox, *vbox2, *hbox;
+    GtkWidget *label;
+    GtkSizeGroup *sg;
+    SOptions *op = &base->m_Options;
+
+    xfce_panel_plugin_block_menu (plugin);
+
+    dlg = gtk_dialog_new_with_buttons (_("Configure CPU Graph"),
+                GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (plugin))),
+                GTK_DIALOG_DESTROY_WITH_PARENT |
+                GTK_DIALOG_NO_SEPARATOR,
+                GTK_STOCK_CLOSE, GTK_RESPONSE_OK,
+                NULL);
+
+    base->m_OptionsDialog = dlg;
+
+    g_signal_connect (dlg, "response", G_CALLBACK (DialogResponse), base);
+
+    gtk_container_set_border_width (GTK_CONTAINER (dlg), 2);
+
+    header = xfce_create_header (NULL, _("CPU Graph"));
+    gtk_widget_set_size_request (GTK_BIN (header)->child, -1, 32);
+    gtk_container_set_border_width (GTK_CONTAINER (header), BORDER - 2);
+    gtk_widget_show (header);
+    gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dlg)->vbox), header,
+                        FALSE, TRUE, 0);
+
+    vbox = GTK_BOX (gtk_vbox_new(FALSE, BORDER));
+    gtk_container_set_border_width (GTK_CONTAINER (vbox), BORDER );
+    gtk_widget_show(GTK_WIDGET (vbox));
+
+    sg = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL);
+
+    /* Update Interval */
+
+    hbox = GTK_BOX (gtk_hbox_new (FALSE, BORDER));
+    gtk_widget_show (GTK_WIDGET (hbox));
+    gtk_box_pack_start (GTK_BOX (vbox), GTK_WIDGET (hbox), FALSE, FALSE, 0);
+    label = gtk_label_new (_("Update Interval: "));
+    gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
+    gtk_size_group_add_widget (sg, label);
+    gtk_widget_show (label);
+    gtk_box_pack_start (GTK_BOX (hbox), GTK_WIDGET (label), FALSE, FALSE, 0);
+
+    op->m_UpdateOption = gtk_option_menu_new ();
+    gtk_widget_show (op->m_UpdateOption);
+    gtk_box_pack_start (GTK_BOX (hbox), op->m_UpdateOption, FALSE, FALSE, 0);
+
+    op->m_UpdateMenu = gtk_menu_new ();
+    gtk_option_menu_set_menu (GTK_OPTION_MENU (op->m_UpdateOption),
+                              op->m_UpdateMenu);
+
+    op->m_UpdateMenuItem =
+        gtk_menu_item_new_with_label (_("Fastest (~250ms)"));
+    gtk_widget_show (op->m_UpdateMenuItem);
+    gtk_menu_shell_append (GTK_MENU_SHELL (op->m_UpdateMenu),
+                           op->m_UpdateMenuItem);
+
+    op->m_UpdateMenuItem = gtk_menu_item_new_with_label (_("Fast (~500ms)"));
+    gtk_widget_show (op->m_UpdateMenuItem);
+    gtk_menu_shell_append (GTK_MENU_SHELL (op->m_UpdateMenu),
+                           op->m_UpdateMenuItem);
+
+    op->m_UpdateMenuItem =
+        gtk_menu_item_new_with_label (_("Normal (~750ms)"));
+    gtk_widget_show (op->m_UpdateMenuItem);
+    gtk_menu_shell_append (GTK_MENU_SHELL (op->m_UpdateMenu),
+                           op->m_UpdateMenuItem);
+
+    op->m_UpdateMenuItem = gtk_menu_item_new_with_label (_("Slow (~1s)"));
+    gtk_widget_show (op->m_UpdateMenuItem);
+    gtk_menu_shell_append (GTK_MENU_SHELL (op->m_UpdateMenu),
+                           op->m_UpdateMenuItem);
+
+    gtk_option_menu_set_history (GTK_OPTION_MENU (op->m_UpdateOption),
+                                 base->m_UpdateInterval);
+
+    g_signal_connect (op->m_UpdateOption, "changed",
+                      G_CALLBACK (UpdateChange), base);
+
+    /* Width */
+
+    hbox = GTK_BOX (gtk_hbox_new (FALSE, BORDER));
+    gtk_widget_show (GTK_WIDGET (hbox));
+    gtk_box_pack_start (GTK_BOX (vbox), GTK_WIDGET (hbox), FALSE, FALSE, 0);
+
+    if (xfce_panel_plugin_get_orientation (plugin) ==
+            GTK_ORIENTATION_HORIZONTAL)
+        label = gtk_label_new (_("Width:"));
+    else
+        label = gtk_label_new (_("Height:"));
+    gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
+    gtk_size_group_add_widget (sg, label);
+    gtk_widget_show (label);
+    gtk_box_pack_start (GTK_BOX (hbox), GTK_WIDGET (label), FALSE, FALSE, 0);
+
+    op->m_Width =
+        gtk_spin_button_new_with_range (10, 128, 1);
+    gtk_spin_button_set_value (GTK_SPIN_BUTTON (op->m_Width), base->m_Width);
+    gtk_widget_show (op->m_Width);
+    gtk_box_pack_start (GTK_BOX (hbox), GTK_WIDGET (op->m_Width), FALSE,
+                        FALSE, 0);
+    g_signal_connect (op->m_Width, "value-changed", G_CALLBACK (SpinChange),
+                      &base->m_Width);
+
+    /* Frame */
+
+    hbox = GTK_BOX (gtk_hbox_new (FALSE, BORDER));
+    gtk_widget_show (GTK_WIDGET (hbox));
+    gtk_box_pack_start (GTK_BOX (vbox), GTK_WIDGET (hbox), FALSE, FALSE, 0);
+
+    op->m_GraphFrame = gtk_check_button_new_with_mnemonic (_("Show frame"));
+    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (op->m_GraphFrame),
+                                  base->m_Frame);
+    gtk_widget_show (op->m_GraphFrame);
+    gtk_box_pack_start (GTK_BOX (hbox), GTK_WIDGET (op->m_GraphFrame), FALSE,
+                        FALSE, 0);
+    g_signal_connect (op->m_GraphFrame, "toggled", G_CALLBACK (FrameChange),
+                      base);
+    gtk_size_group_add_widget (sg, op->m_GraphFrame);
+
+    vbox2 = GTK_BOX (gtk_vbox_new (FALSE, BORDER));
+    gtk_widget_show (GTK_WIDGET (vbox2));
+    gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
+
+    /* Associate Command */
+
+    hbox = GTK_BOX (gtk_hbox_new (FALSE, BORDER));
+    gtk_widget_show (GTK_WIDGET (hbox));
+   	gtk_box_pack_start (GTK_BOX (vbox), GTK_WIDGET (hbox), FALSE, FALSE, 0);
+    label = gtk_label_new (_("Associated command :"));
+    gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
+    gtk_size_group_add_widget (sg, label);
+    gtk_widget_show (label);
+    gtk_box_pack_start (GTK_BOX (hbox), GTK_WIDGET (label), FALSE, FALSE, 0);
+    op->m_AssociateCommand = gtk_entry_new ();
+    gtk_entry_set_max_length (GTK_ENTRY(op->m_AssociateCommand), 32);
+    gtk_entry_set_text (GTK_ENTRY(op->m_AssociateCommand), base->m_AssociateCommand);
+    gtk_widget_show (op->m_AssociateCommand);
+    gtk_box_pack_start (GTK_BOX (hbox), GTK_WIDGET (op->m_AssociateCommand), FALSE, FALSE, 0);
+    g_signal_connect (op->m_AssociateCommand, "changed", G_CALLBACK (AssociateCommandChange), base);
+
+    /* Foreground 1 */
+
+    hbox = GTK_BOX (gtk_hbox_new (FALSE, BORDER));
+    gtk_widget_show (GTK_WIDGET (hbox));
+    gtk_box_pack_start (GTK_BOX (vbox2), GTK_WIDGET (hbox), FALSE, FALSE, 0);
+
+    label = gtk_label_new (_("Color 1:"));
+    gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
+    gtk_size_group_add_widget (sg, label);
+    gtk_widget_show (label);
+    gtk_box_pack_start (GTK_BOX (hbox), GTK_WIDGET (label), FALSE, FALSE, 0);
+
+    op->m_FG1 = gtk_button_new ();
+    op->m_ColorDA = gtk_drawing_area_new ();
+
+    gtk_widget_modify_bg (op->m_ColorDA, GTK_STATE_NORMAL,
+                          &base->m_ForeGround1);
+    gtk_widget_set_size_request (op->m_ColorDA, 12, 12);
+    gtk_container_add (GTK_CONTAINER (op->m_FG1), op->m_ColorDA);
+    gtk_widget_show (GTK_WIDGET (op->m_FG1));
+    gtk_widget_show (GTK_WIDGET (op->m_ColorDA));
+    gtk_box_pack_start (GTK_BOX (hbox), GTK_WIDGET (op->m_FG1), FALSE, FALSE,
+                        0);
+
+    g_signal_connect (op->m_FG1, "clicked", G_CALLBACK (ChangeColor1), base);
+
+    /* Foreground2 */
+
+    hbox = GTK_BOX (gtk_hbox_new (FALSE, BORDER));
+    gtk_widget_show (GTK_WIDGET (hbox));
+    gtk_box_pack_start (GTK_BOX (vbox2), GTK_WIDGET (hbox), FALSE, FALSE, 0);
+
+    label = gtk_label_new (_("Color 2:"));
+    gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
+    gtk_size_group_add_widget (sg, label);
+    gtk_widget_show (label);
+    gtk_box_pack_start (GTK_BOX (hbox), GTK_WIDGET (label), FALSE, FALSE, 0);
+
+    op->m_FG2 = gtk_button_new ();
+    op->m_ColorDA2 = gtk_drawing_area_new ();
+
+    gtk_widget_modify_bg (op->m_ColorDA2, GTK_STATE_NORMAL,
+                          &base->m_ForeGround2);
+    gtk_widget_set_size_request (op->m_ColorDA2, 12, 12);
+    gtk_container_add (GTK_CONTAINER (op->m_FG2), op->m_ColorDA2);
+    gtk_widget_show (GTK_WIDGET (op->m_FG2));
+    gtk_widget_show (GTK_WIDGET (op->m_ColorDA2));
+    gtk_box_pack_start (GTK_BOX (hbox), GTK_WIDGET (op->m_FG2), FALSE, FALSE,
+                        0);
+
+    g_signal_connect (op->m_FG2, "clicked", G_CALLBACK (ChangeColor2), base);
+
+    if (base->m_Mode == 1)
+        gtk_widget_set_sensitive (GTK_WIDGET (base->m_Options.m_FG2), TRUE);
+
+    /* Foreground3 */
+
+    hbox = GTK_BOX (gtk_hbox_new (FALSE, BORDER));
+    gtk_widget_show (GTK_WIDGET (hbox));
+    gtk_box_pack_start (GTK_BOX (vbox2), GTK_WIDGET (hbox), FALSE, FALSE, 0);
+
+    label = gtk_label_new (_("Color 3:"));
+    gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
+    gtk_size_group_add_widget (sg, label);
+    gtk_widget_show (label);
+    gtk_box_pack_start (GTK_BOX (hbox), GTK_WIDGET (label), FALSE, FALSE, 0);
+    op->m_FG3 = gtk_button_new ();
+    op->m_ColorDA5 = gtk_drawing_area_new ();
+    gtk_widget_modify_bg (op->m_ColorDA5, GTK_STATE_NORMAL,
+                          &base->m_ForeGround3);
+    gtk_widget_set_size_request (op->m_ColorDA5, 12, 12);
+    gtk_container_add (GTK_CONTAINER (op->m_FG3), op->m_ColorDA5);
+    gtk_widget_show (GTK_WIDGET (op->m_FG3));
+    gtk_widget_show (GTK_WIDGET (op->m_ColorDA5));
+    gtk_box_pack_start (GTK_BOX (hbox), GTK_WIDGET (op->m_FG3), FALSE, FALSE,
+                        0);
+    g_signal_connect (op->m_FG3, "clicked", G_CALLBACK (ChangeColor4), base);
+
+    if (base->m_Mode == 0 || base->m_Mode == 2 || base->m_ColorMode == 0)
+        gtk_widget_set_sensitive (GTK_WIDGET (base->m_Options.m_FG3), FALSE);
+    else
+        gtk_widget_set_sensitive (GTK_WIDGET (base->m_Options.m_FG3), TRUE);
+
+
+    /* Background */
+
+    hbox = GTK_BOX (gtk_hbox_new (FALSE, BORDER));
+    gtk_widget_show (GTK_WIDGET (hbox));
+    gtk_box_pack_start (GTK_BOX (vbox2), GTK_WIDGET (hbox), FALSE, FALSE, 0);
+
+    label = gtk_label_new (_("Background:"));
+    gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
+    gtk_size_group_add_widget (sg, label);
+    gtk_widget_show (label);
+    gtk_box_pack_start (GTK_BOX (hbox), GTK_WIDGET (label), FALSE, FALSE, 0);
+
+    op->m_BG = gtk_button_new ();
+    op->m_ColorDA3 = gtk_drawing_area_new ();
+
+    gtk_widget_modify_bg (op->m_ColorDA3, GTK_STATE_NORMAL,
+                          &base->m_BackGround);
+    gtk_widget_set_size_request (op->m_ColorDA3, 12, 12);
+    gtk_container_add (GTK_CONTAINER (op->m_BG), op->m_ColorDA3);
+    gtk_widget_show (GTK_WIDGET (op->m_BG));
+    gtk_widget_show (GTK_WIDGET (op->m_ColorDA3));
+    gtk_box_pack_start (GTK_BOX (hbox), GTK_WIDGET (op->m_BG), FALSE, FALSE,
+                        0);
+
+    g_signal_connect (op->m_BG, "clicked", G_CALLBACK (ChangeColor3), base);
+
+    /* Modes */
+
+    hbox = GTK_BOX (gtk_hbox_new (FALSE, BORDER));
+    gtk_widget_show (GTK_WIDGET (hbox));
+    gtk_box_pack_start (GTK_BOX (vbox2), GTK_WIDGET (hbox), FALSE, FALSE, 0);
+
+    label = gtk_label_new (_("Mode:"));
+    gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
+    gtk_size_group_add_widget (sg, label);
+    gtk_widget_show (label);
+    gtk_box_pack_start (GTK_BOX (hbox), GTK_WIDGET (label), FALSE, FALSE, 0);
+
+    op->m_OptionMenu = gtk_option_menu_new ();
+    gtk_widget_show (op->m_OptionMenu);
+    gtk_box_pack_start (GTK_BOX (hbox), op->m_OptionMenu, FALSE, FALSE, 0);
+
+    op->m_Menu = gtk_menu_new ();
+    gtk_option_menu_set_menu (GTK_OPTION_MENU (op->m_OptionMenu), op->m_Menu);
+
+    op->m_MenuItem = gtk_menu_item_new_with_label (_("Normal"));
+    gtk_widget_show (op->m_MenuItem);
+    gtk_menu_shell_append (GTK_MENU_SHELL (op->m_Menu), op->m_MenuItem);
+
+    op->m_MenuItem = gtk_menu_item_new_with_label (_("LED"));
+    gtk_widget_show (op->m_MenuItem);
+    gtk_menu_shell_append (GTK_MENU_SHELL (op->m_Menu), op->m_MenuItem);
+
+    op->m_MenuItem = gtk_menu_item_new_with_label (_("No history"));
+    gtk_widget_show (op->m_MenuItem);
+    gtk_menu_shell_append (GTK_MENU_SHELL (op->m_Menu), op->m_MenuItem);
+
+    op->m_MenuItem = gtk_menu_item_new_with_label (_("Grid"));
+    gtk_widget_show (op->m_MenuItem);
+    gtk_menu_shell_append (GTK_MENU_SHELL (op->m_Menu), op->m_MenuItem);
+
+
+    gtk_option_menu_set_history (GTK_OPTION_MENU (op->m_OptionMenu),
+                                 base->m_Mode);
+
+    g_signal_connect (op->m_OptionMenu, "changed", G_CALLBACK (ModeChange),
+                      base);
+
+    /* Color mode */
+
+    hbox = GTK_BOX (gtk_hbox_new (FALSE, BORDER));
+    gtk_widget_show (GTK_WIDGET (hbox));
+    gtk_box_pack_start (GTK_BOX (vbox2), GTK_WIDGET (hbox), FALSE, FALSE, 0);
+    label = gtk_label_new (_("Color mode: "));
+    gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
+    gtk_size_group_add_widget (sg, label);
+    gtk_widget_show (label);
+    gtk_box_pack_start (GTK_BOX (hbox), GTK_WIDGET (label), FALSE, FALSE, 0);
+
+    op->m_ModeOption = gtk_option_menu_new ();
+    gtk_widget_show (op->m_ModeOption);
+    gtk_box_pack_start (GTK_BOX (hbox), op->m_ModeOption, FALSE, FALSE, 0);
+
+    op->m_ModeMenu = gtk_menu_new ();
+    gtk_option_menu_set_menu (GTK_OPTION_MENU (op->m_ModeOption),
+                              op->m_ModeMenu);
+
+    op->m_ModeMenuItem = gtk_menu_item_new_with_label (_("None"));
+    gtk_widget_show (op->m_ModeMenuItem);
+    gtk_menu_shell_append (GTK_MENU_SHELL (op->m_ModeMenu),
+                           op->m_ModeMenuItem);
+
+    op->m_ModeMenuItem = gtk_menu_item_new_with_label (_("Gradient"));
+    gtk_widget_show (op->m_ModeMenuItem);
+    gtk_menu_shell_append (GTK_MENU_SHELL (op->m_ModeMenu),
+                           op->m_ModeMenuItem);
+
+    gtk_option_menu_set_history (GTK_OPTION_MENU (op->m_ModeOption),
+                                 base->m_ColorMode);
+
+    g_signal_connect (op->m_ModeOption, "changed",
+                      G_CALLBACK (ColorModeChange), base);
+
+    gtk_widget_show_all (GTK_WIDGET (hbox));
+
+    op->m_Notebook = gtk_notebook_new ();
+    gtk_container_set_border_width (GTK_CONTAINER (op->m_Notebook),
+                                    BORDER - 2);
+    label = gtk_label_new (_("Appearance"));
+    gtk_notebook_append_page (GTK_NOTEBOOK (op->m_Notebook),
+                              GTK_WIDGET (vbox2), GTK_WIDGET (label));
+    label = gtk_label_new (_("Advanced"));
+    gtk_notebook_append_page (GTK_NOTEBOOK (op->m_Notebook),
+                              GTK_WIDGET (vbox), GTK_WIDGET (label));
+    gtk_widget_show (op->m_Notebook);
+
+    gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dlg)->vbox),
+                        GTK_WIDGET (op->m_Notebook), TRUE, TRUE, 0);
+
+    gtk_widget_show (dlg);
+}


Property changes on: xfce4-cpugraph-plugin/trunk/panel-plugin/option.c
___________________________________________________________________
Name: svn:eol-style
   + native

Added: xfce4-cpugraph-plugin/trunk/panel-plugin/option.h
===================================================================
--- xfce4-cpugraph-plugin/trunk/panel-plugin/option.h	                        (rev 0)
+++ xfce4-cpugraph-plugin/trunk/panel-plugin/option.h	2007-11-22 07:17:50 UTC (rev 3613)
@@ -0,0 +1,32 @@
+/*  option.h
+ *  Part of xfce4-cpugraph-plugin
+ *
+ *  Copyright (c) Alexander Nordfelth <alex.nordfelth at telia.com>
+ *  Copyright (c) gatopeich <gatoguan-os at yahoo.com>
+ *  Copyright (c) 2007-2008 Angelo Arrifano <miknix at gmail.com>
+ *  Copyright (c) 2007-2008 Lidiriel <lidiriel at coriolys.org>
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU Library General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __XFCE_OPTION_H__
+#define __XFCE_OPTION_H__
+
+#include "cpu.h"
+
+static void DialogResponse (GtkWidget *dlg, int response, CPUGraph *base);
+void CreateOptions (XfcePanelPlugin *plugin, CPUGraph *base);
+
+#endif


Property changes on: xfce4-cpugraph-plugin/trunk/panel-plugin/option.h
___________________________________________________________________
Name: svn:eol-style
   + native

Deleted: xfce4-cpugraph-plugin/trunk/panel-plugin/os.c

Deleted: xfce4-cpugraph-plugin/trunk/panel-plugin/os.h

Added: xfce4-cpugraph-plugin/trunk/panel-plugin/settings.c
===================================================================
--- xfce4-cpugraph-plugin/trunk/panel-plugin/settings.c	                        (rev 0)
+++ xfce4-cpugraph-plugin/trunk/panel-plugin/settings.c	2007-11-22 07:17:50 UTC (rev 3613)
@@ -0,0 +1,186 @@
+/*  settings.c
+ *  Part of xfce4-cpugraph-plugin
+ *
+ *  Copyright (c) Alexander Nordfelth <alex.nordfelth at telia.com>
+ *  Copyright (c) gatopeich <gatoguan-os at yahoo.com>
+ *  Copyright (c) 2007-2008 Angelo Arrifano <miknix at gmail.com>
+ *  Copyright (c) 2007-2008 Lidiriel <lidiriel at coriolys.org>
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU Library General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include "cpu.h"
+#include "settings.h"
+
+void
+ReadSettings (XfcePanelPlugin * plugin, CPUGraph * base)
+{
+    const char *value;
+    char *file;
+    XfceRc *rc;
+    int update;
+
+    base->m_Width = 60;
+
+    base->m_ForeGround1.red = 0;
+    base->m_ForeGround1.green = 65535;
+    base->m_ForeGround1.blue = 0;
+
+    base->m_ForeGround2.red = 65535;
+    base->m_ForeGround2.green = 0;
+    base->m_ForeGround2.blue = 0;
+
+    base->m_ForeGround3.red = 0;
+    base->m_ForeGround3.green = 0;
+    base->m_ForeGround3.blue = 65535;
+
+    base->m_BackGround.red = 65535;
+    base->m_BackGround.green = 65535;
+    base->m_BackGround.blue = 65535;
+
+    base->m_TimeScale = 0;
+    base->m_Frame = 0;
+    base->m_AssociateCommand = "xterm top";
+    base->m_ColorMode = 0;
+    base->m_Mode = 0;
+
+    if ((file = xfce_panel_plugin_lookup_rc_file (plugin)) != NULL)
+
+    {
+        rc = xfce_rc_simple_open (file, TRUE);
+        g_free (file);
+
+        if (rc)
+        {
+            base->m_UpdateInterval =
+                xfce_rc_read_int_entry (rc, "UpdateInterval",
+                                        base->m_UpdateInterval);
+
+            base->m_TimeScale =
+                xfce_rc_read_int_entry (rc, "TimeScale",
+                                        base->m_TimeScale);
+
+            base->m_Width =
+                xfce_rc_read_int_entry (rc, "Width", base->m_Width);
+
+            base->m_Mode = xfce_rc_read_int_entry (rc, "Mode", base->m_Mode);
+
+            base->m_Frame =
+                xfce_rc_read_int_entry (rc, "Frame", base->m_Frame);
+
+            if (value = xfce_rc_read_entry (rc, "AssociateCommand", base->m_AssociateCommand)) {
+              base->m_AssociateCommand = g_strdup(value);
+            }
+
+            base->m_ColorMode =
+                xfce_rc_read_int_entry (rc, "ColorMode", base->m_ColorMode);
+
+            if ((value = xfce_rc_read_entry (rc, "Foreground1", NULL)))
+            {
+                gdk_color_parse (value, &base->m_ForeGround1);
+            }
+            if ((value = xfce_rc_read_entry (rc, "Foreground2", NULL)))
+            {
+                gdk_color_parse (value, &base->m_ForeGround2);
+            }
+            if ((value = xfce_rc_read_entry (rc, "Background", NULL)))
+            {
+                gdk_color_parse (value, &base->m_BackGround);
+            }
+            if ((value = xfce_rc_read_entry (rc, "Foreground3", NULL)))
+            {
+                gdk_color_parse (value, &base->m_ForeGround3);
+            }
+
+            xfce_rc_close (rc);
+        }
+    }
+
+    SetHistorySize (base, base->m_Width);
+
+    if (base->m_TimeoutID)
+        g_source_remove (base->m_TimeoutID);
+    switch (base->m_UpdateInterval)
+    {
+        case 0:
+            update = 250;
+            break;
+        case 1:
+            update = 500;
+            break;
+        case 2:
+            update = 750;
+            break;
+        default:
+            update = 1000;
+    }
+    base->m_TimeoutID = g_timeout_add (update, (GtkFunction) UpdateCPU, base);
+
+    gtk_frame_set_shadow_type (GTK_FRAME (base->m_FrameWidget),
+            base->m_Frame ? GTK_SHADOW_IN : GTK_SHADOW_NONE);
+}
+
+void
+WriteSettings (XfcePanelPlugin *plugin, CPUGraph *base)
+{
+    char value[10];
+    XfceRc *rc;
+    char *file;
+
+    if (!(file = xfce_panel_plugin_save_location (plugin, TRUE)))
+        return;
+
+    rc = xfce_rc_simple_open (file, FALSE);
+    g_free (file);
+
+    if (!rc)
+        return;
+
+    xfce_rc_write_int_entry (rc, "UpdateInterval", base->m_UpdateInterval);
+
+    xfce_rc_write_int_entry (rc, "TimeScale", base->m_TimeScale);
+
+    xfce_rc_write_int_entry (rc, "Width", base->m_Width);
+
+    xfce_rc_write_int_entry (rc, "Mode", base->m_Mode);
+
+    xfce_rc_write_int_entry (rc, "Frame", base->m_Frame);
+
+    xfce_rc_write_entry (rc, "AssociateCommand", base->m_AssociateCommand ? base->m_AssociateCommand : "");
+
+    xfce_rc_write_int_entry (rc, "ColorMode", base->m_ColorMode);
+
+    g_snprintf (value, 8, "#%02X%02X%02X", base->m_ForeGround1.red >> 8,
+                                           base->m_ForeGround1.green >> 8,
+                                           base->m_ForeGround1.blue >> 8);
+    xfce_rc_write_entry (rc, "Foreground1", value);
+
+    g_snprintf (value, 8, "#%02X%02X%02X", base->m_ForeGround2.red >> 8,
+                                           base->m_ForeGround2.green >> 8,
+                                           base->m_ForeGround2.blue >> 8);
+    xfce_rc_write_entry (rc, "Foreground2", value);
+
+    g_snprintf (value, 8, "#%02X%02X%02X", base->m_BackGround.red >> 8,
+                                           base->m_BackGround.green >> 8,
+                                           base->m_BackGround.blue >> 8);
+    xfce_rc_write_entry (rc, "Background", value);
+
+    g_snprintf (value, 8, "#%02X%02X%02X", base->m_ForeGround3.red >> 8,
+                                           base->m_ForeGround3.green >> 8,
+                                           base->m_ForeGround3.blue >> 8);
+    xfce_rc_write_entry (rc, "Foreground3", value);
+
+    xfce_rc_close (rc);
+}


Property changes on: xfce4-cpugraph-plugin/trunk/panel-plugin/settings.c
___________________________________________________________________
Name: svn:eol-style
   + native

Added: xfce4-cpugraph-plugin/trunk/panel-plugin/settings.h
===================================================================
--- xfce4-cpugraph-plugin/trunk/panel-plugin/settings.h	                        (rev 0)
+++ xfce4-cpugraph-plugin/trunk/panel-plugin/settings.h	2007-11-22 07:17:50 UTC (rev 3613)
@@ -0,0 +1,31 @@
+/*  settings.h
+ *  Part of xfce4-cpugraph-plugin
+ *
+ *  Copyright (c) Alexander Nordfelth <alex.nordfelth at telia.com>
+ *  Copyright (c) gatopeich <gatoguan-os at yahoo.com>
+ *  Copyright (c) 2007-2008 Angelo Arrifano <miknix at gmail.com>
+ *  Copyright (c) 2007-2008 Lidiriel <lidiriel at coriolys.org>
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU Library General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __XFCE_SETTINGS_H__
+#define __XFCE_SETTINGS_H__
+
+void ReadSettings (XfcePanelPlugin * plugin, CPUGraph * base);
+void WriteSettings (XfcePanelPlugin *plugin, CPUGraph *base);
+
+
+#endif


Property changes on: xfce4-cpugraph-plugin/trunk/panel-plugin/settings.h
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: xfce4-cpugraph-plugin/trunk/po/POTFILES.in
===================================================================
--- xfce4-cpugraph-plugin/trunk/po/POTFILES.in	2007-11-21 00:30:55 UTC (rev 3612)
+++ xfce4-cpugraph-plugin/trunk/po/POTFILES.in	2007-11-22 07:17:50 UTC (rev 3613)
@@ -1,4 +1,7 @@
 panel-plugin/cpu.c
-panel-plugin/os.c
+panel-plugin/cpu_os.c
+panel-plugin/mode.c
+panel-plugin/option.c
+panel-plugin/settings.c
 panel-plugin/cpugraph.desktop.in.in
 




More information about the Goodies-commits mailing list