changeset 871:d183ac29b879

Add ROM image path configuration.
author Matti Hamalainen <ccr@tnsp.org>
date Fri, 09 Nov 2012 04:24:48 +0200
parents a2eb84ed5280
children b02f934d8224
files src/xs_config.c src/xs_config.h src/xs_genui.c src/xs_genui.h src/xs_interface.c src/xs_interface.h xmms-sid.glade
diffstat 7 files changed, 253 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/src/xs_config.c	Fri Nov 09 04:01:03 2012 +0200
+++ b/src/xs_config.c	Fri Nov 09 04:24:48 2012 +0200
@@ -65,6 +65,7 @@
     *xs_sldb_fileselector = NULL,
     *xs_stil_fileselector = NULL,
     *xs_hvsc_selector = NULL,
+    *xs_rom_selector = NULL,
     *xs_filt_importselector = NULL,
     *xs_filt_exportselector = NULL;
 
@@ -120,6 +121,8 @@
 { CTYPE_STR,    &xs_cfg.stilDBPath,             "stilDBPath" },
 { CTYPE_STR,    &xs_cfg.hvscPath,               "hvscPath" },
 
+{ CTYPE_STR,    &xs_cfg.romPath,                "romPath" },
+
 #ifndef AUDACIOUS_PLUGIN
 { CTYPE_INT,    &xs_cfg.subsongControl,         "subsongControl" },
 { CTYPE_BOOL,   &xs_cfg.detectMagic,            "detectMagic" },
@@ -163,6 +166,8 @@
 { 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_TEXT,   CTYPE_STR,      "cfg_rom_path",         &xs_cfg.hvscPath,               0 },
+
 { WTYPE_BUTTON, CTYPE_BOOL,     "cfg_emu_filters",      &xs_cfg.emulateFilters,         0 },
 { WTYPE_SCALE,  CTYPE_FLOAT,    "cfg_sp1_filter_fs",    &xs_cfg.sid1Filter.fs,          0 },
 { WTYPE_SCALE,  CTYPE_FLOAT,    "cfg_sp1_filter_fm",    &xs_cfg.sid1Filter.fm,          0 },
@@ -1073,6 +1078,46 @@
 XS_DEF_WINDOW_DELETE(hvsc_fs, hvsc_selector)
 
 
+/* C64 ROM path selector response-functions
+ */
+void xs_cfg_rom_browse(GtkButton * button, gpointer user_data)
+{
+    (void) button;
+    (void) user_data;
+
+    if (xs_rom_selector != NULL)
+    {
+        XS_WINDOW_PRESENT(xs_rom_selector);
+        return;
+    }
+
+    xs_hvsc_selector = create_xs_rom_fs();
+    XS_MUTEX_LOCK(xs_cfg);
+    gtk_file_selection_set_filename(GTK_FILE_SELECTION(xs_rom_selector), xs_cfg.romPath);
+    XS_MUTEX_UNLOCK(xs_cfg);
+    gtk_widget_show(xs_rom_selector);
+}
+
+
+void xs_rom_fs_ok(GtkButton *button, gpointer user_data)
+{
+    (void) button;
+    (void) user_data;
+
+    /* Selection was accepted! */
+    gtk_entry_set_text(GTK_ENTRY(LUW("cfg_rom_path")),
+        gtk_file_selection_get_filename(GTK_FILE_SELECTION(xs_rom_selector)));
+
+    /* Close file selector window */
+    gtk_widget_destroy(xs_rom_selector);
+    xs_rom_selector = NULL;
+}
+
+
+XS_DEF_WINDOW_CLOSE(rom_fs_cancel, rom_selector)
+XS_DEF_WINDOW_DELETE(rom_fs, rom_selector)
+
+
 /* Filter handling
  */
 void xs_cfg_sp1_filter_reset(GtkButton * button, gpointer user_data)
--- a/src/xs_config.h	Fri Nov 09 04:01:03 2012 +0200
+++ b/src/xs_config.h	Fri Nov 09 04:24:48 2012 +0200
@@ -144,6 +144,8 @@
     gboolean    subAutoEnable,
                 subAutoMinOnly;
     gint        subAutoMinTime;
