diff --git a/include/wx/chkconf.h b/include/wx/chkconf.h index 46ba51d014..c752d25709 100644 --- a/include/wx/chkconf.h +++ b/include/wx/chkconf.h @@ -592,6 +592,14 @@ # endif #endif /* !defined(wxUSE_SLIDER) */ +#ifndef wxUSE_SOUND +# ifdef wxABORT_ON_CONFIG_ERROR +# error "wxUSE_SOUND must be defined." +# else +# define wxUSE_SOUND 0 +# endif +#endif /* !defined(wxUSE_SOUND) */ + #ifndef wxUSE_SPINBTN # ifdef wxABORT_ON_CONFIG_ERROR # error "wxUSE_SPINBTN must be defined." diff --git a/include/wx/sound.h b/include/wx/sound.h index 9cd472ad9b..3e470dd11b 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,31 +27,70 @@ // ---------------------------------------------------------------------------- // Flags for wxSound::Play -enum wxSoundFlags -{ - wxSOUND_SYNC = 0, - wxSOUND_ASYNC = 1, - wxSOUND_LOOP = 2 -}; +#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 +// Base class for wxSound implementations class 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 -protected: - virtual bool DoPlay(unsigned flags) = 0; -}; + // Plays sound from filename: + static bool Play(const wxString& filename, unsigned flags = wxSOUND_ASYNC); +protected: + virtual bool DoPlay(unsigned flags) const = 0; +}; + +// ---------------------------------------------------------------------------- +// wxSound class implementation +// ---------------------------------------------------------------------------- + +#if defined(__WXMSW__) + #include "wx/msw/sound.h" +#elif defined(__UNIX__) + #include "wx/unix/sound.h" +#elif defined(__WXMAC__) + #include "wx/mac/sound.h" +#elif defined(__WXPM__) + #include "wx/os2/sound.h" +#endif + +// ---------------------------------------------------------------------------- +// 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) +inline bool wxSoundBase::Play(bool async, bool looped) const { unsigned flags = 0; if (async) flags |= wxSOUND_ASYNC; @@ -56,27 +99,6 @@ inline bool wxSoundBase::Play(bool async, bool looped) } #endif -// ---------------------------------------------------------------------------- -// wxSound class implementation -// ---------------------------------------------------------------------------- - -#if defined(__WXMSW__) -#include "wx/msw/wave.h" -#elif defined(__UNIX__) -#include "wx/unix/sound.h" -#elif defined(__WXMAC__) -#include "wx/mac/wave.h" -#elif defined(__WXPM__) -#include "wx/os2/wave.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 +#endif // wxUSE_SOUND #endif // _WX_SOUND_H_BASE_ diff --git a/include/wx/unix/sound.h b/include/wx/unix/sound.h index c038dfcde1..2d2a349869 100644 --- a/include/wx/unix/sound.h +++ b/include/wx/unix/sound.h @@ -1,5 +1,5 @@ ///////////////////////////////////////////////////////////////////////////// -// Name: wave.h +// Name: sound.h // Purpose: wxSound class // Author: Julian Smart, Vaclav Slavik // Modified by: @@ -14,7 +14,7 @@ #include "wx/defs.h" -#if wxUSE_WAVE +#if wxUSE_SOUND #if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) #pragma interface "sound.h" @@ -84,7 +84,7 @@ public: static void UnloadBackend(); protected: - bool DoPlay(unsigned flags); + bool DoPlay(unsigned flags) const; static void EnsureBackend(); void Free(); @@ -159,6 +159,6 @@ public: }; -#endif // wxUSE_WAVE +#endif // wxUSE_SOUND #endif diff --git a/include/wx/wave.h b/include/wx/wave.h index 582841f7e9..275fa39850 100644 --- a/include/wx/wave.h +++ b/include/wx/wave.h @@ -14,11 +14,17 @@ #include "wx/setup.h" +#if wxUSE_SOUND + #if WXWIN_COMPATIBILITY_2_4 #warning "wx/wave.h header is deprecated, use wx/sound.h and wxSound" #include "wx/sound.h" + // wxSound used to be called wxWave before wxWindows 2.5.1: + typedef wxSound wxWave; #else #error "wx/wave.h is only available in compatibility mode" #endif #endif + +#endif