diff src/xs_config.c @ 548:ba80c052e425

Configuration widget naming cleanups and GUI-related improvements; Started planning and implementation of SIDPlay2 filter settings loading/saving and import/export functionality.
author Matti Hamalainen <ccr@tnsp.org>
date Fri, 23 Feb 2007 05:13:05 +0000
parents 48fdc91bfea2
children 9494fee305fa
line wrap: on
line diff
--- a/src/xs_config.c	Fri Feb 23 05:11:02 2007 +0000
+++ b/src/xs_config.c	Fri Feb 23 05:13:05 2007 +0000
@@ -57,7 +57,7 @@
 #include "xs_glade.h"
 #include "xs_interface.h"
 #include "xs_support.h"
-#include "xs_curve.h"
+
 
 /*
  * Global widgets
@@ -147,15 +147,15 @@
 { 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_emu_sidplay2_opt",	&xs_cfg.sid2OptLevel,		0 },
+{ WTYPE_BUTTON,	CTYPE_BOOL,	"cfg_emu_sp2_opt",	&xs_cfg.sid2OptLevel,		0 },
 
-{ WTYPE_BGROUP,	CTYPE_INT,	"cfg_emu_sidplay2_resid",&xs_cfg.sid2Builder,		XS_BLD_RESID },
-{ WTYPE_BGROUP,	CTYPE_INT,	"cfg_emu_sidplay2_hardsid",&xs_cfg.sid2Builder,		XS_BLD_HARDSID },
+{ WTYPE_BGROUP,	CTYPE_INT,	"cfg_emu_sp2_resid",	&xs_cfg.sid2Builder,		XS_BLD_RESID },
+{ WTYPE_BGROUP,	CTYPE_INT,	"cfg_emu_sp2_hardsid",	&xs_cfg.sid2Builder,		XS_BLD_HARDSID },
 
 { 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_SCALE,	CTYPE_FLOAT,	"cfg_sp1_filter_fs",	&xs_cfg.filterFs,		0 },
+{ WTYPE_SCALE,	CTYPE_FLOAT,	"cfg_sp1_filter_fm",	&xs_cfg.filterFm,		0 },
+{ WTYPE_SCALE,	CTYPE_FLOAT,	"cfg_sp1_filter_ft",	&xs_cfg.filterFt,		0 },
 
 { WTYPE_BUTTON,	CTYPE_BOOL,	"cfg_maxtime_enable",	&xs_cfg.playMaxTimeEnable,	0 },
 { WTYPE_BUTTON,	CTYPE_BOOL,	"cfg_maxtime_unknown",	&xs_cfg.playMaxTimeUnknown,	0 },
@@ -187,8 +187,7 @@
 static const gint xs_widtable_max = (sizeof(xs_widtable) / sizeof(t_xs_wid_item));
 
 
-/*
- * Reset/initialize the configuration
+/* Reset/initialize the configuration
  */
 void xs_init_configuration(void)
 {
@@ -280,8 +279,67 @@
 }
 
 
-/*
- * Get the configuration (from file or default)
+/* Filter configuration handling
+ */
+static t_xs_sid2_filter * xs_filter_load(XS_CONFIG_FILE *cfg, gchar *pcFilterName)
+{
+}
+
+static gboolean xs_filter_save(XS_CONFIG_FILE *cfg, t_xs_sid2_filter *pFilter)
+{
+	gchar *tmpStr;
+	gint i;
+	
+}
+
+
+/* Filter exporting and importing. These functions export/import
+ * filter settings to/from SIDPlay2 INI-type files.
+ */
+static gboolean xs_filters_import(gchar *pcFilename, t_xs_sid2_filter **pFilters, gint *nFilters)
+{
+	
+}
+
+
+static gboolean xs_filters_export(gchar *pcFilename, t_xs_sid2_filter *pFilters, gint nFilters)
+{
+	FILE *outFile;
+	t_xs_sid2_filter *f = pFilters;
+	gint n;
+	
+	/* Open/create the file */
+	if ((outFile = fopen(pcFilename, "wb")) == NULL)
+		return FALSE;
+	
+	/* Write each filter spec in "INI"-style format */
+	for (n = 0; n < nFilters; n++) {
+		gint i;
+		
+		fprintf(outFile,
+		"[%s]\n"
+		"type=1\n"
+		"points=%d\n",
+		f->name, f->npoints);
+	
+		for (i = 0; i < f->npoints; i++) {
+			fprintf(outFile,
+			"point%d=%d,%d\n",
+			i + 1,
+			f->points[i].x,
+			f->points[i].y);
+		}
+	
+		fprintf(outFile, "\n");
+		f++;
+	}
+	
+	fclose(outFile);
+	return TRUE;
+}
+
+
+/* Get the configuration (from file or default)
  */
 void xs_read_configuration(void)
 {
@@ -339,9 +397,7 @@
 }
 
 
