]> git.sesse.net Git - vlc/blob - activex/vlccontrol2.h
- activex: more features and fully updated test.html for new APIs
[vlc] / activex / vlccontrol2.h
1 /*****************************************************************************
2  * vlccontrol.h: ActiveX control for VLC
3  *****************************************************************************
4  * Copyright (C) 2006 the VideoLAN team
5  *
6  * Authors: Damien Fouilleul <Damien.Fouilleul@laposte.net>
7  *
8  * This program is free software; you can redistribute it and/or modify
9  * it under the terms of the GNU General Public License as published by
10  * the Free Software Foundation; either version 2 of the License, or
11  * (at your option) any later version.
12  *
13  * This program is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16  * GNU General Public License for more details.
17  *
18  * You should have received a copy of the GNU General Public License
19  * along with this program; if not, write to the Free Software
20  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
21  *****************************************************************************/
22
23 #ifndef _VLCCONTROL2_H_
24 #define _VLCCONTROL2_H_
25
26 #include "axvlc_idl.h"
27
28 class VLCAudio : public IVLCAudio
29 {
30 public:
31     VLCAudio(VLCPlugin *p_instance) :
32         _p_instance(p_instance), _p_typeinfo(NULL) {};
33     virtual ~VLCAudio();
34
35     // IUnknown methods
36     STDMETHODIMP QueryInterface(REFIID riid, void **ppv)
37     {
38         if( NULL == ppv )
39           return E_POINTER;
40         if( (IID_IUnknown == riid)
41          || (IID_IDispatch == riid)
42          || (IID_IVLCAudio == riid) )
43         {
44             AddRef();
45             *ppv = reinterpret_cast<LPVOID>(this);
46             return NOERROR;
47         }
48         // behaves as a standalone object
49         return E_NOINTERFACE;
50     };
51
52     STDMETHODIMP_(ULONG) AddRef(void) { return _p_instance->pUnkOuter->AddRef(); };
53     STDMETHODIMP_(ULONG) Release(void) { return _p_instance->pUnkOuter->Release(); };
54
55     // IDispatch methods
56     STDMETHODIMP GetTypeInfoCount(UINT*);
57     STDMETHODIMP GetTypeInfo(UINT, LCID, LPTYPEINFO*);
58     STDMETHODIMP GetIDsOfNames(REFIID,LPOLESTR*,UINT,LCID,DISPID*);
59     STDMETHODIMP Invoke(DISPID,REFIID,LCID,WORD,DISPPARAMS*,VARIANT*,EXCEPINFO*,UINT*);
60
61     // IVLCAudio methods
62     STDMETHODIMP get_mute(VARIANT_BOOL*);
63     STDMETHODIMP put_mute(VARIANT_BOOL);
64     STDMETHODIMP get_volume(int*);
65     STDMETHODIMP put_volume(int);
66     STDMETHODIMP toggleMute();
67  
68 protected:
69     HRESULT loadTypeInfo();
70
71 private:
72     VLCPlugin*      _p_instance;
73     ITypeInfo*      _p_typeinfo;
74
75 };
76  
77 class VLCInput : public IVLCInput
78 {
79 public:
80
81     VLCInput(VLCPlugin *p_instance) :
82         _p_instance(p_instance), _p_typeinfo(NULL) {};
83     virtual ~VLCInput();
84
85     // IUnknown methods
86     STDMETHODIMP QueryInterface(REFIID riid, void **ppv)
87     {
88         if( NULL == ppv )
89           return E_POINTER;
90         if( (IID_IUnknown == riid)
91          || (IID_IDispatch == riid)
92          || (IID_IVLCInput == riid) )
93         {
94             AddRef();
95             *ppv = reinterpret_cast<LPVOID>(this);
96             return NOERROR;
97         }
98         // behaves as a standalone object
99         return E_NOINTERFACE;
100     };
101
102     STDMETHODIMP_(ULONG) AddRef(void) { return _p_instance->pUnkOuter->AddRef(); };
103     STDMETHODIMP_(ULONG) Release(void) { return _p_instance->pUnkOuter->Release(); };
104
105     // IDispatch methods
106     STDMETHODIMP GetTypeInfoCount(UINT*);
107     STDMETHODIMP GetTypeInfo(UINT, LCID, LPTYPEINFO*);
108     STDMETHODIMP GetIDsOfNames(REFIID,LPOLESTR*,UINT,LCID,DISPID*);
109     STDMETHODIMP Invoke(DISPID,REFIID,LCID,WORD,DISPPARAMS*,VARIANT*,EXCEPINFO*,UINT*);
110
111     // IVLCInput methods
112     STDMETHODIMP get_length(double*);
113     STDMETHODIMP get_position(float*);
114     STDMETHODIMP put_position(float);
115     STDMETHODIMP get_time(double*);
116     STDMETHODIMP put_time(double);
117     STDMETHODIMP get_state(int*);
118     STDMETHODIMP get_rate(float*);
119     STDMETHODIMP put_rate(float);
120     STDMETHODIMP get_fps(float*);
121     STDMETHODIMP get_hasVout(VARIANT_BOOL*);
122     
123 protected:
124     HRESULT loadTypeInfo();
125
126 private:
127     VLCPlugin*      _p_instance;
128     ITypeInfo*      _p_typeinfo;
129
130 };
131  
132 class VLCPlaylist : public IVLCPlaylist
133 {
134 public:
135     VLCPlaylist(VLCPlugin *p_instance) :
136         _p_instance(p_instance), _p_typeinfo(NULL) {};
137     virtual ~VLCPlaylist();
138
139     // IUnknown methods
140     STDMETHODIMP QueryInterface(REFIID riid, void **ppv)
141     {
142         if( NULL == ppv )
143           return E_POINTER;
144         if( (IID_IUnknown == riid)
145          || (IID_IDispatch == riid)
146          || (IID_IVLCPlaylist == riid) )
147         {
148             AddRef();
149             *ppv = reinterpret_cast<LPVOID>(this);
150             return NOERROR;
151         }
152         // behaves as a standalone object
153         return E_NOINTERFACE;
154     };
155
156     STDMETHODIMP_(ULONG) AddRef(void) { return _p_instance->pUnkOuter->AddRef(); };
157     STDMETHODIMP_(ULONG) Release(void) { return _p_instance->pUnkOuter->Release(); };
158
159     // IDispatch methods
160     STDMETHODIMP GetTypeInfoCount(UINT*);
161     STDMETHODIMP GetTypeInfo(UINT, LCID, LPTYPEINFO*);
162     STDMETHODIMP GetIDsOfNames(REFIID,LPOLESTR*,UINT,LCID,DISPID*);
163     STDMETHODIMP Invoke(DISPID,REFIID,LCID,WORD,DISPPARAMS*,VARIANT*,EXCEPINFO*,UINT*);
164
165     // IVLCPlaylist methods
166     STDMETHODIMP get_itemCount(int*);
167     STDMETHODIMP get_isPlaying(VARIANT_BOOL*);
168     STDMETHODIMP add(BSTR, VARIANT, VARIANT, int*);
169     STDMETHODIMP play();
170     STDMETHODIMP playItem(int);
171     STDMETHODIMP togglePause();
172     STDMETHODIMP stop();
173     STDMETHODIMP next();
174     STDMETHODIMP prev();
175     STDMETHODIMP clear();
176     STDMETHODIMP removeItem(int);
177  
178 protected:
179     HRESULT loadTypeInfo();
180
181 private:
182     VLCPlugin*  _p_instance;
183     ITypeInfo*  _p_typeinfo;
184
185 };
186  
187 class VLCVideo : public IVLCVideo
188 {
189 public:
190     VLCVideo(VLCPlugin *p_instance) :
191         _p_instance(p_instance), _p_typeinfo(NULL) {};
192     virtual ~VLCVideo();
193
194     // IUnknown methods
195     STDMETHODIMP QueryInterface(REFIID riid, void **ppv)
196     {
197         if( NULL == ppv )
198           return E_POINTER;
199         if( (IID_IUnknown == riid)
200          || (IID_IDispatch == riid)
201          || (IID_IVLCVideo == riid) )
202         {
203             AddRef();
204             *ppv = reinterpret_cast<LPVOID>(this);
205             return NOERROR;
206         }
207         // behaves as a standalone object
208         return E_NOINTERFACE;
209     };
210
211     STDMETHODIMP_(ULONG) AddRef(void) { return _p_instance->pUnkOuter->AddRef(); };
212     STDMETHODIMP_(ULONG) Release(void) { return _p_instance->pUnkOuter->Release(); };
213
214     // IDispatch methods
215     STDMETHODIMP GetTypeInfoCount(UINT*);
216     STDMETHODIMP GetTypeInfo(UINT, LCID, LPTYPEINFO*);
217     STDMETHODIMP GetIDsOfNames(REFIID,LPOLESTR*,UINT,LCID,DISPID*);
218     STDMETHODIMP Invoke(DISPID,REFIID,LCID,WORD,DISPPARAMS*,VARIANT*,EXCEPINFO*,UINT*);
219
220     // IVLCVideo methods
221     STDMETHODIMP get_fullscreen(VARIANT_BOOL*);
222     STDMETHODIMP put_fullscreen(VARIANT_BOOL);
223     STDMETHODIMP get_width(int*);
224     STDMETHODIMP get_height(int*);
225  
226 protected:
227     HRESULT loadTypeInfo();
228
229 private:
230     VLCPlugin*      _p_instance;
231     ITypeInfo*      _p_typeinfo;
232
233 };
234  
235 class VLCControl2 : public IVLCControl2
236 {
237     
238 public:
239
240     VLCControl2(VLCPlugin *p_instance);
241     virtual ~VLCControl2();
242
243     // IUnknown methods
244     STDMETHODIMP QueryInterface(REFIID riid, void **ppv)
245     {
246         if( NULL == ppv )
247           return E_POINTER;
248         if( (IID_IUnknown == riid)
249          || (IID_IDispatch == riid)
250          || (IID_IVLCControl2 == riid) )
251         {
252             AddRef();
253             *ppv = reinterpret_cast<LPVOID>(this);
254             return NOERROR;
255         }
256         return _p_instance->pUnkOuter->QueryInterface(riid, ppv);
257     };
258
259     STDMETHODIMP_(ULONG) AddRef(void) { return _p_instance->pUnkOuter->AddRef(); };
260     STDMETHODIMP_(ULONG) Release(void) { return _p_instance->pUnkOuter->Release(); };
261
262     // IDispatch methods
263     STDMETHODIMP GetTypeInfoCount(UINT*);
264     STDMETHODIMP GetTypeInfo(UINT, LCID, LPTYPEINFO*);
265     STDMETHODIMP GetIDsOfNames(REFIID,LPOLESTR*,UINT,LCID,DISPID*);
266     STDMETHODIMP Invoke(DISPID,REFIID,LCID,WORD,DISPPARAMS*,VARIANT*,EXCEPINFO*,UINT*);
267
268     // IVLCControl2 methods
269     STDMETHODIMP get_AutoLoop(VARIANT_BOOL *autoloop);
270     STDMETHODIMP put_AutoLoop(VARIANT_BOOL autoloop);
271     STDMETHODIMP get_AutoPlay(VARIANT_BOOL *autoplay);
272     STDMETHODIMP put_AutoPlay(VARIANT_BOOL autoplay);
273     STDMETHODIMP get_BaseURL(BSTR *url);
274     STDMETHODIMP put_BaseURL(BSTR url);
275     STDMETHODIMP get_MRL(BSTR *mrl);
276     STDMETHODIMP put_MRL(BSTR mrl);
277     STDMETHODIMP get_StartTime(int *seconds);
278     STDMETHODIMP put_StartTime(int seconds);
279     STDMETHODIMP get_VersionInfo(BSTR *version);
280     STDMETHODIMP get_Visible(VARIANT_BOOL *visible);
281     STDMETHODIMP put_Visible(VARIANT_BOOL visible);
282     STDMETHODIMP get_Volume(int *volume);
283     STDMETHODIMP put_Volume(int volume);
284
285     STDMETHODIMP get_audio(IVLCAudio**);
286     STDMETHODIMP get_input(IVLCInput**);
287     STDMETHODIMP get_playlist(IVLCPlaylist**);
288     STDMETHODIMP get_video(IVLCVideo**);
289
290 protected:
291     HRESULT loadTypeInfo();
292
293 private:
294     VLCPlugin*      _p_instance;
295     ITypeInfo*      _p_typeinfo;
296
297     VLCAudio*       _p_vlcaudio;
298     VLCInput*       _p_vlcinput;
299     VLCPlaylist*    _p_vlcplaylist;
300     VLCVideo*       _p_vlcvideo;
301 };
302  
303 #endif
304