diff src/xs_config.c @ 57:85811bcd049e

Improved, re-written configuration code and lots of minor fixes
author Matti Hamalainen <ccr@tnsp.org>
date Sun, 22 Jun 2003 11:01:03 +0000
parents dae6d3c2268d
children 05220299c6e8
line wrap: on
line diff
--- a/src/xs_config.c	Sun Jun 22 00:17:04 2003 +0000
+++ b/src/xs_config.c	Sun Jun 22 11:01:03 2003 +0000
@@ -40,37 +40,82 @@
  * Configuration specific stuff
  */
 t_xs_cfg_item xs_cfgtable[] = {
-	{ATYPE_INT,	&xs_cfg.fmtBitsPerSample,"fmtBitsPerSample"},
-	{ATYPE_INT,	&xs_cfg.fmtChannels,	"fmtChannels"},
-	{ATYPE_INT,	&xs_cfg.fmtFrequency,	"fmtFrequency"},
+	{CTYPE_INT,	&xs_cfg.fmtBitsPerSample,	"fmtBitsPerSample"},
+	{CTYPE_INT,	&xs_cfg.fmtChannels,		"fmtChannels"},
+	{CTYPE_INT,	&xs_cfg.fmtFrequency,		"fmtFrequency"},
 
-	{ATYPE_BOOL,	&xs_cfg.mos8580,	"mos8580"},
-	{ATYPE_BOOL,	&xs_cfg.emulateFilters,	"emulateFilters"},
-	{ATYPE_FLOAT,	&xs_cfg.filterFs,	"filterFs"},
-	{ATYPE_FLOAT,	&xs_cfg.filterFm,	"filterFm"},
-	{ATYPE_FLOAT,	&xs_cfg.filterFt,	"filterFt"},
-	{ATYPE_INT,	&xs_cfg.memoryMode,	"memoryMode"},
-	{ATYPE_INT,	&xs_cfg.clockSpeed,	"clockSpeed"},
-	{ATYPE_BOOL,	&xs_cfg.forceSpeed,	"forceSpeed"},
+	{CTYPE_BOOL,	&xs_cfg.mos8580,		"mos8580"},
+	{CTYPE_BOOL,	&xs_cfg.emulateFilters,		"emulateFilters"},
+	{CTYPE_FLOAT,	&xs_cfg.filterFs,		"filterFs"},
+	{CTYPE_FLOAT,	&xs_cfg.filterFm,		"filterFm"},
+	{CTYPE_FLOAT,	&xs_cfg.filterFt,		"filterFt"},
+	{CTYPE_INT,	&xs_cfg.memoryMode,		"memoryMode"},
+	{CTYPE_INT,	&xs_cfg.clockSpeed,		"clockSpeed"},
+	{CTYPE_BOOL,	&xs_cfg.forceSpeed,		"forceSpeed"},
 
-	{ATYPE_BOOL,	&xs_cfg.oversampleEnable,"oversampleEnable"},
-	{ATYPE_INT,	&xs_cfg.oversampleFactor,"oversampleFactor"},
+	{CTYPE_BOOL,	&xs_cfg.oversampleEnable,	"oversampleEnable"},
+	{CTYPE_INT,	&xs_cfg.oversampleFactor,	"oversampleFactor"},
 
-	{ATYPE_BOOL,	&xs_cfg.playMaxTimeEnable,"playMaxTimeEnable"},
-	{ATYPE_INT,	&xs_cfg.playMaxTime,	"playMaxTime"},
-	{ATYPE_BOOL,	&xs_cfg.songlenDBEnable,"songlenDBEnable"},
-	{ATYPE_STR,	&xs_cfg.songlenDBPath,	"songlenDBPath"},
+	{CTYPE_BOOL,	&xs_cfg.playMaxTimeEnable,	"playMaxTimeEnable"},
+	{CTYPE_INT,	&xs_cfg.playMaxTime,		"playMaxTime"},
+	{CTYPE_BOOL,	&xs_cfg.songlenDBEnable,	"songlenDBEnable"},
+	{CTYPE_STR,	&xs_cfg.songlenDBPath,		"songlenDBPath"},
 
-	{ATYPE_BOOL,	&xs_cfg.stilDBEnable,	"stilDBEnable"},
-	{ATYPE_STR,	&xs_cfg.stilDBPath,	"stilDBPath"},
+	{CTYPE_BOOL,	&xs_cfg.stilDBEnable,		"stilDBEnable"},
+	{CTYPE_STR,	&xs_cfg.stilDBPath,		"stilDBPath"},
 
-	{ATYPE_BOOL,	&xs_cfg.detectMagic,	"detectMagic"},
+	{CTYPE_BOOL,	&xs_cfg.detectMagic,		"detectMagic"},
+	{CTYPE_BOOL,	&xs_cfg.alwaysRaise,		"alwaysRaise"},
 
-	{ATYPE_BOOL,	&xs_cfg.titleOverride,	"titleOverride"},
-	{ATYPE_STR,	&xs_cfg.titleFormat,	"titleFormat"}
+	{CTYPE_BOOL,	&xs_cfg.titleOverride,		"titleOverride"},
+	{CTYPE_STR,	&xs_cfg.titleFormat,		"titleFormat"}
 };
 
