X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/91116345459337f3fc10fa60ad96d770d41569eb..7ecb668390cc0d873a3b62b67f47354052aba884:/include/wx/sound.h diff --git a/include/wx/sound.h b/include/wx/sound.h index 9cd472ad9b..db76105490 100644 --- a/include/wx/sound.h +++ b/include/wx/sound.h @@ -6,7 +6,7 @@ // Created: 2004/02/01 // RCS-ID: $Id$ // Copyright: (c) 2004, Vaclav Slavik -// Licence: wxWindows licence +// Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// #ifndef _WX_SOUND_H_BASE_ @@ -16,6 +16,10 @@ #pragma interface "soundbase.h" #endif +#include "wx/defs.h" + +#if wxUSE_SOUND + #include "wx/object.h" // ---------------------------------------------------------------------------- @@ -23,60 +27,76 @@ // ---------------------------------------------------------------------------- // Flags for wxSound::Play -enum wxSoundFlags -{ - wxSOUND_SYNC = 0, - wxSOUND_ASYNC = 1, - wxSOUND_LOOP = 2 -}; -class wxSoundBase : public wxObject +// NB: We can't use enum because there would be ambiguity between the +// two Play() prototypes when called without explicit parameters +// if WXWIN_COMPATIBILITY_2_4. +// We can't use enum with some compilers either, 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) ); + 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 | wxSOUND_ASYNC; - 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; +// ---------------------------------------------------------------------------- +// 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_