]> git.sesse.net Git - vlc/blob - activex/vlccontrol2.h
- activex: cleanup, improved VB compatibility and new test.html file for new script...
[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 private:
69     HRESULT     loadTypeInfo();
70
71     VLCPlugin*  _p_instance;
72     ITypeInfo*  _p_typeinfo;
73
74 };
75  
76 class VLCInput : public IVLCInput
77 {
78 public:
79
80     VLCInput(VLCPlugin *p_instance) :
81         _p_instance(p_instance), _p_typeinfo(NULL) {};
82     virtual ~VLCInput();
83
84     // IUnknown methods
85     STDMETHODIMP QueryInterface(REFIID riid, void **ppv)
86     {
87         if( NULL == ppv )
88           return E_POINTER;
89         if( (IID_IUnknown == riid)
90          || (IID_IDispatch == riid)
91          || (IID_IVLCInput == riid) )
92         {
93             AddRef();
94             *ppv = reinterpret_cast<LPVOID>(this);
95             return NOERROR;
96         }
97         // behaves as a standalone object
98         return E_NOINTERFACE;
99     };
100
101     STDMETHODIMP_(ULONG) AddRef(void) { return _p_instance->pUnkOuter->AddRef(); };
102     STDMETHODIMP_(ULONG) Release(void) { return _p_instance->pUnkOuter->Release(); };
103
104     // IDispatch methods
105     STDMETHODIMP GetTypeInfoCount(UINT*);
106     STDMETHODIMP GetTypeInfo(UINT, LCID, LPTYPEINFO*);
107     STDMETHODIMP GetIDsOfNames(REFIID,LPOLESTR*,UINT,LCID,DISPID*);
108     STDMETHODIMP Invoke(DISPID,REFIID,LCID,WORD,DISPPARAMS*,VARIANT*,EXCEPINFO*,UINT*);
109
110     // IVLCInput methods
111     STDMETHODIMP get_length(__int64*);
112     STDMETHODIMP get_position(float*);
113     STDMETHODIMP put_position(float);
114     STDMETHODIMP get_time(__int64*);
115     STDMETHODIMP put_time(__int64);
116     STDMETHODIMP get_state(int*);
117     STDMETHODIMP get_rate(float*);
118     STDMETHODIMP put_rate(float);
119     STDMETHODIMP get_fps(float*);
120     STDMETHODIMP get_hasVout(VARIANT_BOOL*);
121      
122 private:
123     HRESULT     loadTypeInfo();
124
125     VLCPlugin*  _p_instance;
126     ITypeInfo*  _p_typeinfo;
127
128 };
129  
130 class VLCPlaylist : public IVLCPlaylist
131 {
132 public:
133     VLCPlaylist(VLCPlugin *p_instance) :
134         _p_instance(p_instance), _p_typeinfo(NULL) {};
135     virtual ~VLCPlaylist();
136
137     // IUnknown methods
138     STDMETHODIMP QueryInterface(REFIID riid, void **ppv)
139     {
140         if( NULL == ppv )
141           return E_POINTER;
142         if( (IID_IUnknown == riid)
143          || (IID_IDispatch == riid)
144          || (IID_IVLCPlaylist == riid) )
145         {
146             AddRef();
147             *ppv = reinterpret_cast<LPVOID>(this);
148             return NOERROR;
149         }
150         // behaves as a standalone object
151         return E_NOINTERFACE;
152     };
153
154     STDMETHODIMP_(ULONG) AddRef(void) { return _p_instance->pUnkOuter->AddRef(); };
155     STDMETHODIMP_(ULONG) Release(void) { return _p_instance->pUnkOuter->Release(); };
156
157     // IDispatch methods
158     STDMETHODIMP GetTypeInfoCount(UINT*);
159     STDMETHODIMP GetTypeInfo(UINT, LCID, LPTYPEINFO*);
160     STDMETHODIMP GetIDsOfNames(REFIID,LPOLESTR*,UINT,LCID,DISPID*);
161     STDMETHODIMP Invoke(DISPID,REFIID,LCID,WORD,DISPPARAMS*,VARIANT*,EXCEPINFO*,UINT*);
162
163     // IVLCPlaylist methods
164     STDMETHODIMP get_itemCount(int*);
165     STDMETHODIMP get_isPlaying(VARIANT_BOOL*);
166     STDMETHODIMP add(BSTR, VARIANT, VARIANT, int*);
167     STDMETHODIMP play();
168     STDMETHODIMP playItem(int);
169     STDMETHODIMP togglePause();
170     STDMETHODIMP stop();
171     STDMETHODIMP next();
172     STDMETHODIMP prev();
173     STDMETHODIMP clear();
174     STDMETHODIMP removeItem(int);
175  
176 private:
177
178     HRESULT     loadTypeInfo();
179
180     VLCPlugin*  _p_instance;
181     ITypeInfo*  _p_typeinfo;
182
183 };
184  
185 class VLCVideo : public IVLCVideo
186 {
187 public:
188     VLCVideo(VLCPlugin *p_instance) :
189         _p_instance(p_instance), _p_typeinfo(NULL) {};
190     virtual ~VLCVideo();
191
192     // IUnknown methods
193     STDMETHODIMP QueryInterface(REFIID riid, void **ppv)
194     {
195         if( NULL == ppv )
196           return E_POINTER;
197         if( (IID_IUnknown == riid)
198          || (IID_IDispatch == riid)
199          || (IID_IVLCVideo == riid) )
200         {
201             AddRef();
202             *ppv = reinterpret_cast<LPVOID>(this);
203             return NOERROR;
204         }
205         // behaves as a standalone object
206         return E_NOINTERFACE;
207     };
208
209     STDMETHODIMP_(ULONG) AddRef(void) { return _p_instance->pUnkOuter->AddRef(); };
210     STDMETHODIMP_(ULONG) Release(void) { return _p_instance->pUnkOuter->Release(); };
211
212     // IDispatch methods
213     STDMETHODIMP GetTypeInfoCount(UINT*);
214     STDMETHODIMP GetTypeInfo(UINT, LCID, LPTYPEINFO*);
215     STDMETHODIMP GetIDsOfNames(REFIID,LPOLESTR*,UINT,LCID,DISPID*);
216     STDMETHODIMP Invoke(DISPID,REFIID,LCID,WORD,DISPPARAMS*,VARIANT*,EXCEPINFO*,UINT*);
217
218     // IVLCVideo methods
219     STDMETHODIMP get_fullscreen(VARIANT_BOOL*);
220     STDMETHODIMP put_fullscreen(VARIANT_BOOL);
221     STDMETHODIMP get_width(int*);
222     STDMETHODIMP get_height(int*);
223  
224 private:
225
226     HRESULT     loadTypeInfo();
227
228     VLCPlugin*  _p_instance;
229     ITypeInfo*  _p_typeinfo;
230
231 };
232  
233 class VLCControl2 : public IVLCControl2
234 {
235     
236 public:
237
238     VLCControl2(VLCPlugin *p_instance);
239     virtual ~VLCControl2();
240
241     // IUnknown methods
242     STDMETHODIMP QueryInterface(REFIID riid, void **ppv)
243     {
244         if( NULL == ppv )
245           return E_POINTER;
246         if( (IID_IUnknown == riid)
247          || (IID_IDispatch == riid)
248          || (IID_IVLCControl2 == riid) )
249         {
250             AddRef();
251             *ppv = reinterpret_cast<LPVOID>(this);
252             return NOERROR;
253         }
254         return _p_instance->pUnkOuter->QueryInterface(riid, ppv);
255     };
256
257     STDMETHODIMP_(ULONG) AddRef(void) { return _p_instance->pUnkOuter->AddRef(); };
258     STDMETHODIMP_(ULONG) Release(void) { return _p_instance->pUnkOuter->Release(); };
259
260     // IDispatch methods
261     STDMETHODIMP GetTypeInfoCount(UINT*);
262     STDMETHODIMP GetTypeInfo(UINT, LCID, LPTYPEINFO*);
263     STDMETHODIMP GetIDsOfNames(REFIID,LPOLESTR*,UINT,LCID,DISPID*);
264     STDMETHODIMP Invoke(DISPID,REFIID,LCID,WORD,DISPPARAMS*,VARIANT*,EXCEPINFO*,UINT*);
265
266     // IVLCControl2 methods
267     STDMETHODIMP get_audio(IVLCAudio**);
268     STDMETHODIMP get_input(IVLCInput**);
269     STDMETHODIMP get_playlist(IVLCPlaylist**);
270     STDMETHODIMP get_video(IVLCVideo**);
271  
272 private:
273
274     HRESULT         loadTypeInfo();
275
276     VLCPlugin*      _p_instance;
277     ITypeInfo*      _p_typeinfo;
278
279     VLCAudio*       _p_vlcaudio;
280     VLCInput*       _p_vlcinput;
281     VLCPlaylist*    _p_vlcplaylist;
282     VLCVideo*       _p_vlcvideo;
283 };
284  
285 #endif
286