+
+    gchar       *romPath;
 } xs_cfg;
 
 XS_MUTEX_H(xs_cfg);
--- a/src/xs_genui.c	Fri Nov 09 04:01:03 2012 +0200
+++ b/src/xs_genui.c	Fri Nov 09 04:24:48 2012 +0200
@@ -25,5 +25,3 @@
 
   return FALSE;
 }
-
-
--- a/src/xs_genui.h	Fri Nov 09 04:01:03 2012 +0200
+++ b/src/xs_genui.h	Fri Nov 09 04:24:48 2012 +0200
@@ -194,3 +194,12 @@
                                         GdkEvent        *event,
                                         gpointer         user_data);
 
+
+void
+xs_cfg_rom_browse                      (GtkButton       *button,
+                                        gpointer         user_data);
+
+gboolean
+xs_rom_fs_delete                       (GtkWidget       *widget,
+                                        GdkEvent        *event,
+                                        gpointer         user_data);
--- a/src/xs_interface.c	Fri Nov 09 04:01:03 2012 +0200
+++ b/src/xs_interface.c	Fri Nov 09 04:24:48 2012 +0200
@@ -87,6 +87,11 @@
   GtkWidget *cfg_emu_resid_int;
   GtkWidget *cfg_emu_resid_res_fast;
   GtkWidget *cfg_emu_resid_res_int;
+  GtkWidget *cfg_rom_frame;
+  GtkWidget *w_rom_hbox;
+  GtkWidget *cfg_rom_label1;
+  GtkWidget *cfg_rom_path;
+  GtkWidget *cfg_rom_browse;
   GtkWidget *w_label48;
   GtkWidget *w_vbox25;
   GtkWidget *cfg_emu_filters;
@@ -712,6 +717,48 @@
   gtk_widget_show (cfg_emu_resid_res_int);
   gtk_box_pack_start (GTK_BOX (w_vbox37), cfg_emu_resid_res_int, FALSE, FALSE, 0);
 
