]> gitweb.michael.orlitzky.com - xfce4-hdaps.git/blob - panel-plugin/xfce4-hdaps-dialogs.c
Updated the copyright statements for 2010.
[xfce4-hdaps.git] / panel-plugin / xfce4-hdaps-dialogs.c
1 /*
2 * xfce4-hdaps, an XFCE4 panel plugin for the HDAPS system.
3 *
4 * Copyright Michael Orlitzky
5 *
6 * http://michael.orlitzky.com/
7 *
8 * This program is free software: you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation, either version 3 of the License, or
11 * (at your option) any later version.
12 *
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
17 *
18 * http://www.fsf.org/licensing/licenses/gpl.html
19 */
20
21 #ifdef HAVE_CONFIG_H
22 #include <config.h>
23 #endif
24
25 #include <string.h>
26 #include <gtk/gtk.h>
27 #include <libxfcegui4/libxfcegui4.h>
28 #include <libxfce4panel/xfce-panel-plugin.h>
29 #include "xfce4-hdaps-dialogs.h"
30 #include "hdaps.h"
31
32 /* Wild guess. Actually borrowed from some code
33 I copy-and-pasted. Doesn't seem too ugly. */
34 #define DEFAULT_BORDER_WIDTH 8
35
36 /* If people can't read the README, well maybe
37 * they can do it /online/.
38 */
39 #define PLUGIN_WEBSITE "http://michael.orlitzky.com/code/xfce4-hdaps.php"
40
41
42 static void hdaps_configure_response(GtkWidget *dialog,
43 gint response,
44 HdapsPlugin *hdaps) {
45
46 if (response == GTK_RESPONSE_HELP) {
47 /* Launch the user's web browser and direct them to
48 the plugin's webpage. */
49 gboolean spawn_result = g_spawn_command_line_async("exo-open --launch WebBrowser " PLUGIN_WEBSITE, NULL);
50
51 if (G_UNLIKELY(spawn_result == FALSE)) {
52 g_warning(_("Unable to open the following url: %s"), PLUGIN_WEBSITE);
53 }
54
55 return;
56 }
57
58
59 if (response == GTK_RESPONSE_OK) {
60 /* This corresponds to the "Save" button, so we
61 want to save any settings that may have changed. */
62 g_object_set_data(G_OBJECT(hdaps->plugin), "dialog", NULL);
63 hdaps->poll_frequency = gtk_spin_button_get_value_as_int((GtkSpinButton*)hdaps->sb_poll_frequency);
64 hdaps->device_name = gtk_combo_box_get_active_text((GtkComboBox*)hdaps->cb_device_name);
65 snprintf(hdaps->sysfs_file, FILENAME_MAX, UNLOAD_HEADS_FMT, hdaps->device_name);
66 hdaps_save(hdaps->plugin, hdaps);
67 hdaps_reset_timeout(hdaps);
68 }
69
70
71 /* Since there is already a "save" button, we should ignore
72 any changes that were made if the user presses "cancel"
73 instead. */
74 g_object_set_data(G_OBJECT(hdaps->plugin), "dialog", NULL);
75 xfce_panel_plugin_unblock_menu(hdaps->plugin);
76 gtk_widget_destroy(dialog);
77
78 return;
79 }
80
81
82
83 void hdaps_configure(XfcePanelPlugin *plugin,
84 HdapsPlugin *hdaps) {
85
86 /* Here comes a bunch of GTK garbage to create the
87 settings dialog. */
88
89 GtkWidget *dialog;
90 GtkWidget *label;
91 GtkWidget *vbox;
92 GtkWidget *hbox;
93 GtkSizeGroup *sg;
94
95 /* Block the plugin menu while the configuration
96 dialogue is open. Don't forget to unblock it before
97 we close. */
98 xfce_panel_plugin_block_menu(plugin);
99
100 /* Create the dialog */
101 dialog = xfce_titled_dialog_new_with_buttons(_("Hdaps Plugin"),
102 GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (plugin))),
103 GTK_DIALOG_DESTROY_WITH_PARENT | GTK_DIALOG_NO_SEPARATOR,
104 GTK_STOCK_HELP, GTK_RESPONSE_HELP,
105 GTK_STOCK_SAVE, GTK_RESPONSE_OK,
106 GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
107 NULL);
108
109 /* Center the dialog on screen. */
110 gtk_window_set_position(GTK_WINDOW(dialog), GTK_WIN_POS_CENTER);
111
112 /* Set dialog icon to a generic settings icon. */
113 gtk_window_set_icon_name(GTK_WINDOW(dialog), "xfce4-settings");
114
115 /* Link the dialog to the plugin, so we can destroy it in case
116 * the plugin is closed while the dialog is still open. */
117 g_object_set_data(G_OBJECT(plugin), "dialog", dialog);
118
119 /* Connect the reponse signal to the dialog. */
120 g_signal_connect(G_OBJECT (dialog), "response",
121 G_CALLBACK(hdaps_configure_response), hdaps);
122
123
124 vbox = gtk_vbox_new(FALSE, DEFAULT_BORDER_WIDTH);
125 gtk_container_set_border_width(GTK_CONTAINER(vbox), DEFAULT_BORDER_WIDTH - 2);
126 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), vbox, TRUE, TRUE, 0);
127
128 /* Create size group to keep widgets aligned */
129 sg = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL);
130
131 hbox = gtk_hbox_new(FALSE, DEFAULT_BORDER_WIDTH);
132 gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
133
134 label = gtk_label_new(_("Poll Frequency:"));
135 gtk_size_group_add_widget(sg, label);
136 gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
137 gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0);
138
139 hdaps->sb_poll_frequency = gtk_spin_button_new_with_range(100, 5000, 100);
140 gtk_spin_button_set_value((GtkSpinButton*)hdaps->sb_poll_frequency, hdaps->poll_frequency);
141
142 gtk_box_pack_start(GTK_BOX(hbox),
143 hdaps->sb_poll_frequency,
144 FALSE,
145 FALSE,
146 0);
147
148 /* Create the device name dropdown. */
149 hbox = gtk_hbox_new(FALSE, DEFAULT_BORDER_WIDTH);
150 gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
151
152 label = gtk_label_new(_("Device Name:"));
153 gtk_size_group_add_widget(sg, label);
154 gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
155 gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0);
156
157 hdaps->cb_device_name = gtk_combo_box_new_text();
158
159 /* Add the current device name, it should always be available.
160 Oh, and it should be the default, too. */
161 gtk_combo_box_append_text((GtkComboBox*)hdaps->cb_device_name, hdaps->device_name);
162
163 /* This function takes an index, and 0 should be the first
164 (only) index at this point. */
165 gtk_combo_box_set_active((GtkComboBox*)hdaps->cb_device_name, 0);
166
167 /* Now loop through the list of available devices, adding each
168 to the list as we go. */
169 char hdaps_devices[MAX_HDAPS_DEVICES][FILENAME_MAX];
170 int found_devices = get_hdaps_device_list(hdaps_devices);
171 int list_idx = 0;
172
173 for (list_idx = 0; list_idx < found_devices; list_idx++) {
174 /* We don't want to add duplicate entries to the combo box.
175 However, at this point, the current device name should be
176 the only entry. Therefore, to avoid duplicates, we only
177 have to avoid adding the current device name a second time. */
178 if (strcmp(hdaps_devices[list_idx], hdaps->device_name) != 0) {
179 gtk_combo_box_append_text((GtkComboBox*)hdaps->cb_device_name, hdaps_devices[list_idx]);
180 }
181 }
182
183 gtk_box_pack_start(GTK_BOX(hbox), hdaps->cb_device_name, FALSE, FALSE, 0);
184
185 /* Show the dialog and all of its widgets. */
186 gtk_widget_show_all(dialog);
187 }
188
189
190
191 void hdaps_about(XfcePanelPlugin *plugin) {
192 GdkPixbuf *icon;
193 GtkWidget *dialog;
194 XfceAboutInfo *about;
195
196 /* Send NULL as our license, since GPL >= 3 is not
197 supported yet. I don't particularly care if people
198 want to re-license under GPL2, but I also don't want
199 to cause any unnecessary confusion. */
200 about = xfce_about_info_new("xfce4-hdaps",
201 VERSION,
202 _("An HDAPS Plugin for XFCE4"),
203 XFCE_COPYRIGHT_TEXT("2010", "Michael Orlitzky"),
204 NULL);
205
206 xfce_about_info_set_homepage(about, PLUGIN_WEBSITE);
207
208 xfce_about_info_add_credit(about,
209 "Michael Orlitzky",
210 "michael@orlitzky.com",
211 _("A Reasonable Man"));
212
213 icon = gtk_icon_theme_load_icon(gtk_icon_theme_get_default(),
214 "xfce4-hdaps",
215 48, 0, NULL);
216
217 dialog = xfce_about_dialog_new_with_values(NULL, about, icon);
218 xfce_about_info_free(about);
219 gtk_dialog_run(GTK_DIALOG(dialog));
220 gtk_widget_destroy(dialog);
221 g_object_unref(G_OBJECT(icon));
222 }