Mercurial > hg > xmms-sid
comparison src/xs_config.c @ 40:1788f4ce6a44
Numerous changes towards 0.8
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Thu, 19 Jun 2003 22:38:01 +0000 |
parents | 271be59be975 |
children | 0f00ebab063d |
comparison
equal
deleted
inserted
replaced
39:85a7753e2a9a | 40:1788f4ce6a44 |
---|---|
17 | 17 |
18 You should have received a copy of the GNU General Public License | 18 You should have received a copy of the GNU General Public License |
19 along with this program; if not, write to the Free Software | 19 along with this program; if not, write to the Free Software |
20 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | 20 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. |
21 */ | 21 */ |
22 #include "xs_config.h" | |
22 #include <xmms/configfile.h> | 23 #include <xmms/configfile.h> |
23 #include <stdio.h> | 24 #include <stdio.h> |
24 #include "xmms-sid.h" | |
25 #include "xs_config.h" | |
26 #include "xs_glade.h" | 25 #include "xs_glade.h" |
27 #include "xs_interface.h" | 26 #include "xs_interface.h" |
28 | 27 |
29 | 28 |
30 /* | 29 /* |
31 * Global widgets | 30 * Global widgets |
32 */ | 31 */ |
33 static GtkWidget *xs_configwin = NULL; | 32 static GtkWidget *xs_configwin = NULL, |
33 *xs_sldb_fileselector = NULL, | |
34 *xs_stil_fileselector = NULL; | |
35 | |
36 #define LUW(x...) lookup_widget(xs_configwin, ## x) | |
34 | 37 |
35 | 38 |
36 /* | 39 /* |
37 * Configuration specific stuff | 40 * Configuration specific stuff |
38 */ | 41 */ |
39 #define XS_CFGTABLE_MAX 25 | 42 t_xs_cfg_item xs_cfgtable[] = { |
40 | 43 {ATYPE_INT, &xs_cfg.fmtBitsPerSample,"bitsPerSample"}, |
41 t_xs_cfg_item xs_cfgtable[XS_CFGTABLE_MAX] = { | 44 {ATYPE_INT, &xs_cfg.fmtChannels, "channels"}, |
42 {ATYPE_INT, &xs_cfg.fmtBitsPerSample, "bitsPerSample"}, | 45 {ATYPE_INT, &xs_cfg.fmtFrequency, "frequency"}, |
43 {ATYPE_INT, &xs_cfg.fmtChannels, "channels"}, | 46 |
44 {ATYPE_INT, &xs_cfg.fmtFrequency, "frequency"}, | 47 {ATYPE_BOOL, &xs_cfg.mos8580, "mos8580"}, |
45 | 48 {ATYPE_BOOL, &xs_cfg.emulateFilters, "emulateFilters"}, |
46 {ATYPE_BOOL,&xs_cfg.muffledOutput, "muffledOutput"}, | 49 {ATYPE_FLOAT, &xs_cfg.filterFs, "filterFs"}, |
47 {ATYPE_BOOL,&xs_cfg.addStaticNoise, "addStaticNoise"}, | 50 {ATYPE_FLOAT, &xs_cfg.filterFm, "filterFm"}, |
48 | 51 {ATYPE_FLOAT, &xs_cfg.filterFt, "filterFt"}, |
49 | 52 {ATYPE_INT, &xs_cfg.memoryMode, "memoryMode"}, |
50 {ATYPE_BOOL, &xs_cfg.mos8580, "mos8580"}, | 53 {ATYPE_INT, &xs_cfg.clockSpeed, "clockSpeed"}, |
51 {ATYPE_BOOL, &xs_cfg.emulateFilter, "emulateFilter"}, | 54 {ATYPE_BOOL, &xs_cfg.forceSpeed, "forceSpeed"}, |
52 {ATYPE_FLOAT, &xs_cfg.filterFs, "filterFs"}, | 55 |
53 {ATYPE_FLOAT, &xs_cfg.filterFm, "filterFm"}, | 56 {ATYPE_BOOL, &xs_cfg.oversampleEnable,"oversampleEnable"}, |
54 {ATYPE_FLOAT, &xs_cfg.filterFt, "filterFt"}, | 57 {ATYPE_INT, &xs_cfg.oversampleFactor,"oversampleFactor"}, |
55 {ATYPE_INT, &xs_cfg.memoryMode, "memoryMode"}, | 58 |
56 {ATYPE_INT, &xs_cfg.clockSpeed, "clockSpeed"}, | 59 {ATYPE_BOOL, &xs_cfg.playMaxTimeEnable,"playMaxTimeEnable"}, |
57 {ATYPE_BOOL, &xs_cfg.forceSpeed, "forceSpeed"}, | 60 {ATYPE_INT, &xs_cfg.playMaxTime, "playMaxTime"}, |
58 | 61 {ATYPE_BOOL, &xs_cfg.songlenDBEnable,"songlenDBEnable"}, |
59 | 62 {ATYPE_STR, &xs_cfg.songlenDBPath, "songlenDBPath"}, |
60 {ATYPE_BOOL,&xs_cfg.playUseMaxTime, "playUseMaxTime"}, | 63 |
61 {ATYPE_INT, &xs_cfg.playMaxTime, "playMaxTime"}, | 64 {ATYPE_BOOL, &xs_cfg.stilDBEnable, "useSTIL"}, |
62 {ATYPE_INT, &xs_cfg.playMethod, "playMethod"}, | 65 {ATYPE_STR, &xs_cfg.stilDBPath, "STILpath"}, |
63 {ATYPE_INT, &xs_cfg.playMaxSilentTime, "playMaxSilentTime"}, | 66 |
64 {ATYPE_INT, &xs_cfg.playSilentPercent, "playSilentPercent"}, | 67 {ATYPE_BOOL, &xs_cfg.detectMagic, "detectMagic"}, |
65 {ATYPE_STR, &xs_cfg.playDBPath, "playDBPath"}, | 68 |
66 | 69 {ATYPE_BOOL, &xs_cfg.titleOverride, "titleOverride"}, |
67 | 70 {ATYPE_STR, &xs_cfg.titleFormat, "fileInfo"} |
68 {ATYPE_BOOL,&xs_cfg.useSTIL, "useSTIL"}, | |
69 {ATYPE_STR, &xs_cfg.STILpath, "STILpath"}, | |
70 | |
71 {ATYPE_BOOL, &xs_cfg.finfoUseColors, "useColors"}, | |
72 {ATYPE_BOOL,&xs_cfg.detectMagic, "detectMagic"}, | |
73 | |
74 | |
75 {ATYPE_BOOL, &xs_cfg.titleOverride, "titleOverride"}, | |
76 {ATYPE_STR, &xs_cfg.titleFormat, "fileInfo"} | |
77 }; | 71 }; |
78 | 72 |
73 const gint XS_CFGTABLE_MAX = (sizeof(xs_cfgtable) / sizeof(t_xs_cfg_item)); | |
74 | |
79 | 75 |
80 /* | 76 /* |
81 * Reset the filter settings | 77 * Reset the filter settings |
82 */ | 78 */ |
83 void xs_reset_filters(void) | 79 void xs_reset_filters(void) |
84 { | 80 { |
85 /* Reset filter values */ | 81 /* Reset filter values */ |
86 // FIXME FIX ME | 82 /* |
87 /* | 83 xs_cfg.filterFs = SIDEMU_DEFAULTFILTERFS; |
88 xs_cfg.filterFs = XMMS_SID_DEFAULT_FILTERFS; | 84 xs_cfg.filterFm = SIDEMU_DEFAULTFILTERFM; |
89 xs_cfg.filterFm = XMMS_SID_DEFAULT_FILTERFM; | 85 xs_cfg.filterFt = SIDEMU_DEFAULTFILTERFT; |
90 xs_cfg.filterFt = XMMS_SID_DEFAULT_FILTERFT; | |
91 */ | 86 */ |
92 } | 87 } |
93 | 88 |
94 | 89 |
95 /* | 90 /* |
96 * Get the configuration (from file or default) | 91 * Get the configuration (from file or default) |
97 */ | 92 */ |
98 void xs_get_configure(void) | 93 void xs_read_configuration(void) |
99 { | 94 { |
100 gchar *cfg_fn, *tmpstr; | 95 gchar *cfgFilename, *tmpStr; |
101 ConfigFile *cfg_file; | 96 ConfigFile *cfgFile; |
102 gint i; | 97 gint i; |
103 | 98 |
104 XSDEBUG("initializing configuration ...\n"); | 99 XSDEBUG("initializing configuration ...\n"); |
105 | 100 |
106 /* Pre-initialize configuration structure */ | 101 /* Pre-initialize configuration structure */ |
107 xs_cfg.fmtBitsPerSample = 16; | 102 xs_cfg.fmtBitsPerSample = 16; |
108 xs_cfg.fmtChannels = XMMS_SID_CHN_MONO; | 103 xs_cfg.fmtChannels = XS_CHN_MONO; |
109 xs_cfg.fmtFrequency = 44100; | 104 xs_cfg.fmtFrequency = 44100; |
110 | 105 |
111 xs_cfg.muffledOutput = FALSE; | 106 xs_cfg.mos8580 = FALSE; |
112 xs_cfg.addStaticNoise = FALSE; | 107 xs_cfg.emulateFilters = TRUE; |
113 | 108 xs_reset_filters(); |
114 | 109 xs_cfg.memoryMode = XS_MPU_BANK_SWITCHING; |
115 xs_cfg.mos8580 = FALSE; | 110 xs_cfg.clockSpeed = XS_CLOCK_PAL; |
116 xs_cfg.emulateFilter = TRUE; | 111 xs_cfg.forceSpeed = FALSE; |
117 xs_reset_filters(); | 112 |
118 xs_cfg.memoryMode = XMMS_SID_MPU_BANK_SWITCHING; | 113 xs_cfg.oversampleEnable = FALSE; |
119 xs_cfg.clockSpeed = XMMS_SID_CLOCK_PAL; | 114 xs_cfg.oversampleFactor = XS_MIN_OVERSAMPLE; |
120 xs_cfg.forceSpeed = FALSE; | 115 |
121 | 116 xs_cfg.playMaxTimeEnable = FALSE; |
122 | 117 xs_cfg.playMaxTime = 150; |
123 xs_cfg.playUseMaxTime = FALSE; | 118 xs_cfg.songlenDBEnable = FALSE; |
124 xs_cfg.playMaxTime = 150; | 119 xs_strcalloc(&xs_cfg.songlenDBPath, "~/C64Music/Songlengths.txt"); |
125 xs_cfg.playMethod = XMMS_SID_PMETHOD_NONE; | 120 |
126 xs_cfg.playMaxSilentTime = 20; | 121 xs_cfg.stilDBEnable = FALSE; |
127 xs_cfg.playSilentPercent = 3; | 122 xs_strcalloc(&xs_cfg.stilDBPath, "~/C64Music/DOCUMENTS/STIL.txt"); |
128 xs_strcalloc(&xs_cfg.playDBPath, "~/C64Music/Songlength.txt"); | 123 |
129 | 124 xs_cfg.detectMagic = FALSE; |
130 | 125 |
131 xs_cfg.useSTIL = FALSE; | 126 xs_cfg.titleOverride = FALSE; |
132 xs_strcalloc(&xs_cfg.STILpath, "~/C64Music/DOCUMENTS/STIL.txt"); | 127 xs_strcalloc(&xs_cfg.titleFormat, "%1 - %2"); |
133 | 128 |
134 xs_cfg.finfoUseColors = TRUE; | 129 |
135 xs_cfg.detectMagic = FALSE; | 130 /* Try to open the XMMS configuration file */ |
136 | 131 XSDEBUG("loading from config-file ...\n"); |
137 | 132 |
138 xs_cfg.titleOverride = FALSE; | 133 cfgFilename = g_strconcat(g_get_home_dir(), XS_CONFIG_FILE, NULL); |
139 xs_strcalloc(&xs_cfg.titleFormat, "%1 - %2"); | 134 cfgFile = xmms_cfg_open_file(cfgFilename); |
140 | 135 g_free(cfgFilename); |
141 | 136 if (cfgFile == NULL) |
142 /* Try to open the XMMS configuration file */ | 137 { |
143 XSDEBUG("loading from config-file ...\n"); | 138 XSDEBUG("could not open configuration file, trying to write defaults...\n"); |
144 | 139 xs_write_configuration(); |
145 cfg_fn = g_strconcat(g_get_home_dir(), "/.xmms/config", NULL); | 140 return; |
146 cfg_file = xmms_cfg_open_file(cfg_fn); | 141 } |
147 g_free(cfg_fn); | 142 |
148 if (cfg_file == NULL) return; | 143 |
149 | 144 /* Read the new settings from XMMS configuration file */ |
150 | 145 for (i = 0; i < XS_CFGTABLE_MAX; i++) |
151 /* Read the new settings from XMMS configuration file */ | 146 { |
152 for (i = 0; i < XS_CFGTABLE_MAX; i++) { | 147 switch (xs_cfgtable[i].atype) { |
153 | 148 case ATYPE_INT: |
154 switch (xs_cfgtable[i].atype) { | 149 xmms_cfg_read_int(cfgFile, XS_CONFIG_IDENT, xs_cfgtable[i].aname, (gint *) xs_cfgtable[i].adata); |
155 case ATYPE_INT: | 150 break; |
156 xmms_cfg_read_int(cfg_file, XS_CONFIG_IDENT, xs_cfgtable[i].aname, (gint *) xs_cfgtable[i].adata); | 151 |
157 break; | 152 case ATYPE_BOOL: |
158 | 153 xmms_cfg_read_boolean(cfgFile, XS_CONFIG_IDENT, xs_cfgtable[i].aname, (gboolean *) xs_cfgtable[i].adata); |
159 case ATYPE_BOOL: | 154 break; |
160 xmms_cfg_read_boolean(cfg_file, XS_CONFIG_IDENT, xs_cfgtable[i].aname, (gboolean *) xs_cfgtable[i].adata); | 155 |
161 break; | 156 case ATYPE_FLOAT: |
162 | 157 xmms_cfg_read_float(cfgFile, XS_CONFIG_IDENT, xs_cfgtable[i].aname, (gfloat *) xs_cfgtable[i].adata); |
163 case ATYPE_FLOAT: | 158 break; |
164 xmms_cfg_read_float(cfg_file, XS_CONFIG_IDENT, xs_cfgtable[i].aname, (gfloat *) xs_cfgtable[i].adata); | 159 |
165 break; | 160 case ATYPE_STR: |
166 | 161 if (xmms_cfg_read_string(cfgFile, XS_CONFIG_IDENT, xs_cfgtable[i].aname, (gchar **) &tmpStr)) |
167 case ATYPE_STR: | 162 { |
168 if (xmms_cfg_read_string(cfg_file, XS_CONFIG_IDENT, xs_cfgtable[i].aname, (gchar **) &tmpstr)) | 163 /* Read was successfull */ |
169 { | 164 xs_strcalloc((gchar **) xs_cfgtable[i].adata, tmpStr); |
170 /* Read was successfull */ | 165 g_free(tmpStr); |
171 xs_strcalloc((gchar **) xs_cfgtable[i].adata, tmpstr); | 166 } |
172 g_free(tmpstr); | 167 break; |
173 } | 168 |
174 break; | 169 default: |
175 | 170 XSERR("Internal: Unsupported setting type found while reading configuration file. Please report to author!\n"); |
176 default: | 171 break; |
177 XSERR("Internal: Unsupported setting type found while reading configuration file. Please report to author!\n"); | 172 } |
178 break; | 173 } |
179 } | 174 |
180 } | 175 |
181 | 176 /* Free the config file */ |
182 | 177 xmms_cfg_free(cfgFile); |
183 /* Free the config file */ | 178 |
184 xmms_cfg_free(cfg_file); | 179 xs_write_configuration(); |
185 | 180 |
186 XSDEBUG("OK\n"); | 181 XSDEBUG("OK\n"); |
187 } | 182 } |
188 | 183 |
184 | |
185 | |
186 /* | |
187 * Write the current configuration | |
188 */ | |
189 gint xs_write_configuration(void) | |
190 { | |
191 gchar *cfgFilename; | |
192 ConfigFile *cfgFile; | |
193 gint i; | |
194 | |
195 XSDEBUG("writing configuration ...\n"); | |
196 | |
197 /* | |
198 * Try to open the XMMS configuration file | |
199 */ | |
200 cfgFilename = g_strconcat(g_get_home_dir(), XS_CONFIG_FILE, NULL); | |
201 cfgFile = xmms_cfg_open_file(cfgFilename); | |
202 | |
203 if (!cfgFile) | |
204 cfgFile = xmms_cfg_new(); | |
205 | |
206 | |
207 /* Write the new settings to XMMS configuration file */ | |
208 for (i = 0; i < XS_CFGTABLE_MAX; i++) | |
209 { | |
210 switch (xs_cfgtable[i].atype) { | |
211 case ATYPE_INT: | |
212 xmms_cfg_write_int(cfgFile, XS_CONFIG_IDENT, xs_cfgtable[i].aname, *(gint *) xs_cfgtable[i].adata); | |
213 break; | |
214 | |
215 case ATYPE_BOOL: | |
216 xmms_cfg_write_boolean(cfgFile, XS_CONFIG_IDENT, xs_cfgtable[i].aname, *(gboolean *) xs_cfgtable[i].adata); | |
217 break; | |
218 | |
219 case ATYPE_FLOAT: | |
220 xmms_cfg_write_float(cfgFile, XS_CONFIG_IDENT, xs_cfgtable[i].aname, *(gfloat *) xs_cfgtable[i].adata); | |
221 break; | |
222 | |
223 case ATYPE_STR: | |
224 xmms_cfg_write_string(cfgFile, XS_CONFIG_IDENT, xs_cfgtable[i].aname, *(gchar **) xs_cfgtable[i].adata); | |
225 break; | |
226 | |
227 default: | |
228 XSERR("Internal: Unsupported setting type found while writing configuration file. Please report to author!\n"); | |
229 break; | |
230 } | |
231 } | |
232 | |
233 /* Flush the file */ | |
234 xmms_cfg_write_file(cfgFile, cfgFilename); | |
235 | |
236 /* Free the memory areas */ | |
237 xmms_cfg_free(cfgFile); | |
238 g_free(cfgFilename); | |
239 | |
240 return 0; | |
241 } | |
242 | |
243 | |
244 /* | |
245 * Configuration panel was canceled | |
246 */ | |
247 void xs_cfg_cancel(void) | |
248 { | |
249 gtk_widget_destroy(xs_configwin); | |
250 xs_configwin = NULL; | |
251 } | |
252 | |
253 | |
254 /* | |
255 * Configuration was accepted (OK), save the settings | |
256 */ | |
257 void xs_cfg_ok(void) | |
258 { | |
259 XSDEBUG("get data from widgets to config...\n"); | |
260 | |
261 /* Check the resolution settings */ | |
262 if (GTK_TOGGLE_BUTTON(LUW("cfg_res_16bit"))->active) | |
263 xs_cfg.fmtBitsPerSample = XS_RES_16BIT; | |
264 else | |
265 xs_cfg.fmtBitsPerSample = XS_RES_8BIT; | |
266 | |
267 | |
268 /* Channel settings */ | |
269 if (GTK_TOGGLE_BUTTON(LUW("cfg_chn_mono"))->active) | |
270 xs_cfg.fmtChannels = XS_CHN_MONO; | |
271 else | |
272 if (GTK_TOGGLE_BUTTON(LUW("cfg_chn_stereo"))->active) | |
273 xs_cfg.fmtChannels = XS_CHN_STEREO; | |
274 else | |
275 if (GTK_TOGGLE_BUTTON(LUW("cfg_chn_autopan"))->active) | |
276 xs_cfg.fmtChannels = XS_CHN_AUTOPAN; | |
277 | |
278 | |
279 /* Frequency setting */ | |
280 xs_cfg.fmtFrequency = (gint) GTK_ADJUSTMENT(LUW("cfg_samplerate_adj"))->value; | |
281 | |
282 | |
283 /* Filter and waveform settings */ | |
284 xs_cfg.mos8580 = GTK_TOGGLE_BUTTON(LUW("cfg_wav_mos8580"))->active; | |
285 | |
286 xs_cfg.emulateFilters = GTK_TOGGLE_BUTTON(LUW("cfg_emufilters"))->active; | |
287 | |
288 xs_cfg.filterFs = GTK_ADJUSTMENT(LUW("cfg_filt_fs_adj"))->value; | |
289 xs_cfg.filterFm = GTK_ADJUSTMENT(LUW("cfg_filt_fm_adj"))->value; | |
290 xs_cfg.filterFt = GTK_ADJUSTMENT(LUW("cfg_filt_ft_adj"))->value; | |
291 | |
292 | |
293 /* Memorymode settings */ | |
294 if (GTK_TOGGLE_BUTTON(LUW("cfg_mem_banksw"))->active) | |
295 xs_cfg.memoryMode = XS_MPU_BANK_SWITCHING; | |
296 else | |
297 if (GTK_TOGGLE_BUTTON(LUW("cfg_mem_transrom"))->active) | |
298 xs_cfg.memoryMode = XS_MPU_TRANSPARENT_ROM; | |
299 else | |
300 if (GTK_TOGGLE_BUTTON(LUW("cfg_mem_playsid"))->active) | |
301 xs_cfg.memoryMode = XS_MPU_PLAYSID_ENVIRONMENT; | |
302 | |
303 /* Clockspeed settings */ | |
304 if (GTK_TOGGLE_BUTTON(LUW("cfg_clock_ntsc"))->active) | |
305 xs_cfg.clockSpeed = XS_CLOCK_NTSC; | |
306 else | |
307 xs_cfg.clockSpeed = XS_CLOCK_PAL; | |
308 | |
309 xs_cfg.forceSpeed = GTK_TOGGLE_BUTTON(LUW("cfg_clock_force"))->active; | |
310 | |
311 | |
312 /* Songlength-detection settings */ | |
313 xs_cfg.playMaxTimeEnable = GTK_TOGGLE_BUTTON(LUW("cfg_sld_usemaxtime"))->active; | |
314 xs_cfg.playMaxTime = GTK_ADJUSTMENT(LUW("cfg_sld_maxtime_adj"))->value; | |
315 | |
316 xs_cfg.songlenDBEnable = (GTK_TOGGLE_BUTTON(LUW("cfg_sld"))->active); | |
317 xs_strcalloc(&xs_cfg.songlenDBPath, gtk_entry_get_text(GTK_ENTRY(LUW("cfg_sld_dbpath")))); | |
318 | |
319 | |
320 /* STIL and miscellaneous settings */ | |
321 xs_cfg.stilDBEnable = GTK_TOGGLE_BUTTON(LUW("cfg_stil_use"))->active; | |
322 xs_strcalloc(&xs_cfg.stilDBPath, gtk_entry_get_text(GTK_ENTRY(LUW("cfg_stil_path")))); | |
323 | |
324 xs_cfg.detectMagic = GTK_TOGGLE_BUTTON(LUW("cfg_detectmagic"))->active; | |
325 | |
326 /* Title settings */ | |
327 xs_cfg.titleOverride = GTK_TOGGLE_BUTTON(LUW("cfg_ftitle_override"))->active; | |
328 xs_strcalloc(&xs_cfg.titleFormat, gtk_entry_get_text(GTK_ENTRY(LUW("cfg_ftitle_format")))); | |
329 | |
330 | |
331 /* Write settings */ | |
332 xs_write_configuration(); | |
333 | |
334 /* NOTICE/FIXME FIX ME: if songlendb or stildb settings changed, we need to flush and reread them */ | |
335 | |
336 /* Close window */ | |
337 gtk_widget_destroy(xs_configwin); | |
338 xs_configwin = NULL; | |
339 } | |
340 | |
341 | |
342 /* | |
343 * Update filter setting sliders | |
344 */ | |
345 void xs_update_filters(void) | |
346 { | |
347 gtk_adjustment_set_value(GTK_ADJUSTMENT(LUW("cfg_filt_fs_adj")), xs_cfg.filterFs); | |
348 gtk_adjustment_set_value(GTK_ADJUSTMENT(LUW("cfg_filt_fm_adj")), xs_cfg.filterFm); | |
349 gtk_adjustment_set_value(GTK_ADJUSTMENT(LUW("cfg_filt_ft_adj")), xs_cfg.filterFt); | |
350 } | |
351 | |
352 | |
353 /* | |
354 * Reset filter settings to defaults | |
355 */ | |
356 void xs_cfg_filter_reset(void) | |
357 { | |
358 xs_reset_filters(); | |
359 xs_update_filters(); | |
360 } | |
361 | |
362 | |
363 /* | |
364 * HVSC songlength-database file selector response-functions | |
365 */ | |
366 void xs_cfg_sld_dbbrowse(GtkButton *button, gpointer user_data) | |
367 { | |
368 } | |
369 | |
370 | |
371 void xs_cfg_sldb_fs_ok(void) | |
372 { | |
373 /* Selection was accepted! */ | |
374 gtk_entry_set_text(GTK_ENTRY(LUW("cfg_sld_dbpath")), | |
375 gtk_file_selection_get_filename(GTK_FILE_SELECTION(xs_sldb_fileselector)) | |
376 ); | |
377 | |
378 /* Close file selector window */ | |
379 gtk_widget_destroy(xs_sldb_fileselector); | |
380 xs_sldb_fileselector = NULL; | |
381 } | |
382 | |
383 | |
384 void xs_cfg_sldb_fs_cancel(void) | |
385 { | |
386 /* Close file selector window */ | |
387 gtk_widget_destroy(xs_sldb_fileselector); | |
388 xs_sldb_fileselector = NULL; | |
389 } | |
390 | |
391 | |
392 /* | |
393 * STIL-database file selector response-functions | |
394 */ | |
395 void xs_cfg_stil_browse(GtkButton *button, gpointer user_data) | |
396 { | |
397 | |
398 } | |
399 | |
400 | |
401 void xs_cfg_stil_fs_ok(void) | |
402 { | |
403 /* Selection was accepted! */ | |
404 gtk_entry_set_text(GTK_ENTRY(LUW("cfg_stil_path")), | |
405 gtk_file_selection_get_filename(GTK_FILE_SELECTION(xs_stil_fileselector))); | |
406 | |
407 /* Close file selector window */ | |
408 gtk_widget_destroy(xs_stil_fileselector); | |
409 xs_stil_fileselector = NULL; | |
410 } | |
411 | |
412 | |
413 void xs_cfg_stil_fs_cancel(void) | |
414 { | |
415 /* Close file selector window */ | |
416 gtk_widget_destroy(xs_stil_fileselector); | |
417 xs_stil_fileselector = NULL; | |
418 } | |
419 | |
420 | |
421 /* | |
422 * Execute the configuration panel | |
423 */ | |
424 void xs_configure(void) | |
425 { | |
426 /* Check if the window already exists */ | |
427 if (xs_configwin != NULL) | |
428 { | |
429 gdk_window_raise(xs_configwin->window); | |
430 return; | |
431 } | |
432 | |
433 /* Create the window */ | |
434 xs_configwin = create_xs_configwin(); | |
435 | |
189 #if 0 | 436 #if 0 |
190 /* | |
191 * Configuration panel was canceled | |
192 */ | |
193 void xs_configure_cancel(void) | |
194 { | |
195 gtk_widget_destroy(xs_configwin); | |
196 xs_configwin = NULL; | |
197 } | |
198 | |
199 | |
200 /* | |
201 * Configuration was accepted (OK), save the settings | |
202 */ | |
203 void xs_configure_ok(void) | |
204 { | |
205 ConfigFile *cfg_file; | |
206 gchar *cfg_fn; | |
207 gint i; | |
208 | |
209 XSDEBUG("get data from widgets to config...\n"); | |
210 | |
211 /* Check the resolution settings */ | |
212 if (GTK_TOGGLE_BUTTON(cfg_res_16bit)->active) | |
213 xs_cfg.fmtBitsPerSample = 16; | |
214 else if (GTK_TOGGLE_BUTTON(cfg_res_8bit)->active) | |
215 xs_cfg.fmtBitsPerSample = 8; | |
216 | |
217 | |
218 /* Channel settings */ | |
219 if (GTK_TOGGLE_BUTTON(cfg_chn_mono)->active) | |
220 xs_cfg.fmtChannels = XMMS_SID_CHN_MONO; | |
221 else if (GTK_TOGGLE_BUTTON(cfg_chn_stereo)->active) | |
222 xs_cfg.fmtChannels = XMMS_SID_CHN_STEREO; | |
223 else if (GTK_TOGGLE_BUTTON(cfg_chn_autopan)->active) | |
224 xs_cfg.fmtChannels = XMMS_SID_CHN_AUTOPAN; | |
225 | |
226 /* Frequency setting */ | |
227 xs_cfg.fmtFrequency = (gint) GTK_ADJUSTMENT(cfg_samplerate_adj)->value; | |
228 | |
229 /* Experimental settings */ | |
230 xs_cfg.muffledOutput = GTK_TOGGLE_BUTTON(cfg_muffledoutput)->active; | |
231 xs_cfg.addStaticNoise = GTK_TOGGLE_BUTTON(cfg_addstaticnoise)->active; | |
232 | |
233 | |
234 /* Filter and waveform settings */ | |
235 xs_cfg.mos8580 = ((GTK_TOGGLE_BUTTON(cfg_wav_mos8580)->active) && (!GTK_TOGGLE_BUTTON(cfg_wav_mos6581)->active)); | |
236 | |
237 xs_cfg.emulateFilter = GTK_TOGGLE_BUTTON(cfg_emufilters)->active; | |
238 | |
239 xs_cfg.filterFs = GTK_ADJUSTMENT(cfg_filt_fs_adj)->value; | |
240 xs_cfg.filterFm = GTK_ADJUSTMENT(cfg_filt_fm_adj)->value; | |
241 xs_cfg.filterFt = GTK_ADJUSTMENT(cfg_filt_ft_adj)->value; | |
242 | |
243 | |
244 /* Memorymode settings */ | |
245 if (GTK_TOGGLE_BUTTON(cfg_mem_banksw)->active) | |
246 xs_cfg.memoryMode = XMMS_SID_MPU_BANK_SWITCHING; | |
247 else if (GTK_TOGGLE_BUTTON(cfg_mem_transrom)->active) | |
248 xs_cfg.memoryMode = XMMS_SID_MPU_TRANSPARENT_ROM; | |
249 else if (GTK_TOGGLE_BUTTON(cfg_mem_playsid)->active) | |
250 xs_cfg.memoryMode = XMMS_SID_MPU_PLAYSID_ENVIRONMENT; | |
251 | |
252 | |
253 /* Clockspeed settings */ | |
254 if (GTK_TOGGLE_BUTTON(cfg_clock_pal)->active) | |
255 xs_cfg.clockSpeed = XMMS_SID_CLOCK_PAL; | |
256 else if (GTK_TOGGLE_BUTTON(cfg_clock_ntsc)->active) | |
257 xs_cfg.clockSpeed = XMMS_SID_CLOCK_NTSC; | |
258 | |
259 xs_cfg.forceSpeed = GTK_TOGGLE_BUTTON(cfg_clock_force)->active; | |
260 | |
261 | |
262 /* Songlength-detection settings */ | |
263 xs_cfg.playUseMaxTime = GTK_TOGGLE_BUTTON(cfg_sld_usemaxtime)->active; | |
264 xs_cfg.playMaxTime = GTK_ADJUSTMENT(cfg_sld_maxtime_adj)->value; | |
265 | |
266 if (GTK_TOGGLE_BUTTON(cfg_sld_none)->active) | |
267 xs_cfg.playMethod = XMMS_SID_PMETHOD_NONE; | |
268 else if (GTK_TOGGLE_BUTTON(cfg_sld_maxsilence)->active) | |
269 xs_cfg.playMethod = XMMS_SID_PMETHOD_MAXSILENCE; | |
270 else if (GTK_TOGGLE_BUTTON(cfg_sld_database)->active) | |
271 xs_cfg.playMethod = XMMS_SID_PMETHOD_DATABASE; | |
272 | |
273 xs_cfg.playMaxSilentTime = GTK_ADJUSTMENT(cfg_sld_silencetime_adj)->value; | |
274 xs_cfg.playSilentPercent = GTK_ADJUSTMENT(cfg_sld_percentage_adj)->value; | |
275 | |
276 xs_strcalloc(&xs_cfg.playDBPath, gtk_entry_get_text(GTK_ENTRY(cfg_sld_dbpath))); | |
277 | |
278 | |
279 /* STIL and miscellaneous settings */ | |
280 xs_cfg.useSTIL = GTK_TOGGLE_BUTTON(cfg_stil_use)->active; | |
281 | |
282 xs_strcalloc(&xs_cfg.STILpath, gtk_entry_get_text(GTK_ENTRY(cfg_stil_path))); | |
283 | |
284 xs_cfg.finfoUseColors = GTK_TOGGLE_BUTTON(cfg_finfo_usecolors)->active; | |
285 xs_cfg.detectMagic = GTK_TOGGLE_BUTTON(cfg_detectmagic)->active; | |
286 | |
287 | |
288 /* Title settings */ | |
289 xs_cfg.titleOverride = GTK_TOGGLE_BUTTON(cfg_ftitle_override)->active; | |
290 | |
291 xs_strcalloc(&xs_cfg.titleFormat, gtk_entry_get_text(GTK_ENTRY(cfg_ftitle_format))); | |
292 | |
293 | |
294 /* | |
295 * Try to open the XMMS configuration file | |
296 */ | |
297 cfg_fn = g_strconcat(g_get_home_dir(), "/.xmms/config", NULL); | |
298 cfg_file = xmms_cfg_open_file(cfg_fn); | |
299 | |
300 if (!cfg_file) | |
301 cfg_file = xmms_cfg_new(); | |
302 | |
303 | |
304 /* Write the new settings to XMMS configuration file */ | |
305 for (i = 0; i < XS_CFGTABLE_MAX; i++) { | |
306 | |
307 switch (xs_cfgtable[i].atype) { | |
308 case ATYPE_INT: | |
309 xmms_cfg_write_int(cfg_file, XS_CONFIG_IDENT, xs_cfgtable[i].aname, *(gint *) xs_cfgtable[i].adata); | |
310 break; | |
311 | |
312 case ATYPE_BOOL: | |
313 xmms_cfg_write_boolean(cfg_file, XS_CONFIG_IDENT, xs_cfgtable[i].aname, *(gboolean *) xs_cfgtable[i].adata); | |
314 break; | |
315 | |
316 case ATYPE_FLOAT: | |
317 xmms_cfg_write_float(cfg_file, XS_CONFIG_IDENT, xs_cfgtable[i].aname, *(gfloat *) xs_cfgtable[i].adata); | |
318 break; | |
319 | |
320 case ATYPE_STR: | |
321 xmms_cfg_write_string(cfg_file, XS_CONFIG_IDENT, xs_cfgtable[i].aname, *(gchar **) xs_cfgtable[i].adata); | |
322 break; | |
323 | |
324 default: | |
325 XSERR("Internal: Unsupported setting type found while writing configuration file. Please report to author!\n"); | |
326 break; | |
327 } | |
328 | |
329 } | |
330 | |
331 /* Flush the file */ | |
332 xmms_cfg_write_file(cfg_file, cfg_fn); | |
333 | |
334 /* Free the memory areas */ | |
335 xmms_cfg_free(cfg_file); | |
336 | |
337 g_free(cfg_fn); | |
338 | |
339 gtk_widget_destroy(xs_configwin); | |
340 xs_configwin = NULL; | |
341 } | |
342 | |
343 | |
344 /* | |
345 * Update filter setting sliders | |
346 */ | |
347 static void xs_update_filters(void) | |
348 { | |
349 gtk_adjustment_set_value(GTK_ADJUSTMENT(cfg_filt_fs_adj), xs_cfg.filterFs); | |
350 gtk_adjustment_set_value(GTK_ADJUSTMENT(cfg_filt_fm_adj), xs_cfg.filterFm); | |
351 gtk_adjustment_set_value(GTK_ADJUSTMENT(cfg_filt_ft_adj), xs_cfg.filterFt); | |
352 } | |
353 | |
354 | |
355 /* | |
356 * Reset filter settings to defaults | |
357 */ | |
358 static void xs_cfg_filter_reset(void) | |
359 { | |
360 xs_reset_filters(); | |
361 xs_update_filters(); | |
362 } | |
363 | |
364 | |
365 /* | |
366 * HVSC songlength-database file selector response-functions | |
367 */ | |
368 void xs_cfg_sld_fs_ok(void) | |
369 { | |
370 /* Selection was accepted! */ | |
371 gtk_entry_set_text(GTK_ENTRY(cfg_sld_dbpath), gtk_file_selection_get_filename(GTK_FILE_SELECTION(xs_sld_fileselector)) | |
372 ); | |
373 | |
374 /* Close file selector window */ | |
375 gtk_widget_destroy(xs_sld_fileselector); | |
376 xs_sld_fileselector = NULL; | |
377 } | |
378 | |
379 | |
380 void xs_cfg_sld_fs_cancel(void) | |
381 { | |
382 /* Close file selector window */ | |
383 gtk_widget_destroy(xs_sld_fileselector); | |
384 xs_sld_fileselector = NULL; | |
385 } | |
386 | |
387 | |
388 /* | |
389 * STIL-database file selector response-functions | |
390 */ | |
391 void xs_cfg_stil_fs_ok(void) | |
392 { | |
393 /* Selection was accepted! */ | |
394 gtk_entry_set_text(GTK_ENTRY(cfg_stil_path), gtk_file_selection_get_filename(GTK_FILE_SELECTION(xs_stil_fileselector)) | |
395 ); | |
396 | |
397 /* Close file selector window */ | |
398 gtk_widget_destroy(xs_stil_fileselector); | |
399 xs_stil_fileselector = NULL; | |
400 } | |
401 | |
402 | |
403 void xs_cfg_stil_fs_cancel(void) | |
404 { | |
405 /* Close file selector window */ | |
406 gtk_widget_destroy(xs_stil_fileselector); | |
407 xs_stil_fileselector = NULL; | |
408 } | |
409 | |
410 | |
411 /* | |
412 * Execute the configuration panel | |
413 */ | |
414 void xs_configure(void) | |
415 { | |
416 | |
417 /* Check if the window already exists */ | |
418 if (xs_configwin != NULL) { | |
419 gdk_window_raise(xs_configwin->window); | |
420 return; | |
421 } | |
422 | |
423 | |
424 | |
425 | 437 |
426 /* Set the states of widgets */ | 438 /* Set the states of widgets */ |
427 | 439 |
428 /* Sound resolution settings */ | 440 /* Sound resolution settings */ |
429 switch (xs_cfg.fmtBitsPerSample) { | 441 switch (xs_cfg.fmtBitsPerSample) { |
452 } | 464 } |
453 | 465 |
454 | 466 |
455 /* Memorymode settings */ | 467 /* Memorymode settings */ |
456 switch (xs_cfg.memoryMode) { | 468 switch (xs_cfg.memoryMode) { |
457 case XMMS_SID_MPU_BANK_SWITCHING: | 469 case XS_MPU_BANK_SWITCHING: |
458 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(cfg_mem_banksw), TRUE); | 470 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(cfg_mem_banksw), TRUE); |
459 break; | 471 break; |
460 | 472 |
461 case XMMS_SID_MPU_TRANSPARENT_ROM: | 473 case XS_MPU_TRANSPARENT_ROM: |
462 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(cfg_mem_transrom), TRUE); | 474 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(cfg_mem_transrom), TRUE); |
463 break; | 475 break; |
464 | 476 |
465 case XMMS_SID_MPU_PLAYSID_ENVIRONMENT: | 477 case XS_MPU_PLAYSID_ENVIRONMENT: |
466 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(cfg_mem_playsid), TRUE); | 478 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(cfg_mem_playsid), TRUE); |
467 break; | 479 break; |
468 } | 480 } |
469 | 481 |
470 | 482 |
483 xs_cfg_filt_update(); | 495 xs_cfg_filt_update(); |
484 | 496 |
485 | 497 |
486 /* Song-length detection */ | 498 /* Song-length detection */ |
487 switch (xs_cfg.playMethod) { | 499 switch (xs_cfg.playMethod) { |
488 case XMMS_SID_PMETHOD_NONE: | 500 case XS_PMETHOD_NONE: |
489 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(cfg_sld_none), TRUE); | 501 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(cfg_sld_none), TRUE); |
490 break; | 502 break; |
491 | 503 |
492 case XMMS_SID_PMETHOD_MAXSILENCE: | 504 case XS_PMETHOD_MAXSILENCE: |
493 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(cfg_sld_maxsilence), TRUE); | 505 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(cfg_sld_maxsilence), TRUE); |
494 break; | 506 break; |
495 | 507 |
496 | 508 |
497 case XMMS_SID_PMETHOD_DATABASE: | 509 case XS_PMETHOD_DATABASE: |
498 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(cfg_sld_database), TRUE); | 510 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(cfg_sld_database), TRUE); |
499 break; | 511 break; |
500 } | 512 } |
501 | 513 |
502 if (xs_cfg.playUseMaxTime) { | 514 if (xs_cfg.playUseMaxTime) { |
537 | 549 |
538 if (xs_cfg.titleFormat != NULL) { | 550 if (xs_cfg.titleFormat != NULL) { |
539 gtk_entry_set_text(GTK_ENTRY(cfg_ftitle_format), xs_cfg.titleFormat); | 551 gtk_entry_set_text(GTK_ENTRY(cfg_ftitle_format), xs_cfg.titleFormat); |
540 } | 552 } |
541 | 553 |
542 | |
543 gtk_widget_show(xs_configwin); | |
544 } | |
545 | |
546 #endif | 554 #endif |
547 void xs_configure(void) | 555 |
548 { | 556 gtk_widget_show(xs_configwin); |
549 } | 557 } |
558 |