]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/sound.h
Fixed size problem due to wxMac window implementation difference
[wxWidgets.git] / include / wx / sound.h
index c96dc74cfc2d31ce8b6d06fb5ca3b61cebc1a696..75806a53a31143815cb8ca55f580f9ba41df83f3 100644 (file)
 #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
-};
+#if WXWIN_COMPATIBILITY_2_4
+    // NB: we can't use enum because there would be ambiguity between the
+    //     two Play() prototypes when called without explicit parameters
+    #define wxSOUND_SYNC  ((unsigned)0)
+    #define wxSOUND_ASYNC ((unsigned)1)
+    #define wxSOUND_LOOP  ((unsigned)2)
+#else
+    enum wxSoundFlags
+    {
+        wxSOUND_SYNC   = 0,
+        wxSOUND_ASYNC  = 1,
+        wxSOUND_LOOP   = 2
+    };
+#endif
 
-class wxSoundBase : public wxObject
+// 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) );
+    wxDEPRECATED( bool Play(bool async, bool looped = false) const );
 #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(__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;
+// ----------------------------------------------------------------------------
+// wxSoundBase methods
+// ----------------------------------------------------------------------------
+
+inline bool wxSoundBase::Play(const wxString& filename, unsigned flags)
+{
+    wxSound snd(filename);
+    return snd.IsOk() ? snd.Play(flags) : false;
+}
+
+#if WXWIN_COMPATIBILITY_2_4
+inline bool wxSoundBase::Play(bool async, bool looped) const
+{
+    unsigned flags = 0;
+    if (async) flags |= wxSOUND_ASYNC;
+    if (looped) flags |= wxSOUND_LOOP | wxSOUND_ASYNC;
+    return DoPlay(flags);
+}
 #endif
 
+#endif // wxUSE_SOUND
+
 #endif // _WX_SOUND_H_BASE_