summaryrefslogtreecommitdiff
path: root/sensors-applet/sensor-config-dialog.c
diff options
context:
space:
mode:
Diffstat (limited to 'sensors-applet/sensor-config-dialog.c')
-rw-r--r--sensors-applet/sensor-config-dialog.c918
1 files changed, 918 insertions, 0 deletions
diff --git a/sensors-applet/sensor-config-dialog.c b/sensors-applet/sensor-config-dialog.c
new file mode 100644
index 0000000..bd55836
--- /dev/null
+++ b/sensors-applet/sensor-config-dialog.c
@@ -0,0 +1,918 @@
+/*
+ * Copyright (C) 2005-2009 Alex Murray <[email protected]>
+ *
+ * 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 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 /* HAVE_CONFIG_H */
+
+#include <gnome.h>
+#include "sensor-config-dialog.h"
+#include "sensors-applet.h"
+
+#define SPINBUTTON_WIDTH_CHARS 8
+#define VALUE_DECIMAL_PLACES 3
+
+typedef struct {
+ SensorsApplet *sensors_applet;
+
+ GtkWidget *dialog;
+ /* icon widgets */
+ GtkLabel *icon_header, *icon_type_label;
+ GtkComboBox *icon_type_combo_box;
+ GtkAlignment *icon_type_combo_box_aligner;
+ GtkCellRenderer *icon_renderer;
+
+ /* Graph Color chooser */
+ GtkColorButton *graph_color_button;
+ GtkAlignment *graph_color_button_aligner;
+ GtkLabel *graph_color_label, *graph_header;
+
+ /* multiplier and offset widgets */
+ GtkLabel *scale_header, *multiplier_label, *offset_label;
+ GtkAlignment *multiplier_spinbutton_aligner, *offset_spinbutton_aligner;
+ GtkAdjustment *multiplier_adjust, *offset_adjust;
+ GtkSpinButton *multiplier_spinbutton, *offset_spinbutton;
+
+ GtkLabel *limits_header;
+ GtkLabel *low_value_label, *high_value_label;
+ GtkAlignment *low_value_spinbutton_aligner, *high_value_spinbutton_aligner;
+ GtkAdjustment *low_value_adjust, *high_value_adjust;
+ GtkSpinButton *low_value_spinbutton, *high_value_spinbutton;
+
+ /* alarm widgets */
+ GtkLabel *alarm_header;
+ GtkLabel *low_alarm_command_label, *high_alarm_command_label, *alarm_timeout_label;
+ GtkAlignment *alarm_timeout_spinbutton_aligner;
+ GtkAdjustment *alarm_timeout_adjust;
+ GtkSpinButton *alarm_timeout_spinbutton;
+ GtkTable *table;
+ GtkAlignment *alarm_enable_aligner;
+ GtkCheckButton *alarm_enable_checkbutton;
+ GtkEntry *low_alarm_command_entry, *high_alarm_command_entry;
+
+ GtkSizeGroup *size_group;
+} SensorConfigDialog;
+
+static void sensor_config_dialog_response(GtkDialog *dialog,
+ gint response,
+ gpointer data) {
+ SensorConfigDialog *config_dialog;
+ GError *error = NULL;
+
+ config_dialog = (SensorConfigDialog *)data;
+
+ switch (response) {
+ case GTK_RESPONSE_HELP:
+ g_debug("loading help in config dialog");
+ gtk_show_uri(NULL,
+ "ghelp:sensors-applet?sensors-applet-sensors",
+ gtk_get_current_event_time(),
+ &error);
+
+ if (error) {
+ g_debug("Could not open help document: %s ",error->message);
+ g_error_free (error);
+ }
+ break;
+ default:
+ g_debug("destroying config dialog");
+ gtk_widget_destroy(GTK_WIDGET(dialog));
+ }
+}
+
+static void sensor_config_dialog_multiplier_changed(GtkSpinButton *spinbutton, SensorConfigDialog *config_dialog) {
+ GtkTreeModel *model;
+ GtkTreePath *path;
+ GtkTreeIter iter;
+ gdouble value;
+
+ value = gtk_spin_button_get_value(spinbutton);
+
+ gtk_tree_selection_get_selected(config_dialog->sensors_applet->selection,
+ &model,
+ &iter);
+
+ path = gtk_tree_model_get_path(GTK_TREE_MODEL(config_dialog->sensors_applet->sensors),
+ &iter);
+ gtk_tree_store_set(config_dialog->sensors_applet->sensors,
+ &iter,
+ MULTIPLIER_COLUMN, value,
+ -1);
+
+ sensors_applet_update_sensor(config_dialog->sensors_applet, path);
+ gtk_tree_path_free(path);
+}
+
+static void sensor_config_dialog_offset_changed(GtkSpinButton *spinbutton, SensorConfigDialog *config_dialog) {
+ GtkTreeModel *model;
+ GtkTreePath *path;
+ GtkTreeIter iter;
+ gdouble value;
+
+ value = gtk_spin_button_get_value(spinbutton);
+
+ gtk_tree_selection_get_selected(config_dialog->sensors_applet->selection,
+ &model,
+ &iter);
+ path = gtk_tree_model_get_path(GTK_TREE_MODEL(config_dialog->sensors_applet->sensors),
+ &iter);
+ gtk_tree_store_set(config_dialog->sensors_applet->sensors,
+ &iter,
+ OFFSET_COLUMN, value,
+ -1);
+
+ sensors_applet_update_sensor(config_dialog->sensors_applet, path);
+ gtk_tree_path_free(path);
+}
+
+static void sensor_config_dialog_low_value_changed(GtkSpinButton *spinbutton, SensorConfigDialog *config_dialog) {
+ GtkTreeModel *model;
+ GtkTreePath *path;
+ GtkTreeIter iter;
+ gdouble value;
+
+ value = gtk_spin_button_get_value(spinbutton);
+
+ gtk_tree_selection_get_selected(config_dialog->sensors_applet->selection,
+ &model,
+ &iter);
+ path = gtk_tree_model_get_path(GTK_TREE_MODEL(config_dialog->sensors_applet->sensors),
+ &iter);
+
+ gtk_tree_store_set(config_dialog->sensors_applet->sensors,
+ &iter,
+ LOW_VALUE_COLUMN, value,
+ -1);
+
+ sensors_applet_update_sensor(config_dialog->sensors_applet, path);
+ gtk_tree_path_free(path);
+}
+
+static void sensor_config_dialog_high_value_changed(GtkSpinButton *spinbutton, SensorConfigDialog *config_dialog) {
+ GtkTreeModel *model;
+ GtkTreePath *path;
+ GtkTreeIter iter;
+ gdouble value;
+
+ value = gtk_spin_button_get_value(spinbutton);
+
+ gtk_tree_selection_get_selected(config_dialog->sensors_applet->selection,
+ &model,
+ &iter);
+ path = gtk_tree_model_get_path(GTK_TREE_MODEL(config_dialog->sensors_applet->sensors),
+ &iter);
+
+ gtk_tree_store_set(config_dialog->sensors_applet->sensors,
+ &iter,
+ HIGH_VALUE_COLUMN, value,
+ -1);
+
+ sensors_applet_update_sensor(config_dialog->sensors_applet, path);
+ gtk_tree_path_free(path);
+}
+
+static void sensor_config_dialog_alarm_toggled(GtkToggleButton *button, SensorConfigDialog *config_dialog) {
+ GtkTreeModel *model;
+ GtkTreePath *path;
+ GtkTreeIter iter;
+
+ gboolean value;
+ value = gtk_toggle_button_get_active(button);
+
+ /* update state of alarm widgets */
+ gtk_widget_set_sensitive(GTK_WIDGET(config_dialog->alarm_timeout_label), value);
+ gtk_widget_set_sensitive(GTK_WIDGET(config_dialog->alarm_timeout_spinbutton), value);
+ gtk_widget_set_sensitive(GTK_WIDGET(config_dialog->low_alarm_command_label), value);
+ gtk_widget_set_sensitive(GTK_WIDGET(config_dialog->low_alarm_command_entry), value);
+ gtk_widget_set_sensitive(GTK_WIDGET(config_dialog->high_alarm_command_label), value);
+ gtk_widget_set_sensitive(GTK_WIDGET(config_dialog->high_alarm_command_entry), value);
+
+ gtk_tree_selection_get_selected(config_dialog->sensors_applet->selection,
+ &model,
+ &iter);
+
+ path = gtk_tree_model_get_path(GTK_TREE_MODEL(config_dialog->sensors_applet->sensors),
+ &iter);
+
+ gtk_tree_store_set(config_dialog->sensors_applet->sensors,
+ &iter,
+ ALARM_ENABLE_COLUMN, value,
+ -1);
+
+ sensors_applet_update_sensor(config_dialog->sensors_applet, path);
+ gtk_tree_path_free(path);
+}
+
+static void sensor_config_dialog_alarm_timeout_changed(GtkSpinButton *spinbutton, SensorConfigDialog *config_dialog) {
+ GtkTreeModel *model;
+ GtkTreePath *path;
+ GtkTreeIter iter;
+ gint value;
+
+ value = gtk_spin_button_get_value_as_int(spinbutton);
+
+ gtk_tree_selection_get_selected(config_dialog->sensors_applet->selection,
+ &model,
+ &iter);
+ path = gtk_tree_model_get_path(GTK_TREE_MODEL(config_dialog->sensors_applet->sensors),
+ &iter);
+
+ sensors_applet_all_alarms_off(config_dialog->sensors_applet, path);
+ gtk_tree_store_set(config_dialog->sensors_applet->sensors,
+ &iter,
+ ALARM_TIMEOUT_COLUMN, value,
+ -1);
+
+ sensors_applet_update_sensor(config_dialog->sensors_applet, path);
+ gtk_tree_path_free(path);
+}
+
+static void sensor_config_dialog_alarm_command_edited(GtkEntry *command_entry, SensorConfigDialog *config_dialog, NotifType notif_type) {
+ GtkTreeModel *model;
+ GtkTreePath *path;
+ GtkTreeIter iter;
+
+ gchar *value;
+ g_object_get(command_entry, "text", &value, NULL);
+
+ gtk_tree_selection_get_selected(config_dialog->sensors_applet->selection,
+ &model,
+ &iter);
+ path = gtk_tree_model_get_path(GTK_TREE_MODEL(config_dialog->sensors_applet->sensors),
+ &iter);
+
+ sensors_applet_alarm_off(config_dialog->sensors_applet, path, notif_type);
+
+ gtk_tree_store_set(config_dialog->sensors_applet->sensors,
+ &iter,
+ (notif_type == LOW_ALARM ?
+ LOW_ALARM_COMMAND_COLUMN : HIGH_ALARM_COMMAND_COLUMN),
+ value,
+ -1);
+ g_free(value);
+ sensors_applet_update_sensor(config_dialog->sensors_applet, path);
+ gtk_tree_path_free(path);
+}
+
+static void sensor_config_dialog_low_alarm_command_edited(GtkEntry *command_entry, SensorConfigDialog *config_dialog) {
+ sensor_config_dialog_alarm_command_edited(command_entry,
+ config_dialog,
+ LOW_ALARM);
+}
+
+static void sensor_config_dialog_high_alarm_command_edited(GtkEntry *command_entry, SensorConfigDialog *config_dialog) {
+ sensor_config_dialog_alarm_command_edited(command_entry,
+ config_dialog,
+ HIGH_ALARM);
+}
+
+static void sensor_config_dialog_icon_type_changed(GtkComboBox *icon_type_combo_box,
+ SensorConfigDialog *config_dialog) {
+ GtkTreeModel *icons_model;
+ GtkTreeIter icons_iter;
+
+ GtkTreeModel *model;
+ GtkTreeIter iter;
+ GtkTreePath *path;
+
+ GdkPixbuf *new_icon;
+ IconType icon_type;
+
+ icons_model = gtk_combo_box_get_model(icon_type_combo_box);
+ if (gtk_combo_box_get_active_iter(icon_type_combo_box,
+ &icons_iter)) {
+
+ gtk_tree_model_get(icons_model, &icons_iter,
+ 0, &new_icon,
+ -1);
+
+ icon_type = gtk_combo_box_get_active(icon_type_combo_box);
+ gtk_tree_selection_get_selected(config_dialog->sensors_applet->selection,
+ &model,
+ &iter);
+
+ path = gtk_tree_model_get_path(model, &iter);
+ gtk_tree_store_set(config_dialog->sensors_applet->sensors,
+ &iter,
+ ICON_TYPE_COLUMN, icon_type,
+ ICON_PIXBUF_COLUMN, new_icon,
+ -1);
+ g_object_unref(new_icon);
+ sensors_applet_icon_changed(config_dialog->sensors_applet, path);
+ gtk_tree_path_free(path);
+ }
+}
+
+static void sensor_config_dialog_graph_color_set(GtkColorButton *color_button,
+ SensorConfigDialog *config_dialog) {
+ GtkTreeModel *model;
+ GtkTreePath *path;
+ GtkTreeIter iter;
+ GdkColor color;
+ gchar *color_string;
+
+ gtk_color_button_get_color(color_button,
+ &color);
+
+ color_string = g_strdup_printf("#%02X%02X%02X", color.red / 256,
+ color.green / 256, color.blue / 256);
+
+ gtk_tree_selection_get_selected(config_dialog->sensors_applet->selection,
+ &model,
+ &iter);
+
+ gtk_tree_store_set(config_dialog->sensors_applet->sensors,
+ &iter,
+ GRAPH_COLOR_COLUMN, color_string,
+ -1);
+
+ g_free(color_string);
+
+ path = gtk_tree_model_get_path(GTK_TREE_MODEL(config_dialog->sensors_applet->sensors),
+ &iter);
+ sensors_applet_update_sensor(config_dialog->sensors_applet, path);
+ gtk_tree_path_free(path);
+}
+
+void sensor_config_dialog_create(SensorsApplet *sensors_applet) {
+ GtkTreeModel *model;
+ GtkTreeIter iter;
+
+ SensorConfigDialog *config_dialog;
+
+ GtkListStore *icon_store;
+ IconType count;
+ GdkPixbuf *pixbuf;
+
+ GdkColor graph_color;
+ gchar *sensor_label;
+ gchar *header_text;
+
+ /* instance variables for data */
+ gdouble low_value, high_value, multiplier, offset;
+ gboolean alarm_enable;
+ gchar *low_alarm_command, *high_alarm_command;
+ gint alarm_timeout;
+ IconType icon_type;
+ gchar *graph_color_string;
+
+ config_dialog = g_new0(SensorConfigDialog, 1);
+ config_dialog->sensors_applet = sensors_applet;
+
+ gtk_tree_selection_get_selected(sensors_applet->selection,
+ &model,
+ &iter);
+ /* get current values of alarm and its enable */
+ gtk_tree_model_get(model, &iter,
+ LOW_VALUE_COLUMN, &low_value,
+ HIGH_VALUE_COLUMN, &high_value,
+ ALARM_ENABLE_COLUMN, &alarm_enable,
+ LOW_ALARM_COMMAND_COLUMN, &low_alarm_command,
+ HIGH_ALARM_COMMAND_COLUMN, &high_alarm_command,
+ ALARM_TIMEOUT_COLUMN, &alarm_timeout,
+ MULTIPLIER_COLUMN, &multiplier,
+ OFFSET_COLUMN, &offset,
+ ICON_TYPE_COLUMN, &icon_type,
+ GRAPH_COLOR_COLUMN, &graph_color_string,
+ LABEL_COLUMN, &sensor_label,
+ -1);
+ header_text = g_strdup_printf("%s - %s", _("Sensor Properties"), sensor_label);
+
+ config_dialog->dialog = gtk_dialog_new_with_buttons(header_text,
+ GTK_WINDOW(sensors_applet->prefs_dialog->dialog),
+ GTK_DIALOG_DESTROY_WITH_PARENT | GTK_DIALOG_NO_SEPARATOR,
+ GTK_STOCK_HELP,
+ GTK_RESPONSE_HELP,
+ GTK_STOCK_CLOSE,
+ GTK_RESPONSE_CLOSE,
+ NULL);
+
+ g_free(header_text);
+ g_free(sensor_label);
+
+ g_object_set(config_dialog->dialog,
+ "border-width", 12,
+ NULL);
+
+ g_signal_connect(config_dialog->dialog,
+ "response",
+ G_CALLBACK(sensor_config_dialog_response),
+ config_dialog);
+
+
+ /* graph stuff */
+ header_text = g_markup_printf_escaped("<b>%s</b>", _("Graph"));
+ config_dialog->graph_header = g_object_new(GTK_TYPE_LABEL,
+ "use-markup", TRUE,
+ "label", header_text,
+ "xalign", 0.0,
+ NULL);
+ g_free(header_text);
+
+
+ gdk_color_parse(graph_color_string,
+ &graph_color);
+
+ config_dialog->graph_color_button = GTK_COLOR_BUTTON(gtk_color_button_new_with_color(&graph_color));
+ config_dialog->graph_color_button_aligner = g_object_new(GTK_TYPE_ALIGNMENT,
+ "child", config_dialog->graph_color_button,
+ "xalign", 0.0,
+ "xscale", 0.0,
+ NULL);
+
+ gtk_color_button_set_title(config_dialog->graph_color_button, _("Graph Color"));
+
+ config_dialog->graph_color_label = g_object_new(GTK_TYPE_LABEL,
+ "label", _("Graph _color"),
+ "mnemonic-widget", config_dialog->graph_color_button,
+ "use-underline", TRUE,
+ "xalign", 0.0,
+ NULL);
+
+ g_signal_connect(config_dialog->graph_color_button, "color-set",
+ G_CALLBACK(sensor_config_dialog_graph_color_set),
+ config_dialog);
+
+ /* icon stuff */
+ header_text = g_markup_printf_escaped("<b>%s</b>", _("Icon"));
+ config_dialog->icon_header = g_object_new(GTK_TYPE_LABEL,
+ "use-markup", TRUE,
+ "label", header_text,
+ "xalign", 0.0,
+ NULL);
+ g_free(header_text);
+
+ /* icon type */
+ icon_store = gtk_list_store_new(1, GDK_TYPE_PIXBUF);
+
+ /* populate list with icons */
+ for (count = CPU_ICON; count < NUM_ICONS; count++) {
+ pixbuf = sensors_applet_load_icon(count);
+ if (pixbuf) {
+ gtk_list_store_insert(icon_store, &iter, count);
+ gtk_list_store_set(icon_store, &iter,
+ 0, pixbuf,
+ -1);
+ /* let list hold icons */
+ g_object_unref(pixbuf);
+ }
+ }
+
+ config_dialog->icon_type_combo_box = GTK_COMBO_BOX(gtk_combo_box_new_with_model(GTK_TREE_MODEL(icon_store)));
+
+ config_dialog->icon_type_combo_box_aligner = g_object_new(GTK_TYPE_ALIGNMENT,
+ "child", config_dialog->icon_type_combo_box,
+ "xalign", 0.0,
+ "xscale", 0.0,
+ NULL);
+
+ config_dialog->icon_renderer = gtk_cell_renderer_pixbuf_new();
+ gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(config_dialog->icon_type_combo_box),
+ GTK_CELL_RENDERER(config_dialog->icon_renderer),
+ FALSE);
+
+ gtk_cell_layout_add_attribute(GTK_CELL_LAYOUT(config_dialog->icon_type_combo_box),
+ GTK_CELL_RENDERER(config_dialog->icon_renderer),
+ "pixbuf", 0);
+
+ gtk_combo_box_set_active(config_dialog->icon_type_combo_box,
+ icon_type);
+
+ g_signal_connect(config_dialog->icon_type_combo_box, "changed",
+ G_CALLBACK(sensor_config_dialog_icon_type_changed),
+ config_dialog);
+
+
+
+ config_dialog->icon_type_label = g_object_new(GTK_TYPE_LABEL,
+ "label", _("Sensor _icon"),
+ "mnemonic-widget", config_dialog->icon_type_combo_box,
+ "use-underline", TRUE,
+ "xalign", 0.0,
+ NULL);
+
+ header_text = g_markup_printf_escaped("<b>%s</b>", _("Scaling Parameters"));
+ config_dialog->scale_header = g_object_new(GTK_TYPE_LABEL,
+ "use-markup", TRUE,
+ "label", header_text,
+ "xalign", 0.0,
+ NULL);
+ g_free(header_text);
+
+ /* do multiplier and offset widgets */
+ config_dialog->multiplier_adjust = g_object_new(GTK_TYPE_ADJUSTMENT,
+ "value", 1.0,
+ "lower", 0.001,
+ "upper", 1000.0,
+ "step-increment", 0.1,
+ "page-increment", 1.0,
+ "page-size", 1.0,
+ NULL);
+
+
+ config_dialog->multiplier_spinbutton = g_object_new(GTK_TYPE_SPIN_BUTTON,
+ "adjustment", config_dialog->multiplier_adjust,
+ "digits", VALUE_DECIMAL_PLACES,
+ "value", multiplier,
+ "width-chars", SPINBUTTON_WIDTH_CHARS,
+ NULL);
+
+ config_dialog->multiplier_spinbutton_aligner = g_object_new(GTK_TYPE_ALIGNMENT,
+ "child", config_dialog->multiplier_spinbutton,
+ "xalign", 0.0,
+ "xscale", 0.0,
+ NULL);
+
+ config_dialog->multiplier_label = g_object_new(GTK_TYPE_LABEL,
+ "label", _("Sensor value _multiplier"),
+ "mnemonic-widget", config_dialog->multiplier_spinbutton,
+ "use-underline", TRUE,
+ "xalign", 0.0,
+ NULL);
+
+
+ g_signal_connect(config_dialog->multiplier_spinbutton, "value-changed", G_CALLBACK(sensor_config_dialog_multiplier_changed), config_dialog);
+
+
+ config_dialog->offset_adjust = g_object_new(GTK_TYPE_ADJUSTMENT,
+ "value", 0.0,
+ "lower", -1000.000,
+ "upper", 1000.000,
+ "step-increment", 0.01,
+ "page-increment", 1.0,
+ "page-size", 1.0,
+ NULL);
+
+ config_dialog->offset_spinbutton = g_object_new(GTK_TYPE_SPIN_BUTTON,
+ "adjustment", config_dialog->offset_adjust,
+ "digits", VALUE_DECIMAL_PLACES,
+ "value", (gdouble)offset,
+ "width-chars", SPINBUTTON_WIDTH_CHARS,
+ NULL);
+
+ config_dialog->offset_spinbutton_aligner = g_object_new(GTK_TYPE_ALIGNMENT,
+ "child", config_dialog->offset_spinbutton,
+ "xalign", 0.0,
+ "xscale", 0.0,
+ NULL);
+
+ config_dialog->offset_label = g_object_new(GTK_TYPE_LABEL,
+ "label", _("Sensor value _offset"),
+ "mnemonic-widget", config_dialog->offset_spinbutton,
+ "use-underline", TRUE,
+ "xalign", 0.0,
+ NULL);
+
+ g_signal_connect(config_dialog->offset_spinbutton, "value-changed", G_CALLBACK(sensor_config_dialog_offset_changed), config_dialog);
+
+
+ /* now do alarm widgets */
+ header_text = g_markup_printf_escaped("<b>%s</b>", _("Sensor Limits"));
+ config_dialog->limits_header = g_object_new(GTK_TYPE_LABEL,
+ "use-markup", TRUE,
+ "label", header_text,
+ "xalign", 0.0,
+ NULL);
+ g_free(header_text);
+
+ config_dialog->low_value_adjust = g_object_new(GTK_TYPE_ADJUSTMENT,
+ "value", 0.0,
+ "lower", -100000.0,
+ "upper", 100000.0,
+ "step-increment", 1.0,
+ "page-increment", 10.0,
+ "page-size", 100.0,
+ NULL);
+
+
+ config_dialog->low_value_spinbutton = g_object_new(GTK_TYPE_SPIN_BUTTON,
+ "adjustment", config_dialog->low_value_adjust,
+ "digits", VALUE_DECIMAL_PLACES,
+ "value", low_value,
+ "width-chars", SPINBUTTON_WIDTH_CHARS,
+
+ NULL);
+
+ config_dialog->low_value_spinbutton_aligner = g_object_new(GTK_TYPE_ALIGNMENT,
+ "child", config_dialog->low_value_spinbutton,
+ "xalign", 0.0,
+ "xscale", 0.0,
+ NULL);
+
+ config_dialog->low_value_label = g_object_new(GTK_TYPE_LABEL,
+ "label", _("Sensor _low value"),
+ "mnemonic-widget", config_dialog->low_value_spinbutton,
+ "use-underline", TRUE,
+ "xalign", 0.0,
+
+ NULL);
+
+
+ g_signal_connect(config_dialog->low_value_spinbutton, "value-changed", G_CALLBACK(sensor_config_dialog_low_value_changed), config_dialog);
+
+ config_dialog->high_value_adjust = g_object_new(GTK_TYPE_ADJUSTMENT,
+ "value", 0.0,
+ "lower", -100000.0,
+ "upper", 100000.0,
+ "step-increment", 1.0,
+ "page-increment", 10.0,
+ "page-size", 100.0,
+ NULL);
+
+
+ config_dialog->high_value_spinbutton = g_object_new(GTK_TYPE_SPIN_BUTTON,
+ "adjustment", config_dialog->high_value_adjust,
+ "digits", VALUE_DECIMAL_PLACES,
+ "value", high_value,
+ "width-chars", SPINBUTTON_WIDTH_CHARS,
+
+ NULL);
+
+ config_dialog->high_value_spinbutton_aligner = g_object_new(GTK_TYPE_ALIGNMENT,
+ "child", config_dialog->high_value_spinbutton,
+ "xalign", 0.0,
+ "xscale", 0.0,
+ NULL);
+
+ config_dialog->high_value_label = g_object_new(GTK_TYPE_LABEL,
+ "label", _("Sensor _high value"),
+ "mnemonic-widget", config_dialog->high_value_spinbutton,
+ "use-underline", TRUE,
+ "xalign", 0.0,
+
+ NULL);
+
+
+ g_signal_connect(config_dialog->high_value_spinbutton, "value-changed", G_CALLBACK(sensor_config_dialog_high_value_changed), config_dialog);
+
+
+ header_text = g_markup_printf_escaped("<b>%s</b>", _("Alarm"));
+ config_dialog->alarm_header = g_object_new(GTK_TYPE_LABEL,
+ "use-markup", TRUE,
+ "label", header_text,
+ "xalign", 0.0,
+ NULL);
+ g_free(header_text);
+
+ config_dialog->alarm_timeout_adjust = g_object_new(GTK_TYPE_ADJUSTMENT,
+ "value", 0.0,
+ "lower", 0.0,
+ "upper", 10000.0,
+ "step-increment", 1.0,
+ "page-increment", 10.0,
+ "page-size", 100.0,
+ NULL);
+
+ config_dialog->alarm_timeout_spinbutton = g_object_new(GTK_TYPE_SPIN_BUTTON,
+ "adjustment", config_dialog->alarm_timeout_adjust,
+ "digits", 0,
+ "value", (gdouble)alarm_timeout,
+ "width-chars", SPINBUTTON_WIDTH_CHARS,
+ "sensitive", alarm_enable,
+
+ NULL);
+ config_dialog->alarm_timeout_spinbutton_aligner = g_object_new(GTK_TYPE_ALIGNMENT,
+ "child", config_dialog->alarm_timeout_spinbutton,
+ "xalign", 0.0,
+ "xscale", 0.0,
+ NULL);
+
+ config_dialog->alarm_timeout_label = g_object_new(GTK_TYPE_LABEL,
+ "label", _("Alarm _repeat interval (secs)"),
+ "mnemonic-widget", config_dialog->alarm_timeout_spinbutton,
+
+ "use-underline", TRUE,
+ "xalign", 0.0,
+ "sensitive", alarm_enable,
+ NULL);
+
+ g_signal_connect(config_dialog->alarm_timeout_spinbutton, "value-changed", G_CALLBACK(sensor_config_dialog_alarm_timeout_changed), config_dialog);
+
+ config_dialog->low_alarm_command_entry = g_object_new(GTK_TYPE_ENTRY,
+ "text", low_alarm_command,
+ "width-chars", 25,
+ "sensitive", alarm_enable,
+ NULL);
+
+ g_free(low_alarm_command);
+
+ config_dialog->low_alarm_command_label = g_object_new(GTK_TYPE_LABEL,
+ "use-underline", TRUE,
+ "label", _("Lo_w alarm command"),
+ "mnemonic-widget", config_dialog->low_alarm_command_entry,
+ "xalign", 0.0,
+ "sensitive", alarm_enable,
+
+ NULL);
+
+ g_signal_connect(config_dialog->low_alarm_command_entry,
+ "changed",
+ G_CALLBACK(sensor_config_dialog_low_alarm_command_edited),
+ config_dialog);
+
+ config_dialog->high_alarm_command_entry = g_object_new(GTK_TYPE_ENTRY,
+ "text", high_alarm_command,
+ "width-chars", 25,
+ "sensitive", alarm_enable,
+ NULL);
+
+ g_free(high_alarm_command);
+
+ config_dialog->high_alarm_command_label = g_object_new(GTK_TYPE_LABEL,
+ "use-underline", TRUE,
+ "label", _("Hi_gh alarm command"),
+ "mnemonic-widget", config_dialog->high_alarm_command_entry,
+ "xalign", 0.0,
+ "sensitive", alarm_enable,
+
+ NULL);
+
+ g_signal_connect(config_dialog->high_alarm_command_entry,
+ "changed",
+ G_CALLBACK(sensor_config_dialog_high_alarm_command_edited),
+ config_dialog);
+
+ config_dialog->alarm_enable_checkbutton = g_object_new(GTK_TYPE_CHECK_BUTTON,
+ "use-underline", TRUE,
+ "label", _("_Enable alarm"),
+ "active", alarm_enable,
+ "xalign", 0.0,
+ NULL);
+
+ config_dialog->alarm_enable_aligner = g_object_new(GTK_TYPE_ALIGNMENT,
+ "child", config_dialog->alarm_enable_checkbutton,
+ "xalign", 0.0,
+ "xscale", 0.0,
+ NULL);
+
+ g_signal_connect(config_dialog->alarm_enable_checkbutton, "toggled", G_CALLBACK(sensor_config_dialog_alarm_toggled), config_dialog);
+
+
+
+ config_dialog->size_group = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL);
+ gtk_size_group_add_widget(config_dialog->size_group,
+ GTK_WIDGET(config_dialog->multiplier_spinbutton));
+ gtk_size_group_add_widget(config_dialog->size_group,
+ GTK_WIDGET(config_dialog->offset_spinbutton));
+ gtk_size_group_add_widget(config_dialog->size_group,
+ GTK_WIDGET(config_dialog->low_value_spinbutton));
+ gtk_size_group_add_widget(config_dialog->size_group,
+ GTK_WIDGET(config_dialog->high_value_spinbutton));
+ gtk_size_group_add_widget(config_dialog->size_group,
+ GTK_WIDGET(config_dialog->alarm_timeout_spinbutton));
+ gtk_size_group_add_widget(config_dialog->size_group,
+ GTK_WIDGET(config_dialog->icon_type_combo_box));
+ gtk_size_group_add_widget(config_dialog->size_group,
+ GTK_WIDGET(config_dialog->graph_color_button));
+ g_object_unref(config_dialog->size_group);
+
+ config_dialog->table = g_object_new(GTK_TYPE_TABLE,
+ "column-spacing", 5,
+ "homogeneous", FALSE,
+ "n-columns", 3,
+ "n-rows", 15,
+ "row-spacing", 6,
+ "column-spacing", 12,
+ NULL);
+
+
+ gtk_table_attach_defaults(config_dialog->table,
+ GTK_WIDGET(config_dialog->scale_header),
+ 0, 2,
+ 0, 1);
+
+ gtk_table_attach_defaults(config_dialog->table,
+ GTK_WIDGET(config_dialog->multiplier_label),
+ 1, 2,
+ 1, 2);
+
+ gtk_table_attach_defaults(config_dialog->table,
+ GTK_WIDGET(config_dialog->multiplier_spinbutton_aligner),
+ 2, 3,
+ 1, 2);
+
+ gtk_table_attach_defaults(config_dialog->table,
+ GTK_WIDGET(config_dialog->offset_label),
+ 1, 2,
+ 2, 3);
+
+ gtk_table_attach_defaults(config_dialog->table,
+ GTK_WIDGET(config_dialog->offset_spinbutton_aligner),
+ 2, 3,
+ 2, 3);
+
+ gtk_table_attach_defaults(config_dialog->table,
+ GTK_WIDGET(config_dialog->limits_header),
+ 0, 2,
+ 3, 4);
+
+ /* now pack alarm widgets */
+ gtk_table_attach_defaults(config_dialog->table,
+ GTK_WIDGET(config_dialog->low_value_label),
+ 1, 2,
+ 4, 5);
+
+ gtk_table_attach_defaults(config_dialog->table,
+ GTK_WIDGET(config_dialog->low_value_spinbutton_aligner),
+ 2, 3,
+ 4, 5);
+
+ gtk_table_attach_defaults(config_dialog->table,
+ GTK_WIDGET(config_dialog->high_value_label),
+ 1, 2,
+ 5, 6);
+
+ gtk_table_attach_defaults(config_dialog->table,
+ GTK_WIDGET(config_dialog->high_value_spinbutton_aligner),
+ 2, 3,
+ 5, 6);
+
+ gtk_table_attach_defaults(config_dialog->table,
+ GTK_WIDGET(config_dialog->alarm_header),
+ 0, 2,
+ 6, 7);
+
+ gtk_table_attach_defaults(config_dialog->table,
+ GTK_WIDGET(config_dialog->alarm_enable_aligner),
+ 1, 2,
+ 7, 8);
+
+ gtk_table_attach_defaults(config_dialog->table,
+ GTK_WIDGET(config_dialog->alarm_timeout_label),
+ 1, 2,
+ 8, 9);
+
+ gtk_table_attach_defaults(config_dialog->table,
+ GTK_WIDGET(config_dialog->alarm_timeout_spinbutton_aligner),
+ 2, 3,
+ 8, 9);
+
+ gtk_table_attach_defaults(config_dialog->table,
+ GTK_WIDGET(config_dialog->low_alarm_command_label),
+ 1, 2,
+ 9, 10);
+
+ gtk_table_attach_defaults(config_dialog->table,
+ GTK_WIDGET(config_dialog->low_alarm_command_entry),
+ 2, 3,
+ 9, 10);
+
+ gtk_table_attach_defaults(config_dialog->table,
+ GTK_WIDGET(config_dialog->high_alarm_command_label),
+ 1, 2,
+ 10, 11);
+
+ gtk_table_attach_defaults(config_dialog->table,
+ GTK_WIDGET(config_dialog->high_alarm_command_entry),
+ 2, 3,
+ 10, 11);
+
+ gtk_table_attach_defaults(config_dialog->table,
+ GTK_WIDGET(config_dialog->icon_header),
+ 0, 2,
+ 11, 12);
+
+ gtk_table_attach_defaults(config_dialog->table,
+ GTK_WIDGET(config_dialog->icon_type_label),
+ 1, 2,
+ 12, 13);
+
+ gtk_table_attach_defaults(config_dialog->table,
+ GTK_WIDGET(config_dialog->icon_type_combo_box_aligner),
+ 2, 3,
+ 12, 13);
+
+ gtk_table_attach_defaults(config_dialog->table,
+ GTK_WIDGET(config_dialog->graph_header),
+ 0, 2,
+ 13, 14);
+
+ gtk_table_attach_defaults(config_dialog->table,
+ GTK_WIDGET(config_dialog->graph_color_label),
+ 1, 2,
+ 14, 15);
+
+ gtk_table_attach_defaults(config_dialog->table,
+ GTK_WIDGET(config_dialog->graph_color_button_aligner),
+ 2, 3,
+ 14, 15);
+
+ gtk_box_pack_start_defaults(GTK_BOX(GTK_DIALOG(config_dialog->dialog)->vbox), GTK_WIDGET(config_dialog->table));
+ gtk_widget_show_all(config_dialog->dialog);
+
+}