-
-/*
- * Write the current configuration
+/* Write the current configuration
  */
 gint xs_write_configuration(void)
 {
@@ -396,8 +452,7 @@
 }
 
 
-/*
- * Configuration panel was canceled
+/* Configuration panel was canceled
  */
 void xs_cfg_cancel(void)
 {
@@ -406,8 +461,7 @@
 }
 
 
-/*
- * Configuration was accepted (OK), save the settings
+/* Configuration was accepted, save the settings
  */
 void xs_cfg_ok(void)
 {
@@ -498,8 +552,7 @@
 }
 
 
-/*
- * Reset filter settings to defaults
+/* Reset filter settings to defaults
  */
 void xs_cfg_filter_reset(GtkButton * button, gpointer user_data)
 {
@@ -512,8 +565,7 @@
 }
 
 
-/*
- * HVSC songlength-database file selector response-functions
+/* HVSC songlength-database file selector response-functions
  */
 void xs_cfg_sld_dbbrowse(GtkButton * button, gpointer user_data)
 {
@@ -553,8 +605,7 @@
 }
 
 
-/*
- * STIL-database file selector response-functions
+/* STIL-database file selector response-functions
  */
 void xs_cfg_stil_browse(GtkButton * button, gpointer user_data)
 {
@@ -594,8 +645,7 @@
 }
 
 
-/*
- * HVSC location selector response-functions
+/* HVSC location selector response-functions
  */
 void xs_cfg_hvsc_browse(GtkButton * button, gpointer user_data)
 {
@@ -635,8 +685,7 @@
 }
 
 
-/*
- * Selection toggle handlers
+/* Selection toggle handlers
  */
 void xs_cfg_emu_filters_toggled(GtkToggleButton * togglebutton, gpointer user_data)
 {
@@ -654,9 +703,7 @@
 
 	(void) user_data;
 
-	gtk_widget_set_sensitive(LUW("cfg_ftitle_format"), isActive);
-	gtk_widget_set_sensitive(LUW("cfg_ftitle_desc1"), isActive);
-	gtk_widget_set_sensitive(LUW("cfg_ftitle_desc2"), isActive);
+	gtk_widget_set_sensitive(LUW("cfg_ftitle_box"), isActive);
 }
 
 
@@ -675,21 +722,21 @@
 
 	gtk_widget_set_sensitive(LUW("cfg_emu_mem_real"), isActive);
 
-	gtk_widget_set_sensitive(LUW("cfg_sidplay2_grp"), isActive);
-	gtk_widget_set_sensitive(LUW("cfg_emu_sidplay2_opt"), isActive);
+	gtk_widget_set_sensitive(LUW("cfg_sidplay2_frame"), isActive);
+	gtk_widget_set_sensitive(LUW("cfg_emu_sp2_opt"), isActive);
 
 	gtk_widget_set_sensitive(LUW("cfg_chn_autopan"), !isActive);
 
 #ifdef HAVE_RESID_BUILDER
-	gtk_widget_set_sensitive(LUW("cfg_emu_sidplay2_resid"), isActive);
+	gtk_widget_set_sensitive(LUW("cfg_emu_sp2_resid"), isActive);
 #else
-	gtk_widget_set_sensitive(LUW("cfg_emu_sidplay2_resid"), FALSE);
+	gtk_widget_set_sensitive(LUW("cfg_emu_sp2_resid"), FALSE);
 #endif
 
 #ifdef HAVE_HARDSID_BUILDER
-	gtk_widget_set_sensitive(LUW("cfg_emu_sidplay2_hardsid"), isActive);
+	gtk_widget_set_sensitive(LUW("cfg_emu_sp2_hardsid"), isActive);
 #else
-	gtk_widget_set_sensitive(LUW("cfg_emu_sidplay2_hardsid"), FALSE);
+	gtk_widget_set_sensitive(LUW("cfg_emu_sp2_hardsid"), FALSE);
 #endif
 }
 
@@ -700,9 +747,7 @@
 
 	(void) user_data;
 
-	gtk_widget_set_sensitive(LUW("cfg_oversample_factor"), isActive);
-	gtk_widget_set_sensitive(LUW("cfg_oversample_label1"), isActive);
-	gtk_widget_set_sensitive(LUW("cfg_oversample_label2"), isActive);
+	gtk_widget_set_sensitive(LUW("cfg_oversample_box"), isActive);
 }
 
 
@@ -712,9 +757,7 @@
 
 	(void) user_data;
 
