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