changeset 487:6357b7fe5b0d

Added new WTYPE_COMBO, the audio frequency selection now uses a combobox.
author Matti Hamalainen <ccr@tnsp.org>
date Fri, 26 Jan 2007 15:47:03 +0000
parents 4c599be2d349
children ffc508cefbef
files src/xs_config.c src/xs_config.h
diffstat 2 files changed, 71 insertions(+), 48 deletions(-) [+]
line wrap: on
line diff
--- a/src/xs_config.c	Fri Jan 26 15:47:00 2007 +0000
+++ b/src/xs_config.c	Fri Jan 26 15:47:03 2007 +0000
@@ -100,7 +100,7 @@
 { WTYPE_BGROUP,	CTYPE_INT,	"cfg_chn_mono",		&xs_cfg.audioChannels,		XS_CHN_MONO },
 { WTYPE_BGROUP,	CTYPE_INT,	"cfg_chn_stereo",	&xs_cfg.audioChannels,		XS_CHN_STEREO },
 { WTYPE_BGROUP,	CTYPE_INT,	"cfg_chn_autopan",	&xs_cfg.audioChannels,		XS_CHN_AUTOPAN },
-{ WTYPE_SPIN,	CTYPE_INT,	"cfg_samplerate",	&xs_cfg.audioFrequency,		0 },
+{ WTYPE_COMBO,	CTYPE_INT,	"cfg_samplerate",	&xs_cfg.audioFrequency,		XS_AUDIO_FREQ },
 { WTYPE_BUTTON,	CTYPE_BOOL,	"cfg_oversample",	&xs_cfg.oversampleEnable,	0 },
 { WTYPE_SPIN,	CTYPE_INT,	"cfg_oversample_factor",&xs_cfg.oversampleFactor,	0 },
 
@@ -168,7 +168,7 @@
 	/* Initialize values with sensible defaults */
 	xs_cfg.audioBitsPerSample = XS_RES_16BIT;
 	xs_cfg.audioChannels = XS_CHN_MONO;
-	xs_cfg.audioFrequency = 44100;
+	xs_cfg.audioFrequency = XS_AUDIO_FREQ;
 
 	xs_cfg.mos8580 = FALSE;
 	xs_cfg.forceModel = FALSE;
@@ -236,7 +236,7 @@
 #else
 	xs_cfg.titleOverride = TRUE;
 #endif
-	xs_pstrcpy(&xs_cfg.titleFormat, "%p - %t (%c) [%n/%N][%m]");
+	xs_pstrcpy(&xs_cfg.titleFormat, "%p - %t (%c) [%n/%N][%m/%C]");
 
 
 	xs_cfg.subAutoEnable = FALSE;
