/*
* Copyright (c) 2003 Riccardo Persichetti <riccardo.persichetti@tin.it>
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <gtk/gtk.h>
#include <libxfce4util/libxfce4util.h>
#include <libxfcegui4/libxfcegui4.h>
#include <libxfce4panel/xfce-panel-plugin.h>
#include "cpu.h"
#include "memswap.h"
#include "uptime.h"
/* for xml: */
static gchar *MONITOR_ROOT[] = { "SL_Cpu", "SL_Mem", "SL_Swap", "SL_Uptime" };
static GtkTooltips *tooltips = NULL;
static gchar *DEFAULT_TEXT[] = { "cpu", "mem", "swap" };
static gchar *DEFAULT_COLOR[] = { "#0000c0", "#00c000", "#f0f000" };
#define UPDATE_TIMEOUT 250
#define MAX_LENGTH 10
#define BORDER 8
enum { CPU_MONITOR, MEM_MONITOR, SWAP_MONITOR };
typedef struct
{
gboolean enabled;
gboolean use_label;
GdkColor color;
gchar *label_text;
} t_monitor_options;
typedef struct
{
GtkWidget *box;
GtkWidget *label;
GtkWidget *status;
GtkWidget *ebox;
gulong history[4];
gulong value_read;
t_monitor_options options;
/*options*/
GtkWidget *opt_enabled;
GtkBox *opt_vbox;
GtkWidget *opt_entry;
GtkBox *opt_hbox;
GtkWidget *opt_use_label;
GtkWidget *opt_button;
GtkWidget *opt_da;
} t_monitor;
typedef struct
{
GtkWidget *box;
GtkWidget *label_up;
GtkWidget *label_down;
GtkWidget *ebox;
gulong value_read;
gboolean enabled;
/*options*/
GtkWidget *opt_enabled;
} t_uptime_monitor;
typedef struct
{
XfcePanelPlugin *plugin;
GtkWidget *ebox;
GtkWidget *box;
guint timeout_id;
t_monitor *monitor[3];
t_uptime_monitor *uptime;
/* options dialog */
GtkWidget *opt_dialog;
} t_global_monitor;
static gint
update_monitors(t_global_monitor *global)
{
gchar caption[128];
gulong mem, swap, MTotal, MUsed, STotal, SUsed;
gint count, days, hours, mins;
global->monitor[0]->history[0] = read_cpuload();
read_memswap(&mem, &swap, &MTotal, &MUsed, &STotal, &SUsed);
global->monitor[1]->history[0] = mem;
global->monitor[2]->history[0] = swap;
global->uptime->value_read = read_uptime();
for(count = 0; count < 3; count++)
{
if (global->monitor[count]->options.enabled)
{
if (global->monitor[count]->history[0] > 100)
global->monitor[count]->history[0] = 100;
else if (global->monitor[count]->history[0] < 0)
global->monitor[count]->history[0] = 0;
global->monitor[count]->value_read =
(global->monitor[count]->history[0] +
global->monitor[count]->history[1] +
global->monitor[count]->history[2] +
global->monitor[count]->history[3]) / 4;
global->monitor[count]->history[3] =
global->monitor[count]->history[2];
global->monitor[count]->history[2] =
global->monitor[count]->history[1];
global->monitor[count]->history[1] =
global->monitor[count]->history[0];
gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(global->monitor[count]->status),
global->monitor[count]->value_read / 100.0);
}
}
if (global->monitor[0]->options.enabled)
{
g_snprintf(caption, sizeof(caption), _("System Load: %ld%%"),
global->monitor[0]->value_read);
gtk_tooltips_set_tip(tooltips, GTK_WIDGET(global->monitor[0]->ebox),
caption, NULL);
}
if (global->monitor[1]->options.enabled)
{
g_snprintf(caption, sizeof(caption), _("Memory: %ldMB of %ldMB used"),
MUsed >> 10 , MTotal >> 10);
gtk_tooltips_set_tip(tooltips, GTK_WIDGET(global->monitor[1]->ebox),
caption, NULL);
}
if (global->monitor[2]->options.enabled)
{
if (STotal)
g_snprintf(caption, sizeof(caption), _("Swap: %ldMB of %ldMB used"),
SUsed >> 10, STotal >> 10);
else
g_snprintf(caption, sizeof(caption), _("No swap"));
gtk_tooltips_set_tip(tooltips, GTK_WIDGET(global->monitor[2]->ebox),
caption, NULL);
}
if (global->uptime->enabled)
{
days = global->uptime->value_read / 86400;
hours = (global->uptime->value_read / 3600) % 24;
mins = (global->uptime->value_read / 60) % 60;
g_snprintf(caption, sizeof(caption), _("%d days"), days);
gtk_label_set_text(GTK_LABEL(global->uptime->label_up),
caption);
g_snprintf(caption, sizeof(caption), "%d:%02d", hours, mins);
gtk_label_set_text(GTK_LABEL(global->uptime->label_down),
caption);
g_snprintf(caption, sizeof(caption), _("Uptime:"));
gtk_tooltips_set_tip(tooltips, GTK_WIDGET(global->uptime->ebox),
caption, NULL);
}
return TRUE;
}
static void
monitor_set_orientation (XfcePanelPlugin *plugin, GtkOrientation orientation,
t_global_monitor *global)
{
GtkRcStyle *rc;
gint count;
gtk_widget_hide(GTK_WIDGET(global->ebox));
if (global->box)
gtk_container_remove(GTK_CONTAINER(global->ebox),
GTK_WIDGET(global->box));
if (orientation == GTK_ORIENTATION_HORIZONTAL)
{
global->box = gtk_hbox_new(FALSE, 0);
}
else
{
global->box = gtk_vbox_new(FALSE, 0);
}
gtk_widget_show(global->box);
for(count = 0; count < 3; count++)
{
global->monitor[count]->label =
gtk_label_new(global->monitor[count]->options.label_text);
gtk_widget_show(global->monitor[count]->label);
global->monitor[count]->status = GTK_WIDGET(gtk_progress_bar_new());
if (orientation == GTK_ORIENTATION_HORIZONTAL)
{
global->monitor[count]->box = GTK_WIDGET(gtk_hbox_new(FALSE, 0));
gtk_progress_bar_set_orientation(GTK_PROGRESS_BAR(global->monitor[count]->status), GTK_PROGRESS_BOTTOM_TO_TOP);
}
else
{
global->monitor[count]->box = GTK_WIDGET(gtk_vbox_new(FALSE, 0));
gtk_progress_bar_set_orientation(GTK_PROGRESS_BAR(global->monitor[count]->status), GTK_PROGRESS_LEFT_TO_RIGHT);
}
gtk_box_pack_start(GTK_BOX(global->monitor[count]->box),
GTK_WIDGET(global->monitor[count]->label),
FALSE, FALSE, 0);
gtk_container_set_border_width(GTK_CONTAINER(global->monitor[count]->box),
BORDER / 2);
gtk_widget_show(GTK_WIDGET(global->monitor[count]->box));
global->monitor[count]->ebox = gtk_event_box_new();
gtk_widget_show(global->monitor[count]->ebox);
gtk_container_add(GTK_CONTAINER(global->monitor[count]->ebox),
GTK_WIDGET(global->monitor[count]->box));
rc = gtk_widget_get_modifier_style(GTK_WIDGET(global->monitor[count]->status));
if (!rc) {
rc = gtk_rc_style_new();
}
if (rc) {
rc->color_flags[GTK_STATE_PRELIGHT] |= GTK_RC_BG;
rc->bg[GTK_STATE_PRELIGHT] =
global->monitor[count]->options.color;
}
gtk_widget_modify_style(GTK_WIDGET(global->monitor[count]->status), rc);
gtk_widget_show(GTK_WIDGET(global->monitor[count]->status));
gtk_box_pack_start(GTK_BOX(global->monitor[count]->box),
GTK_WIDGET(global->monitor[count]->status),
FALSE, FALSE, 0);
gtk_box_pack_start(GTK_BOX(global->box),
GTK_WIDGET(global->monitor[count]->ebox),
FALSE, FALSE, 0);
}
global->uptime->ebox = gtk_event_box_new();
gtk_widget_show(global->uptime->ebox);
global->uptime->box = GTK_WIDGET(gtk_vbox_new(FALSE, 0));
gtk_container_set_border_width(GTK_CONTAINER(global->uptime->box),
BORDER / 2);
gtk_widget_show(GTK_WIDGET(global->uptime->box));
gtk_container_add(GTK_CONTAINER(global->uptime->ebox),
GTK_WIDGET(global->uptime->box));
global->uptime->label_up = gtk_label_new("");
gtk_widget_show(global->uptime->label_up);
gtk_box_pack_start(GTK_BOX(global->uptime->box),
GTK_WIDGET(global->uptime->label_up),
FALSE, FALSE, 0);
global->uptime->label_down = gtk_label_new("");
gtk_widget_show(global->uptime->label_down);
gtk_box_pack_start(GTK_BOX(global->uptime->box),
GTK_WIDGET(global->uptime->label_down),
FALSE, FALSE, 0);
gtk_box_pack_start(GTK_BOX(global->box),
GTK_WIDGET(global->uptime->ebox),
FALSE, FALSE, 0);
gtk_container_add(GTK_CONTAINER(global->ebox), GTK_WIDGET(global->box));
gtk_widget_show(GTK_WIDGET(global->ebox));
update_monitors (global);
}
static t_global_monitor *
monitor_control_new(XfcePanelPlugin *plugin)
{
int count;
t_global_monitor *global;
tooltips = gtk_tooltips_new ();
g_object_ref (tooltips);
gtk_object_sink (GTK_OBJECT (tooltips));
global = g_new(t_global_monitor, 1);
global->plugin = plugin;
global->timeout_id = 0;
global->ebox = gtk_event_box_new();
gtk_widget_show(global->ebox);
global->box = NULL;
xfce_panel_plugin_add_action_widget (plugin, global->ebox);
for(count = 0; count < 3; count++)
{
global->monitor[count] = g_new(t_monitor, 1);
global->monitor[count]->options.label_text =
g_strdup(DEFAULT_TEXT[count]);
gdk_color_parse(DEFAULT_COLOR[count],
&global->monitor[count]->options.color);
global->monitor[count]->options.use_label = TRUE;
global->monitor[count]->options.enabled = TRUE;
global->monitor[count]->history[0] = 0;
global->monitor[count]->history[1] = 0;
global->monitor[count]->history[2] = 0;
global->monitor[count]->history[3] = 0;
}
global->uptime = g_new(t_uptime_monitor, 1);
global->uptime->enabled = TRUE;
return global;
}
static void
monitor_free(XfcePanelPlugin *plugin, t_global_monitor *global)
{
gint count;
if (global->timeout_id)
g_source_remove(global->timeout_id);
for(count = 0; count < 3; count++)
{
if (global->monitor[count]->options.label_text)
g_free(global->monitor[count]->options.label_text);
}
g_free(global);
}
void
setup_monitor(t_global_monitor *global)
{
GtkRcStyle *rc;
gint count;
gtk_widget_hide(GTK_WIDGET(global->uptime->ebox));
for(count = 0; count < 3; count++)
{
gtk_widget_hide(GTK_WIDGET(global->monitor[count]->ebox));
gtk_widget_hide(global->monitor[count]->label);
gtk_label_set_text(GTK_LABEL(global->monitor[count]->label),
global->monitor[count]->options.label_text);
gtk_widget_hide(GTK_WIDGET(global->monitor[count]->status));
rc = gtk_widget_get_modifier_style(GTK_WIDGET(global->monitor[count]->status));
if (!rc) {
rc = gtk_rc_style_new();
}
if (rc) {
rc->color_flags[GTK_STATE_PRELIGHT] |= GTK_RC_BG;
rc->bg[GTK_STATE_PRELIGHT] = global->monitor[count]->options.color;
}
gtk_widget_modify_style(GTK_WIDGET(global->monitor[count]->status), rc);
if(global->monitor[count]->options.enabled)
{
gtk_widget_show(GTK_WIDGET(global->monitor[count]->ebox));
if (global->monitor[count]->options.use_label)
gtk_widget_show(global->monitor[count]->label);
gtk_widget_show(GTK_WIDGET(global->monitor[count]->status));
}
}
if(global->uptime->enabled)
{
gtk_widget_show(GTK_WIDGET(global->uptime->ebox));
}
}
static void
monitor_read_config(XfcePanelPlugin *plugin, t_global_monitor *global)
{
gint count;
const char *value;
char *file;
XfceRc *rc;
if (!(file = xfce_panel_plugin_lookup_rc_file (plugin)))
return;
rc = xfce_rc_simple_open (file, TRUE);
g_free (file);
if (!rc)
return;
for(count = 0; count < 3; count++)
{
if (xfce_rc_has_group (rc, MONITOR_ROOT[count]))
{
xfce_rc_set_group (rc, MONITOR_ROOT[count]);
global->monitor[count]->options.enabled =
xfce_rc_read_bool_entry (rc, "Enabled", TRUE);
global->monitor[count]->options.use_label =
xfce_rc_read_bool_entry (rc, "Use_Label", TRUE);
if ((value = xfce_rc_read_entry (rc, "Color", NULL)))
{
gdk_color_parse(value,
&global->monitor[count]->options.color);
}
if ((value = xfce_rc_read_entry (rc, "Text", NULL)) && *value)
{
if (global->monitor[count]->options.label_text)
g_free(global->monitor[count]->options.label_text);
global->monitor[count]->options.label_text =
g_strdup(value);
}
}
if (xfce_rc_has_group (rc, MONITOR_ROOT[3]))
{
xfce_rc_set_group (rc, MONITOR_ROOT[3]);
global->uptime->enabled =
xfce_rc_read_bool_entry (rc, "Enabled", TRUE);
}
}
xfce_rc_close (rc);
}
static void
monitor_write_config(XfcePanelPlugin *plugin, t_global_monitor *global)
{
char value[10];
gint count;
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;
for(count = 0; count < 3; count++)
{
xfce_rc_set_group (rc, MONITOR_ROOT[count]);
xfce_rc_write_bool_entry (rc, "Enabled",
global->monitor[count]->options.enabled);
xfce_rc_write_bool_entry (rc, "Use_Label",
global->monitor[count]->options.use_label);
g_snprintf(value, 8, "#%02X%02X%02X",
(guint)global->monitor[count]->options.color.red >> 8,
(guint)global->monitor[count]->options.color.green >> 8,
(guint)global->monitor[count]->options.color.blue >> 8);
xfce_rc_write_entry (rc, "Color", value);
xfce_rc_write_entry (rc, "Text",
global->monitor[count]->options.label_text ?
global->monitor[count]->options.label_text : "");
}
xfce_rc_set_group (rc, MONITOR_ROOT[3]);
xfce_rc_write_bool_entry (rc, "Enabled",
global->uptime->enabled);
xfce_rc_close (rc);
}
static gboolean
monitor_set_size(XfcePanelPlugin *plugin, int size, t_global_monitor *global)
{
gint count;
for(count = 0; count < 3; count++)
{
if (xfce_panel_plugin_get_orientation (plugin) ==
GTK_ORIENTATION_HORIZONTAL)
{
gtk_widget_set_size_request(GTK_WIDGET(global->monitor[count]->status),
BORDER, size - BORDER);
}
else
{
gtk_widget_set_size_request(GTK_WIDGET(global->monitor[count]->status),
size - BORDER, BORDER);
}
}
setup_monitor(global);
return TRUE;
}
static void
monitor_apply_options(t_global_monitor *global)
{
gint count;
for(count = 0; count < 3; count++)
{
if (global->monitor[count]->options.label_text)
g_free(global->monitor[count]->options.label_text);
global->monitor[count]->options.label_text =
g_strdup(gtk_entry_get_text(GTK_ENTRY(global->monitor[count]->opt_entry)));
}
setup_monitor(global);
}
static void
label_changed(t_global_monitor *global, gint count)
{
if (global->monitor[count]->options.label_text)
g_free(global->monitor[count]->options.label_text);
global->monitor[count]->options.label_text =
g_strdup(gtk_entry_get_text(GTK_ENTRY(global->monitor[count]->opt_entry)));
setup_monitor(global);
}
static void
label_changed_cb0(GtkWidget *button, t_global_monitor *global)
{
label_changed(global, 0);
}
static void
label_changed_cb1(GtkWidget *button, t_global_monitor *global)
{
label_changed(global, 1);
}
static void
label_changed_cb2(GtkWidget *entry, t_global_monitor *global)
{
label_changed(global, 2);
}
static void
monitor_toggled(t_global_monitor *global, gint count)
{
global->monitor[count]->options.enabled =
!global->monitor[count]->options.enabled;
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(global->monitor[count]->opt_enabled),
global->monitor[count]->options.enabled);
gtk_widget_set_sensitive(GTK_WIDGET(global->monitor[count]->opt_vbox),
global->monitor[count]->options.enabled);
setup_monitor(global);
}
static void
monitor_toggled_cb0(GtkWidget *check_button, t_global_monitor *global)
{
monitor_toggled(global, 0);
}
static void
monitor_toggled_cb1(GtkWidget *check_button, t_global_monitor *global)
{
monitor_toggled(global, 1);
}
static void
monitor_toggled_cb2(GtkWidget *check_button, t_global_monitor *global)
{
monitor_toggled(global, 2);
}
static void
uptime_toggled_cb(GtkWidget *check_button, t_global_monitor *global)
{
global->uptime->enabled = !global->uptime->enabled;
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(global->uptime->opt_enabled),
global->uptime->enabled);
setup_monitor(global);
}
static void
label_toggled(t_global_monitor *global, gint count)
{
global->monitor[count]->options.use_label =
!global->monitor[count]->options.use_label;
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(global->monitor[count]->opt_use_label),
global->monitor[count]->options.use_label);
gtk_widget_set_sensitive(GTK_WIDGET(global->monitor[count]->opt_entry),
global->monitor[count]->options.use_label);
setup_monitor(global);
}
static void
label_toggled_cb0(GtkWidget *check_button, t_global_monitor *global)
{
label_toggled(global, 0);
}
static void
label_toggled_cb1(GtkWidget *check_button, t_global_monitor *global)
{
label_toggled(global, 1);
}
static void
label_toggled_cb2(GtkWidget *check_button, t_global_monitor *global)
{
label_toggled(global, 2);
}
static gboolean
expose_event_cb(GtkWidget *widget, GdkEventExpose *event)
{
if (widget->window)
{
GtkStyle *style;
style = gtk_widget_get_style(widget);
gdk_draw_rectangle(widget->window,
style->bg_gc[GTK_STATE_NORMAL],
TRUE,
event->area.x, event->area.y,
event->area.width, event->area.height);
}
return TRUE;
}
static void
change_color(t_global_monitor *global, gint count)
{
GtkWidget *dialog;
GtkColorSelection *colorsel;
gint response;
dialog = gtk_color_selection_dialog_new(_("Select color"));
gtk_window_set_transient_for(GTK_WINDOW(dialog),
GTK_WINDOW(global->opt_dialog));
colorsel =
GTK_COLOR_SELECTION(GTK_COLOR_SELECTION_DIALOG(dialog)->colorsel);
gtk_color_selection_set_previous_color(colorsel,
&global->monitor[count]->options.color);
gtk_color_selection_set_current_color(colorsel,
&global->monitor[count]->options.color);
gtk_color_selection_set_has_palette(colorsel, TRUE);
response = gtk_dialog_run(GTK_DIALOG(dialog));
if (response == GTK_RESPONSE_OK)
{
gtk_color_selection_get_current_color(colorsel,
&global->monitor[count]->options.color);
gtk_widget_modify_bg(global->monitor[count]->opt_da,
GTK_STATE_NORMAL,
&global->monitor[count]->options.color);
setup_monitor(global);
}
gtk_widget_destroy(dialog);
}
static void
change_color_cb0(GtkWidget *button, t_global_monitor *global)
{
change_color(global, 0);
}
static void
change_color_cb1(GtkWidget *button, t_global_monitor *global)
{
change_color(global, 1);
}
static void
change_color_cb2(GtkWidget *button, t_global_monitor *global)
{
change_color(global, 2);
}
static void
monitor_dialog_response (GtkWidget *dlg, int response,
t_global_monitor *global)
{
monitor_apply_options (global);
gtk_widget_destroy (dlg);
xfce_panel_plugin_unblock_menu (global->plugin);
monitor_write_config (global->plugin, global);
}
static void
monitor_create_options(XfcePanelPlugin *plugin, t_global_monitor *global)
{
GtkWidget *dlg, *notebook;
GtkWidget *vbox, *dialog_vbox;
GtkWidget *hbox;
GtkWidget *color_label;
GtkWidget *align, *label;
GtkSizeGroup *sg;
guint count;
static const gchar *FRAME_TEXT[] = {
N_ ("CPU monitor"),
N_ ("Memory monitor"),
N_ ("Swap monitor"),
N_ ("Uptime monitor")
};
xfce_panel_plugin_block_menu (plugin);
dlg = xfce_titled_dialog_new_with_buttons (_("System Load Monitor"), NULL,
GTK_DIALOG_DESTROY_WITH_PARENT |
GTK_DIALOG_NO_SEPARATOR,
GTK_STOCK_CLOSE, GTK_RESPONSE_OK,
NULL);
global->opt_dialog = dlg;
gtk_window_set_icon_name (GTK_WINDOW (dlg), "xfce4-settings");
g_signal_connect (G_OBJECT (dlg), "response",
G_CALLBACK (monitor_dialog_response), global);
gtk_container_set_border_width (GTK_CONTAINER (dlg), 2);
dialog_vbox = GTK_DIALOG (dlg)->vbox;
notebook = gtk_notebook_new ();
gtk_box_pack_start (GTK_BOX (dialog_vbox), notebook, FALSE, TRUE, 0);
gtk_container_set_border_width (GTK_CONTAINER (notebook), BORDER-3);
for(count = 0; count < 3; count++)
{
vbox = gtk_vbox_new(FALSE, BORDER);
gtk_container_add (GTK_CONTAINER (notebook), vbox);
gtk_container_set_border_width (GTK_CONTAINER (vbox), BORDER);
global->monitor[count]->opt_enabled =
gtk_check_button_new_with_mnemonic(_("Show monitor"));
gtk_box_pack_start(GTK_BOX(vbox),
GTK_WIDGET(global->monitor[count]->opt_enabled),
FALSE, FALSE, 0);
global->monitor[count]->opt_vbox = GTK_BOX(gtk_vbox_new(FALSE, 5));
global->monitor[count]->opt_hbox = GTK_BOX(gtk_hbox_new(FALSE, 5));
global->monitor[count]->opt_use_label =
gtk_check_button_new_with_mnemonic(_("Text to display:"));
gtk_box_pack_start(GTK_BOX(global->monitor[count]->opt_hbox),
GTK_WIDGET(global->monitor[count]->opt_use_label),
FALSE, FALSE, 0);
global->monitor[count]->opt_entry = gtk_entry_new();
gtk_entry_set_max_length(GTK_ENTRY(global->monitor[count]->opt_entry),
MAX_LENGTH);
gtk_entry_set_text(GTK_ENTRY(global->monitor[count]->opt_entry),
global->monitor[count]->options.label_text);
gtk_box_pack_start(GTK_BOX(global->monitor[count]->opt_hbox),
GTK_WIDGET(global->monitor[count]->opt_entry),
FALSE, FALSE, 0);
gtk_box_pack_start(GTK_BOX(global->monitor[count]->opt_vbox),
GTK_WIDGET(global->monitor[count]->opt_hbox),
FALSE, FALSE, 0);
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(global->monitor[count]->opt_enabled),
global->monitor[count]->options.enabled);
gtk_widget_set_sensitive(GTK_WIDGET(global->monitor[count]->opt_vbox),
global->monitor[count]->options.enabled);
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(global->monitor[count]->opt_use_label),
global->monitor[count]->options.use_label);
gtk_widget_set_sensitive(GTK_WIDGET(global->monitor[count]->opt_entry),
global->monitor[count]->options.use_label);
hbox = gtk_hbox_new(FALSE, BORDER);
gtk_box_pack_start(GTK_BOX(global->monitor[count]->opt_vbox),
hbox, FALSE, FALSE, 0);
color_label = gtk_label_new(_("Bar color:"));
gtk_misc_set_alignment(GTK_MISC(color_label), 0, 0.5);
gtk_box_pack_start(GTK_BOX(hbox), GTK_WIDGET(color_label),
FALSE, FALSE, 0);
global->monitor[count]->opt_button = gtk_button_new();
global->monitor[count]->opt_da = gtk_drawing_area_new();
gtk_widget_modify_bg(global->monitor[count]->opt_da, GTK_STATE_NORMAL,
&global->monitor[count]->options.color);
gtk_widget_set_size_request(global->monitor[count]->opt_da, 64, 12);
gtk_container_add(GTK_CONTAINER(global->monitor[count]->opt_button),
global->monitor[count]->opt_da);
gtk_box_pack_start(GTK_BOX(hbox),
GTK_WIDGET(global->monitor[count]->opt_button),
FALSE, FALSE, 0);
sg = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL);
gtk_size_group_add_widget(sg, global->monitor[count]->opt_enabled);
gtk_size_group_add_widget(sg, global->monitor[count]->opt_use_label);
gtk_size_group_add_widget(sg, color_label);
gtk_box_pack_start(GTK_BOX(vbox),
GTK_WIDGET(global->monitor[count]->opt_vbox),
FALSE, FALSE, 0);
align = gtk_alignment_new(0, 0, 0, 0);
gtk_widget_set_size_request(align, BORDER, BORDER);
gtk_box_pack_start(GTK_BOX(vbox), GTK_WIDGET(align), FALSE, FALSE, 0);
label = gtk_label_new (_(FRAME_TEXT[count]));
gtk_notebook_set_tab_label (GTK_NOTEBOOK (notebook), gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook), count), label);
}
/*uptime monitor options - start*/
vbox = gtk_vbox_new(FALSE, BORDER);
gtk_container_add (GTK_CONTAINER (notebook), vbox);
gtk_container_set_border_width (GTK_CONTAINER (vbox), BORDER);
global->uptime->opt_enabled =
gtk_check_button_new_with_mnemonic(_("Show monitor"));
gtk_widget_show(global->uptime->opt_enabled);
gtk_box_pack_start(GTK_BOX(vbox),
GTK_WIDGET(global->uptime->opt_enabled),
FALSE, FALSE, 0);
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(global->uptime->opt_enabled),
global->uptime->enabled);
label = gtk_label_new (_(FRAME_TEXT[3]));
gtk_notebook_set_tab_label (GTK_NOTEBOOK (notebook), gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook), 3), label);
g_signal_connect(GTK_WIDGET(global->uptime->opt_enabled), "toggled",
G_CALLBACK(uptime_toggled_cb), global);
/*uptime monitor options - end*/
g_signal_connect(GTK_WIDGET(global->monitor[0]->opt_da), "expose_event",
G_CALLBACK(expose_event_cb), NULL);
g_signal_connect(GTK_WIDGET(global->monitor[0]->opt_button), "clicked",
G_CALLBACK(change_color_cb0), global);
g_signal_connect(GTK_WIDGET(global->monitor[0]->opt_use_label), "toggled",
G_CALLBACK(label_toggled_cb0), global);
g_signal_connect(GTK_WIDGET(global->monitor[0]->opt_entry), "activate",
G_CALLBACK(label_changed_cb0), global);
g_signal_connect(GTK_WIDGET(global->monitor[0]->opt_enabled), "toggled",
G_CALLBACK(monitor_toggled_cb0), global);
g_signal_connect(GTK_WIDGET(global->monitor[1]->opt_da), "expose_event",
G_CALLBACK(expose_event_cb), NULL);
g_signal_connect(GTK_WIDGET(global->monitor[1]->opt_button), "clicked",
G_CALLBACK(change_color_cb1), global);
g_signal_connect(GTK_WIDGET(global->monitor[1]->opt_use_label), "toggled",
G_CALLBACK(label_toggled_cb1), global);
g_signal_connect(GTK_WIDGET(global->monitor[1]->opt_entry), "activate",
G_CALLBACK(label_changed_cb1), global);
g_signal_connect(GTK_WIDGET(global->monitor[1]->opt_enabled), "toggled",
G_CALLBACK(monitor_toggled_cb1), global);
g_signal_connect(GTK_WIDGET(global->monitor[2]->opt_da), "expose_event",
G_CALLBACK(expose_event_cb), NULL);
g_signal_connect(GTK_WIDGET(global->monitor[2]->opt_button), "clicked",
G_CALLBACK(change_color_cb2), global);
g_signal_connect(GTK_WIDGET(global->monitor[2]->opt_use_label), "toggled",
G_CALLBACK(label_toggled_cb2), global);
g_signal_connect(GTK_WIDGET(global->monitor[2]->opt_entry), "activate",
G_CALLBACK(label_changed_cb2), global);
g_signal_connect(GTK_WIDGET(global->monitor[2]->opt_enabled), "toggled",
G_CALLBACK(monitor_toggled_cb2), global);
gtk_widget_show_all (dlg);
}
static void
systemload_construct (XfcePanelPlugin *plugin)
{
t_global_monitor *global;
xfce_textdomain(GETTEXT_PACKAGE, PACKAGE_LOCALE_DIR, "UTF-8");
global = monitor_control_new (plugin);
monitor_read_config (plugin, global);
monitor_set_orientation (plugin,
xfce_panel_plugin_get_orientation (plugin),
global);
setup_monitor (global);
gtk_container_add (GTK_CONTAINER (plugin), global->ebox);
update_monitors (global);
global->timeout_id =
g_timeout_add(UPDATE_TIMEOUT, (GSourceFunc)update_monitors, global);
g_signal_connect (plugin, "free-data", G_CALLBACK (monitor_free), global);
g_signal_connect (plugin, "save", G_CALLBACK (monitor_write_config),
global);
g_signal_connect (plugin, "size-changed", G_CALLBACK (monitor_set_size),
global);
g_signal_connect (plugin, "orientation-changed",
G_CALLBACK (monitor_set_orientation), global);
xfce_panel_plugin_menu_show_configure (plugin);
g_signal_connect (plugin, "configure-plugin",
G_CALLBACK (monitor_create_options), global);
}
XFCE_PANEL_PLUGIN_REGISTER_EXTERNAL (systemload_construct);
syntax highlighted by Code2HTML, v. 0.9.1