[Goodies-commits] r3675 - xfce4-cpugraph-plugin/trunk/panel-plugin
ludovic mercier
lidiriel at xfce.org
Fri Dec 7 09:55:00 CET 2007
Author: lidiriel
Date: 2007-12-07 08:55:00 +0000 (Fri, 07 Dec 2007)
New Revision: 3675
Added:
xfce4-cpugraph-plugin/trunk/panel-plugin/os.c
xfce4-cpugraph-plugin/trunk/panel-plugin/os.h
Modified:
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
Log:
prepare new version for replace last release (0.4.0)
following the mailling list discussion
add new merge code
Modified: xfce4-cpugraph-plugin/trunk/panel-plugin/cpu.c
===================================================================
--- xfce4-cpugraph-plugin/trunk/panel-plugin/cpu.c 2007-12-07 08:52:30 UTC (rev 3674)
+++ xfce4-cpugraph-plugin/trunk/panel-plugin/cpu.c 2007-12-07 08:55:00 UTC (rev 3675)
@@ -1,35 +1,6 @@
-/* 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)
{
@@ -69,33 +40,191 @@
void
Kill (XfcePanelPlugin * plugin, CPUGraph * base)
{
- gint i;
- cpuLoadMon_free();
- for(i=0; i<base->nrCores-1 ; i++)
- gtk_widget_destroy(base->m_pBar[i]);
+ gint i;
+ cpuData_free();
+ base->m_CpuData = NULL;
- gtk_widget_destroy(base->m_Box);
- free(base->m_pBar);
- if (base->m_TimeoutID)
- g_source_remove (base->m_TimeoutID);
+ 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);
- g_object_unref (base->m_Tooltip);
+ if (base->m_TimeoutID)
+ g_source_remove (base->m_TimeoutID);
- g_free (base);
+ if (base->m_History)
+ g_free (base->m_History);
+
+ g_object_unref (base->m_Tooltip);
+
+ g_free (base);
}
+void
+ReadSettings (XfcePanelPlugin * plugin, CPUGraph * base)
+{
+ const char *value;
+ char *file;
+ XfceRc *rc;
+ int update;
+ base->m_Width = 70;
+
+ 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);
+}
+
CPUGraph *
CreateControl (XfcePanelPlugin * plugin)
{
+ gint i;
GtkWidget *frame, *ebox;
GtkOrientation orientation;
GtkProgressBarOrientation barOrientation;
CPUGraph *base = g_new0 (CPUGraph, 1);
- gint i;
base->plugin = plugin;
@@ -103,8 +232,6 @@
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;
@@ -114,64 +241,61 @@
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);
+ /* Multicore stuff */
+ //fprintf(stderr,"Multicore stuff\n");
+ if((base->nrCores = cpuData_init() - 1) < 0)
+ fprintf(stderr,"Cannot init cpu data !\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_BOX(base->m_Box),
+ frame,
+ TRUE,
+ TRUE,
+ 2);
+
gtk_widget_show (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_container_add (GTK_CONTAINER (ebox), frame);
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);
base->m_Tooltip = gtk_tooltips_new ();
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);
@@ -181,106 +305,97 @@
void
SetOrientation (XfcePanelPlugin * plugin, GtkOrientation orientation, CPUGraph *base)
{
- GtkProgressBarOrientation barOrientation;
- gpointer p_pBar[base->nrCores];
- gpointer p_FrameWidget;
- gint i;
+ GtkProgressBarOrientation barOrientation;
+ gpointer p_pBar[base->nrCores];
+ gpointer p_FrameWidget;
+ gint i;
- /* <-- Multicore stuff */
+ /* <-- 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;
+ 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(
+ /* 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_pBar[i]));
- }
- p_FrameWidget = g_object_ref(base->m_FrameWidget);
- gtk_container_remove(
- GTK_CONTAINER(base->m_Box),
- GTK_WIDGET(base->m_FrameWidget));
+ 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(
+ 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_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);
+ 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);
- if( scaling_cur_freq )
- snprintf (tooltip+pos, 32-pos, " (%d MHz)", scaling_cur_freq/1000);
+ int pos = snprintf (tooltip, 32, "Usage: %d%%", base->m_CpuData[0].load*100/CPU_SCALE);
+ if( base->m_CpuData[0].scalCurFreq )
+ snprintf (tooltip+pos, 32-pos, " (%d MHz)", base->m_CpuData[0].scalCurFreq/1000);
gtk_tooltips_set_tip (GTK_TOOLTIPS (base->m_Tooltip),
- base->m_Box->parent, tooltip, NULL);
+ base->m_FrameWidget->parent, tooltip, NULL);
}
-/**
- * size : size of pannel height/width
- * BORDER : use for size of bar
- */
gboolean
SetSize (XfcePanelPlugin *plugin, int size, CPUGraph *base)
{
- gint i, coreWidth;
- gtk_container_set_border_width (GTK_CONTAINER (base->m_FrameWidget), 0);
+ gint i;
+ gtk_container_set_border_width (GTK_CONTAINER (base->m_FrameWidget),
+ size > 26 ? 2 : 0);
+
if (xfce_panel_plugin_get_orientation (plugin) ==
GTK_ORIENTATION_HORIZONTAL)
{
- for(i=0; i<base->nrCores; i++)
+ 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);
+ GTK_WIDGET(base->m_pBar[i]),
+ BORDER,
+ 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);
+ gtk_widget_set_size_request(
+ GTK_WIDGET(base->m_pBar[i]),
+ size,
+ BORDER);
}
return TRUE;
@@ -289,39 +404,436 @@
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);
+}
-gboolean
-UpdateCPU (CPUGraph * base)
+void
+CreateOptions (XfcePanelPlugin *plugin, CPUGraph *base)
{
- gint i;
- cpuLoadData *data = cpuLoadMon_read();
+ GtkWidget *dlg, *header;
+ GtkBox *vbox, *vbox2, *hbox;
+ GtkWidget *label;
+ GtkSizeGroup *sg;
+ SOptions *op = &base->m_Options;
- base->m_CPUUsage = data[0].value * 100.0;
+ xfce_panel_plugin_block_menu (plugin);
- for(i=0; i<base->nrCores; i++){
- gtk_progress_bar_set_fraction(
- GTK_PROGRESS_BAR(base->m_pBar[i]),
- (gdouble)data[i+1].value);
- }
+ 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);
- memmove (base->m_History + 1, base->m_History,
- (base->m_Values-1)*sizeof(float));
- base->m_History[0] = data[0].value;
+ base->m_OptionsDialog = dlg;
- /* Tooltip */
- UpdateTooltip (base);
+ g_signal_connect (dlg, "response", G_CALLBACK (DialogResponse), base);
- //fprintf(stderr, "update cpu %f\n", base->m_History[0]);
+ gtk_container_set_border_width (GTK_CONTAINER (dlg), 2);
- /* Draw the graph. */
- gtk_widget_queue_draw (base->m_DrawArea);
+ 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);
- return TRUE;
+ 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)
+{
+ //fprintf(stderr,"update cpu\n");
+ gint i;
+ base->m_CpuData = cpuData_read();
+ for(i=0; i<base->nrCores; i++){
+ fprintf(stderr,"bar load = %f\n",(gdouble)base->m_CpuData[i+1].load);
+ gtk_progress_bar_set_fraction(
+ GTK_PROGRESS_BAR(base->m_pBar[i]),
+ (gdouble)base->m_CpuData[i+1].load/CPU_SCALE);
+ }
+
+ if(base->m_TimeScale)
+ {
+ int i = base->m_Values - 1;
+ int j = i + base->m_Values;
+ while(i > 0)
+ {
+ int a, b;
+
+ 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;
+
+ 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_CpuData[0].load;
+ base->m_History[base->m_Values] = base->m_CpuData[0].scalCurFreq;
+
+ /* Tooltip */
+ UpdateTooltip (base);
+
+ /* Draw the graph. */
+ gtk_widget_queue_draw (base->m_DrawArea);
+ return TRUE;
+}
+
void
DrawGraph (CPUGraph * base)
{
@@ -339,22 +851,21 @@
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)
{
- drawGraphNormal(base, fg1, da, w, h);
+ drawGraphMode0(base, fg1, da, w, h);
}
else if (base->m_Mode == 1)
{
- drawGraphLED(base, fg1, fg2, da, w, h);
+ drawGraphMode1(base, fg1, fg2, da, w, h);
}
else if (base->m_Mode == 2)
{
- drawGraphNoHistory(base, fg1, fg2, da, w, h);
+ drawGraphMode2(base, fg1, fg2, da, w, h);
}
- else if (base->m_Mode == 3){
- drawGraphGrid(base, fg1, fg2, da, w, h);
+ else if (base->m_Mode == 4)
+ {
+ drawGraphMode4(base, fg1, da, w, h);
}
g_object_unref (fg2);
@@ -400,8 +911,6 @@
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);
}
@@ -513,44 +1022,57 @@
void
SetHistorySize (CPUGraph * base, int size)
{
- gint i;
- cpuLoadData *data = cpuLoadMon_read();
- float usage = data[0].value;
-
+ int i;
base->m_History =
- (float *) realloc (base->m_History, size * sizeof (float));
+ (long *) realloc (base->m_History, 2 * size * sizeof (long));
- for (i = size - 1; i >= 0; i--)
+ base->m_CpuData = cpuData_read();
+ base->m_CpuData[0].pUsed = 0;
+ base->m_CpuData[0].pTotal = 0;
+ int usage = base->m_CpuData[0].load;
+ for (i = size - 1; i >= base->m_Values; i--)
{
- base->m_History[i] = usage;
+ base->m_History[i] = usage;
+ base->m_History[i+size] = base->m_CpuData[0].scalCurFreq;
}
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){
- 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);
- }
+ 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);
+ }
}
void
UpdateChange (GtkOptionMenu * om, CPUGraph * base)
Modified: xfce4-cpugraph-plugin/trunk/panel-plugin/cpu.h
===================================================================
--- xfce4-cpugraph-plugin/trunk/panel-plugin/cpu.h 2007-12-07 08:52:30 UTC (rev 3674)
+++ xfce4-cpugraph-plugin/trunk/panel-plugin/cpu.h 2007-12-07 08:55:00 UTC (rev 3675)
@@ -1,26 +1,3 @@
-/* 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__
@@ -39,7 +16,7 @@
#include <libxfce4panel/xfce-panel-plugin.h>
#include <libxfce4panel/xfce-hvbox.h>
-#include "cpu_os.h"
+#include "os.h"
#define BORDER 8
@@ -92,34 +69,33 @@
GtkWidget *m_FrameWidget;
GtkWidget *m_DrawArea;
GtkWidget *m_OptionsDialog;
- GtkWidget *m_Box;
- GtkWidget **m_pBar;
+ 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;
- guint nrCores; // Number of cores (not including total cpu)
+ 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;
- float *m_History;
+ //long m_CPUUsage;
+ long *m_History;
int m_Values;
-
int m_Orientation;
+ CpuData *m_CpuData;
-
}CPUGraph;
CPUGraph *CreateControl (XfcePanelPlugin *plugin);
@@ -145,7 +121,6 @@
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);
Modified: xfce4-cpugraph-plugin/trunk/panel-plugin/mode.c
===================================================================
--- xfce4-cpugraph-plugin/trunk/panel-plugin/mode.c 2007-12-07 08:52:30 UTC (rev 3674)
+++ xfce4-cpugraph-plugin/trunk/panel-plugin/mode.c 2007-12-07 08:55:00 UTC (rev 3675)
@@ -1,60 +1,68 @@
-/* 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 : Normal ***/
-void drawGraphNormal (CPUGraph *base, GdkGC *fg1, GtkWidget *da, int w, int h){
+/*** MODE 0 ***/
+void drawGraphMode0 (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];
+ long usage = h * base->m_History[w - x] / CPU_SCALE;
if(usage == 0) continue;
- if (base->m_ColorMode == 0) { /* none color mode */
+ if (base->m_ColorMode == 0) {
gdk_gc_set_rgb_fg_color (fg1, &base->m_ForeGround1);
- gdk_draw_line (da->window, fg1, x, h-usage, x, h-1);
+
+ 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);
}
- if(base->m_ColorMode == 1){ /* color mode == 1 : gradient */
+ else if (base->m_ColorMode == 3) /* cpu freq. based */
+ {
+ GdkColor color;
+ double t = (double) (base->m_History[base->m_Values+ w - x] - base->m_CpuData[0].scalMinFreq)
+ / (base->m_CpuData[0].scalMaxFreq - base->m_CpuData[0].scalMinFreq);
+
+ 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 */
+ {
int tmp = 0;
- for (y = h; y >= h - usage; y--)
+ int length = h - (h - usage);
+ for (y = h; y >= h - usage; y--, tmp++)
{
- 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++;
+ 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);
+ }
gdk_draw_point (da->window, fg1, x, y);
}
}
@@ -62,25 +70,31 @@
}
-/*** MODE 1 : LED ***/
-void drawGraphLED (CPUGraph *base, GdkGC *fg1, GdkGC *fg2, GtkWidget *da, int w, int h){
+/*** MODE 1 ***/
+void drawGraphMode1 (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 limit = nry * (1 - base->m_History[nrx - x]);
+ int length = usage;
+ gdk_gc_set_rgb_fg_color (fg2, &base->m_ForeGround2);
for (y = nry; y >= 0; y--)
{
- if (base->m_ColorMode == 1){// color mode == 1 gradient
+ GdkGC *draw = fg2;
+
+ if (base->m_ColorMode > 0)
+ {
GdkColor color;
- double t = tmp / (double) (nry);
+ double t =
+ (base->m_ColorMode == 1) ?
+ (tmp / (double) (nry)) :
+ (tmp / (double) (length));
color.red =
_lerp (t, base->m_ForeGround2.red,
base->m_ForeGround3.red);
@@ -90,31 +104,33 @@
color.blue =
_lerp (t, base->m_ForeGround2.blue,
base->m_ForeGround3.blue);
- gdk_gc_set_rgb_fg_color (fg2, &color);
+ gdk_gc_set_rgb_fg_color (fg1, &color);
tmp++;
+ draw = fg1;
}
+
gdk_draw_rectangle (da->window,
- (y > limit) ? fg1 : fg2,
+ draw,
TRUE, x * 3, y * 2, 2, 1);
}
}
}
-/*** 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];
+/*** 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;
- 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--){
+ for (y = h; y >= h - usage; y--)
+ {
+ if (base->m_ColorMode > 0)
+ {
GdkColor color;
- double t = tmp / (double) (h);
+ double t =
+ (base->m_ColorMode == 1) ? (tmp / (double) (h)) :
+ (tmp / (double) (length));
color.red =
_lerp (t, base->m_ForeGround1.red,
base->m_ForeGround2.red);
@@ -124,39 +140,20 @@
color.blue =
_lerp (t, base->m_ForeGround1.blue,
base->m_ForeGround2.blue);
- gdk_gc_set_rgb_fg_color (fg1, &color);
+ gdk_gc_set_rgb_fg_color (fg2, &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 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;
- }
+/*** 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));
}
Modified: xfce4-cpugraph-plugin/trunk/panel-plugin/mode.h
===================================================================
--- xfce4-cpugraph-plugin/trunk/panel-plugin/mode.h 2007-12-07 08:52:30 UTC (rev 3674)
+++ xfce4-cpugraph-plugin/trunk/panel-plugin/mode.h 2007-12-07 08:55:00 UTC (rev 3675)
@@ -1,40 +1,11 @@
-/* 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__
#include "cpu.h"
-typedef struct {
- long x;
- long y;
-} point;
+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);
-
-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/os.c
===================================================================
--- xfce4-cpugraph-plugin/trunk/panel-plugin/os.c (rev 0)
+++ xfce4-cpugraph-plugin/trunk/panel-plugin/os.c 2007-12-07 08:55:00 UTC (rev 3675)
@@ -0,0 +1,314 @@
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "cpu.h"
+
+#if defined (__linux__)
+#define PROC_STAT "/proc/stat"
+#define SYS_DEVICE "/sys/devices/system/cpu/cpu"
+#define SCAL_CUR_FREQ "/cpufreq/scaling_cur_freq"
+#define SCAL_MIN_FREQ "/cpufreq/scaling_min_freq"
+#define SCAL_MAX_FREQ "/cpufreq/scaling_max_freq"
+#define PROCMAXLNLEN 256 /* should make it */
+#endif
+
+CpuData *cpudata = NULL;
+int nrCpus = 0;
+
+void cpuData_free(){
+ free(cpudata);
+ cpudata = NULL;
+ nrCpus = 0;
+}
+
+#if defined (__linux__)
+int cpuData_init(){
+ //fprintf(stderr,"cpuData_init\n");
+ FILE *fstat = NULL;
+ char cpuStr[PROCMAXLNLEN];
+ int i, cpuNr = -1;
+ /* Check if previously initalized */
+ if(cpudata != 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 */
+ cpudata = (CpuData *) calloc(cpuNr, sizeof(CpuData));
+ if(cpudata == NULL) return(-3);
+
+ /* init frequency */
+ for(i=cpuNr-1; i>=0; i--){
+ cpudata[i].scalCurFreq = 0;
+ cpudata[i].scalMinFreq = 0;
+ cpudata[i].scalMaxFreq = -1;
+ }
+
+ fclose(fstat);
+ return(nrCpus=cpuNr);
+}
+
+CpuData *cpuData_read(){
+ //fprintf(stderr,"cpuData_read\n");
+ FILE *fStat = NULL;
+ char cpuStr[PROCMAXLNLEN];
+ unsigned long user, nice, system, idle, used, total;
+ unsigned long iowait=0, irq=0, softirq=0;
+ int cpuNr = 0;
+
+ /* Check if callable */
+ if((cpudata == 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(cpudata);
+ if(sscanf(cpuStr, "%*s %ld %ld %ld %ld %ld %ld %ld",
+ &user, &nice, &system, &idle, &iowait, &irq, &softirq) < 7)
+ iowait = irq = softirq = 0;
+ used = user + nice + system + irq + softirq;
+ total = used + idle + iowait;
+ if((total - cpudata[cpuNr].pTotal) != 0){
+ cpudata[cpuNr].load = CPU_SCALE * (float)(used - cpudata[cpuNr].pUsed)
+ / (float)(total - cpudata[cpuNr].pTotal);
+ }
+ else
+ {
+ cpudata[cpuNr].load = 0;
+ }
+ cpudata[cpuNr].pUsed = used;
+ cpudata[cpuNr].pTotal = total;
+ setFrequencyScaling(cpuNr);
+ cpuNr++;
+ }
+ while((cpuNr < nrCpus) && (strncmp(cpuStr, "cpu", 3) == 0));
+
+ fclose(fStat);
+
+ return cpudata;
+}
+
+/* read frequency value for the cpu N (cpuId) */
+void setFrequencyScaling(int cpuId){
+ //fprintf(stderr,"set frequency scaling\n");
+ char *fileName;
+ if( -1 != cpudata[cpuId].scalMaxFreq){
+ //fprintf(stderr,"read current frequence\n");
+ FILE *fp;
+ if( cpudata[cpuId].scalMaxFreq ){
+ if(sscanf(fileName, "%s%i%s", SYS_DEVICE, cpuId, SCAL_CUR_FREQ)){
+ fp = fopen(fileName, "r");
+ if( NULL != fp ){
+ fscanf(fp, "%d", &cpudata[cpuId].scalCurFreq);
+ fclose(fp);
+ }
+ }
+ } else {
+ cpudata[cpuId].scalMaxFreq = -1;
+ if(sscanf(fileName, "%s%i%s", SYS_DEVICE, cpuId, SCAL_MIN_FREQ)){
+ FILE *fp;
+ fp = fopen(fileName, "r");
+ if( NULL != fp ){
+ if (1 == fscanf(fp, "%d", &cpudata[cpuId].scalMinFreq) ){
+ fclose(fp);
+ free(fileName);
+ if(sscanf(fileName, "%s%i%s", SYS_DEVICE, cpuId, SCAL_MAX_FREQ)){
+ fp = fopen(fileName, "r");
+ if( NULL != fp){
+ fscanf(fp, "%d", &cpudata[cpuId].scalMaxFreq);
+ if( cpudata[cpuId].scalMaxFreq < 1 ) cpudata[cpuId].scalMaxFreq = -1;
+ fclose(fp);
+ }
+ }
+ } else {
+ fclose(fp);
+ }
+ }
+ }
+ }
+ free(fileName);
+ }
+}
+
+
+#elif defined (__FreeBSD__)
+void cpuData_init(){
+ int i, cpuNr = -1;
+
+ /* Check if previously initalized */
+ if(cpudata != NULL) return(-2);
+
+ cpuNr = 1;
+
+ /* Alloc storage for cpu data stuff */
+ cpudata = (CpuData *) calloc(cpuNr, sizeof(CpuData));
+ if(cpudata == NULL) return(-3);
+
+ /* init frequency */
+ for(i=cpuNr-1; i>=0; i--){
+ cpudata[i].scalCurFreq = 0;
+ cpudata[i].scalMinFreq = 0;
+ cpudata[i].scalMaxFreq = -1;
+ }
+
+ fclose(fstat);
+ return(nrCpus=cpuNr);
+}
+
+CpuData *cpuData_read(){
+ unsigned long user, nice, sys, bsdidle, idle;
+ unsigned long used, total;
+ long cp_time[CPUSTATES];
+ size_t len = sizeof (cp_time);
+
+ long usage;
+
+ if (sysctlbyname ("kern.cp_time", &cp_time, &len, NULL, 0) < 0)
+ {
+ printf ("Cannot get kern.cp_time.\n");
+ return -1;
+ }
+
+ user = cp_time[CP_USER];
+ nice = cp_time[CP_NICE];
+ sys = cp_time[CP_SYS];
+ bsdidle = cp_time[CP_IDLE];
+ idle = cp_time[CP_IDLE];
+
+ used = user+nice+sys;
+ total = used+bsdidle;
+ if ((total - cpudata[0].pTotal) != 0)
+ cpudata[0].pTotal = (CPU_SCALE.0 * (used - cpudata[0].pTotal))/(total - cpudata[0].pTotal);
+ else
+ cpudata[0].pTotal = 0;
+
+ cpudata[0].pUsed = used;
+ cpudata[0].pTotal = total;
+
+ return cpudata;
+}
+
+#elif defined (__NetBSD__)
+void cpuData_init(){
+ int i, cpuNr = -1;
+
+ /* Check if previously initalized */
+ if(cpudata != NULL) return(-2);
+
+ cpuNr = 1;
+
+ /* Alloc storage for cpu data stuff */
+ cpudata = (CpuData *) calloc(cpuNr, sizeof(CpuData));
+ if(cpudata == NULL) return(-3);
+
+ /* init frequency */
+ for(i=cpuNr-1; i>=0; i--){
+ cpudata[i].scalCurFreq = 0;
+ cpudata[i].scalMinFreq = 0;
+ cpudata[i].scalMaxFreq = -1;
+ }
+
+ fclose(fstat);
+ return(nrCpus=cpuNr);
+}
+
+
+CpuData *cpuData_read(){
+ long user, nice, sys, bsdidle, idle;
+ long used, total, usage;
+ static int mib[] = {CTL_KERN, KERN_CP_TIME };
+ u_int64_t cp_time[CPUSTATES];
+ size_t len = sizeof (cp_time);
+
+ if (sysctl (mib, 2, &cp_time, &len, NULL, 0) < 0)
+ {
+ printf ("Cannot get kern.cp_time\n");
+ return -1;
+ }
+
+ user = cp_time[CP_USER];
+ nice = cp_time[CP_NICE];
+ sys = cp_time[CP_SYS];
+ bsdidle = cp_time[CP_IDLE];
+ idle = cp_time[CP_IDLE];
+
+ used = user+nice+sys;
+ total = used+bsdidle;
+
+ if (total - cpudata[0].pTotal != 0)
+ usage = (CPU_SCALE * (double)(used - cpudata[0].pTotal))/(double)(total - cpudata[0].pTotal);
+ else
+ usage = 0;
+
+ cpudata[0].pUsed = used;
+ cpudata[0].pTotal = total;
+
+ return cpudata;
+}
+
+#elif defined (__OpenBSD_)
+void cpuData_init(){
+ int i, cpuNr = -1;
+
+ /* Check if previously initalized */
+ if(cpudata != NULL) return(-2);
+
+ cpuNr = 1;
+
+ /* Alloc storage for cpu data stuff */
+ cpudata = (CpuData *) calloc(cpuNr, sizeof(CpuData));
+ if(cpudata == NULL) return(-3);
+
+ /* init frequency */
+ for(i=cpuNr-1; i>=0; i--){
+ cpudata[i].scalCurFreq = 0;
+ cpudata[i].scalMinFreq = 0;
+ cpudata[i].scalMaxFreq = -1;
+ }
+
+ fclose(fstat);
+ return(nrCpus=cpuNr);
+}
+
+
+CpuData *cpuData_read(){
+ unsigned long user, nice, sys, bsdidle, idle;
+ unsigned long used, total, usage;
+ static int mib[] = {CTL_KERN, KERN_CP_TIME };
+ u_int64_t cp_time[CPUSTATES];
+ size_t len = sizeof (cp_time);
+ if (sysctl (mib, 2, &cp_time, &len, NULL, 0) < 0){
+ printf ("Cannot get kern.cp_time\n");
+ return -1;
+ }
+
+ user = cp_time[CP_USER];
+ nice = cp_time[CP_NICE];
+ sys = cp_time[CP_SYS];
+ bsdidle = cp_time[CP_INTR];
+ idle = cp_time[CP_IDLE];
+
+ used = user+nice+sys;
+ total = used+bsdidle;
+
+ if (total - cpudata[0].pTotal != 0)
+ usage = (CPU_SCALE * (double)(used - cpudata[0].pTotal))/(double)(total - cpudata[0].pTotal);
+ else
+ usage = 0;
+ cpudata[0].pUsed = used;
+ cpudata[0].pTotal = total;
+
+ return cpudata;
+}
+#else
+#error "You're OS is not supported."
+#endif
Property changes on: xfce4-cpugraph-plugin/trunk/panel-plugin/os.c
___________________________________________________________________
Name: svn:eol-style
+ native
Added: xfce4-cpugraph-plugin/trunk/panel-plugin/os.h
===================================================================
--- xfce4-cpugraph-plugin/trunk/panel-plugin/os.h (rev 0)
+++ xfce4-cpugraph-plugin/trunk/panel-plugin/os.h 2007-12-07 08:55:00 UTC (rev 3675)
@@ -0,0 +1,54 @@
+#ifndef __OS_H__
+#define __OS_H__
+
+#include <stdio.h>
+
+#if defined (__FreeBSD__)
+#include <osreldate.h>
+#include <sys/types.h>
+#if __FreeBSD_version < 500101
+#include <sys/dkstat.h>
+#else
+#include <sys/resource.h>
+#endif
+#include <sys/sysctl.h>
+#include <devstat.h>
+#include <fcntl.h>
+#include <nlist.h>
+#endif
+
+#if defined (__NetBSD__)
+#include <sys/param.h>
+#include <sys/sched.h>
+#include <sys/sysctl.h>
+#include <fcntl.h>
+#include <nlist.h>
+#endif
+
+#if defined (__OpenBSD__)
+#include <sys/param.h>
+#include <sys/sched.h>
+#include <sys/sysctl.h>
+#include <sys/dkstat.h>
+#include <fcntl.h>
+#include <nlist.h>
+#endif
+
+#define CPU_SCALE 100000
+
+typedef struct s_cpuData{
+ float load; /* cpu utilization */
+ unsigned long pUsed; /* Previous value of used cpu time */
+ unsigned long pTotal; /* Previous value of total cpu time */
+ long scalCurFreq;
+ long scalMinFreq;
+ long scalMaxFreq;
+} CpuData;
+
+
+int cpuData_init();
+void cpuData_free();
+CpuData *cpuData_read();
+void setFrequencyScaling(int cpuId);
+
+#endif
Property changes on: xfce4-cpugraph-plugin/trunk/panel-plugin/os.h
___________________________________________________________________
Name: svn:eol-style
+ native
More information about the Goodies-commits
mailing list