-const gint XS_CFGTABLE_MAX = (sizeof(xs_cfgtable) / sizeof(t_xs_cfg_item));
+const gint xs_cfgtable_max = (sizeof(xs_cfgtable) / sizeof(t_xs_cfg_item));
+
+
+t_xs_wid_item xs_widtable[] = {
+{ WTYPE_BGROUP,	CTYPE_INT,	"cfg_res_16bit",	&xs_cfg.fmtBitsPerSample,	XS_RES_16BIT },
+{ WTYPE_BGROUP,	CTYPE_INT,	"cfg_res_8bit",		&xs_cfg.fmtBitsPerSample,	XS_RES_8BIT },
+
+{ WTYPE_BGROUP,	CTYPE_INT,	"cfg_chn_mono",		&xs_cfg.fmtChannels,		XS_CHN_MONO },
+{ WTYPE_BGROUP,	CTYPE_INT,	"cfg_chn_stereo",	&xs_cfg.fmtChannels,		XS_CHN_STEREO },
+{ WTYPE_BGROUP,	CTYPE_INT,	"cfg_chn_autopan",	&xs_cfg.fmtChannels,		XS_CHN_AUTOPAN },
+
+{ WTYPE_SPIN,	CTYPE_INT,	"cfg_samplerate",	&xs_cfg.fmtFrequency,		0 },
+
+{ WTYPE_BUTTON,	CTYPE_BOOL,	"cfg_emu_mos8580",	&xs_cfg.mos8580,		0 },
+{ WTYPE_BUTTON,	CTYPE_BOOL,	"cfg_emu_filters",	&xs_cfg.emulateFilters,		0 },
+
+{ WTYPE_SCALE,	CTYPE_FLOAT,	"cfg_emu_filt_fs",	&xs_cfg.filterFs,		0 },
+{ WTYPE_SCALE,	CTYPE_FLOAT,	"cfg_emu_filt_fm",	&xs_cfg.filterFm,		0 },
+{ WTYPE_SCALE,	CTYPE_FLOAT,	"cfg_emu_filt_ft",	&xs_cfg.filterFt,		0 },
+
+{ WTYPE_BGROUP,	CTYPE_INT,	"cfg_emu_mem_real",	&xs_cfg.memoryMode,		XS_MPU_REAL },
+{ WTYPE_BGROUP,	CTYPE_INT,	"cfg_emu_mem_banksw",	&xs_cfg.memoryMode,		XS_MPU_BANK_SWITCHING },
+{ WTYPE_BGROUP,	CTYPE_INT,	"cfg_emu_mem_transrom",	&xs_cfg.memoryMode,		XS_MPU_TRANSPARENT_ROM },
+{ WTYPE_BGROUP,	CTYPE_INT,	"cfg_emu_mem_playsid",	&xs_cfg.memoryMode,		XS_MPU_PLAYSID_ENVIRONMENT },
+
+{ WTYPE_BGROUP,	CTYPE_INT,	"cfg_emu_clock_ntsc",	&xs_cfg.clockSpeed,		XS_CLOCK_NTSC },
+{ WTYPE_BGROUP,	CTYPE_INT,	"cfg_emu_clock_pal",	&xs_cfg.clockSpeed,		XS_CLOCK_PAL },
+{ WTYPE_BUTTON,	CTYPE_BOOL,	"cfg_emu_clock_force",	&xs_cfg.forceSpeed,		0 },
+
+{ WTYPE_BUTTON,	CTYPE_BOOL,	"cfg_sld_usemaxtime",	&xs_cfg.playMaxTimeEnable,	0 },
+{ WTYPE_SPIN,	CTYPE_INT,	"cfg_sld_maxtime",	&xs_cfg.playMaxTime,		0 },
+{ WTYPE_BUTTON,	CTYPE_BOOL,	"cfg_sld_enable",	&xs_cfg.songlenDBEnable,	0 },
+{ WTYPE_TEXT,	CTYPE_STR,	"cfg_sld_dbpath",	&xs_cfg.songlenDBPath,		0 },
+
+{ WTYPE_BUTTON,	CTYPE_BOOL,	"cfg_stil_enable",	&xs_cfg.stilDBEnable,		0 },
+{ WTYPE_TEXT,	CTYPE_STR,	"cfg_stil_dbpath",	&xs_cfg.stilDBPath,		0 },
+
+{ WTYPE_BUTTON,	CTYPE_BOOL,	"cfg_detectmagic",	&xs_cfg.detectMagic,		0 },
+{ WTYPE_BUTTON,	CTYPE_BOOL,	"cfg_alwaysraise",	&xs_cfg.alwaysRaise,		0 },
+
+{ WTYPE_BUTTON,	CTYPE_BOOL,	"cfg_ftitle_override",	&xs_cfg.titleOverride,		0 },
+{ WTYPE_TEXT,	CTYPE_STR,	"cfg_ftitle_format",	&xs_cfg.titleFormat,		0 }
+};
+
+const gint xs_widtable_max = (sizeof(xs_widtable) / sizeof(t_xs_wid_item));
 
 
 /*
@@ -99,7 +144,7 @@
  XSDEBUG("initializing configuration ...\n");
 
  /* Pre-initialize configuration structure */
