code refactoring and cleanup
[psensor.git] / src / ui_sensorpref.c
1 /*
2     Copyright (C) 2010-2011 jeanfi@gmail.com
3
4     This program is free software; you can redistribute it and/or modify
5     it under the terms of the GNU General Public License as published by
6     the Free Software Foundation; either version 2 of the License, or
7     (at your option) any later version.
8
9     This program is distributed in the hope that it will be useful,
10     but WITHOUT ANY WARRANTY; without even the implied warranty of
11     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12     GNU General Public License for more details.
13
14     You should have received a copy of the GNU General Public License
15     along with this program; if not, write to the Free Software
16     Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
17     02110-1301 USA
18 */
19
20 #include <stdlib.h>
21
22 #include <gtk/gtk.h>
23
24 #include "cfg.h"
25 #include "ui_pref.h"
26 #include "ui_sensorlist.h"
27 #include "ui_sensorpref.h"
28 #include "ui_color.h"
29
30 void ui_sensorpref_dialog_run(struct psensor *sensor, struct ui_psensor *ui)
31 {
32         GtkDialog *diag;
33         gint result;
34         GtkBuilder *builder;
35         GError *error = NULL;
36         GtkLabel *w_id, *w_type;
37         GtkEntry *w_name;
38         GtkToggleButton *w_draw, *w_alarm;
39         GtkColorButton *w_color;
40         GtkSpinButton *w_temp_limit;
41         GdkColor *color;
42         guint ok;
43
44         builder = gtk_builder_new();
45
46         ok = gtk_builder_add_from_file
47                 (builder,
48                  PACKAGE_DATA_DIR G_DIR_SEPARATOR_S "sensor-edit.glade",
49                  &error);
50
51         if (!ok) {
52                 g_warning("%s", error->message);
53                 g_free(error);
54                 return ;
55         }
56
57         w_id = GTK_LABEL(gtk_builder_get_object(builder, "sensor_id"));
58         gtk_label_set_text(w_id, sensor->id);
59
60         w_type = GTK_LABEL(gtk_builder_get_object(builder, "sensor_type"));
61         gtk_label_set_text(w_type, psensor_type_to_str(sensor->type));
62
63         w_name = GTK_ENTRY(gtk_builder_get_object(builder, "sensor_name"));
64         gtk_entry_set_text(w_name, sensor->name);
65
66         w_draw = GTK_TOGGLE_BUTTON(gtk_builder_get_object(builder,
67                                                           "sensor_draw"));
68         gtk_toggle_button_set_active(w_draw, sensor->enabled);
69
70         color = color_to_gdkcolor(sensor->color);
71         w_color = GTK_COLOR_BUTTON(gtk_builder_get_object(builder,
72                                                           "sensor_color"));
73         gtk_color_button_set_color(w_color, color);
74
75         w_alarm = GTK_TOGGLE_BUTTON(gtk_builder_get_object(builder,
76                                                            "sensor_alarm"));
77         w_temp_limit
78                 = GTK_SPIN_BUTTON(gtk_builder_get_object(builder,
79                                                          "sensor_temp_limit"));
80
81         if (is_temp_type(sensor->type)) {
82                 gtk_toggle_button_set_active(w_alarm, sensor->alarm_enabled);
83                 gtk_spin_button_set_value(w_temp_limit, sensor->alarm_limit);
84         } else {
85                 gtk_widget_set_sensitive(GTK_WIDGET(w_alarm), FALSE);
86                 gtk_widget_set_sensitive(GTK_WIDGET(w_temp_limit), FALSE);
87         }
88
89         diag = GTK_DIALOG(gtk_builder_get_object(builder, "dialog1"));
90         result = gtk_dialog_run(diag);
91
92         if (result == GTK_RESPONSE_ACCEPT) {
93
94                 free(sensor->name);
95                 sensor->name = strdup(gtk_entry_get_text(w_name));
96                 config_set_sensor_name(sensor->id, sensor->name);
97
98                 sensor->enabled = gtk_toggle_button_get_active(w_draw);
99                 config_set_sensor_enabled(sensor->id, sensor->enabled);
100
101                 sensor->alarm_limit = gtk_spin_button_get_value(w_temp_limit);
102                 config_set_sensor_alarm_limit(sensor->id, sensor->alarm_limit);
103
104                 sensor->alarm_enabled = gtk_toggle_button_get_active(w_alarm);
105                 config_set_sensor_alarm_enabled(sensor->id,
106                                                 sensor->alarm_enabled);
107
108                 gtk_color_button_get_color(w_color, color);
109                 color_set(sensor->color, color->red, color->green, color->blue);
110                 config_set_sensor_color(sensor->id, sensor->color);
111
112                 ui_sensorlist_update_sensors_preferences(ui);
113         }
114
115         g_object_unref(G_OBJECT(builder));
116
117         gtk_widget_destroy(GTK_WIDGET(diag));
118 }