+  cfg_rom_frame = gtk_frame_new (_("C64 Kernal/Basic/Chargen ROMs:"));
+  gtk_widget_set_name (cfg_rom_frame, "cfg_rom_frame");
+  gtk_widget_ref (cfg_rom_frame);
+  gtk_object_set_data_full (GTK_OBJECT (xs_configwin), "cfg_rom_frame", cfg_rom_frame,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (cfg_rom_frame);
+  gtk_box_pack_start (GTK_BOX (w_vbox29), cfg_rom_frame, FALSE, TRUE, 0);
+  gtk_container_set_border_width (GTK_CONTAINER (cfg_rom_frame), 4);
+
+  w_rom_hbox = gtk_hbox_new (FALSE, 4);
+  gtk_widget_set_name (w_rom_hbox, "w_rom_hbox");
+  gtk_widget_ref (w_rom_hbox);
+  gtk_object_set_data_full (GTK_OBJECT (xs_configwin), "w_rom_hbox", w_rom_hbox,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (w_rom_hbox);
+  gtk_container_add (GTK_CONTAINER (cfg_rom_frame), w_rom_hbox);
+  gtk_container_set_border_width (GTK_CONTAINER (w_rom_hbox), 2);
+
+  cfg_rom_label1 = gtk_label_new (_("Path:"));
+  gtk_widget_set_name (cfg_rom_label1, "cfg_rom_label1");
+  gtk_widget_ref (cfg_rom_label1);
+  gtk_object_set_data_full (GTK_OBJECT (xs_configwin), "cfg_rom_label1", cfg_rom_label1,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (cfg_rom_label1);
+  gtk_box_pack_start (GTK_BOX (w_rom_hbox), cfg_rom_label1, FALSE, FALSE, 0);
+
+  cfg_rom_path = gtk_entry_new ();
+  gtk_widget_set_name (cfg_rom_path, "cfg_rom_path");
+  gtk_widget_ref (cfg_rom_path);
+  gtk_object_set_data_full (GTK_OBJECT (xs_configwin), "cfg_rom_path", cfg_rom_path,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (cfg_rom_path);
+  gtk_box_pack_start (GTK_BOX (w_rom_hbox), cfg_rom_path, TRUE, TRUE, 0);
+
+  cfg_rom_browse = gtk_button_new_with_label (_("Browse"));
+  gtk_widget_set_name (cfg_rom_browse, "cfg_rom_browse");
+  gtk_widget_ref (cfg_rom_browse);
+  gtk_object_set_data_full (GTK_OBJECT (xs_configwin), "cfg_rom_browse", cfg_rom_browse,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (cfg_rom_browse);
+  gtk_box_pack_start (GTK_BOX (w_rom_hbox), cfg_rom_browse, FALSE, FALSE, 0);
+
   w_label48 = gtk_label_new (_("Emu#2"));
   gtk_widget_set_name (w_label48, "w_label48");
   gtk_widget_ref (w_label48);
@@ -1150,6 +1197,7 @@
                             (GtkDestroyNotify) gtk_widget_unref);
   gtk_widget_show (cfg_sld_box);
   gtk_box_pack_start (GTK_BOX (w_vbox18), cfg_sld_box, FALSE, TRUE, 0);
+  gtk_container_set_border_width (GTK_CONTAINER (cfg_sld_box), 2);
 
   cfg_sld_label1 = gtk_label_new (_("DB-file:"));
   gtk_widget_set_name (cfg_sld_label1, "cfg_sld_label1");
@@ -1617,6 +1665,9 @@
   gtk_signal_connect (GTK_OBJECT (cfg_emu_sidplayfp), "toggled",
                       GTK_SIGNAL_FUNC (xs_cfg_emu_sidplay2_toggled),
                       NULL);
+  gtk_signal_connect (GTK_OBJECT (cfg_rom_browse), "clicked",
+                      GTK_SIGNAL_FUNC (xs_cfg_rom_browse),
+                      NULL);
   gtk_signal_connect (GTK_OBJECT (cfg_emu_filters), "toggled",
                       GTK_SIGNAL_FUNC (xs_cfg_emu_filters_toggled),
                       NULL);
@@ -2459,3 +2510,36 @@
   return xs_filter_newwin;
 }
 
+GtkWidget*
+create_xs_rom_fs (void)
+{
+  GtkWidget *xs_rom_fs;
+  GtkWidget *ok_button65;
+  GtkWidget *cancel_button65;
+
+  xs_rom_fs = gtk_file_selection_new (_("Select path to C64 ROM images"));
+  gtk_widget_set_name (xs_rom_fs, "xs_rom_fs");
+  gtk_object_set_data (GTK_OBJECT (xs_rom_fs), "xs_rom_fs", xs_rom_fs);
+  gtk_container_set_border_width (GTK_CONTAINER (xs_rom_fs), 10);
+  gtk_window_set_modal (GTK_WINDOW (xs_rom_fs), TRUE);
+  gtk_file_selection_hide_fileop_buttons (GTK_FILE_SELECTION (xs_rom_fs));
+
+  ok_button65 = GTK_FILE_SELECTION (xs_rom_fs)->ok_button;
+  gtk_widget_set_name (ok_button65, "ok_button65");
+  gtk_object_set_data (GTK_OBJECT (xs_rom_fs), "ok_button65", ok_button65);
+  gtk_widget_show (ok_button65);
+  GTK_WIDGET_SET_FLAGS (ok_button65, GTK_CAN_DEFAULT);
+
+  cancel_button65 = GTK_FILE_SELECTION (xs_rom_fs)->cancel_button;
+  gtk_widget_set_name (cancel_button65, "cancel_button65");
+  gtk_object_set_data (GTK_OBJECT (xs_rom_fs), "cancel_button65", cancel_button65);
+  gtk_widget_show (cancel_button65);
+  GTK_WIDGET_SET_FLAGS (cancel_button65, GTK_CAN_DEFAULT);
+
+  gtk_signal_connect (GTK_OBJECT (xs_rom_fs), "delete_event",
+                      GTK_SIGNAL_FUNC (xs_rom_fs_delete),
+                      NULL);
+
+  return xs_rom_fs;
+}
+
--- a/src/xs_interface.h	Fri Nov 09 04:01:03 2012 +0200
+++ b/src/xs_interface.h	Fri Nov 09 04:24:48 2012 +0200
@@ -11,3 +11,4 @@
 GtkWidget* create_xs_filter_export_fs (void);
 GtkWidget* create_xs_confirmwin (void);
 GtkWidget* create_xs_filter_newwin (void);
+GtkWidget* create_xs_rom_fs (void);
--- a/xmms-sid.glade	Fri Nov 09 04:01:03 2012 +0200
+++ b/xmms-sid.glade	Fri Nov 09 04:24:48 2012 +0200
@@ -805,6 +805,78 @@
 	    </widget>
 	  </widget>
 	</widget>
+
+	<widget>
+	  <class>GtkFrame</class>
+	  <name>cfg_rom_frame</name>
+	  <border_width>4</border_width>
+	  <label>C64 Kernal/Basic/Chargen ROMs:</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>GtkHBox</class>
+	    <name>w_rom_hbox</name>
+	    <border_width>2</border_width>
+	    <homogeneous>False</homogeneous>
+	    <spacing>4</spacing>
+
+	    <widget>
+	      <class>GtkLabel</class>
+	      <name>cfg_rom_label1</name>
+	      <label>Path:</label>
+	      <justify>GTK_JUSTIFY_CENTER</justify>
+	      <wrap>False</wrap>
+	      <xalign>0.5</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>GtkEntry</class>
+	      <name>cfg_rom_path</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>
+		<expand>True</expand>
+		<fill>True</fill>
+	      </child>
+	    </widget>
+
+	    <widget>
+	      <class>GtkButton</class>
+	      <name>cfg_rom_browse</name>
+	      <can_focus>True</can_focus>
+	      <signal>
+		<name>clicked</name>
+		<handler>xs_cfg_rom_browse</handler>
+		<last_modification_time>Fri, 09 Nov 2012 02:14:12 GMT</last_modification_time>
+	      </signal>
+	      <label>Browse</label>
+	      <relief>GTK_RELIEF_NORMAL</relief>
+	      <child>
+		<padding>0</padding>
+		<expand>False</expand>
+		<fill>False</fill>
+	      </child>
+	    </widget>
+	  </widget>
+	</widget>
       </widget>
 
       <widget>
@@ -1588,6 +1660,7 @@
 	    <widget>
 	      <class>GtkHBox</class>
 	      <name>cfg_sld_box</name>
+	      <border_width>2</border_width>
 	      <homogeneous>False</homogeneous>
 	      <spacing>4</spacing>
 	      <child>
@@ -3475,4 +3548,43 @@
   </widget>
 </widget>
 
+<widget>
+  <class>GtkFileSelection</class>
+  <name>xs_rom_fs</name>
+  <border_width>10</border_width>
+  <signal>
+    <name>delete_event</name>
+    <handler>xs_rom_fs_delete</handler>
+    <last_modification_time>Fri, 09 Nov 2012 02:20:19 GMT</last_modification_time>
+  </signal>
+  <title>Select path to C64 ROM images</title>
+  <type>GTK_WINDOW_TOPLEVEL</type>
+  <position>GTK_WIN_POS_NONE</position>
+  <modal>True</modal>
+  <allow_shrink>False</allow_shrink>
+  <allow_grow>True</allow_grow>
+  <auto_shrink>False</auto_shrink>
+  <show_file_op_buttons>False</show_file_op_buttons>
+
+  <widget>
+    <class>GtkButton</class>
+    <child_name>FileSel:ok_button</child_name>
+    <name>ok_button65</name>
+    <can_default>True</can_default>
+    <can_focus>True</can_focus>
+    <label>OK</label>
+    <relief>GTK_RELIEF_NORMAL</relief>
+  </widget>
+
+  <widget>
+    <class>GtkButton</class>
+    <child_name>FileSel:cancel_button</child_name>
+    <name>cancel_button65</name>
+    <can_default>True</can_default>
+    <can_focus>True</can_focus>
+    <label>Cancel</label>
+    <relief>GTK_RELIEF_NORMAL</relief>
+  </widget>
+</widget>
+
 </GTK-Interface>