- xs_cfg.fmtBitsPerSample		= 16;
+ xs_cfg.fmtBitsPerSample	= XS_RES_16BIT;
  xs_cfg.fmtChannels		= XS_CHN_MONO;
  xs_cfg.fmtFrequency		= 44100;
 
@@ -128,6 +173,7 @@
  xs_strcalloc(&xs_cfg.stilDBPath, "~/C64Music/DOCUMENTS/STIL.txt");
 
  xs_cfg.detectMagic		= FALSE;
+ xs_cfg.alwaysRaise		= TRUE;
 
 #ifdef HAVE_XMMSEXTRA
  xs_cfg.titleOverride		= FALSE;
@@ -155,26 +201,26 @@
 	}
 
  /* Read the new settings from XMMS configuration file */
- for (i = 0; i < XS_CFGTABLE_MAX; i++)
+ for (i = 0; i < xs_cfgtable_max; i++)
  	{
-	switch (xs_cfgtable[i].atype) {
-	case ATYPE_INT:
-		xmms_cfg_read_int(cfgFile, XS_CONFIG_IDENT, xs_cfgtable[i].aname, (gint *) xs_cfgtable[i].adata);
+	switch (xs_cfgtable[i].valType) {
+	case CTYPE_INT:
+		xmms_cfg_read_int(cfgFile, XS_CONFIG_IDENT, xs_cfgtable[i].valName, (gint *) xs_cfgtable[i].valData);
 		break;
 
-	case ATYPE_BOOL:
-		xmms_cfg_read_boolean(cfgFile, XS_CONFIG_IDENT, xs_cfgtable[i].aname, (gboolean *) xs_cfgtable[i].adata);
+	case CTYPE_BOOL:
+		xmms_cfg_read_boolean(cfgFile, XS_CONFIG_IDENT, xs_cfgtable[i].valName, (gboolean *) xs_cfgtable[i].valData);
 		break;
 
-	case ATYPE_FLOAT:
-		xmms_cfg_read_float(cfgFile, XS_CONFIG_IDENT, xs_cfgtable[i].aname, (gfloat *) xs_cfgtable[i].adata);
+	case CTYPE_FLOAT:
+		xmms_cfg_read_float(cfgFile, XS_CONFIG_IDENT, xs_cfgtable[i].valName, (gfloat *) xs_cfgtable[i].valData);
 		break;
 
-	case ATYPE_STR:
-		if (xmms_cfg_read_string(cfgFile, XS_CONFIG_IDENT, xs_cfgtable[i].aname, (gchar **) &tmpStr))
+	case CTYPE_STR:
+		if (xmms_cfg_read_string(cfgFile, XS_CONFIG_IDENT, xs_cfgtable[i].valName, (gchar **) &tmpStr))
 			{
 			/* Read was successfull */
-			xs_strcalloc((gchar **) xs_cfgtable[i].adata, tmpStr);
+			xs_strcalloc((gchar **) xs_cfgtable[i].valData, tmpStr);
 			g_free(tmpStr);
 			}
 		break;
@@ -220,23 +266,23 @@
 
 
  /* Write the new settings to XMMS configuration file */
- for (i = 0; i < XS_CFGTABLE_MAX; i++)
+ for (i = 0; i < xs_cfgtable_max; i++)
  	{
-	switch (xs_cfgtable[i].atype) {
-	case ATYPE_INT:
-		xmms_cfg_write_int(cfgFile, XS_CONFIG_IDENT, xs_cfgtable[i].aname, *(gint *) xs_cfgtable[i].adata);
+	switch (xs_cfgtable[i].valType) {
+	case CTYPE_INT:
+		xmms_cfg_write_int(cfgFile, XS_CONFIG_IDENT, xs_cfgtable[i].valName, *(gint *) xs_cfgtable[i].valData);
 		break;
 
-	case ATYPE_BOOL:
-		xmms_cfg_write_boolean(cfgFile, XS_CONFIG_IDENT, xs_cfgtable[i].aname, *(gboolean *) xs_cfgtable[i].adata);
+	case CTYPE_BOOL:
+		xmms_cfg_write_boolean(cfgFile, XS_CONFIG_IDENT, xs_cfgtable[i].valName, *(gboolean *) xs_cfgtable[i].valData);
 		break;
 
-	case ATYPE_FLOAT:
-		xmms_cfg_write_float(cfgFile, XS_CONFIG_IDENT, xs_cfgtable[i].aname, *(gfloat *) xs_cfgtable[i].adata);
+	case CTYPE_FLOAT:
+		xmms_cfg_write_float(cfgFile, XS_CONFIG_IDENT, xs_cfgtable[i].valName, *(gfloat *) xs_cfgtable[i].valData);
 		break;
 
-	case ATYPE_STR:
-		xmms_cfg_write_string(cfgFile, XS_CONFIG_IDENT, xs_cfgtable[i].aname, *(gchar **) xs_cfgtable[i].adata);
+	case CTYPE_STR:
+		xmms_cfg_write_string(cfgFile, XS_CONFIG_IDENT, xs_cfgtable[i].valName, *(gchar **) xs_cfgtable[i].valData);
 		break;
 
 	default:
@@ -275,80 +321,64 @@
  */
 void xs_cfg_ok(void)
 {
+ gint i;
+ gfloat tmpValue;
+
  XSDEBUG("get data from widgets to config...\n");
 
- /* Check the resolution settings */
- if (GTK_TOGGLE_BUTTON(LUW("cfg_res_16bit"))->active)
-	xs_cfg.fmtBitsPerSample = XS_RES_16BIT;
-	else
-	xs_cfg.fmtBitsPerSample = XS_RES_8BIT;
-
-
- /* Channel settings */
- if (GTK_TOGGLE_BUTTON(LUW("cfg_chn_mono"))->active)
-	xs_cfg.fmtChannels = XS_CHN_MONO;
-	else
- if (GTK_TOGGLE_BUTTON(LUW("cfg_chn_stereo"))->active)
-	xs_cfg.fmtChannels = XS_CHN_STEREO;
-	else
- if (GTK_TOGGLE_BUTTON(LUW("cfg_chn_autopan"))->active)
-	xs_cfg.fmtChannels = XS_CHN_AUTOPAN;
-
-
- /* Frequency setting */
- xs_cfg.fmtFrequency = (gint) GTK_ADJUSTMENT(LUW("cfg_samplerate"))->value;
-
-
- /* Filter and waveform settings */
- xs_cfg.mos8580 = GTK_TOGGLE_BUTTON(LUW("cfg_emu_mos8580"))->active;
-
- xs_cfg.emulateFilters = GTK_TOGGLE_BUTTON(LUW("cfg_emu_filters"))->active;
-
- xs_cfg.filterFs = GTK_ADJUSTMENT(LUW("cfg_filt_fs_adj"))->value;
- xs_cfg.filterFm = GTK_ADJUSTMENT(LUW("cfg_filt_fm_adj"))->value;
- xs_cfg.filterFt = GTK_ADJUSTMENT(LUW("cfg_filt_ft_adj"))->value;
-
+ for (i = 0; i < xs_widtable_max; i++)
+ 	{
+	switch (xs_widtable[i].widType) {
+	case WTYPE_BGROUP:
+		/* Check if toggle-button is active */
+		if (GTK_TOGGLE_BUTTON(LUW(xs_widtable[i].widName))->active)
+			{
+			/* Yes, set the constant value */
+			*((gint *) xs_widtable[i].valData) = xs_widtable[i].valSet;
+			}
+		break;
+	
+	case WTYPE_SPIN:
+	case WTYPE_SCALE:
+		/* Get the value */
+		switch (xs_widtable[i].widType) {
+		case WTYPE_SPIN:
+			tmpValue = gtk_spin_button_get_adjustment(
+				GTK_SPIN_BUTTON(LUW(xs_widtable[i].widName)))->value;
+			break;
+		
+		case WTYPE_SCALE:
+			tmpValue = gtk_range_get_adjustment(
+				GTK_RANGE(LUW(xs_widtable[i].widName)))->value;
+			break;
+		}
+		
+		/* Set the value */
+		switch (xs_widtable[i].valType) {
+		case CTYPE_INT:
+			*((gint *) xs_widtable[i].valData) = (gint) tmpValue;
+			break;
 
- /* Memorymode settings */
- if (GTK_TOGGLE_BUTTON(LUW("cfg_emu_mem_real"))->active)
-	xs_cfg.memoryMode = XS_MPU_REAL;
-	else
- if (GTK_TOGGLE_BUTTON(LUW("cfg_emu_mem_banksw"))->active)
-	xs_cfg.memoryMode = XS_MPU_BANK_SWITCHING;
-	else
- if (GTK_TOGGLE_BUTTON(LUW("cfg_emu_mem_transrom"))->active)
-	xs_cfg.memoryMode = XS_MPU_TRANSPARENT_ROM;
-	else
- if (GTK_TOGGLE_BUTTON(LUW("cfg_emu_mem_playsid"))->active)
-	xs_cfg.memoryMode = XS_MPU_PLAYSID_ENVIRONMENT;
-
- /* Clockspeed settings */
- if (GTK_TOGGLE_BUTTON(LUW("cfg_clock_ntsc"))->active)
-	xs_cfg.clockSpeed = XS_CLOCK_NTSC;
-	else
-	xs_cfg.clockSpeed = XS_CLOCK_PAL;
+		case CTYPE_FLOAT:
+			*((gfloat *) xs_widtable[i].valData) = tmpValue;
+			break;
+		}
+		break;
+	
+	case WTYPE_BUTTON:
+		/* Check if toggle-button is active */
+		*((gboolean *) xs_widtable[i].valData) =
+			(GTK_TOGGLE_BUTTON(LUW(xs_widtable[i].widName))->active);
+		break;
 
- xs_cfg.forceSpeed = GTK_TOGGLE_BUTTON(LUW("cfg_clock_force"))->active;
-
-
- /* Songlength-detection settings */
- xs_cfg.playMaxTimeEnable = GTK_TOGGLE_BUTTON(LUW("cfg_sld_usemaxtime"))->active;
- xs_cfg.playMaxTime = GTK_ADJUSTMENT(LUW("cfg_sld_maxtime_adj"))->value;
-
- xs_cfg.songlenDBEnable = (GTK_TOGGLE_BUTTON(LUW("cfg_sld"))->active);
- xs_strcalloc(&xs_cfg.songlenDBPath, gtk_entry_get_text(GTK_ENTRY(LUW("cfg_sld_dbpath"))));
-
-
- /* STIL and miscellaneous settings */
- xs_cfg.stilDBEnable = GTK_TOGGLE_BUTTON(LUW("cfg_stil_use"))->active;
- xs_strcalloc(&xs_cfg.stilDBPath, gtk_entry_get_text(GTK_ENTRY(LUW("cfg_stil_path"))));
-
- xs_cfg.detectMagic = GTK_TOGGLE_BUTTON(LUW("cfg_detectmagic"))->active;
-
- /* Title settings */
- xs_cfg.titleOverride = GTK_TOGGLE_BUTTON(LUW("cfg_ftitle_override"))->active;
- xs_strcalloc(&xs_cfg.titleFormat, gtk_entry_get_text(GTK_ENTRY(LUW("cfg_ftitle_format"))));
-
+	case WTYPE_TEXT:
+		/* Get text from text-widget */
+		xs_strcalloc((gchar **) xs_widtable[i].valData,
+			gtk_entry_get_text(GTK_ENTRY(LUW(xs_widtable[i].widName)))
+			);
+		break;
+	}
+	}
 
  /* Write settings */
  xs_write_configuration();
@@ -362,23 +392,15 @@
 
 
 /*
- * Update filter setting sliders
- */
-void xs_update_filters(void)
-{
- gtk_adjustment_set_value(GTK_ADJUSTMENT(LUW("cfg_filt_fs_adj")), xs_cfg.filterFs);
- gtk_adjustment_set_value(GTK_ADJUSTMENT(LUW("cfg_filt_fm_adj")), xs_cfg.filterFm);
- gtk_adjustment_set_value(GTK_ADJUSTMENT(LUW("cfg_filt_ft_adj")), xs_cfg.filterFt);
-}
-
-
-/*
  * Reset filter settings to defaults
  */
 void xs_cfg_filter_reset(void)
 {
  xs_reset_filters();
- xs_update_filters();
+
+ gtk_adjustment_set_value(gtk_range_get_adjustment(GTK_RANGE(LUW("cfg_emu_filt_fs"))), xs_cfg.filterFs);
+ gtk_adjustment_set_value(gtk_range_get_adjustment(GTK_RANGE(LUW("cfg_emu_filt_fm"))), xs_cfg.filterFm);
+ gtk_adjustment_set_value(gtk_range_get_adjustment(GTK_RANGE(LUW("cfg_emu_filt_ft"))), xs_cfg.filterFt);
 }
 
 
@@ -402,8 +424,7 @@
 {
  /* Selection was accepted! */
  gtk_entry_set_text(GTK_ENTRY(LUW("cfg_sld_dbpath")),
- 	gtk_file_selection_get_filename(GTK_FILE_SELECTION(xs_sldb_fileselector))
- 	);
+ 	gtk_file_selection_get_filename(GTK_FILE_SELECTION(xs_sldb_fileselector)));
 
  /* Close file selector window */
  gtk_widget_destroy(xs_sldb_fileselector);
@@ -438,7 +459,7 @@
 void xs_cfg_stil_fs_ok(void)
 {
  /* Selection was accepted! */
- gtk_entry_set_text(GTK_ENTRY(LUW("cfg_stil_path")),
+ gtk_entry_set_text(GTK_ENTRY(LUW("cfg_stil_dbpath")),
  	gtk_file_selection_get_filename(GTK_FILE_SELECTION(xs_stil_fileselector)));
 
  /* Close file selector window */
@@ -460,6 +481,9 @@
  */
 void xs_configure(void)
 {
+ gint i;
+ gfloat tmpValue;
+ 
  /* Check if the window already exists */
  if (xs_configwin != NULL)
 	{
@@ -494,96 +518,70 @@
  gtk_widget_set_sensitive(LUW("cfg_ftitle_override"), FALSE);
  xs_cfg.titleOverride = TRUE;
 #endif
- 	
- /* Sound resolution settings */
- switch (xs_cfg.fmtBitsPerSample) {
-	case XS_RES_16BIT:
-		gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(LUW("cfg_res_16bit")), TRUE);
-		break;
-	case XS_RES_8BIT:
-		gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(LUW("cfg_res_8bit")), TRUE);
-		break;
- }
-
- gtk_adjustment_set_value(GTK_ADJUSTMENT(LUW("cfg_samplerate_adj")), xs_cfg.fmtFrequency);
-
- /* Channel settings */
- switch (xs_cfg.fmtChannels) {
-	case XS_CHN_MONO:
-		gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(LUW("cfg_chn_mono")), TRUE);
-		break;
-	case XS_CHN_STEREO:
-		gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(LUW("cfg_chn_stereo")), TRUE);
-		break;
-	case XS_CHN_AUTOPAN:
-		gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(LUW("cfg_chn_autopan")), TRUE);
-		break;
- }
 
 
- /* Memorymode settings */
- switch (xs_cfg.memoryMode) {
-	case XS_MPU_REAL:
-		gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(LUW("cfg_emu_mem_real")), TRUE);
+ /* Set current data to widgets */
+ for (i = 0; i < xs_widtable_max; i++)
+ 	{
+	switch (xs_widtable[i].widType) {
+	case WTYPE_BGROUP:
+		/* Check if current value matches the given one */
+		gtk_toggle_button_set_active(
+			GTK_TOGGLE_BUTTON(LUW(xs_widtable[i].widName)),
+			(*((gint *) xs_widtable[i].valData) == xs_widtable[i].valSet)
+			);
 		break;
+	
+
+	case WTYPE_SPIN:
+	case WTYPE_SCALE:
+		/* Get the value */
+		switch (xs_widtable[i].valType) {
+		case CTYPE_INT:
+			tmpValue = (gfloat) *((gint *) xs_widtable[i].valData);
+			break;
 
-	case XS_MPU_BANK_SWITCHING:
-		gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(LUW("cfg_emu_mem_banksw")), TRUE);
+		case CTYPE_FLOAT:
+			tmpValue = *((gfloat *) xs_widtable[i].valData);
+			break;
+		}
+		
+		/* Set the value */
+		switch (xs_widtable[i].widType) {
+		case WTYPE_SPIN:
+			gtk_adjustment_set_value(
+			gtk_spin_button_get_adjustment(GTK_SPIN_BUTTON(LUW(xs_widtable[i].widName))),
+			tmpValue);
+			break;
+		
+		case WTYPE_SCALE:
+			gtk_adjustment_set_value(
+			gtk_range_get_adjustment(GTK_RANGE(LUW(xs_widtable[i].widName))),
+			tmpValue);
+			break;
+		}
 		break;
-
-	case XS_MPU_TRANSPARENT_ROM:
-		gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(LUW("cfg_emu_mem_transrom")), TRUE);
+	
+	case WTYPE_BUTTON:
+		/* Set toggle-button */
+		gtk_toggle_button_set_active(
+			GTK_TOGGLE_BUTTON(LUW(xs_widtable[i].widName)),
+			*((gboolean *) xs_widtable[i].valData)
+			);
 		break;
 
-	case XS_MPU_PLAYSID_ENVIRONMENT:
-		gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(LUW("cfg_emu_mem_playsid")), TRUE);
+	case WTYPE_TEXT:
+		/* Set text to text-widget */
+		if (*(gchar **) xs_widtable[i].valData != NULL)
+			{
+			gtk_entry_set_text(
+				GTK_ENTRY(LUW(xs_widtable[i].widName)),
+				*(gchar **) xs_widtable[i].valData);
+			}
 		break;
- }
-
-
- /* Filter and waveform settings */
- if (xs_cfg.mos8580)
-	gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(LUW("cfg_emu_mos8580")), TRUE);
-	else
-	gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(LUW("cfg_emu_mos6581")), TRUE);
-
- if (xs_cfg.emulateFilters)
-	gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(LUW("cfg_emu_filters")), TRUE);
-
- xs_update_filters();
-
-
- /* Song-length database */
- if (xs_cfg.playMaxTimeEnable)
-	gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(LUW("cfg_sld_usemaxtime")), TRUE);
-
- gtk_adjustment_set_value(GTK_ADJUSTMENT(LUW("cfg_sld_maxtime_adj")), xs_cfg.playMaxTime);
-
- if (xs_cfg.songlenDBEnable)
-	gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(LUW("cfg_sld")), TRUE);
-
- if (xs_cfg.songlenDBPath != NULL)
-	gtk_entry_set_text(GTK_ENTRY(LUW("cfg_sld_dbpath")), xs_cfg.songlenDBPath);
-
-
- /* STIL and miscellaneous settings */
- if (xs_cfg.stilDBEnable)
-	gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(LUW("cfg_stil_use")), TRUE);
-
- if (xs_cfg.stilDBPath != NULL)
-	gtk_entry_set_text(GTK_ENTRY(LUW("cfg_stil_path")), xs_cfg.stilDBPath);
-
- if (xs_cfg.detectMagic)
-	gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(LUW("cfg_detectmagic")), TRUE);
-
-
- /* Title-settings */
- if (xs_cfg.titleOverride)
-	gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(LUW("cfg_ftitle_override")), TRUE);
-
- if (xs_cfg.titleFormat != NULL)
-	gtk_entry_set_text(GTK_ENTRY(LUW("cfg_ftitle_format")), xs_cfg.titleFormat);
-
+	}
+	}
+ 	
  gtk_widget_show(xs_configwin);
 }