comparison src/cdaudio-ng/configure.c @ 1189:af5bd4592100 trunk

Added cdaudio-ng.h; added a configure dialog
author zither@litestep.network
date Wed, 20 Jun 2007 22:27:48 +0300
parents
children 483b8d900d5e
comparison
equal deleted inserted replaced
1188:22a470857579 1189:af5bd4592100
1
2 #include <stdio.h>
3 #include <string.h>
4 #include <gtk/gtk.h>
5
6 #include "configure.h"
7
8
9 static GtkWidget *configwindow;
10 static GtkWidget *okbutton;
11 static GtkWidget *cancelbutton;
12 static GtkWidget *maintable;
13 static GtkWidget *daeframe;
14 static GtkWidget *titleinfoframe;
15 static GtkWidget *miscframe;
16 static GtkWidget *daetable;
17 static GtkWidget *titleinfotable;
18 static GtkWidget *misctable;
19 static GtkWidget *usedaecheckbutton;
20 static GtkWidget *limitcheckbutton;
21 static GtkWidget *usecdtextcheckbutton;
22 static GtkWidget *usecddbcheckbutton;
23 static GtkWidget *usedevicecheckbutton;
24 static GtkWidget *buttonbox;
25 static GtkWidget *limitspinbutton;
26 static GtkWidget *deviceentry;
27
28 static gboolean *usedae;
29 static int *limitspeed;
30 static gboolean *usecdtext;
31 static gboolean *usecddb;
32 static char *device;
33
34 static gboolean delete_window(GtkWidget *widget, GdkEvent *event, gpointer data);
35 static void button_clicked(GtkWidget *widget, gpointer data);
36 static void checkbutton_toggled(GtkWidget *widget, gpointer data);
37 static void values_to_gui();
38 static void gui_to_values();
39
40
41 void configure_set_variables(gboolean *_usedae, int *_limitspeed, gboolean *_usecdtext, gboolean *_usecddb, char *_device)
42 {
43 usedae = _usedae;
44 limitspeed = _limitspeed;
45 usecdtext = _usecdtext;
46 usecddb = _usecddb;
47 device = _device;
48 }
49
50 void configure_create_gui()
51 {
52 configwindow = gtk_window_new(GTK_WINDOW_TOPLEVEL);
53 gtk_window_set_title(GTK_WINDOW(configwindow), "CD Audio Plugin Configuration");
54 gtk_window_set_resizable(GTK_WINDOW(configwindow), FALSE);
55 gtk_window_set_position(GTK_WINDOW(configwindow), GTK_WIN_POS_CENTER_ALWAYS);
56 gtk_container_set_border_width(GTK_CONTAINER(configwindow), 10);
57 g_signal_connect(G_OBJECT(configwindow), "delete_event", G_CALLBACK(delete_window), NULL);
58
59 maintable = gtk_table_new(4, 2, TRUE);
60 gtk_container_add(GTK_CONTAINER(configwindow), maintable);
61
62
63 daeframe = gtk_frame_new("Digital audio extraction");
64 gtk_table_attach_defaults(GTK_TABLE(maintable), daeframe, 0, 2, 0, 1);
65 daetable = gtk_table_new(2, 2, TRUE);
66 gtk_container_add(GTK_CONTAINER(daeframe), daetable);
67
68 titleinfoframe = gtk_frame_new("Title information");
69 gtk_table_attach_defaults(GTK_TABLE(maintable), titleinfoframe, 0, 2, 1, 2);
70 titleinfotable = gtk_table_new(2, 2, TRUE);
71 gtk_container_add(GTK_CONTAINER(titleinfoframe), titleinfotable);
72
73 miscframe = gtk_frame_new("Misc");
74 gtk_table_attach_defaults(GTK_TABLE(maintable), miscframe, 0, 2, 2, 3);
75 misctable = gtk_table_new(2, 2, TRUE);
76 gtk_container_add(GTK_CONTAINER(miscframe), misctable);
77
78
79 usedaecheckbutton = gtk_check_button_new_with_label("Use digital audio extraction");
80 g_signal_connect(G_OBJECT(usedaecheckbutton), "toggled", G_CALLBACK(checkbutton_toggled), NULL);
81 gtk_table_attach_defaults(GTK_TABLE(daetable), usedaecheckbutton, 0, 2, 0, 1);
82
83 limitcheckbutton = gtk_check_button_new_with_label("Limit read speed to: ");
84 g_signal_connect(G_OBJECT(limitcheckbutton), "toggled", G_CALLBACK(checkbutton_toggled), NULL);
85 gtk_table_attach_defaults(GTK_TABLE(daetable), limitcheckbutton, 0, 1, 1, 2);
86
87 limitspinbutton = gtk_spin_button_new_with_range(1.0, 24.0, 1.0);
88 gtk_table_attach_defaults(GTK_TABLE(daetable), limitspinbutton, 1, 2, 1, 2);
89
90 usecdtextcheckbutton = gtk_check_button_new_with_label("Use cd-text if available");
91 g_signal_connect(G_OBJECT(usecdtextcheckbutton), "toggled", G_CALLBACK(checkbutton_toggled), NULL);
92 gtk_table_attach_defaults(GTK_TABLE(titleinfotable), usecdtextcheckbutton, 0, 2, 0, 1);
93
94 usecddbcheckbutton = gtk_check_button_new_with_label("Use CDDB if available");
95 g_signal_connect(G_OBJECT(usecddbcheckbutton), "toggled", G_CALLBACK(checkbutton_toggled), NULL);
96 gtk_table_attach_defaults(GTK_TABLE(titleinfotable), usecddbcheckbutton, 0, 2, 1, 2);
97
98 usedevicecheckbutton = gtk_check_button_new_with_label("Override default device: ");
99 g_signal_connect(G_OBJECT(usedevicecheckbutton), "toggled", G_CALLBACK(checkbutton_toggled), NULL);
100 gtk_table_attach_defaults(GTK_TABLE(misctable), usedevicecheckbutton, 0, 1, 0, 1);
101
102 deviceentry = gtk_entry_new();
103 gtk_table_attach_defaults(GTK_TABLE(misctable), deviceentry, 1, 2, 0, 1);
104
105
106 buttonbox = gtk_hbutton_box_new();
107 gtk_hbutton_box_set_layout_default(GTK_BUTTONBOX_END);
108 gtk_hbutton_box_set_spacing_default(10);
109 gtk_table_attach_defaults(GTK_TABLE(maintable), buttonbox, 0, 2, 3, 4);
110
111 okbutton = gtk_button_new_with_label("Ok");
112 g_signal_connect(G_OBJECT(okbutton), "clicked", G_CALLBACK(button_clicked), NULL);
113 gtk_container_add(GTK_CONTAINER(buttonbox), okbutton);
114
115 cancelbutton = gtk_button_new_with_label("Cancel");
116 g_signal_connect(G_OBJECT(cancelbutton), "clicked", G_CALLBACK(button_clicked), NULL);
117 gtk_container_add(GTK_CONTAINER(buttonbox), cancelbutton);
118
119
120 gtk_widget_show(usedaecheckbutton);
121 gtk_widget_show(limitcheckbutton);
122 gtk_widget_show(limitspinbutton);
123 gtk_widget_show(usecdtextcheckbutton);
124 gtk_widget_show(usecddbcheckbutton);
125 gtk_widget_show(usedevicecheckbutton);
126 gtk_widget_show(deviceentry);
127
128 gtk_widget_show(daetable);
129 gtk_widget_show(daeframe);
130 gtk_widget_show(titleinfotable);
131 gtk_widget_show(titleinfoframe);
132 gtk_widget_show(misctable);
133 gtk_widget_show(miscframe);
134
135 gtk_widget_show(buttonbox);
136 gtk_widget_show(okbutton);
137 gtk_widget_show(cancelbutton);
138
139 gtk_widget_show(maintable);
140 }
141
142 void configure_show_gui()
143 {
144 values_to_gui();
145 gtk_widget_show(configwindow);
146 }
147
148 gboolean delete_window(GtkWidget *widget, GdkEvent *event, gpointer data)
149 {
150 gtk_widget_hide(configwindow);
151 return TRUE;
152 }
153
154 void button_clicked(GtkWidget *widget, gpointer data)
155 {
156 gtk_widget_hide(configwindow);
157 if (widget == okbutton)
158 gui_to_values();
159 }
160
161
162 void checkbutton_toggled(GtkWidget *widget, gpointer data)
163 {
164 gtk_widget_set_sensitive(limitcheckbutton, gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(usedaecheckbutton)));
165
166 gtk_widget_set_sensitive(
167 limitspinbutton,
168 gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(limitcheckbutton)) &&
169 GTK_WIDGET_IS_SENSITIVE(limitcheckbutton));
170
171 gtk_widget_set_sensitive(deviceentry, gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(usedevicecheckbutton)));
172 }
173
174 void values_to_gui()
175 {
176 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(usedaecheckbutton), *usedae);
177
178 gtk_widget_set_sensitive(limitcheckbutton, *usedae);
179 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(limitcheckbutton), *limitspeed > 0);
180
181 gtk_widget_set_sensitive(limitspinbutton, *usedae && *limitspeed > 0);
182 gtk_spin_button_set_value(GTK_SPIN_BUTTON(limitspinbutton), *limitspeed);
183
184 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(usecdtextcheckbutton), *usecdtext);
185 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(usecddbcheckbutton), *usecddb);
186
187 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(usedevicecheckbutton), strlen(device) > 0);
188
189 gtk_widget_set_sensitive(deviceentry, strlen(device) > 0);
190 gtk_entry_set_text(GTK_ENTRY(deviceentry), device);
191 }
192
193 void gui_to_values()
194 {
195 *usedae = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(usedaecheckbutton));
196 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(limitcheckbutton)))
197 *limitspeed = gtk_spin_button_get_value(GTK_SPIN_BUTTON(limitspinbutton));
198 else
199 *limitspeed = 0;
200 *usecdtext = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(usecdtextcheckbutton));
201 *usecddb = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(usecddbcheckbutton));
202 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(usedevicecheckbutton)))
203 strcpy(device, gtk_entry_get_text(GTK_ENTRY(deviceentry)));
204 else
205 strcpy(device, "");
206 }