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