]> git.saurik.com Git - wxWidgets.git/blob - include/wx/sound.h
More broken compilers with enum/wxString& ambiguity.
[wxWidgets.git] / include / wx / sound.h
1 /////////////////////////////////////////////////////////////////////////////
2 // Name: wx/sound.h
3 // Purpose: wxSoundBase class
4 // Author: Vaclav Slavik
5 // Modified by:
6 // Created: 2004/02/01
7 // RCS-ID: $Id$
8 // Copyright: (c) 2004, Vaclav Slavik
9 // Licence: wxWindows licence
10 /////////////////////////////////////////////////////////////////////////////
11
12 #ifndef _WX_SOUND_H_BASE_
13 #define _WX_SOUND_H_BASE_
14
15 #if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
16 #pragma interface "soundbase.h"
17 #endif
18
19 #include "wx/defs.h"
20
21 #if wxUSE_SOUND
22
23 #include "wx/object.h"
24
25 // ----------------------------------------------------------------------------
26 // wxSoundBase: common wxSound code and interface
27 // ----------------------------------------------------------------------------
28
29 // Flags for wxSound::Play
30 #if WXWIN_COMPATIBILITY_2_4 || \
31 defined(__BORLANDC__) || \
32 defined(__VISUALC__) || \
33 defined(__DMC__)
34 // NB: We can't use enum because there would be ambiguity between the
35 // two Play() prototypes when called without explicit parameters.
36 // We can't use enum with some compilers either, because they
37 // keep reporting nonexistent ambiguities between
38 // Play(unsigned) and static Play(const wxString&, unsigned).
39 #define wxSOUND_SYNC ((unsigned)0)
40 #define wxSOUND_ASYNC ((unsigned)1)
41 #define wxSOUND_LOOP ((unsigned)2)
42 #else
43 enum wxSoundFlags
44 {
45 wxSOUND_SYNC = 0,
46 wxSOUND_ASYNC = 1,
47 wxSOUND_LOOP = 2
48 };
49 #endif
50
51 // Base class for wxSound implementations
52 class WXDLLIMPEXP_ADV wxSoundBase : public wxObject
53 {
54 public:
55 // Play the sound:
56 bool Play(unsigned flags = wxSOUND_ASYNC) const
57 {
58 wxASSERT_MSG( (flags & wxSOUND_LOOP) == 0 ||
59 (flags & wxSOUND_ASYNC) != 0,
60 _T("sound can only be looped asynchronously") );
61 return DoPlay(flags);
62 }
63 #if WXWIN_COMPATIBILITY_2_4
64 wxDEPRECATED( bool Play(bool async, bool looped = false) const );
65 #endif
66
67 // Plays sound from filename:
68 static bool Play(const wxString& filename, unsigned flags = wxSOUND_ASYNC);
69
70 protected:
71 virtual bool DoPlay(unsigned flags) const = 0;
72 };
73
74 // ----------------------------------------------------------------------------
75 // wxSound class implementation
76 // ----------------------------------------------------------------------------
77
78 #if defined(__WXMSW__)
79 #include "wx/msw/sound.h"
80 #elif defined(__WXMAC__)
81 #include "wx/mac/sound.h"
82 #elif defined(__WXPM__)
83 #include "wx/os2/sound.h"
84 #elif defined(__UNIX__)
85 #include "wx/unix/sound.h"
86 #endif
87
88 // ----------------------------------------------------------------------------
89 // wxSoundBase methods
90 // ----------------------------------------------------------------------------
91
92 inline bool wxSoundBase::Play(const wxString& filename, unsigned flags)
93 {
94 wxSound snd(filename);
95 return snd.IsOk() ? snd.Play(flags) : false;
96 }
97
98 #if WXWIN_COMPATIBILITY_2_4
99 inline bool wxSoundBase::Play(bool async, bool looped) const
100 {
101 unsigned flags = 0;
102 if (async) flags |= wxSOUND_ASYNC;
103 if (looped) flags |= wxSOUND_LOOP | wxSOUND_ASYNC;
104 return DoPlay(flags);
105 }
106 #endif
107
108 #endif // wxUSE_SOUND
109
110 #endif // _WX_SOUND_H_BASE_