@@ -283,32 +283,31 @@
 	for (i = 0; i < xs_cfgtable_max; i++) {
 		switch (xs_cfgtable[i].itemType) {
 		case CTYPE_INT:
-			xmms_cfg_read_int(cfgFile, XS_CONFIG_IDENT, xs_cfgtable[i].itemName,
-					  (gint *) xs_cfgtable[i].itemData);
+			xmms_cfg_read_int(cfgFile, XS_CONFIG_IDENT,
+				xs_cfgtable[i].itemName,
+				(gint *) xs_cfgtable[i].itemData);
 			break;
 
 		case CTYPE_BOOL:
-			xmms_cfg_read_boolean(cfgFile, XS_CONFIG_IDENT, xs_cfgtable[i].itemName,
-					      (gboolean *) xs_cfgtable[i].itemData);
+			xmms_cfg_read_boolean(cfgFile, XS_CONFIG_IDENT,
+				xs_cfgtable[i].itemName,
+				(gboolean *) xs_cfgtable[i].itemData);
 			break;
 
 		case CTYPE_FLOAT:
-			xmms_cfg_read_float(cfgFile, XS_CONFIG_IDENT, xs_cfgtable[i].itemName,
-					    (gfloat *) xs_cfgtable[i].itemData);
+			xmms_cfg_read_float(cfgFile, XS_CONFIG_IDENT,
+				xs_cfgtable[i].itemName,
+				(gfloat *) xs_cfgtable[i].itemData);
 			break;
-
+		
 		case CTYPE_STR:
-			if (xmms_cfg_read_string
-			    (cfgFile, XS_CONFIG_IDENT, xs_cfgtable[i].itemName, (gchar **) & tmpStr)) {
+			if (xmms_cfg_read_string(cfgFile, XS_CONFIG_IDENT,
+				xs_cfgtable[i].itemName, (gchar **) &tmpStr)) {
 				/* Read was successfull */
 				xs_pstrcpy((gchar **) xs_cfgtable[i].itemData, tmpStr);
 				g_free(tmpStr);
 			}
 			break;
-
-		default:
-			xs_error(_("Internal: Unsupported setting type found while reading configuration file. Please report to author!\n"));
-			break;
 		}
 	}
 
@@ -351,27 +350,27 @@
 	for (i = 0; i < xs_cfgtable_max; i++) {
 		switch (xs_cfgtable[i].itemType) {
 		case CTYPE_INT:
-			xmms_cfg_write_int(cfgFile, XS_CONFIG_IDENT, xs_cfgtable[i].itemName,
-					   *(gint *) xs_cfgtable[i].itemData);
+			xmms_cfg_write_int(cfgFile, XS_CONFIG_IDENT,
+				xs_cfgtable[i].itemName,
+				*(gint *) xs_cfgtable[i].itemData);
 			break;
 
 		case CTYPE_BOOL:
-			xmms_cfg_write_boolean(cfgFile, XS_CONFIG_IDENT, xs_cfgtable[i].itemName,
-					       *(gboolean *) xs_cfgtable[i].itemData);
+			xmms_cfg_write_boolean(cfgFile, XS_CONFIG_IDENT,
+				xs_cfgtable[i].itemName,
+				*(gboolean *) xs_cfgtable[i].itemData);
 			break;
 
 		case CTYPE_FLOAT:
-			xmms_cfg_write_float(cfgFile, XS_CONFIG_IDENT, xs_cfgtable[i].itemName,
-					     *(gfloat *) xs_cfgtable[i].itemData);
+			xmms_cfg_write_float(cfgFile, XS_CONFIG_IDENT,
+				xs_cfgtable[i].itemName,
+				*(gfloat *) xs_cfgtable[i].itemData);
 			break;
 
 		case CTYPE_STR:
-			xmms_cfg_write_string(cfgFile, XS_CONFIG_IDENT, xs_cfgtable[i].itemName,
-					      *(gchar **) xs_cfgtable[i].itemData);
-			break;
-
-		default:
-			xs_error(_("Internal: Unsupported setting type found while writing configuration file. Please report to author!\n"));
+			xmms_cfg_write_string(cfgFile, XS_CONFIG_IDENT,
+				xs_cfgtable[i].itemName,
+				*(gchar **) xs_cfgtable[i].itemData);
 			break;
 		}
 	}
@@ -410,6 +409,11 @@
 {
 	gint i;
 	gfloat tmpValue;
+	gint tmpInt;
+	gchar *tmpStr;
+
+	/* Get lock on configuration */
+	XS_MUTEX_LOCK(xs_cfg);
 
 	XSDEBUG("get data from widgets to config...\n");
 
@@ -423,21 +427,30 @@
 			}
 			break;
 
+		case WTYPE_COMBO:
+			/* Get text from text-widget */
+			tmpStr = gtk_entry_get_text(GTK_ENTRY(LUW(xs_widtable[i].widName)));
+			if (sscanf(tmpStr, "%d", &tmpInt) != 1)
+				tmpInt = xs_widtable[i].itemSet;
+
+			*((gint *) xs_widtable[i].itemData) = tmpInt;
+			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;
+				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;
-
+			
 			default:
 				tmpValue = -1;
+				break;
 			}
 
 			/* Set the value */
@@ -455,18 +468,20 @@
 		case WTYPE_BUTTON:
 			/* Check if toggle-button is active */
 			*((gboolean *) xs_widtable[i].itemData) =
