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