-	gtk_widget_set_sensitive(LUW("cfg_mintime"), isActive);
-	gtk_widget_set_sensitive(LUW("cfg_mintime_label1"), isActive);
-	gtk_widget_set_sensitive(LUW("cfg_mintime_label2"), isActive);
+	gtk_widget_set_sensitive(LUW("cfg_mintime_box"), isActive);
 }
 
 
@@ -726,9 +769,7 @@
 	(void) user_data;
 
 	gtk_widget_set_sensitive(LUW("cfg_maxtime_unknown"), isActive);
-	gtk_widget_set_sensitive(LUW("cfg_maxtime"), isActive);
-	gtk_widget_set_sensitive(LUW("cfg_maxtime_label1"), isActive);
-	gtk_widget_set_sensitive(LUW("cfg_maxtime_label2"), isActive);
+	gtk_widget_set_sensitive(LUW("cfg_maxtime_box"), isActive);
 }
 
 
@@ -738,9 +779,7 @@
 
 	(void) user_data;
 
-	gtk_widget_set_sensitive(LUW("cfg_sld_dbpath"), isActive);
-	gtk_widget_set_sensitive(LUW("cfg_sld_dbbrowse"), isActive);
-	gtk_widget_set_sensitive(LUW("cfg_sld_label1"), isActive);
+	gtk_widget_set_sensitive(LUW("cfg_sld_box"), isActive);
 }
 
 
@@ -750,13 +789,8 @@
 
 	(void) user_data;
 
-	gtk_widget_set_sensitive(LUW("cfg_stil_dbpath"), isActive);
-	gtk_widget_set_sensitive(LUW("cfg_stil_browse"), isActive);
-	gtk_widget_set_sensitive(LUW("cfg_stil_label1"), isActive);
-
-	gtk_widget_set_sensitive(LUW("cfg_hvsc_path"), isActive);
-	gtk_widget_set_sensitive(LUW("cfg_hvsc_browse"), isActive);
-	gtk_widget_set_sensitive(LUW("cfg_hvsc_label1"), isActive);
+	gtk_widget_set_sensitive(LUW("cfg_stil_box1"), isActive);
+	gtk_widget_set_sensitive(LUW("cfg_stil_box2"), isActive);
 }
 
 
@@ -767,7 +801,7 @@
 	(void) user_data;
 
 	gtk_widget_set_sensitive(LUW("cfg_subauto_min_only"), isActive);
-	gtk_widget_set_sensitive(LUW("cfg_subauto_mintime"), isActive);
+	gtk_widget_set_sensitive(LUW("cfg_subauto_box"), isActive);
 }
 
 
@@ -778,7 +812,7 @@
 
 	(void) user_data;
 
-	gtk_widget_set_sensitive(LUW("cfg_subauto_mintime"), isActive);
+	gtk_widget_set_sensitive(LUW("cfg_subauto_box"), isActive);
 }
 
 
@@ -814,8 +848,7 @@
 }
 
 
-/*
- * Execute the configuration panel
+/* Execute the configuration panel
  */
 void xs_configure(void)
 {
@@ -837,14 +870,16 @@
 	XS_MUTEX_LOCK(xs_cfg);
 
 	/* Create the custom filter curve widget for libSIDPlay2 */
-/*
 	c = xs_curve_new();
-	gtk_widget_set_name(c, "cfg_filter2_curve");
+	xs_curve_reset(XS_CURVE(c));
+	
+	gtk_widget_set_name(c, "cfg_sp2_filter_curve");
 	gtk_widget_ref(c);
-	gtk_object_set_data_full(GTK_OBJECT(xs_configwin), "cfg_filter2_curve", c, (GtkDestroyNotify) gtk_widget_unref);
+	gtk_object_set_data_full(GTK_OBJECT(xs_configwin), "cfg_sp2_filter_curve", c, (GtkDestroyNotify) gtk_widget_unref);
 	gtk_widget_show(c);
-	gtk_box_pack_start(GTK_BOX(LUW("cfg_box_sidplay2")), c, TRUE, TRUE, 4);
-*/
+	gtk_container_add(GTK_CONTAINER(LUW("cfg_sp2_filter_frame")), c);
+	//gtk_container_set_border_width(GTK_CONTAINER(c), 2);
+
 
 	/* Based on available optional parts, gray out options */
 #ifndef HAVE_SIDPLAY1
@@ -871,7 +906,7 @@
 #endif
 
 	/* Update the widget sensitivities */
-	gtk_widget_set_sensitive(LUW("cfg_resid_grp"), FALSE);
+	gtk_widget_set_sensitive(LUW("cfg_resid_frame"), FALSE);
 		
 	xs_cfg_emu_filters_toggled((GtkToggleButton *) LUW("cfg_emu_filters"), NULL);
 	xs_cfg_ftitle_override_toggled((GtkToggleButton *) LUW("cfg_ftitle_override"), NULL);