]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/sound.h
Prevent seg fault for older GTK+
[wxWidgets.git] / include / wx / sound.h
index c96dc74cfc2d31ce8b6d06fb5ca3b61cebc1a696..a0c780488f8b114c8d141f8ebac8f03628cf63e7 100644 (file)
@@ -6,15 +6,15 @@
 // Created:     2004/02/01
 // RCS-ID:      $Id$
 // Copyright:   (c) 2004, Vaclav Slavik
-// Licence:    wxWindows licence
+// Licence:     wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
 
 #ifndef _WX_SOUND_H_BASE_
 #define _WX_SOUND_H_BASE_
 
-#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
-#pragma interface "soundbase.h"
-#endif
+#include "wx/defs.h"
+
+#if wxUSE_SOUND
 
 #include "wx/object.h"
 
 // ----------------------------------------------------------------------------
 
 // Flags for wxSound::Play
-enum wxSoundFlags
-{
-    wxSOUND_SYNC   = 0,
-    wxSOUND_ASYNC  = 1,
-    wxSOUND_LOOP   = 2 | wxSOUND_ASYNC
-};
 
-class wxSoundBase : public wxObject
+// NB: We can't use enum with some compilers, because they keep reporting
+//     nonexistent ambiguities between Play(unsigned) and static Play(const
+//     wxString&, unsigned).
+#define wxSOUND_SYNC  ((unsigned)0)
+#define wxSOUND_ASYNC ((unsigned)1)
+#define wxSOUND_LOOP  ((unsigned)2)
+
+// Base class for wxSound implementations
+class WXDLLIMPEXP_ADV wxSoundBase : public wxObject
 {
 public:
     // Play the sound:
-    bool Play(unsigned flags = wxSOUND_ASYNC)
+    bool Play(unsigned flags = wxSOUND_ASYNC) const
     {
+        wxASSERT_MSG( (flags & wxSOUND_LOOP) == 0 ||
+                      (flags & wxSOUND_ASYNC) != 0,
+                     _T("sound can only be looped asynchronously") );
         return DoPlay(flags);
     }
-#if WXWIN_COMPATIBILITY_2_4
-    wxDEPRECATED( bool Play(bool async = true, bool looped = false) );
-#endif
+
+    // Plays sound from filename:
+    static bool Play(const wxString& filename, unsigned flags = wxSOUND_ASYNC);
 
 protected:
-    virtual bool DoPlay(unsigned flags) = 0;
+    virtual bool DoPlay(unsigned flags) const = 0;
 };
-    
-#if WXWIN_COMPATIBILITY_2_4
-inline bool wxSoundBase::Play(bool async, bool looped)
-{
-    unsigned flags = 0;
-    if (async) flags |= wxSOUND_ASYNC;
-    if (looped) flags |= wxSOUND_LOOP;
-    return DoPlay(flags);
-}
-#endif
 
 // ----------------------------------------------------------------------------
 // wxSound class implementation
 // ----------------------------------------------------------------------------
 
 #if defined(__WXMSW__)
-#include "wx/msw/wave.h"
-#elif defined(__UNIX__)
-#include "wx/unix/sound.h"
+    #include "wx/msw/sound.h"
+#elif defined(__WXCOCOA__)
+    #include "wx/cocoa/sound.h"
 #elif defined(__WXMAC__)
-#include "wx/mac/wave.h"
+    #include "wx/mac/sound.h"
 #elif defined(__WXPM__)
-#include "wx/os2/wave.h"
+    #include "wx/os2/sound.h"
+#elif defined(__UNIX__)
+    #include "wx/unix/sound.h"
 #endif
 
-// wxSound used to be called wxWave before wxWindows 2.5.1:
-#ifdef __UNIX__ // FIXME: on all platforms when everything is renamed
-    #if WXWIN_COMPATIBILITY_2_4
-        typedef wxSound wxWave;
-    #endif
-#else
-    typedef wxWave wxSound;
-#endif
+// ----------------------------------------------------------------------------
+// wxSoundBase methods
+// ----------------------------------------------------------------------------
+
+inline bool wxSoundBase::Play(const wxString& filename, unsigned flags)
+{
+    wxSound snd(filename);
+    return snd.IsOk() ? snd.Play(flags) : false;
+}
+
+#endif // wxUSE_SOUND
 
 #endif // _WX_SOUND_H_BASE_