changeset 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 6490ceb38b64
children 081088695019
files src/xs_config.c src/xs_config.h xmms-sid.glade
diffstat 3 files changed, 323 insertions(+), 272 deletions(-) [+]
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);
--- a/src/xs_config.h	Fri Feb 23 05:11:02 2007 +0000
+++ b/src/xs_config.h	Fri Feb 23 05:13:05 2007 +0000
@@ -2,13 +2,14 @@
 #define XS_CONFIG_H
 
 #include "xmms-sid.h"
+#include "xs_curve.h"
 
 #ifdef __cplusplus
 extern "C" {
 #endif
 
-/*
- * Configuration structure
+
+/* Configuration structure
  */
 enum XS_EMUENGINE {
 	XS_ENG_SIDPLAY1 = 1,
@@ -66,31 +67,43 @@
 };
 
 
+typedef struct {
+	t_xs_int_point	points[XS_SIDPLAY2_NFPOINTS];
+	gint		npoints;
+	gchar		*name;
+} t_xs_sid2_filter;
+
+
 extern struct t_xs_cfg {
 	/* General audio settings */
 	gint		audioBitsPerSample;
 	gint		audioChannels;
 	gint		audioFrequency;
 
-	/* General libSIDPlay settings */
+	gboolean	oversampleEnable;
+	gint		oversampleFactor;	/* Factor of oversampling */
+
+	/* Emulation settings */
 	gboolean	mos8580;		/* TRUE = 8580, FALSE = 6581 */
 	gboolean	forceModel;
-	gboolean	emulateFilters;
-	gfloat		filterFs;
-	gfloat		filterFm;
-	gfloat		filterFt;
 	gint		memoryMode;		/* See XS_MPU-constants */
 	gint		clockSpeed;		/* PAL (50Hz) or NTSC (60Hz) */
 	gboolean	forceSpeed;		/* TRUE = force to given clockspeed */
 
 	gint		playerEngine;		/* Selected player engine */
 
+	gboolean	emulateFilters;
+	gfloat		sid1FilterFs;
+	gfloat		sid1FilterFm;
+	gfloat		sid1FilterFt;
+
 	gint		sid2OptLevel;		/* SIDPlay2 emulation optimization */
 	gint		sid2Builder;		/* SIDPlay2 "builder" aka SID-emu */
-
-	gboolean	oversampleEnable;
-	gint		oversampleFactor;	/* Factor of oversampling */
-
+	t_xs_sid2_filter	sid2Filter;	/* Current SIDPlay2 filter */
+	t_xs_sid2_filter	**sid2FilterPresets;
+	gint		sid2NFilterPresets;
+	
+	
 	/* Playing settings */
 	gboolean	playMaxTimeEnable,
 			playMaxTimeUnknown;	/* Use max-time only when song-length is unknown */
@@ -121,8 +134,8 @@
 
 XS_MUTEX_H(xs_cfg);
 
-/*
- * Configuration-file
+
+/* Configuration-file
  */
 enum {
 	CTYPE_INT = 1,
@@ -157,16 +170,14 @@
 } t_xs_wid_item;
 
 
-/*
- * Functions
+/* Functions
  */
 void	xs_init_configuration(void);
 void	xs_configure(void);
 void	xs_read_configuration(void);
 gint	xs_write_configuration(void);
 
-
 #ifdef __cplusplus
 }
 #endif
-#endif /* XS_CONFIG_H */
+#endif	/* XS_CONFIG_H */
--- a/xmms-sid.glade	Fri Feb 23 05:11:02 2007 +0000
+++ b/xmms-sid.glade	Fri Feb 23 05:13:05 2007 +0000
@@ -75,7 +75,7 @@
 
 	  <widget>
 	    <class>GtkFrame</class>
-	    <name>w_frame4</name>
+	    <name>cfg_sndres_frame</name>
 	    <border_width>4</border_width>
 	    <label>Resolution:</label>
 	    <label_xalign>0</label_xalign>
@@ -127,7 +127,7 @@
 
 	  <widget>
 	    <class>GtkFrame</class>
-	    <name>w_frame5</name>
+	    <name>cfg_channels_frame</name>
 	    <border_width>4</border_width>
 	    <label>Channels:</label>
 	    <label_xalign>0</label_xalign>
@@ -195,7 +195,7 @@
 
 	<widget>
 	  <class>GtkFrame</class>
-	  <name>w_frame8</name>
+	  <name>cfg_samplerate_frame</name>
 	  <border_width>4</border_width>
 	  <label>Samplerate:</label>
 	  <label_xalign>0</label_xalign>
@@ -285,7 +285,7 @@
 
 	<widget>
 	  <class>GtkFrame</class>
-	  <name>cfg_oversample_grp</name>
+	  <name>cfg_oversample_frame</name>
 	  <border_width>4</border_width>
 	  <label>Oversampling:</label>
 	  <label_xalign>0</label_xalign>
@@ -324,7 +324,7 @@
 
 	    <widget>
 	      <class>GtkHBox</class>
-	      <name>w_hbox16</name>
+	      <name>cfg_oversample_box</name>
 	      <border_width>2</border_width>
 	      <homogeneous>False</homogeneous>
 	      <spacing>4</spacing>
@@ -427,7 +427,7 @@
 
 	  <widget>
 	    <class>GtkFrame</class>
-	    <name>w_frame2</name>
+	    <name>cfg_clock_frame</name>
 	    <border_width>4</border_width>
 	    <label>Clock speed:</label>
 	    <label_xalign>0</label_xalign>
@@ -496,7 +496,7 @@
 
 	  <widget>
 	    <class>GtkFrame</class>
-	    <name>w_frame3</name>
+	    <name>cfg_sid_model_frame</name>
 	    <border_width>4</border_width>
 	    <label>SID model:</label>
 	    <label_xalign>0</label_xalign>
@@ -565,7 +565,7 @@
 
 	<widget>
 	  <class>GtkFrame</class>
-	  <name>w_frame26</name>
+	  <name>cfg_emulib_frame</name>
 	  <border_width>4</border_width>
 	  <label>Emulation library selection:</label>
 	  <label_xalign>0</label_xalign>
@@ -629,7 +629,7 @@
 
 	<widget>
 	  <class>GtkFrame</class>
-	  <name>w_frame1</name>
+	  <name>cfg_memmode_frame</name>
 	  <border_width>4</border_width>
 	  <label>Memory mode:</label>
 	  <label_xalign>0</label_xalign>
@@ -731,7 +731,7 @@
 
 	<widget>
 	  <class>GtkFrame</class>
-	  <name>cfg_sidplay2_grp</name>
+	  <name>cfg_sidplay2_frame</name>
 	  <border_width>4</border_width>
 	  <label>SIDPlay 2 options:</label>
 	  <label_xalign>0</label_xalign>
@@ -751,7 +751,7 @@
 
 	    <widget>
 	      <class>GtkCheckButton</class>
-	      <name>cfg_emu_sidplay2_opt</name>
+	      <name>cfg_emu_sp2_opt</name>
 	      <tooltip>This setting can be used to enable libSIDPlay2's &quot;optimization mode&quot;, which in downgrades the emulation from cycle-exact to something similar to frame-exact. The result is lower CPU usage, but worse accuracy.</tooltip>
 	      <can_focus>True</can_focus>
 	      <label>Optimization mode (faster, inaccurate)</label>
@@ -766,7 +766,7 @@
 
 	    <widget>
 	      <class>GtkRadioButton</class>
-	      <name>cfg_emu_sidplay2_resid</name>
+	      <name>cfg_emu_sp2_resid</name>
 	      <tooltip>reSID is the software SID-chip simulator based on SID reverse-engineering, created by Dag Lem. It is probably the closest thing to real SID available as software-only emulation.</tooltip>
 	      <can_focus>True</can_focus>
 	      <label>reSID-emulation</label>
@@ -782,7 +782,7 @@
 
 	    <widget>
 	      <class>GtkRadioButton</class>
-	      <name>cfg_emu_sidplay2_hardsid</name>
+	      <name>cfg_emu_sp2_hardsid</name>
 	      <tooltip>HardSID is a EISA/PCI card for PC-compatibles, which can be fitted with a real SID-chip. Software can be used to control the HardSID and combined with software emulation of rest of C64 via libSIDPlay2 HardSID can be used to achieve &quot;near 100%&quot; similarity to real C64. For more information, see http://www.hardsid.com/</tooltip>
 	      <can_focus>True</can_focus>
 	      <label>HardSID</label>
@@ -800,7 +800,7 @@
 
 	<widget>
 	  <class>GtkFrame</class>
-	  <name>cfg_resid_grp</name>
+	  <name>cfg_resid_frame</name>
 	  <border_width>4</border_width>
 	  <label>reSID sampling options:</label>
 	  <label_xalign>0</label_xalign>
@@ -942,14 +942,14 @@
 
 	  <widget>
 	    <class>GtkHBox</class>
-	    <name>cfg_box_sidplay1</name>
+	    <name>cfg_box_filter_sidplay1</name>
 	    <border_width>4</border_width>
 	    <homogeneous>False</homogeneous>
 	    <spacing>0</spacing>
 
 	    <widget>
 	      <class>GtkFrame</class>
-	      <name>cfg_frm_fs</name>
+	      <name>cfg_sp1_frm_fs</name>
 	      <border_width>2</border_width>
 	      <width>45</width>
 	      <label>FS</label>
@@ -957,13 +957,13 @@
 	      <shadow_type>GTK_SHADOW_ETCHED_IN</shadow_type>
 	      <child>
 		<padding>0</padding>
-		<expand>False</expand>
+		<expand>True</expand>
 		<fill>True</fill>
 	      </child>
 
 	      <widget>
 		<class>GtkVScale</class>
-		<name>cfg_emu_filt_fs</name>
+		<name>cfg_sp1_filter_fs</name>
 		<can_focus>True</can_focus>
 		<draw_value>True</draw_value>
 		<value_pos>GTK_POS_TOP</value_pos>
@@ -980,7 +980,7 @@
 
 	    <widget>
 	      <class>GtkFrame</class>
-	      <name>cfg_frm_fm</name>
+	      <name>cfg_sp1_frm_fm</name>
 	      <border_width>2</border_width>
 	      <width>45</width>
 	      <label>FM</label>
@@ -988,13 +988,13 @@
 	      <shadow_type>GTK_SHADOW_ETCHED_IN</shadow_type>
 	      <child>
 		<padding>0</padding>
-		<expand>False</expand>
+		<expand>True</expand>
 		<fill>True</fill>
 	      </child>
 
 	      <widget>
 		<class>GtkVScale</class>
-		<name>cfg_emu_filt_fm</name>
+		<name>cfg_sp1_filter_fm</name>
 		<can_focus>True</can_focus>
 		<draw_value>True</draw_value>
 		<value_pos>GTK_POS_TOP</value_pos>
@@ -1011,7 +1011,7 @@
 
 	    <widget>
 	      <class>GtkFrame</class>
-	      <name>cfg_frm_ft</name>
+	      <name>cfg_sp1_frm_ft</name>
 	      <border_width>2</border_width>
 	      <width>45</width>
 	      <label>FT</label>
@@ -1019,13 +1019,13 @@
 	      <shadow_type>GTK_SHADOW_ETCHED_IN</shadow_type>
 	      <child>
 		<padding>0</padding>
-		<expand>False</expand>
+		<expand>True</expand>
 		<fill>True</fill>
 	      </child>
 
 	      <widget>
 		<class>GtkVScale</class>
-		<name>cfg_emu_filt_ft</name>
+		<name>cfg_sp1_filter_ft</name>
 		<can_focus>True</can_focus>
 		<draw_value>True</draw_value>
 		<value_pos>GTK_POS_TOP</value_pos>
@@ -1054,7 +1054,7 @@
 
 	      <widget>
 		<class>GtkButton</class>
-		<name>cfg_filter_reset</name>
+		<name>cfg_sp1_filter_reset</name>
 		<can_focus>True</can_focus>
 		<signal>
 		  <name>clicked</name>
@@ -1086,16 +1086,93 @@
 	  </widget>
 
 	  <widget>
-	    <class>GtkHBox</class>
-	    <name>cfg_box_sidplay2</name>
-	    <border_width>4</border_width>
+	    <class>GtkVBox</class>
+	    <name>cfg_box_filter_sidplay2</name>
 	    <homogeneous>False</homogeneous>
 	    <spacing>0</spacing>
 
 	    <widget>
+	      <class>GtkHBox</class>
+	      <name>cfg_sp_filter_controlbox</name>
+	      <border_width>2</border_width>
+	      <homogeneous>False</homogeneous>
+	      <spacing>0</spacing>
+	      <child>
+		<padding>0</padding>
+		<expand>False</expand>
+		<fill>False</fill>
+	      </child>
+
+	      <widget>
+		<class>GtkCombo</class>
+		<name>cfg_sp2_filter_combo</name>
+		<value_in_list>False</value_in_list>
+		<ok_if_empty>True</ok_if_empty>
+		<case_sensitive>False</case_sensitive>
+		<use_arrows>True</use_arrows>
+		<use_arrows_always>False</use_arrows_always>
+		<items>6581 (reSID)
+8580 (reSID)
+6581R1 (alankila)
+6581R4 (alankila)
+</items>
+		<child>
+		  <padding>0</padding>
+		  <expand>True</expand>
+		  <fill>True</fill>
+		</child>
+
+		<widget>
+		  <class>GtkEntry</class>
+		  <child_name>GtkCombo:entry</child_name>
+		  <name>cfg_sp2_filter_combo_entry</name>
+		  <can_focus>True</can_focus>
+		  <editable>True</editable>
+		  <text_visible>True</text_visible>
+		  <text_max_length>0</text_max_length>
+		  <text>6581R1 (alankila)</text>
+		</widget>
+	      </widget>
+
+	      <widget>
+		<class>GtkHButtonBox</class>
+		<name>hbuttonbox2</name>
+		<layout_style>GTK_BUTTONBOX_END</layout_style>
+		<spacing>0</spacing>
+		<child_min_width>85</child_min_width>
+		<child_min_height>27</child_min_height>
+		<child_ipad_x>7</child_ipad_x>
+		<child_ipad_y>0</child_ipad_y>
+		<child>
+		  <padding>0</padding>
+		  <expand>True</expand>
+		  <fill>True</fill>
+		</child>
+
+		<widget>
+		  <class>GtkButton</class>
+		  <name>cfg_sp2_filter_load</name>
+		  <can_default>True</can_default>
+		  <can_focus>True</can_focus>
+		  <label>Load</label>
+		  <relief>GTK_RELIEF_NORMAL</relief>
+		</widget>
+
+		<widget>
+		  <class>GtkButton</class>
+		  <name>cfg_sp2_filter_save</name>
+		  <can_default>True</can_default>
+		  <can_focus>True</can_focus>
+		  <label>Save</label>
+		  <relief>GTK_RELIEF_NORMAL</relief>
+		</widget>
+	      </widget>
+	    </widget>
+
+	    <widget>
 	      <class>GtkFrame</class>
-	      <name>w_frame33</name>
-	      <border_width>4</border_width>
+	      <name>cfg_sp2_filter_frame</name>
+	      <border_width>2</border_width>
 	      <label>Filter curve:</label>
 	      <label_xalign>0</label_xalign>
 	      <shadow_type>GTK_SHADOW_ETCHED_IN</shadow_type>
@@ -1109,106 +1186,6 @@
 		<class>Placeholder</class>
 	      </widget>
 	    </widget>
-
-	    <widget>
-	      <class>GtkVBox</class>
-	      <name>w_vbox38</name>
-	      <homogeneous>False</homogeneous>
-	      <spacing>0</spacing>
-	      <child>
-		<padding>0</padding>
-		<expand>False</expand>
-		<fill>False</fill>
-	      </child>
-
-	      <widget>
-		<class>GtkFrame</class>
-		<name>w_frame32</name>
-		<border_width>4</border_width>
-		<label>Presets:</label>
-		<label_xalign>0</label_xalign>
-		<shadow_type>GTK_SHADOW_ETCHED_IN</shadow_type>
-		<child>
-		  <padding>0</padding>
-		  <expand>False</expand>
-		  <fill>True</fill>
-		</child>
-
-		<widget>
-		  <class>GtkVBox</class>
-		  <name>w_vboxbaz</name>
-		  <border_width>2</border_width>
-		  <homogeneous>False</homogeneous>
-		  <spacing>0</spacing>
-
-		  <widget>
-		    <class>GtkCombo</class>
-		    <name>combo1</name>
-		    <value_in_list>False</value_in_list>
-		    <ok_if_empty>True</ok_if_empty>
-		    <case_sensitive>False</case_sensitive>
-		    <use_arrows>True</use_arrows>
-		    <use_arrows_always>False</use_arrows_always>
-		    <items>6581 (reSID)
-8580 (reSID)
-6581R1 (alankila)
-6581R4 (alankila)
-</items>
-		    <child>
-		      <padding>0</padding>
-		      <expand>False</expand>
-		      <fill>False</fill>
-		    </child>
-
-		    <widget>
-		      <class>GtkEntry</class>
-		      <child_name>GtkCombo:entry</child_name>
-		      <name>combo-entry1</name>
-		      <can_focus>True</can_focus>
-		      <editable>True</editable>
-		      <text_visible>True</text_visible>
-		      <text_max_length>0</text_max_length>
-		      <text>6581R1 (alankila)</text>
-		    </widget>
-		  </widget>
-
-		  <widget>
-		    <class>GtkHButtonBox</class>
-		    <name>hbuttonbox2</name>
-		    <border_width>2</border_width>
-		    <layout_style>GTK_BUTTONBOX_SPREAD</layout_style>
-		    <spacing>0</spacing>
-		    <child_min_width>85</child_min_width>
-		    <child_min_height>27</child_min_height>
-		    <child_ipad_x>7</child_ipad_x>
-		    <child_ipad_y>0</child_ipad_y>
-		    <child>
-		      <padding>0</padding>
-		      <expand>False</expand>
-		      <fill>False</fill>
-		    </child>
-
-		    <widget>
-		      <class>GtkButton</class>
-		      <name>button3</name>
-		      <can_default>True</can_default>
-		      <can_focus>True</can_focus>
-		      <label>Load</label>
-		      <relief>GTK_RELIEF_NORMAL</relief>
-		    </widget>
-
-		    <widget>
-		      <class>GtkButton</class>
-		      <name>button4</name>
-		      <can_default>True</can_default>
-		      <can_focus>True</can_focus>
-		      <label>Save</label>
-		      <relief>GTK_RELIEF_NORMAL</relief>
-		    </widget>
-		  </widget>
-		</widget>
-	      </widget>
-	    </widget>
 	  </widget>
 
 	  <widget>
@@ -1287,7 +1264,7 @@
 
 	    <widget>
 	      <class>GtkHBox</class>
-	      <name>w_hbox18</name>
+	      <name>cfg_mintime_box</name>
 	      <homogeneous>False</homogeneous>
 	      <spacing>2</spacing>
 	      <child>
@@ -1418,7 +1395,7 @@
 
 	    <widget>
 	      <class>GtkHBox</class>
-	      <name>w_hbox14</name>
+	      <name>cfg_maxtime_box</name>
 	      <homogeneous>False</homogeneous>
 	      <spacing>2</spacing>
 	      <child>
@@ -1534,7 +1511,7 @@
 
 	    <widget>
 	      <class>GtkHBox</class>
-	      <name>w_hbox13</name>
+	      <name>cfg_sld_box</name>
 	      <homogeneous>False</homogeneous>
 	      <spacing>4</spacing>
 	      <child>
@@ -1660,7 +1637,7 @@
 
 	    <widget>
 	      <class>GtkHBox</class>
-	      <name>w_hbox3</name>
+	      <name>cfg_stil_box1</name>
 	      <homogeneous>False</homogeneous>
 	      <spacing>0</spacing>
 	      <child>
@@ -1744,7 +1721,7 @@
 
 	    <widget>
 	      <class>GtkHBox</class>
-	      <name>w_hbox17</name>
+	      <name>cfg_stil_box2</name>
 	      <homogeneous>False</homogeneous>
 	      <spacing>0</spacing>
 	      <child>
@@ -1843,10 +1820,10 @@
 
 	  <widget>
 	    <class>GtkVBox</class>
-	    <name>w_vbox16</name>
+	    <name>vbox1</name>
 	    <border_width>2</border_width>
 	    <homogeneous>False</homogeneous>
-	    <spacing>2</spacing>
+	    <spacing>0</spacing>
 
 	    <widget>
 	      <class>GtkCheckButton</class>
@@ -1869,73 +1846,85 @@
 	    </widget>
 
 	    <widget>
-	      <class>GtkEntry</class>
-	      <name>cfg_ftitle_format</name>
-	      <can_focus>True</can_focus>
-	      <editable>True</editable>
-	      <text_visible>True</text_visible>
-	      <text_max_length>0</text_max_length>
-	      <text></text>
+	      <class>GtkVBox</class>
+	      <name>cfg_ftitle_box</name>
+	      <homogeneous>False</homogeneous>
+	      <spacing>2</spacing>
 	      <child>
-		<padding>2</padding>
-		<expand>False</expand>
-		<fill>False</fill>
-	      </child>
-	    </widget>
-
-	    <widget>
-	      <class>GtkHBox</class>
-	      <name>w_hbox9</name>
-	      <homogeneous>True</homogeneous>
-	      <spacing>0</spacing>
-	      <child>
-		<padding>2</padding>
-		<expand>False</expand>
-		<fill>False</fill>
+		<padding>0</padding>
+		<expand>True</expand>
+		<fill>True</fill>
 	      </child>
 
 	      <widget>
-		<class>GtkLabel</class>
-		<name>cfg_ftitle_desc1</name>
-		<label>%% - '%' character
-%p - Performer/composer
-%t - Song name (title)
-%c - Copyright
-%s - File type
-%m - SID model</label>
-		<justify>GTK_JUSTIFY_LEFT</justify>
-		<wrap>False</wrap>
-		<xalign>0.04</xalign>
-		<yalign>0.5</yalign>
-		<xpad>0</xpad>
-		<ypad>0</ypad>
+		<class>GtkEntry</class>
+		<name>cfg_ftitle_format</name>
+		<can_focus>True</can_focus>
+		<editable>True</editable>
+		<text_visible>True</text_visible>
+		<text_max_length>0</text_max_length>
+		<text></text>
 		<child>
-		  <padding>0</padding>
+		  <padding>2</padding>
 		  <expand>False</expand>
 		  <fill>False</fill>
 		</child>
 	      </widget>
 
 	      <widget>
-		<class>GtkLabel</class>
-		<name>cfg_ftitle_desc2</name>
-		<label>%C - Speed/clock (PAL/NTSC)
+		<class>GtkHBox</class>
+		<name>w_hbox9</name>
+		<homogeneous>True</homogeneous>
+		<spacing>0</spacing>
+		<child>
+		  <padding>2</padding>
+		  <expand>False</expand>
+		  <fill>False</fill>
+		</child>
+
+		<widget>
+		  <class>GtkLabel</class>
+		  <name>cfg_ftitle_desc1</name>
+		  <label>%% - '%' character
+%p - Performer/composer
+%t - Song name (title)
+%c - Copyright
+%s - File type
+%m - SID model</label>
+		  <justify>GTK_JUSTIFY_LEFT</justify>
+		  <wrap>False</wrap>
+		  <xalign>0.04</xalign>
+		  <yalign>0.5</yalign>
+		  <xpad>0</xpad>
+		  <ypad>0</ypad>
+		  <child>
+		    <padding>0</padding>
+		    <expand>False</expand>
+		    <fill>False</fill>
+		  </child>
+		</widget>
+
+		<widget>
+		  <class>GtkLabel</class>
+		  <name>cfg_ftitle_desc2</name>
+		  <label>%C - Speed/clock (PAL/NTSC)
 %n - Subtune
 %N - Number of subtunes
 %f - Filename
 %F - File path
 %e - File extension</label>
-		<justify>GTK_JUSTIFY_LEFT</justify>
-		<wrap>False</wrap>
-		<xalign>0.04</xalign>
-		<yalign>0.5</yalign>
-		<xpad>0</xpad>
-		<ypad>0</ypad>
-		<child>
-		  <padding>0</padding>
-		  <expand>False</expand>
-		  <fill>False</fill>
-		</child>
+		  <justify>GTK_JUSTIFY_LEFT</justify>
+		  <wrap>False</wrap>
+		  <xalign>0.04</xalign>
+		  <yalign>0.5</yalign>
+		  <xpad>0</xpad>
+		  <ypad>0</ypad>
+		  <child>
+		    <padding>0</padding>
+		    <expand>False</expand>
+		    <fill>False</fill>
+		  </child>
+		</widget>
 	      </widget>
 	    </widget>
 	  </widget>
@@ -2107,7 +2096,7 @@
 
 	    <widget>
 	      <class>GtkHBox</class>
-	      <name>w_hbox20</name>
+	      <name>cfg_subauto_box</name>
 	      <homogeneous>False</homogeneous>
 	      <spacing>2</spacing>
 	      <child>
@@ -2994,4 +2983,20 @@
   </widget>
 </widget>
 
+<widget>
+  <class>GtkWindow</class>
+  <name>window1</name>
+  <title>window1</title>
+  <type>GTK_WINDOW_TOPLEVEL</type>
+  <position>GTK_WIN_POS_NONE</position>
+  <modal>False</modal>
+  <allow_shrink>False</allow_shrink>
+  <allow_grow>True</allow_grow>
+  <auto_shrink>False</auto_shrink>
+
+  <widget>
+    <class>Placeholder</class>
+  </widget>
+</widget>
+
 </GTK-Interface>