foxygit / doom Log in
commit bccb85d1c3c978f072b99a0ad692c6bcd3402351
Author:     Simon Howard <fraggle@gmail.com>
AuthorDate: Mon Mar 12 12:38:54 2007 +0000
Commit:     Simon Howard <fraggle@gmail.com>
CommitDate: Mon Mar 12 12:38:54 2007 +0000

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

    Subversion-branch: /trunk/chocolate-doom
    Subversion-revision: 855
---
 setup/sound.c | 94 ++++++++++++++++++++++++++++++++++++++++++++---------------
 1 file changed, 71 insertions(+), 23 deletions(-)

diff --git a/setup/sound.c b/setup/sound.c
index 10ec823c..327c5006 100644
--- a/setup/sound.c
+++ b/setup/sound.c
@@ -28,43 +28,76 @@

 #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;

 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 @@ void ConfigSound(void)
     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 @@ void ConfigSound(void)

     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 @@ void ConfigSound(void)
                    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);
+
 }