X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/e9e23cb531e6967b6262c2cacf17fb53eb622193..f325fa52deb739f64536962b97e5db8eec9ee1c7:/include/wx/sound.h diff --git a/include/wx/sound.h b/include/wx/sound.h index c96dc74cfc..f450bcc6bd 100644 --- a/include/wx/sound.h +++ b/include/wx/sound.h @@ -16,6 +16,10 @@ #pragma interface "soundbase.h" #endif +#include "wx/defs.h" + +#if wxUSE_SOUND + #include "wx/object.h" // ---------------------------------------------------------------------------- @@ -23,60 +27,81 @@ // ---------------------------------------------------------------------------- // Flags for wxSound::Play -enum wxSoundFlags -{ - wxSOUND_SYNC = 0, - wxSOUND_ASYNC = 1, - wxSOUND_LOOP = 2 | wxSOUND_ASYNC -}; +#if WXWIN_COMPATIBILITY_2_4 || defined(__BORLANDC__) + // NB: We can't use enum because there would be ambiguity between the + // two Play() prototypes when called without explicit parameters. + // We can't use enum with Borland's compiler either, because it's + // broken and keeps 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) +#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_