# HG changeset patch # User Matti Hamalainen # Date 1174578902 0 # Node ID a437571d0fc5c2e874ef4f6f826df0841743e92b # Parent 15d511ab290a1ac9de4c569ca9a794f04ebc443b Work on GUI and filter config code. diff -r 15d511ab290a -r a437571d0fc5 src/xs_config.c --- a/src/xs_config.c Thu Mar 22 15:14:03 2007 +0000 +++ b/src/xs_config.c Thu Mar 22 15:55:02 2007 +0000 @@ -54,6 +54,7 @@ #define XS_CFG_GET_BOOL xmms_cfg_read_boolean #endif #include +#include #include "xs_glade.h" #include "xs_interface.h" #include "xs_support.h" @@ -65,10 +66,20 @@ static GtkWidget *xs_configwin = NULL, *xs_sldb_fileselector = NULL, *xs_stil_fileselector = NULL, - *xs_hvsc_pathselector = NULL; + *xs_hvsc_selector = NULL, + *xs_filt_importselector = NULL, + *xs_filt_exportselector = NULL; #define LUW(x) lookup_widget(xs_configwin, x) +#define XS_DEF_WINDOW_DELETE(ME, MV) \ +gboolean xs_ ## ME ## _delete(GtkWidget * w, GdkEvent * e, gpointer d) { \ + (void) w; (void) e; (void) d; \ + if (xs_ ## MV ) { gtk_widget_destroy(xs_ ## MV ); xs_ ## MV = NULL; } \ + return FALSE; \ +} + + /* * Configuration specific stuff @@ -372,12 +383,31 @@ static gboolean xs_filters_import(gchar *pcFilename, t_xs_sid2_filter **pFilters, gint *nFilters) { FILE *inFile; + gchar inLine[XS_BUF_SIZE]; + size_t lineNum; t_xs_sid2_filter *f; - if ((inFile = fopen(pcFilename, "rb")) == NULL) + if ((inFile = fopen(pcFilename, "ra")) == NULL) return FALSE; - + lineNum = 0; + while (fgets(inLine, XS_BUF_SIZE, inFile) != NULL) { + size_t linePos = 0; + lineNum++; + + xs_findnext(inLine, &linePos); +fprintf(stderr, ":'%s'\n", &inLine[linePos]); + if (isalpha(inLine[linePos])) { + /* A new key/value pair */ + + } else if (inLine[linePos] == '[') { + /* New filter(?) section starts */ + + } else if ((inLine[linePos] != ';') && (inLine[linePos] != 0)) { + /* Syntax error */ + return FALSE; + } + } fclose(inFile); return FALSE; @@ -391,7 +421,7 @@ gint n; /* Open/create the file */ - if ((outFile = fopen(pcFilename, "wb")) == NULL) + if ((outFile = fopen(pcFilename, "wa")) == NULL) return FALSE; /* Write each filter spec in "INI"-style format */ @@ -641,7 +671,7 @@ /* HVSC songlength-database file selector response-functions */ -void xs_cfg_sld_dbbrowse(GtkButton * button, gpointer user_data) +void xs_cfg_sldb_browse(GtkButton * button, gpointer user_data) { (void) button; (void) user_data; @@ -651,7 +681,7 @@ return; } - xs_sldb_fileselector = create_xs_sldbfileselector(); + xs_sldb_fileselector = create_xs_sldb_fs(); XS_MUTEX_LOCK(xs_cfg); gtk_file_selection_set_filename(GTK_FILE_SELECTION(xs_sldb_fileselector), xs_cfg.songlenDBPath); XS_MUTEX_UNLOCK(xs_cfg); @@ -659,7 +689,7 @@ } -void xs_cfg_sldb_fs_ok(GtkButton *button, gpointer user_data) +void xs_sldb_fs_ok(GtkButton *button, gpointer user_data) { (void) button; (void) user_data; @@ -674,16 +704,20 @@ } -void xs_cfg_sldb_fs_cancel(GtkButton *button, gpointer user_data) +void xs_sldb_fs_cancel(GtkButton *button, gpointer user_data) { (void) button; (void) user_data; + /* Close file selector window */ gtk_widget_destroy(xs_sldb_fileselector); xs_sldb_fileselector = NULL; } +XS_DEF_WINDOW_DELETE(sldb_fs, sldb_fileselector) + + /* STIL-database file selector response-functions */ void xs_cfg_stil_browse(GtkButton * button, gpointer user_data) @@ -696,7 +730,7 @@ return; } - xs_stil_fileselector = create_xs_stilfileselector(); + xs_stil_fileselector = create_xs_stil_fs(); XS_MUTEX_LOCK(xs_cfg); gtk_file_selection_set_filename(GTK_FILE_SELECTION(xs_stil_fileselector), xs_cfg.stilDBPath); XS_MUTEX_UNLOCK(xs_cfg); @@ -704,7 +738,7 @@ } -void xs_cfg_stil_fs_ok(GtkButton *button, gpointer user_data) +void xs_stil_fs_ok(GtkButton *button, gpointer user_data) { (void) button; (void) user_data; @@ -719,7 +753,7 @@ } -void xs_cfg_stil_fs_cancel(GtkButton *button, gpointer user_data) +void xs_stil_fs_cancel(GtkButton *button, gpointer user_data) { (void) button; (void) user_data; @@ -730,6 +764,9 @@ } +XS_DEF_WINDOW_DELETE(stil_fs, stil_fileselector) + + /* HVSC location selector response-functions */ void xs_cfg_hvsc_browse(GtkButton * button, gpointer user_data) @@ -737,45 +774,48 @@ (void) button; (void) user_data; - if (xs_hvsc_pathselector != NULL) { - gdk_window_raise(xs_hvsc_pathselector->window); + if (xs_hvsc_selector != NULL) { + gdk_window_raise(xs_hvsc_selector->window); return; } - xs_hvsc_pathselector = create_xs_hvscpathselector(); + xs_hvsc_selector = create_xs_hvsc_fs(); XS_MUTEX_LOCK(xs_cfg); - gtk_file_selection_set_filename(GTK_FILE_SELECTION(xs_hvsc_pathselector), xs_cfg.hvscPath); + gtk_file_selection_set_filename(GTK_FILE_SELECTION(xs_hvsc_selector), xs_cfg.hvscPath); XS_MUTEX_UNLOCK(xs_cfg); - gtk_widget_show(xs_hvsc_pathselector); + gtk_widget_show(xs_hvsc_selector); } -void xs_cfg_hvsc_fs_ok(GtkButton *button, gpointer user_data) +void xs_hvsc_fs_ok(GtkButton *button, gpointer user_data) { (void) button; (void) user_data; /* Selection was accepted! */ gtk_entry_set_text(GTK_ENTRY(LUW("cfg_hvsc_path")), - gtk_file_selection_get_filename(GTK_FILE_SELECTION(xs_hvsc_pathselector))); + gtk_file_selection_get_filename(GTK_FILE_SELECTION(xs_hvsc_selector))); /* Close file selector window */ - gtk_widget_destroy(xs_hvsc_pathselector); - xs_hvsc_pathselector = NULL; + gtk_widget_destroy(xs_hvsc_selector); + xs_hvsc_selector = NULL; } -void xs_cfg_hvsc_fs_cancel(GtkButton *button, gpointer user_data) +void xs_hvsc_fs_cancel(GtkButton *button, gpointer user_data) { (void) button; (void) user_data; /* Close file selector window */ - gtk_widget_destroy(xs_hvsc_pathselector); - xs_hvsc_pathselector = NULL; + gtk_widget_destroy(xs_hvsc_selector); + xs_hvsc_selector = NULL; } +XS_DEF_WINDOW_DELETE(hvsc_fs, hvsc_selector) + + /* Filter handling */ void xs_cfg_sp1_filter_reset(GtkButton * button, gpointer user_data) @@ -789,22 +829,56 @@ } +void xs_cfg_sp2_filter_update(XSCurve *curve, t_xs_sid2_filter *f) +{ + assert(curve); + assert(f); + + xs_curve_reset(curve); + xs_curve_set_range(curve, 0,0, XS_SIDPLAY2_NFPOINTS, XS_SIDPLAY2_FMAX); + xs_curve_set_points(curve, f->points, f->npoints); +} + + +void xs_cfg_sp2_presets_update() +{ +} + + void xs_cfg_sp2_filter_load(GtkButton *button, gpointer user_data) { + gchar *tmpStr; + gint i, j; + (void) button; (void) user_data; - /* - 1) get currently selected item from dropdown - 2) set current filter to that - */ + + XS_MUTEX_LOCK(xs_cfg); + + tmpStr = gtk_entry_get_text(GTK_ENTRY(LUW("cfg_sp2_filter_combo_entry"))); + for (i = 0, j = -1; i < xs_cfg.sid2NFilterPresets; i++) { + if (!strcmp(tmpStr, xs_cfg.sid2FilterPresets[i]->name)) { + j = i; + break; + } + } + if (j != -1) { + fprintf(stderr, "Updating from '%s'\n", tmpStr); + xs_cfg_sp2_filter_update( + XS_CURVE(LUW("cfg_sp2_filter_curve")), + xs_cfg.sid2FilterPresets[i]); + } else { + /* error/warning: no such filter preset */ + fprintf(stderr, "No such filter preset '%s'!\n", tmpStr); + } + + XS_MUTEX_UNLOCK(xs_cfg); } void xs_cfg_sp2_filter_save(GtkButton *button, gpointer user_data) { - (void) button; - (void) user_data; /* 1) check if textentry matches any current filter name yes) ask if saving over ok? @@ -812,6 +886,32 @@ 2) save current filter to the name */ + + gchar *tmpStr; + gint i, j; + + (void) button; + (void) user_data; + + XS_MUTEX_LOCK(xs_cfg); + + tmpStr = gtk_entry_get_text(GTK_ENTRY(LUW("cfg_sp2_filter_combo_entry"))); + for (i = 0, j = -1; i < xs_cfg.sid2NFilterPresets; i++) { + if (!strcmp(tmpStr, xs_cfg.sid2FilterPresets[i]->name)) { + j = i; + break; + } + } + + if (j != -1) { + fprintf(stderr, "found, confirm overwrite?\n"); + } + + fprintf(stderr, "saving!\n"); + + xs_cfg_sp2_presets_update(); + + XS_MUTEX_UNLOCK(xs_cfg); } @@ -835,6 +935,19 @@ 2) import 3) change name if already existing */ + + if (xs_filt_importselector != NULL) { + gdk_window_raise(xs_filt_importselector->window); + return; + } + + xs_filt_importselector = create_xs_filter_import_fs(); +/* + XS_MUTEX_LOCK(xs_cfg); + gtk_file_selection_set_filename(GTK_FILE_SELECTION(xs_filt_importselector), "paska"); + XS_MUTEX_UNLOCK(xs_cfg); +*/ + gtk_widget_show(xs_filt_importselector); } @@ -853,6 +966,12 @@ { (void) button; (void) user_data; + + xs_cfg_sp2_presets_update(); + + /* Close file selector window */ + gtk_widget_destroy(xs_filt_importselector); + xs_filt_importselector = NULL; } @@ -860,13 +979,24 @@ { (void) button; (void) user_data; + + /* Close file selector window */ + gtk_widget_destroy(xs_filt_importselector); + xs_filt_importselector = NULL; } +XS_DEF_WINDOW_DELETE(filter_import_fs, filt_importselector) + + void xs_filter_export_fs_ok(GtkButton *button, gpointer user_data) { (void) button; (void) user_data; + + /* Close file selector window */ + gtk_widget_destroy(xs_filt_exportselector); + xs_filt_exportselector = NULL; } @@ -874,9 +1004,16 @@ { (void) button; (void) user_data; + + /* Close file selector window */ + gtk_widget_destroy(xs_filt_exportselector); + xs_filt_exportselector = NULL; } +XS_DEF_WINDOW_DELETE(filter_export_fs, filt_exportselector) + + /* Selection toggle handlers */ void xs_cfg_emu_filters_toggled(GtkToggleButton * togglebutton, gpointer user_data) @@ -965,7 +1102,7 @@ } -void xs_cfg_sld_enable_toggled(GtkToggleButton * togglebutton, gpointer user_data) +void xs_cfg_sldb_enable_toggled(GtkToggleButton * togglebutton, gpointer user_data) { gboolean isActive = GTK_TOGGLE_BUTTON(togglebutton)->active; @@ -1040,19 +1177,7 @@ } -gboolean xs_configwin_delete(GtkWidget * widget, GdkEvent * event, gpointer user_data) -{ - (void) widget; - (void) event; - (void) user_data; - - XSDEBUG("config::delete_event\n"); - if (xs_configwin) { - gtk_widget_destroy(xs_configwin); - xs_configwin = NULL; - } - return FALSE; -} +XS_DEF_WINDOW_DELETE(configwin, configwin) /* Execute the configuration panel @@ -1077,14 +1202,9 @@ XS_MUTEX_LOCK(xs_cfg); /* Create the custom filter curve widget for libSIDPlay2 */ + xs_cfg_sp2_presets_update(); tmpCurve = xs_curve_new(); - xs_curve_reset(XS_CURVE(tmpCurve)); - xs_curve_set_range(XS_CURVE(tmpCurve), - 0,0, XS_SIDPLAY2_NFPOINTS, XS_SIDPLAY2_FMAX); - - xs_curve_set_points(XS_CURVE(tmpCurve), - xs_cfg.sid2Filter.points, xs_cfg.sid2Filter.npoints); - + xs_cfg_sp2_filter_update(XS_CURVE(tmpCurve), &xs_cfg.sid2Filter); gtk_widget_set_name(tmpCurve, "cfg_sp2_filter_curve"); gtk_widget_ref(tmpCurve); gtk_object_set_data_full(GTK_OBJECT(xs_configwin), @@ -1127,7 +1247,7 @@ xs_cfg_oversample_toggled((GtkToggleButton *) LUW("cfg_oversample"), NULL); xs_cfg_mintime_enable_toggled((GtkToggleButton *) LUW("cfg_mintime_enable"), NULL); xs_cfg_maxtime_enable_toggled((GtkToggleButton *) LUW("cfg_maxtime_enable"), NULL); - xs_cfg_sld_enable_toggled((GtkToggleButton *) LUW("cfg_sld_enable"), NULL); + xs_cfg_sldb_enable_toggled((GtkToggleButton *) LUW("cfg_sld_enable"), NULL); xs_cfg_stil_enable_toggled((GtkToggleButton *) LUW("cfg_stil_enable"), NULL); xs_cfg_subauto_enable_toggled((GtkToggleButton *) LUW("cfg_subauto_enable"), NULL); xs_cfg_subauto_min_only_toggled((GtkToggleButton *) LUW("cfg_subauto_min_only"), NULL); diff -r 15d511ab290a -r a437571d0fc5 src/xs_genui.h --- a/src/xs_genui.h Thu Mar 22 15:14:03 2007 +0000 +++ b/src/xs_genui.h Thu Mar 22 15:55:02 2007 +0000 @@ -1,6 +1,11 @@ #include +gboolean +xs_configwin_delete (GtkWidget *widget, + GdkEvent *event, + gpointer user_data); + void xs_cfg_oversample_toggled (GtkToggleButton *togglebutton, gpointer user_data); @@ -22,6 +27,10 @@ gpointer user_data); void +xs_cfg_sp2_filter_export (GtkButton *button, + gpointer user_data); + +void xs_cfg_sp2_filter_load (GtkButton *button, gpointer user_data); @@ -34,7 +43,7 @@ gpointer user_data); void -xs_cfg_sp2_filter_export (GtkButton *button, +xs_cfg_sp2_filter_delete (GtkButton *button, gpointer user_data); void @@ -54,11 +63,11 @@ gpointer user_data); void -xs_cfg_sld_enable_toggled (GtkToggleButton *togglebutton, +xs_cfg_sldb_enable_toggled (GtkToggleButton *togglebutton, gpointer user_data); void -xs_cfg_sld_dbbrowse (GtkButton *button, +xs_cfg_sldb_browse (GtkButton *button, gpointer user_data); void @@ -110,28 +119,48 @@ xs_fileinfo_ok (GtkButton *button, gpointer user_data); -void -xs_cfg_sldb_fs_ok (GtkButton *button, +gboolean +xs_sldb_fs_delete (GtkWidget *widget, + GdkEvent *event, gpointer user_data); void -xs_cfg_sldb_fs_cancel (GtkButton *button, +xs_sldb_fs_ok (GtkButton *button, + gpointer user_data); + +void +xs_sldb_fs_cancel (GtkButton *button, + gpointer user_data); + +gboolean +xs_stil_fs_delete (GtkWidget *widget, + GdkEvent *event, gpointer user_data); void -xs_cfg_stil_fs_ok (GtkButton *button, +xs_stil_fs_ok (GtkButton *button, gpointer user_data); void -xs_cfg_stil_fs_cancel (GtkButton *button, +xs_stil_fs_cancel (GtkButton *button, + gpointer user_data); + +gboolean +xs_hvsc_fs_delete (GtkWidget *widget, + GdkEvent *event, gpointer user_data); void -xs_cfg_hvsc_fs_ok (GtkButton *button, +xs_hvsc_fs_ok (GtkButton *button, gpointer user_data); void -xs_cfg_hvsc_fs_cancel (GtkButton *button, +xs_hvsc_fs_cancel (GtkButton *button, + gpointer user_data); + +gboolean +xs_filter_import_fs_delete (GtkWidget *widget, + GdkEvent *event, gpointer user_data); void @@ -142,6 +171,11 @@ xs_filter_import_fs_cancel (GtkButton *button, gpointer user_data); +gboolean +xs_filter_export_fs_delete (GtkWidget *widget, + GdkEvent *event, + gpointer user_data); + void xs_filter_export_fs_ok (GtkButton *button, gpointer user_data); @@ -149,12 +183,3 @@ void xs_filter_export_fs_cancel (GtkButton *button, gpointer user_data); - -void -xs_cfg_sp2_filter_delete (GtkButton *button, - gpointer user_data); - -gboolean -xs_configwin_delete (GtkWidget *widget, - GdkEvent *event, - gpointer user_data); diff -r 15d511ab290a -r a437571d0fc5 xmms-sid.glade --- a/xmms-sid.glade Thu Mar 22 15:14:03 2007 +0000 +++ b/xmms-sid.glade Thu Mar 22 15:55:02 2007 +0000 @@ -1619,7 +1619,7 @@ True toggled - xs_cfg_sld_enable_toggled + xs_cfg_sldb_enable_toggled Wed, 18 Aug 2004 02:51:47 GMT @@ -1683,7 +1683,7 @@ True clicked - xs_cfg_sld_dbbrowse + xs_cfg_sldb_browse Sat, 18 Aug 2001 23:38:10 GMT @@ -2976,11 +2976,11 @@ GtkFileSelection - xs_sldbfileselector + xs_sldb_fs 10 delete_event - xs_sldbfileselector_delete + xs_sldb_fs_delete Thu, 22 Mar 2007 15:08:51 GMT Select HVSC song length database @@ -3000,7 +3000,7 @@ True clicked - xs_cfg_sldb_fs_ok + xs_sldb_fs_ok Sat, 19 Oct 2002 22:50:48 GMT @@ -3015,7 +3015,7 @@ True clicked - xs_cfg_sldb_fs_cancel + xs_sldb_fs_cancel Sat, 19 Oct 2002 22:50:54 GMT @@ -3025,11 +3025,11 @@ GtkFileSelection - xs_stilfileselector + xs_stil_fs 10 delete_event - xs_stilfileselector_delete + xs_stil_fs_delete Thu, 22 Mar 2007 15:09:06 GMT Select STIL-database @@ -3049,7 +3049,7 @@ True clicked - xs_cfg_stil_fs_ok + xs_stil_fs_ok Sat, 19 Oct 2002 22:50:38 GMT @@ -3064,7 +3064,7 @@ True clicked - xs_cfg_stil_fs_cancel + xs_stil_fs_cancel Sat, 19 Oct 2002 22:51:00 GMT @@ -3074,11 +3074,11 @@ GtkFileSelection - xs_hvscpathselector + xs_hvsc_fs 10 delete_event - xs_hvscpathselector_delete + xs_hvsc_fs_delete Thu, 22 Mar 2007 15:09:24 GMT Select HVSC location prefix @@ -3098,7 +3098,7 @@ True clicked - xs_cfg_hvsc_fs_ok + xs_hvsc_fs_ok Wed, 14 Jan 2004 14:36:41 GMT @@ -3113,7 +3113,7 @@ True clicked - xs_cfg_hvsc_fs_cancel + xs_hvsc_fs_cancel Wed, 14 Jan 2004 14:37:04 GMT