-			    (GTK_TOGGLE_BUTTON(LUW(xs_widtable[i].widName))->active);
+				(GTK_TOGGLE_BUTTON(LUW(xs_widtable[i].widName))->active);
 			break;
 
 		case WTYPE_TEXT:
 			/* Get text from text-widget */
 			xs_pstrcpy((gchar **) xs_widtable[i].itemData,
-				   gtk_entry_get_text(GTK_ENTRY(LUW(xs_widtable[i].widName)))
-			    );
+				gtk_entry_get_text(GTK_ENTRY(LUW(xs_widtable[i].widName))));
 			break;
 		}
 	}
 
+	/* Release lock */
+	XS_MUTEX_UNLOCK(xs_cfg);
+	
 	/* Close window */
 	gtk_widget_destroy(xs_configwin);
 	xs_configwin = NULL;
@@ -493,8 +508,6 @@
 }
 
 
-
-
 /*
  * HVSC songlength-database file selector response-functions
  */
@@ -819,6 +832,7 @@
 {
 	gint i;
 	gfloat tmpValue;
+	gchar tmpStr[32];
 	GtkWidget *c;
 
 	/* Check if the window already exists */
@@ -830,6 +844,9 @@
 	/* Create the window */
 	xs_configwin = create_xs_configwin();
 
+	/* Get lock on configuration */
+	XS_MUTEX_LOCK(xs_cfg);
+
 	/* Create the custom filter curve widget for libSIDPlay2 */
 	c = xs_curve_new();
 
@@ -841,9 +858,6 @@
 
 	xs_cfg_filter2_reset(NULL, NULL);
 
-	/* Get lock on configuration */
-	XS_MUTEX_LOCK(xs_cfg);
-
 	/* Based on available optional parts, gray out options */
 #ifndef HAVE_SIDPLAY1
 	gtk_widget_set_sensitive(LUW("cfg_emu_sidplay1"), FALSE);
@@ -882,13 +896,18 @@
 	for (i = 0; i < xs_widtable_max; i++) {
 		switch (xs_widtable[i].widType) {
 		case WTYPE_BGROUP:
+			assert(xs_widtable[i].itemType == CTYPE_INT);
 			/* 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].itemData) == xs_widtable[i].itemSet)
-			    );
+				(*((gint *) xs_widtable[i].itemData) == xs_widtable[i].itemSet));
 			break;
 
-
+		case WTYPE_COMBO:
+			assert(xs_widtable[i].itemType == CTYPE_INT);
+			g_snprintf(tmpStr, sizeof(tmpStr), "%d", *(gint *) xs_widtable[i].itemData);
+			gtk_entry_set_text(GTK_ENTRY(LUW(xs_widtable[i].widName)), tmpStr);
+			break;
+			
 		case WTYPE_SPIN:
 		case WTYPE_SCALE:
 			/* Get the value */
@@ -903,34 +922,37 @@
 
 			default:
 				tmpValue = -1;
+				assert(0);
+				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);
+					(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);
+					(GTK_RANGE(LUW(xs_widtable[i].widName))), tmpValue);
 				break;
 			}
 			break;
 
 		case WTYPE_BUTTON:
+			assert(xs_widtable[i].itemType == CTYPE_BOOL);
 			/* Set toggle-button */
 			gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(LUW(xs_widtable[i].widName)),
-						     *((gboolean *) xs_widtable[i].itemData)
-			    );
+				*((gboolean *) xs_widtable[i].itemData));
 			break;
 
 		case WTYPE_TEXT:
+			assert(xs_widtable[i].itemType == CTYPE_STR);
 			/* Set text to text-widget */
 			if (*(gchar **) xs_widtable[i].itemData != NULL) {
 				gtk_entry_set_text(GTK_ENTRY(LUW(xs_widtable[i].widName)),
-						   *(gchar **) xs_widtable[i].itemData);
+				*(gchar **) xs_widtable[i].itemData);
 			}
 			break;
 		}
--- a/src/xs_config.h	Fri Jan 26 15:47:00 2007 +0000
+++ b/src/xs_config.h	Fri Jan 26 15:47:03 2007 +0000
@@ -136,7 +136,8 @@
 	WTYPE_SPIN,
 	WTYPE_SCALE,
 	WTYPE_BUTTON,
-	WTYPE_TEXT
+	WTYPE_TEXT,
+	WTYPE_COMBO
 };