/* * File: applets/battery/properties.c * * This file contains the code which generates the * applet properties configuration window. * * Author: Nat Friedman */ #include #include #include "battery.h" #include "properties.h" static int prop_cancel (GtkWidget * w, gpointer data); static void prop_apply (GtkWidget *w, int page, gpointer data); /* Create the properties window */ void battery_properties_window(AppletWidget * applet, gpointer data) { static GnomeHelpMenuEntry help_entry = { NULL, "properties" }; BatteryData * bat = data; GtkWidget * t, * l, * r2; GtkWidget * height_spin, * width_spin, * graph_speed_spin; int r, g, b; help_entry.name = gnome_app_id; if (bat->prop_win) return; bat->prop_win = gnome_property_box_new (); gtk_window_set_title ( GTK_WINDOW(&GNOME_PROPERTY_BOX(bat->prop_win)->dialog.window), _("Battery Monitor Settings")); /* * * General Properties * */ t = gtk_table_new (0, 0, 0); gnome_property_box_append_page (GNOME_PROPERTY_BOX (bat->prop_win), t, gtk_label_new (_("General Properties"))); l = gtk_label_new(_("Applet Height")); bat->height_adj = gtk_adjustment_new ( bat->height, 0.5, 256, 1, 8, 8 ); height_spin = gtk_spin_button_new( GTK_ADJUSTMENT(bat->height_adj), 1, 0 ); gtk_table_attach_defaults ( GTK_TABLE(t), l, 0, 1, 0, 1 ); gtk_table_attach_defaults ( GTK_TABLE(t), height_spin, 1, 2, 0, 1 ); gtk_spin_button_set_update_policy( GTK_SPIN_BUTTON(height_spin), GTK_UPDATE_ALWAYS ); gtk_signal_connect(GTK_OBJECT(bat->height_adj), "value_changed", GTK_SIGNAL_FUNC(adj_value_changed_cb), bat); l = gtk_label_new(_("Applet Width")); bat->width_adj = gtk_adjustment_new ( bat->width, 0.5, 666, 1, 8, 8 ); width_spin = gtk_spin_button_new( GTK_ADJUSTMENT(bat->width_adj), 1, 0 ); gtk_table_attach_defaults( GTK_TABLE(t), l, 0, 1, 2, 3 ); gtk_table_attach_defaults( GTK_TABLE(t), width_spin, 1, 2, 2, 3 ); gtk_spin_button_set_update_policy( GTK_SPIN_BUTTON(width_spin), GTK_UPDATE_ALWAYS ); gtk_signal_connect(GTK_OBJECT(bat->width_adj), "value_changed", GTK_SIGNAL_FUNC(adj_value_changed_cb), bat); l = gtk_label_new(_("Applet Mode")); bat->mode_radio_graph = gtk_radio_button_new_with_label (NULL, _("Graph")); bat->mode_radio_readout = gtk_radio_button_new_with_label_from_widget (GTK_RADIO_BUTTON (bat->mode_radio_graph), _("Readout")); if (!strcmp(bat->mode_string, BATTERY_MODE_GRAPH)) gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (bat->mode_radio_graph), 1); else gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (bat->mode_radio_readout), 1); gtk_signal_connect (GTK_OBJECT (bat->mode_radio_graph), "toggled", GTK_SIGNAL_FUNC (toggle_value_changed_cb), bat); gtk_table_attach ( GTK_TABLE(t), l, 3, 4, 0, 1, GTK_FILL | GTK_EXPAND, GTK_EXPAND, 0, 0); gtk_table_attach ( GTK_TABLE(t), bat->mode_radio_readout, 3, 4, 1, 2, GTK_FILL | GTK_EXPAND, GTK_EXPAND, 0, 0); gtk_table_attach ( GTK_TABLE(t), bat->mode_radio_graph, 3, 4, 2, 3, GTK_FILL | GTK_EXPAND, GTK_EXPAND, 0, 0); /* * * Graph Properties * */ t = gtk_table_new (0, 0, 0); gnome_property_box_append_page (GNOME_PROPERTY_BOX (bat->prop_win), t, gtk_label_new ("Graph Properties")); bat->graph_ac_on_color_sel = GNOME_COLOR_PICKER(gnome_color_picker_new()); gtk_signal_connect(GTK_OBJECT(bat->graph_ac_on_color_sel), "color_set", GTK_SIGNAL_FUNC(col_value_changed_cb), bat ); bat->graph_ac_off_color_sel = GNOME_COLOR_PICKER(gnome_color_picker_new()); gtk_signal_connect(GTK_OBJECT(bat->graph_ac_off_color_sel), "color_set", GTK_SIGNAL_FUNC(col_value_changed_cb), bat ); /* Initialize the selector colors */ sscanf(bat->graph_color_ac_on_s, "#%02x%02x%02x", &r, &g, &b); gnome_color_picker_set_i8(bat->graph_ac_on_color_sel, r, g, b, 255); sscanf(bat->graph_color_ac_off_s, "#%02x%02x%02x", &r, &g, &b); gnome_color_picker_set_i8(bat->graph_ac_off_color_sel, r, g, b, 255); l = gtk_label_new (_("AC-On Battery Color:")); gtk_table_attach_defaults (GTK_TABLE (t), l, 0, 1, 0, 1); gtk_table_attach (GTK_TABLE(t), GTK_WIDGET(bat->graph_ac_on_color_sel), 1, 2, 0, 1, GTK_EXPAND, 0, 0, 0); l = gtk_label_new(_("AC-Off Battery Color:")); gtk_table_attach (GTK_TABLE(t), l, 0, 1, 1, 2, 0, 0, 0, 0); gtk_table_attach (GTK_TABLE (t), GTK_WIDGET(bat->graph_ac_off_color_sel), 1, 2, 1, 2, GTK_EXPAND, 0, 0, 0); l = gtk_label_new(_("Graph Interval:")); bat->graph_speed_adj = gtk_adjustment_new ( bat->graph_interval, 1, 666, 1, 8, 8 ); graph_speed_spin = gtk_spin_button_new( GTK_ADJUSTMENT(bat->graph_speed_adj), 1, 0 ); gtk_signal_connect(GTK_OBJECT(bat->graph_speed_adj), "value_changed", GTK_SIGNAL_FUNC(adj_value_changed_cb), bat); gtk_spin_button_set_update_policy( GTK_SPIN_BUTTON(graph_speed_spin), GTK_UPDATE_ALWAYS ); gtk_table_attach_defaults ( GTK_TABLE(t), l, 0, 1, 2, 3 ); gtk_table_attach_defaults ( GTK_TABLE(t), graph_speed_spin, 1, 2, 2, 3 ); l = gtk_label_new(_("Graph Direction:")); gtk_table_attach_defaults ( GTK_TABLE(t), l, 0, 1, 3, 4 ); bat->dir_radio = gtk_radio_button_new_with_label(NULL, _("Left to Right")); r2 = gtk_radio_button_new_with_label_from_widget (GTK_RADIO_BUTTON(bat->dir_radio), _("Right to Left")); gtk_signal_connect (GTK_OBJECT (bat->dir_radio), "toggled", GTK_SIGNAL_FUNC (toggle_value_changed_cb), bat); gtk_table_attach_defaults ( GTK_TABLE(t), bat->dir_radio, 1, 2, 3, 4); gtk_table_attach_defaults ( GTK_TABLE(t), r2, 2, 3, 3, 4); /* * * Readout Properties * */ t = gtk_table_new (0, 0, 0); gnome_property_box_append_page (GNOME_PROPERTY_BOX (bat->prop_win), t, gtk_label_new ("Readout Properties")); bat->readout_ac_on_color_sel = GNOME_COLOR_PICKER(gnome_color_picker_new()); gtk_signal_connect(GTK_OBJECT(bat->readout_ac_on_color_sel), "color_set", GTK_SIGNAL_FUNC(col_value_changed_cb), bat ); bat->readout_ac_off_color_sel = GNOME_COLOR_PICKER(gnome_color_picker_new()); gtk_signal_connect(GTK_OBJECT(bat->readout_ac_off_color_sel), "color_set", GTK_SIGNAL_FUNC(col_value_changed_cb), bat ); /* Initialize the selector colors */ sscanf(bat->readout_color_ac_on_s, "#%02x%02x%02x", &r, &g, &b); gnome_color_picker_set_i8( bat->readout_ac_on_color_sel, r, g, b, 255); sscanf(bat->readout_color_ac_off_s, "#%02x%02x%02x", &r, &g, &b); gnome_color_picker_set_i8( bat->readout_ac_off_color_sel, r, g, b, 255); l = gtk_label_new (_("AC-On Battery Color:")); gtk_table_attach_defaults (GTK_TABLE (t), l, 0, 1, 0, 1); gtk_table_attach (GTK_TABLE(t), GTK_WIDGET(bat->readout_ac_on_color_sel), 1, 2, 0, 1, GTK_EXPAND, 0, 0, 0); l = gtk_label_new(_("AC-Off Battery Color:")); gtk_table_attach (GTK_TABLE(t), l, 0, 1, 1, 2, 0, 0, 0, 0); gtk_table_attach (GTK_TABLE (t), GTK_WIDGET(bat->readout_ac_off_color_sel), 1, 2, 1, 2, GTK_EXPAND, 0, 0, 0); gtk_signal_connect (GTK_OBJECT (bat->prop_win), "destroy", GTK_SIGNAL_FUNC (prop_cancel), bat); gtk_signal_connect (GTK_OBJECT (bat->prop_win), "delete_event", GTK_SIGNAL_FUNC (prop_cancel), bat); gtk_signal_connect (GTK_OBJECT (bat->prop_win), "apply", GTK_SIGNAL_FUNC (prop_apply), bat); gtk_signal_connect (GTK_OBJECT (bat->prop_win), "help", GTK_SIGNAL_FUNC (gnome_help_pbox_display), &help_entry); gtk_widget_show_all (bat->prop_win); } /* battery_properties_window */ /* * * Properties window button callbacks (apply, cancel, etc) * */ static int prop_cancel (GtkWidget * w, gpointer data) { BatteryData * bat = data; bat->prop_win = 0; return FALSE; } /* prop_cancel */ static void prop_apply (GtkWidget *w, int page, gpointer data) { BatteryData * bat = data; int width, height, size_changed = 0; guint8 r, g, b; /* Update the running session from the properties. The session state will be saved when the applet exits and the panel tells it to save state. */ height = GTK_ADJUSTMENT(bat->height_adj)->value; width = GTK_ADJUSTMENT(bat->width_adj)->value; if (height != bat->height || width != bat->width) { size_changed = 1; bat->height = height; bat->width = width; } bat->graph_interval = GTK_ADJUSTMENT(bat->graph_speed_adj)->value; /* FIXME: set the direction! */ gnome_color_picker_get_i8 ( bat->graph_ac_on_color_sel, &r, &g, &b, NULL); snprintf(bat->graph_color_ac_on_s, sizeof(bat->graph_color_ac_on_s), "#%02x%02x%02x", r, g, b); gnome_color_picker_get_i8 ( bat->graph_ac_off_color_sel, &r, &g, &b, NULL); snprintf(bat->graph_color_ac_off_s, sizeof(bat->graph_color_ac_off_s), "#%02x%02x%02x", r, g, b); gnome_color_picker_get_i8 ( bat->readout_ac_off_color_sel, &r, &g, &b, NULL); snprintf(bat->readout_color_ac_off_s, sizeof(bat->readout_color_ac_off_s), "#%02x%02x%02x", r, g, b); gnome_color_picker_get_i8 ( bat->readout_ac_on_color_sel, &r, &g, &b, NULL); snprintf(bat->readout_color_ac_on_s, sizeof(bat->readout_color_ac_on_s), "#%02x%02x%02x", r, g, b); battery_setup_colors(bat); if (size_changed) battery_set_size(bat); bat->mode_string = GTK_TOGGLE_BUTTON(bat->mode_radio_graph)->active ? BATTERY_MODE_GRAPH : BATTERY_MODE_READOUT; battery_set_mode(bat); bat->force_update = TRUE; battery_update((gpointer) bat); /*make the panel save our config*/ applet_widget_sync_config(APPLET_WIDGET(bat->applet)); } /* prop_apply */ /* * * Property element callbacks (whenever a property is changed one of * these is called) * */ void adj_value_changed_cb( GtkAdjustment * ignored, gpointer data ) { BatteryData * bat = data; gnome_property_box_changed (GNOME_PROPERTY_BOX (bat->prop_win)); } /* value_changed_cb */ void toggle_value_changed_cb( GtkToggleButton * ignored, gpointer data ) { BatteryData * bat = data; gnome_property_box_changed (GNOME_PROPERTY_BOX (bat->prop_win)); } /* value_changed_cb */ void col_value_changed_cb( GtkObject * ignored, guint arg1, guint arg2, guint arg3, guint arg4, gpointer data ) { BatteryData * bat = data; gnome_property_box_changed (GNOME_PROPERTY_BOX (bat->prop_win)); } /* value_changed_cb */