More DLL build fixes for wxMediaCtrl
[wxWidgets.git] / include / wx / mediactrl.h
1 ///////////////////////////////////////////////////////////////////////////////
2 // Name: wx/mediactrl.h
3 // Purpose: wxMediaCtrl class
4 // Author: Ryan Norton <wxprojects@comcast.net>
5 // Modified by:
6 // Created: 11/07/04
7 // RCS-ID: $Id$
8 // Copyright: (c) Ryan Norton
9 // Licence: wxWindows licence
10 ///////////////////////////////////////////////////////////////////////////////
11
12 // ============================================================================
13 // Definitions
14 // ============================================================================
15
16 // ----------------------------------------------------------------------------
17 // Header guard
18 // ----------------------------------------------------------------------------
19 #ifndef _WX_MEDIACTRL_H_
20 #define _WX_MEDIACTRL_H_
21
22 // ----------------------------------------------------------------------------
23 // Pre-compiled header stuff
24 // ----------------------------------------------------------------------------
25 #if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
26 #pragma interface "mediactrl.h"
27 #endif
28
29 // ----------------------------------------------------------------------------
30 // Compilation guard
31 // ----------------------------------------------------------------------------
32 #if wxUSE_MEDIACTRL
33
34 // ----------------------------------------------------------------------------
35 // Includes
36 // ----------------------------------------------------------------------------
37
38 #include "wx/control.h"
39 #include "wx/uri.h"
40
41 // ============================================================================
42 // Declarations
43 // ============================================================================
44
45 // ----------------------------------------------------------------------------
46 //
47 // Enumerations
48 //
49 // ----------------------------------------------------------------------------
50
51 enum wxMediaState
52 {
53 wxMEDIASTATE_STOPPED,
54 wxMEDIASTATE_PAUSED,
55 wxMEDIASTATE_PLAYING
56 };
57
58 enum wxMediaTimeFormat
59 {
60 wxMEDIATIMEFORMAT_TIME
61 };
62
63 #define wxMEDIABACKEND_DIRECTSHOW wxT("wxAMMediaBackend")
64 #define wxMEDIABACKEND_MCI wxT("wxMCIMediaBackend")
65 #define wxMEDIABACKEND_QUICKTIME wxT("wxQTMediaBackend")
66
67 // ----------------------------------------------------------------------------
68 //
69 // wxMediaEvent
70 //
71 // ----------------------------------------------------------------------------
72
73 class WXDLLIMPEXP_MEDIA wxMediaEvent : public wxNotifyEvent
74 {
75 public:
76 // ------------------------------------------------------------------------
77 // wxMediaEvent Constructor
78 //
79 // Normal constructor, much the same as wxNotifyEvent
80 // ------------------------------------------------------------------------
81 wxMediaEvent(wxEventType commandType = wxEVT_NULL, int id = 0)
82 : wxNotifyEvent(commandType, id)
83 { }
84
85 // ------------------------------------------------------------------------
86 // wxMediaEvent Copy Constructor
87 //
88 // Normal copy constructor, much the same as wxNotifyEvent
89 // ------------------------------------------------------------------------
90 wxMediaEvent(const wxMediaEvent &clone)
91 : wxNotifyEvent(clone)
92 { }
93
94 // ------------------------------------------------------------------------
95 // wxMediaEvent::Clone
96 //
97 // Allocates a copy of this object.
98 // Required for wxEvtHandler::AddPendingEvent
99 // ------------------------------------------------------------------------
100 virtual wxEvent *Clone() const
101 { return new wxMediaEvent(*this); }
102
103
104 // Put this class on wxWidget's RTTI table
105 DECLARE_DYNAMIC_CLASS(wxMediaEvent)
106 };
107
108 // ----------------------------------------------------------------------------
109 //
110 // wxMediaCtrl
111 //
112 // ----------------------------------------------------------------------------
113
114 class WXDLLIMPEXP_MEDIA wxMediaCtrl : public wxControl
115 {
116 public:
117 wxMediaCtrl() : m_imp(NULL), m_bLoaded(false), m_bLoop(false)
118 { }
119
120 wxMediaCtrl(wxWindow* parent, wxWindowID id,
121 const wxString& fileName = wxT(""),
122 const wxPoint& pos = wxDefaultPosition,
123 const wxSize& size = wxDefaultSize,
124 long style = 0,
125 const wxString& szBackend = wxT(""),
126 const wxValidator& validator = wxDefaultValidator,
127 const wxString& name = wxT("mediaCtrl"))
128 : m_imp(NULL), m_bLoaded(false), m_bLoop(false)
129 { Create(parent, id, fileName, pos, size, style,
130 szBackend, validator, name); }
131
132 wxMediaCtrl(wxWindow* parent, wxWindowID id,
133 const wxURI& location,
134 const wxPoint& pos = wxDefaultPosition,
135 const wxSize& size = wxDefaultSize,
136 long style = 0,
137 const wxString& szBackend = wxT(""),
138 const wxValidator& validator = wxDefaultValidator,
139 const wxString& name = wxT("mediaCtrl"))
140 : m_imp(NULL), m_bLoop(false)
141 { Create(parent, id, location, pos, size, style,
142 szBackend, validator, name); }
143
144 ~wxMediaCtrl();
145
146 bool Create(wxWindow* parent, wxWindowID id,
147 const wxString& fileName = wxT(""),
148 const wxPoint& pos = wxDefaultPosition,
149 const wxSize& size = wxDefaultSize,
150 long style = 0,
151 const wxString& szBackend = wxT(""),
152 const wxValidator& validator = wxDefaultValidator,
153 const wxString& name = wxT("mediaCtrl"));
154
155 bool Create(wxWindow* parent, wxWindowID id,
156 const wxURI& location,
157 const wxPoint& pos = wxDefaultPosition,
158 const wxSize& size = wxDefaultSize,
159 long style = 0,
160 const wxString& szBackend = wxT(""),
161 const wxValidator& validator = wxDefaultValidator,
162 const wxString& name = wxT("mediaCtrl"));
163
164 bool DoCreate(wxClassInfo* instance,
165 wxWindow* parent, wxWindowID id,
166 const wxPoint& pos = wxDefaultPosition,
167 const wxSize& size = wxDefaultSize,
168 long style = 0,
169 const wxValidator& validator = wxDefaultValidator,
170 const wxString& name = wxT("mediaCtrl"));
171
172 static wxClassInfo* NextBackend();
173
174
175 bool Play();
176 bool Pause();
177 bool Stop();
178
179 bool Load(const wxString& fileName);
180 bool Load(const wxURI& location);
181
182 void Loop(bool bLoop = true);
183 bool IsLooped();
184
185 wxMediaState GetState();
186
187 double GetPlaybackRate();
188 bool SetPlaybackRate(double dRate);
189
190 bool SetPosition(wxLongLong where);
191 wxLongLong GetPosition();
192 wxLongLong GetDuration();
193
194 protected:
195 void OnMediaFinished(wxMediaEvent& evt);
196 virtual void DoMoveWindow(int x, int y, int w, int h);
197 wxSize DoGetBestSize() const;
198
199 class wxMediaBackend* m_imp;
200 bool m_bLoaded;
201 bool m_bLoop;
202
203 DECLARE_DYNAMIC_CLASS(wxMediaCtrl);
204 };
205
206 // ----------------------------------------------------------------------------
207 //
208 // wxMediaBackend
209 //
210 // Currently an internal class - API stability not gauranteed.
211 //
212 // ----------------------------------------------------------------------------
213
214 class WXDLLIMPEXP_MEDIA wxMediaBackend : public wxObject
215 {
216 public:
217 wxMediaBackend()
218 { }
219
220 virtual ~wxMediaBackend();
221
222 virtual bool CreateControl(wxControl* WXUNUSED(ctrl),
223 wxWindow* WXUNUSED(parent),
224 wxWindowID WXUNUSED(id),
225 const wxPoint& WXUNUSED(pos),
226 const wxSize& WXUNUSED(size),
227 long WXUNUSED(style),
228 const wxValidator& WXUNUSED(validator),
229 const wxString& WXUNUSED(name))
230 { return false; }
231
232 virtual bool Play()
233 { return false; }
234 virtual bool Pause()
235 { return false; }
236 virtual bool Stop()
237 { return false; }
238
239 virtual bool Load(const wxString& WXUNUSED(fileName))
240 { return false; }
241 virtual bool Load(const wxURI& WXUNUSED(location))
242 { return false; }
243
244 virtual bool SetPosition(wxLongLong WXUNUSED(where))
245 { return 0; }
246 virtual wxLongLong GetPosition()
247 { return 0; }
248 virtual wxLongLong GetDuration()
249 { return 0; }
250
251 virtual void Move(int WXUNUSED(x), int WXUNUSED(y),
252 int WXUNUSED(w), int WXUNUSED(h))
253 { }
254 virtual wxSize GetVideoSize() const
255 { return wxSize(0,0); }
256
257 virtual double GetPlaybackRate()
258 { return 0.0; }
259 virtual bool SetPlaybackRate(double WXUNUSED(dRate))
260 { return false; }
261
262 virtual wxMediaState GetState()
263 { return wxMEDIASTATE_STOPPED; }
264
265 DECLARE_CLASS(wxMediaBackend)
266 };
267
268 //Event ID to give to our events
269 #define wxMEDIA_FINISHED_ID 13000
270 #define wxMEDIA_STOP_ID 13001
271
272 //Define our event types - we need to call DEFINE_EVENT_TYPE(EVT) later
273 DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_MEDIA, wxEVT_MEDIA_FINISHED, wxMEDIA_FINISHED_ID)
274 DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_MEDIA, wxEVT_MEDIA_STOP, wxMEDIA_STOP_ID)
275
276 //Function type(s) our events need
277 typedef void (wxEvtHandler::*wxMediaEventFunction)(wxMediaEvent&);
278
279 //Macro for usage with message maps
280 #define EVT_MEDIA_FINISHED(winid, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_MEDIA_FINISHED, winid, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxMediaEventFunction) & fn, (wxObject *) NULL ),
281 #define EVT_MEDIA_STOP(winid, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_MEDIA_STOP, winid, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxMediaEventFunction) & fn, (wxObject *) NULL ),
282
283 // ----------------------------------------------------------------------------
284 // End compilation gaurd
285 // ----------------------------------------------------------------------------
286 #endif // wxUSE_MEDIACTRL
287
288 // ----------------------------------------------------------------------------
289 // End header guard and header itself
290 // ----------------------------------------------------------------------------
291 #endif // _WX_MEDIACTRL_H_
292
293