shithub: choc

Download patch

ref: bccb85d1c3c978f072b99a0ad692c6bcd3402351
parent: cb3c1cbb8621ab257c503cb05c2a62730b4697bd
author: Simon Howard <fraggle@gmail.com>
date: Mon Mar 12 08:38:54 EDT 2007

Change "sound effects enabled" checkbox to a dropdown, allowing PC
speaker to be selected as well.

Subversion-branch: /trunk/chocolate-doom
Subversion-revision: 855

--- a/setup/sound.c
+++ b/setup/sound.c
@@ -28,16 +28,45 @@
 
 #include "sound.h"
 
+enum
+{
+    SNDDEVICE_NONE = 0,
+    SNDDEVICE_PCSPEAKER = 1,
+    SNDDEVICE_ADLIB = 2,
+    SNDDEVICE_SB = 3,
+    SNDDEVICE_PAS = 4,
+    SNDDEVICE_GUS = 5,
+    SNDDEVICE_WAVEBLASTER = 6,
+    SNDDEVICE_SOUNDCANVAS = 7,
+    SNDDEVICE_GENMIDI = 8,
+    SNDDEVICE_AWE32 = 9,
+};
+
+typedef enum
+{
+    SFXMODE_DISABLED,
+    SFXMODE_PCSPEAKER,
+    SFXMODE_DIGITAL,
+    NUM_SFXMODES
+} sfxmode_t;
+
+static char *sfxmode_strings[] = 
+{
+    "Disabled",
+    "PC speaker",
+    "Digital",
+};
+
 // Disable MIDI music on OSX: there are problems with the native
 // MIDI code in SDL_mixer.
 
 #ifdef __MACOSX__
-#define DEFAULT_MUSIC_DEVICE 0
+#define DEFAULT_MUSIC_DEVICE SNDDEVICE_NONE
 #else
-#define DEFAULT_MUSIC_DEVICE 3
+#define DEFAULT_MUSIC_DEVICE SNDDEVICE_SB
 #endif
 
-int snd_sfxdevice = 3;
+int snd_sfxdevice = SNDDEVICE_SB;
 int numChannels = 8;
 int sfxVolume = 15;
 
@@ -44,27 +73,31 @@
 int snd_musicdevice = DEFAULT_MUSIC_DEVICE;
 int musicVolume = 15;
 
-static int snd_sfxenabled;
+static int snd_sfxmode;
 static int snd_musicenabled;
 
 static void UpdateSndDevices(TXT_UNCAST_ARG(widget), TXT_UNCAST_ARG(data))
 {
-    if (snd_sfxenabled)
+    switch (snd_sfxmode)
     {
-        snd_sfxdevice = 3;
+        case SFXMODE_DISABLED:
+            snd_sfxdevice = SNDDEVICE_NONE;
+            break;
+        case SFXMODE_PCSPEAKER:
+            snd_sfxdevice = SNDDEVICE_PCSPEAKER;
+            break;
+        case SFXMODE_DIGITAL:
+            snd_sfxdevice = SNDDEVICE_SB;
+            break;
     }
-    else
-    {
-        snd_sfxdevice = 0;
-    }
-
+    
     if (snd_musicenabled)
     {
-        snd_musicdevice = 3;
+        snd_musicdevice = SNDDEVICE_SB;
     }
     else
     {
-        snd_musicdevice = 0;
+        snd_musicdevice = SNDDEVICE_NONE;
     }
 }
 
@@ -73,18 +106,28 @@
     txt_window_t *window;
     txt_table_t *sfx_table;
     txt_table_t *music_table;
-    txt_checkbox_t *sfx_enabled_control;
+    txt_dropdown_list_t *sfx_mode_control;
     txt_checkbox_t *music_enabled_control;
 
-    snd_sfxenabled = snd_sfxdevice != 0;
-    snd_musicenabled = snd_musicdevice != 0;
+    if (snd_sfxdevice == SNDDEVICE_PCSPEAKER)
+    {
+        snd_sfxmode = SFXMODE_PCSPEAKER;
+    }
+    else if (snd_sfxdevice >= SNDDEVICE_SB)
+    {
+        snd_sfxmode = SFXMODE_DIGITAL;
+    }
+    else
+    {
+        snd_sfxmode = SFXMODE_DISABLED;
+    }
+    
+    snd_musicenabled = snd_musicdevice != SNDDEVICE_NONE;
 
     window = TXT_NewWindow("Sound configuration");
 
     TXT_AddWidgets(window,
                TXT_NewSeparator("Sound effects"),
-               sfx_enabled_control = TXT_NewCheckBox("Sound effects enabled", 
-                                                     &snd_sfxenabled),
                sfx_table = TXT_NewTable(2),
                TXT_NewSeparator("Music"),
                music_enabled_control = TXT_NewCheckBox("Music enabled", 
@@ -94,12 +137,11 @@
 
     TXT_SetColumnWidths(sfx_table, 20, 5);
 
-    TXT_SignalConnect(sfx_enabled_control, "changed", 
-                      UpdateSndDevices, NULL);
-    TXT_SignalConnect(music_enabled_control, "changed", 
-                      UpdateSndDevices, NULL);
-
     TXT_AddWidgets(sfx_table, 
+                   TXT_NewLabel("Sound effects"),
+                   sfx_mode_control = TXT_NewDropdownList(&snd_sfxmode,
+                                                          sfxmode_strings,
+                                                          NUM_SFXMODES),
                    TXT_NewLabel("Sound channels"),
                    TXT_NewSpinControl(&numChannels, 1, 8),
                    TXT_NewLabel("SFX volume"),
@@ -112,5 +154,11 @@
                    TXT_NewLabel("Music volume"),
                    TXT_NewSpinControl(&musicVolume, 0, 15),
                    NULL);
+
+    TXT_SignalConnect(sfx_mode_control, "changed", 
+                      UpdateSndDevices, NULL);
+    TXT_SignalConnect(music_enabled_control, "changed", 
+                      UpdateSndDevices, NULL);
+
 }