1 /* Copyright (c) 2003, 2004 Roger Seguin <roger_seguin@msn.com>
2 *
3 * Redistribution and use in source and binary forms, with or without
4 * modification, are permitted provided that the following conditions
5 * are met:
6 *
7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 *
13 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
14 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
15 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
16 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
17 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
18 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
19 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
20 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
21 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
22 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23 */
24
25
26 #include "config_gui.h"
27
28 #ifdef HAVE_CONFIG_H
29 #include <config.h>
30 #endif
31
32 #include <gtk/gtk.h>
33
34 #include <libxfce4util/libxfce4util.h>
35 #include <libxfce4ui/libxfce4ui.h>
36
37
38 #define COPYVAL(var, field) ((var)->field = field)
39
40
41 /**** GUI initially created using glade-2 ****/
42
43 /* Use the gtk_button_new_with_mnemonic() function for text-based
44 push buttons */
45 /* Use "#define gtk_button_new_with_mnemonic(x) gtk_button_new()"
46 for color-filled buttons */
47
48 #define gtk_button_new_with_mnemonic(x) gtk_button_new()
49
50 #define GLADE_HOOKUP_OBJECT(component,widget,name) \
51 g_object_set_data_full (G_OBJECT (component), name, \
52 gtk_widget_ref (widget), (GDestroyNotify) gtk_widget_unref)
53
54 #define GLADE_HOOKUP_OBJECT_NO_REF(component,widget,name) \
55 g_object_set_data (G_OBJECT (component), name, widget)
56
CreateConfigGUI(GtkWidget * vbox1,struct gui_t * p_poGUI)57 int CreateConfigGUI (GtkWidget * vbox1, struct gui_t *p_poGUI)
58 {
59 GtkWidget *table1;
60 GtkWidget *label1;
61 GtkWidget *wTF_Device;
62 GtkWidget *eventbox1;
63 GtkAdjustment *wSc_Period_adj;
64 GtkWidget *wSc_Period;
65 GtkWidget *label2;
66 GtkWidget *wTB_Title;
67 GtkWidget *wTF_Title;
68 GtkWidget *hseparator7;
69 GtkWidget *hbox2;
70 GtkWidget *label9;
71 GtkWidget *wRB_IO;
72 GSList *wRB_IO_group = NULL;
73 GtkWidget *wRB_BusyTime;
74 GtkWidget *wHBox_MaxIO;
75 GtkWidget *label3;
76 GtkWidget *wTF_MaxXfer;
77 GtkWidget *hseparator8;
78 GtkWidget *wTB_RWcombined;
79 GtkWidget *wTa_SingleBar;
80 GtkWidget *label7;
81 GtkWidget *wPB_RWcolor;
82 GtkWidget *wTa_DualBars;
83 GtkWidget *label5;
84 GtkWidget *label6;
85 GtkWidget *label8;
86 GtkWidget *hbox1;
87 GtkWidget *wRB_ReadWriteOrder;
88 GSList *wRB_ReadWriteOrder_group = NULL;
89 GtkWidget *wRB_WriteReadOrder;
90 GtkWidget *wPB_Rcolor;
91 GtkWidget *wPB_Wcolor;
92 GtkSizeGroup *size_group;
93
94 size_group = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL);
95
96 table1 = gtk_grid_new ();
97 gtk_grid_set_column_spacing(GTK_GRID (table1), 12);
98 gtk_grid_set_row_spacing(GTK_GRID (table1), 6);
99 gtk_widget_show (table1);
100 gtk_box_pack_start (GTK_BOX (vbox1), table1, FALSE, FALSE, 0);
101
102 label1 = gtk_label_new (_("Device"));
103 gtk_widget_show (label1);
104 gtk_grid_attach (GTK_GRID (table1), label1, 0, 0, 1, 1);
105 gtk_label_set_justify (GTK_LABEL (label1), GTK_JUSTIFY_LEFT);
106 gtk_label_set_xalign (GTK_LABEL (label1), 0.0f);
107 gtk_widget_set_valign(GTK_WIDGET (label1), GTK_ALIGN_CENTER);
108
109 gtk_size_group_add_widget (size_group, label1);
110
111 wTF_Device = gtk_entry_new ();
112 gtk_widget_show (wTF_Device);
113 gtk_widget_set_hexpand (wTF_Device, TRUE);
114 gtk_grid_attach (GTK_GRID (table1), wTF_Device, 1, 0, 2, 1);
115 gtk_widget_set_tooltip_text (wTF_Device,
116 _("Input the device name, then press <Enter>"));
117 gtk_entry_set_max_length (GTK_ENTRY (wTF_Device), 128);
118 gtk_entry_set_text (GTK_ENTRY (wTF_Device), _("/dev/sda1"));
119
120 eventbox1 = gtk_event_box_new ();
121 gtk_widget_show (eventbox1);
122 gtk_grid_attach (GTK_GRID (table1), eventbox1, 1, 2, 2, 1);
123 gtk_widget_set_vexpand(GTK_WIDGET(eventbox1), FALSE);
124 gtk_widget_set_hexpand(GTK_WIDGET(eventbox1), TRUE);
125
126 wSc_Period_adj = gtk_adjustment_new (0.5, 0.25, 4, 0.05, 1, 0);
127 wSc_Period =
128 gtk_spin_button_new (GTK_ADJUSTMENT (wSc_Period_adj), 1, 3);
129 gtk_widget_set_halign (GTK_WIDGET (wSc_Period), GTK_ALIGN_START);
130 gtk_widget_show (wSc_Period);
131 gtk_container_add (GTK_CONTAINER (eventbox1), wSc_Period);
132 gtk_widget_set_tooltip_text (wSc_Period, _("Data collection period"));
133 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (wSc_Period), TRUE);
134
135 label2 = gtk_label_new (_("Update interval (s) "));
136 gtk_widget_show (label2);
137 gtk_grid_attach (GTK_GRID (table1), label2, 0, 2, 1, 1);
138 gtk_label_set_justify (GTK_LABEL (label2), GTK_JUSTIFY_LEFT);
139 gtk_label_set_xalign (GTK_LABEL (label2), 0.0f);
140
141 wTB_Title = gtk_check_button_new_with_mnemonic (_("Label"));
142 gtk_widget_show (wTB_Title);
143 gtk_grid_attach (GTK_GRID (table1), wTB_Title, 0, 1, 1, 1);
144 gtk_widget_set_tooltip_text (wTB_Title, _("Tick to display label"));
145
146 wTF_Title = gtk_entry_new ();
147 gtk_widget_show (wTF_Title);
148 gtk_grid_attach (GTK_GRID (table1), wTF_Title, 1, 1, 2, 1);
149 gtk_widget_set_tooltip_text (wTF_Title,
150 _("Input the label, then press <Enter>"));
151 gtk_entry_set_max_length (GTK_ENTRY (wTF_Title), 16);
152 gtk_entry_set_text (GTK_ENTRY (wTF_Title), _("hda1"));
153
154 hseparator7 = gtk_separator_new (GTK_ORIENTATION_HORIZONTAL);
155 gtk_widget_set_margin_top (GTK_WIDGET (hseparator7), 6);
156 gtk_widget_set_margin_bottom (GTK_WIDGET (hseparator7), 6);
157 gtk_widget_show (hseparator7);
158 gtk_grid_attach (GTK_GRID (table1), hseparator7, 0, 3, 3, 1);
159
160 label9 = gtk_label_new (_("Monitor"));
161 gtk_widget_show (label9);
162 gtk_grid_attach (GTK_GRID (table1), label9, 0, 4, 1, 1);
163 gtk_label_set_justify (GTK_LABEL (label9), GTK_JUSTIFY_LEFT);
164 gtk_label_set_xalign (GTK_LABEL (label9), 0.0f);
165
166 wRB_IO = gtk_radio_button_new_with_mnemonic (NULL, _("I/O transfer"));
167 gtk_widget_show (wRB_IO);
168 gtk_grid_attach (GTK_GRID (table1), wRB_IO, 1, 4, 1, 1);
169 gtk_widget_set_tooltip_text (wRB_IO, _("MiB transferred / second"));
170 gtk_radio_button_set_group (GTK_RADIO_BUTTON (wRB_IO), wRB_IO_group);
171 wRB_IO_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (wRB_IO));
172
173 wRB_BusyTime =
174 gtk_radio_button_new_with_mnemonic (NULL, _("Busy time"));
175 gtk_widget_show (wRB_BusyTime);
176 gtk_grid_attach (GTK_GRID (table1), wRB_BusyTime, 2, 4, 1, 1);
177 gtk_widget_set_tooltip_text (wRB_BusyTime,
178 _("Percentage of time the device is busy"));
179 gtk_radio_button_set_group (GTK_RADIO_BUTTON (wRB_BusyTime),
180 wRB_IO_group);
181 wRB_IO_group =
182 gtk_radio_button_get_group (GTK_RADIO_BUTTON (wRB_BusyTime));
183
184 wHBox_MaxIO = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 12);
185 gtk_widget_show (wHBox_MaxIO);
186 gtk_grid_attach (GTK_GRID (table1), wHBox_MaxIO, 0, 5, 3, 1);
187
188 label3 = gtk_label_new (_("Max. I/O rate (MiB/s) "));
189 gtk_widget_show (label3);
190 gtk_box_pack_start (GTK_BOX (wHBox_MaxIO), label3, FALSE, FALSE, 0);
191 gtk_label_set_justify (GTK_LABEL (label3), GTK_JUSTIFY_LEFT);
192 gtk_label_set_xalign (GTK_LABEL (label3), 0.0f);
193 gtk_widget_set_valign (GTK_WIDGET (label3), GTK_ALIGN_CENTER);
194
195 gtk_size_group_add_widget (size_group, label3);
196
197 wTF_MaxXfer = gtk_entry_new ();
198 gtk_widget_show (wTF_MaxXfer);
199 gtk_widget_set_hexpand (wTF_MaxXfer, TRUE);
200 gtk_box_pack_start (GTK_BOX (wHBox_MaxIO), wTF_MaxXfer, FALSE, TRUE, 0);
201 gtk_widget_set_tooltip_text (wTF_MaxXfer,
202 _("Input the maximum I/O transfer rate of the device, then press <Enter>"));
203 gtk_entry_set_max_length (GTK_ENTRY (wTF_MaxXfer), 5);
204 gtk_entry_set_text (GTK_ENTRY (wTF_MaxXfer), _("35"));
205
206 hseparator8 = gtk_separator_new (GTK_ORIENTATION_HORIZONTAL);
207 gtk_widget_set_margin_top (GTK_WIDGET (hseparator8), 6);
208 gtk_widget_set_margin_bottom (GTK_WIDGET (hseparator8), 6);
209 gtk_widget_show (hseparator8);
210 gtk_grid_attach (GTK_GRID (table1), hseparator8, 0, 6, 3, 1);
211
212 wTB_RWcombined =
213 gtk_check_button_new_with_mnemonic (_("Combine Read/Write data"));
214 gtk_widget_show (wTB_RWcombined);
215 gtk_grid_attach (GTK_GRID (table1), wTB_RWcombined, 0, 7, 3, 1);
216 gtk_widget_set_tooltip_text (wTB_RWcombined,
217 _("Combine Read/Write data into one single monitor?"));
218
219 wTa_SingleBar = gtk_grid_new ();
220 gtk_grid_set_column_spacing(GTK_GRID (wTa_SingleBar), 12);
221 gtk_grid_set_row_spacing(GTK_GRID (wTa_SingleBar), 6);
222 gtk_widget_show (wTa_SingleBar);
223 gtk_grid_attach (GTK_GRID (table1), wTa_SingleBar, 0, 8, 3, 1);
224
225 label7 = gtk_label_new (_("Bar color "));
226 gtk_widget_show (label7);
227 gtk_grid_attach (GTK_GRID (wTa_SingleBar), label7, 0, 0, 1, 1);
228 gtk_label_set_justify (GTK_LABEL (label7), GTK_JUSTIFY_LEFT);
229 gtk_widget_set_valign (GTK_WIDGET (label7), GTK_ALIGN_CENTER);
230 gtk_label_set_xalign (GTK_LABEL (label7), 0.0f);
231
232 gtk_size_group_add_widget (size_group, label7);
233
234 wPB_RWcolor = gtk_color_button_new();
235 gtk_widget_show (wPB_RWcolor);
236 gtk_grid_attach (GTK_GRID (wTa_SingleBar), wPB_RWcolor, 1, 0, 1, 1);
237 gtk_widget_set_tooltip_text (wPB_RWcolor, _("Press to change color"));
238 gtk_widget_set_hexpand (GTK_WIDGET (wPB_RWcolor), TRUE);
239
240 wTa_DualBars = gtk_grid_new ();
241 gtk_grid_set_column_spacing(GTK_GRID (wTa_DualBars), 12);
242 gtk_grid_set_row_spacing(GTK_GRID (wTa_DualBars), 6);
243 gtk_widget_show (wTa_DualBars);
244 gtk_grid_attach (GTK_GRID (table1), wTa_DualBars, 0, 9, 3, 1);
245
246 label5 = gtk_label_new (_("Read bar color "));
247 gtk_widget_show (label5);
248 gtk_grid_attach (GTK_GRID (wTa_DualBars), label5, 0, 1, 1, 1);
249 gtk_label_set_justify (GTK_LABEL (label5), GTK_JUSTIFY_LEFT);
250 gtk_widget_set_valign (GTK_WIDGET (label5), GTK_ALIGN_CENTER);
251 gtk_label_set_xalign (GTK_LABEL (label5), 0.0f);
252
253 gtk_size_group_add_widget (size_group, label5);
254
255 label6 = gtk_label_new (_("Write bar color "));
256 gtk_widget_show (label6);
257 gtk_grid_attach (GTK_GRID (wTa_DualBars), label6, 0, 2, 1, 1);
258 gtk_label_set_justify (GTK_LABEL (label6), GTK_JUSTIFY_LEFT);
259 gtk_widget_set_valign (GTK_WIDGET (label6), GTK_ALIGN_CENTER);
260 gtk_label_set_xalign (GTK_LABEL (label6), 0.0f);
261
262 label8 = gtk_label_new (_("Bar order"));
263 gtk_widget_show (label8);
264 gtk_grid_attach (GTK_GRID (wTa_DualBars), label8, 0, 0, 1, 1);
265 gtk_label_set_justify (GTK_LABEL (label8), GTK_JUSTIFY_LEFT);
266 gtk_widget_set_valign (GTK_WIDGET (label8), GTK_ALIGN_CENTER);
267 gtk_label_set_xalign (GTK_LABEL (label8), 0.0f);
268
269 wRB_ReadWriteOrder =
270 gtk_radio_button_new_with_mnemonic (NULL, _("Read-Write"));
271 gtk_widget_show (wRB_ReadWriteOrder);
272 gtk_grid_attach (GTK_GRID (wTa_DualBars), wRB_ReadWriteOrder, 1, 0, 1, 1);
273 gtk_widget_set_tooltip_text (wRB_ReadWriteOrder,
274 _("\"Read\" monitor first"));
275 gtk_radio_button_set_group (GTK_RADIO_BUTTON (wRB_ReadWriteOrder),
276 wRB_ReadWriteOrder_group);
277 wRB_ReadWriteOrder_group =
278 gtk_radio_button_get_group (GTK_RADIO_BUTTON (wRB_ReadWriteOrder));
279
280 wRB_WriteReadOrder =
281 gtk_radio_button_new_with_mnemonic (NULL, _("Write-Read"));
282 gtk_widget_show (wRB_WriteReadOrder);
283 gtk_grid_attach (GTK_GRID (wTa_DualBars), wRB_WriteReadOrder, 2, 0, 1, 1);
284 gtk_widget_set_tooltip_text (wRB_WriteReadOrder,
285 _("\"Write\" monitor first"));
286 gtk_radio_button_set_group (GTK_RADIO_BUTTON (wRB_WriteReadOrder),
287 wRB_ReadWriteOrder_group);
288 wRB_ReadWriteOrder_group =
289 gtk_radio_button_get_group (GTK_RADIO_BUTTON (wRB_WriteReadOrder));
290
291 wPB_Rcolor = gtk_color_button_new();
292 gtk_widget_show (wPB_Rcolor);
293 gtk_grid_attach (GTK_GRID (wTa_DualBars), wPB_Rcolor, 1, 1, 2, 1);
294 gtk_widget_set_tooltip_text (wPB_Rcolor, _("Press to change color"));
295 gtk_widget_set_hexpand (GTK_WIDGET (wPB_Rcolor), TRUE);
296
297 wPB_Wcolor = gtk_color_button_new();
298 gtk_widget_show (wPB_Wcolor);
299 gtk_grid_attach (GTK_GRID (wTa_DualBars), wPB_Wcolor, 1, 2, 2, 1);
300 gtk_widget_set_tooltip_text (wPB_Wcolor, _("Press to change color"));
301 gtk_widget_set_hexpand (GTK_WIDGET (wPB_Wcolor), TRUE);
302
303 if (p_poGUI) {
304 COPYVAL (p_poGUI, wTF_Device);
305 COPYVAL (p_poGUI, wSc_Period);
306 COPYVAL (p_poGUI, wTB_Title);
307 COPYVAL (p_poGUI, wTF_Title);
308 COPYVAL (p_poGUI, wRB_IO);
309 COPYVAL (p_poGUI, wRB_BusyTime);
310 COPYVAL (p_poGUI, wHBox_MaxIO);
311 COPYVAL (p_poGUI, wTF_MaxXfer);
312 COPYVAL (p_poGUI, wTB_RWcombined);
313 COPYVAL (p_poGUI, wTa_SingleBar);
314 COPYVAL (p_poGUI, wTa_DualBars);
315 COPYVAL (p_poGUI, wRB_ReadWriteOrder);
316 COPYVAL (p_poGUI, wRB_WriteReadOrder);
317 COPYVAL (p_poGUI, wPB_RWcolor);
318 COPYVAL (p_poGUI, wPB_Rcolor);
319 COPYVAL (p_poGUI, wPB_Wcolor);
320 }
321 return (0);
322 } /* CreateConfigGUI() */
323