]> git.sesse.net Git - vlc/blobdiff - activex/vlccontrol2.h
Removes trailing spaces. Removes tabs.
[vlc] / activex / vlccontrol2.h
old mode 100755 (executable)
new mode 100644 (file)
index c3d1c1f..23c2853
@@ -1,9 +1,10 @@
 /*****************************************************************************
  * vlccontrol.h: ActiveX control for VLC
  *****************************************************************************
- * Copyright (C) 2005 the VideoLAN team
+ * Copyright (C) 2006 the VideoLAN team
  *
  * Authors: Damien Fouilleul <Damien.Fouilleul@laposte.net>
+ *          Jean-Paul Saman <jpsaman _at_ m2x _dot_ nl>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
 
 #include "axvlc_idl.h"
 
+#include <vlc/libvlc.h>
+
 class VLCAudio : public IVLCAudio
 {
-    
 public:
-
-    VLCAudio(VLCPlugin *p_instance) :  _p_instance(p_instance), _p_typeinfo(NULL) {};
+    VLCAudio(VLCPlugin *p_instance) :
+        _p_instance(p_instance), _p_typeinfo(NULL) {};
     virtual ~VLCAudio();
 
     // IUnknown methods
@@ -62,26 +64,29 @@ public:
     // IVLCAudio methods
     STDMETHODIMP get_mute(VARIANT_BOOL*);
     STDMETHODIMP put_mute(VARIANT_BOOL);
-    STDMETHODIMP get_volume(int*);
-    STDMETHODIMP put_volume(int);
+    STDMETHODIMP get_volume(long*);
+    STDMETHODIMP put_volume(long);
+    STDMETHODIMP get_track(long*);
+    STDMETHODIMP put_track(long);
+    STDMETHODIMP get_channel(long*);
+    STDMETHODIMP put_channel(long);
     STDMETHODIMP toggleMute();
-    
-private:
 
-    HRESULT      getTypeInfo();
+protected:
+    HRESULT loadTypeInfo();
 
-    VLCPlugin *_p_instance;
-    ITypeInfo *_p_typeinfo;
+private:
+    VLCPlugin*      _p_instance;
+    ITypeInfo*      _p_typeinfo;
 
 };
+
 class VLCInput : public IVLCInput
 {
-    
 public:
 
-    VLCInput(VLCPlugin *p_instance) :  _p_instance(p_instance), _p_typeinfo(NULL) {};
+    VLCInput(VLCPlugin *p_instance) :
+        _p_instance(p_instance), _p_typeinfo(NULL) {};
     virtual ~VLCInput();
 
     // IUnknown methods
@@ -111,32 +116,320 @@ public:
     STDMETHODIMP Invoke(DISPID,REFIID,LCID,WORD,DISPPARAMS*,VARIANT*,EXCEPINFO*,UINT*);
 
     // IVLCInput methods
-    STDMETHODIMP get_length(__int64*);
-    STDMETHODIMP get_position(float*);
-    STDMETHODIMP put_position(float);
-    STDMETHODIMP get_time(__int64*);
-    STDMETHODIMP put_time(__int64);
-    STDMETHODIMP get_state(int*);
-    STDMETHODIMP get_rate(float*);
-    STDMETHODIMP put_rate(float);
-    STDMETHODIMP get_fps(float*);
+    STDMETHODIMP get_length(double*);
+    STDMETHODIMP get_position(double*);
+    STDMETHODIMP put_position(double);
+    STDMETHODIMP get_time(double*);
+    STDMETHODIMP put_time(double);
+    STDMETHODIMP get_state(long*);
+    STDMETHODIMP get_rate(double*);
+    STDMETHODIMP put_rate(double);
+    STDMETHODIMP get_fps(double*);
     STDMETHODIMP get_hasVout(VARIANT_BOOL*);
-     
+
+protected:
+    HRESULT loadTypeInfo();
+
 private:
+    VLCPlugin*      _p_instance;
+    ITypeInfo*      _p_typeinfo;
 
-    HRESULT      getTypeInfo();
+};
 
-    VLCPlugin *_p_instance;
-    ITypeInfo *_p_typeinfo;
+class VLCMessage: public IVLCMessage
+{
+public:
+
+    VLCMessage(VLCPlugin *p_instance, struct libvlc_log_message_t &msg) :
+        _p_instance(p_instance),
+        _p_typeinfo(NULL),
+        _refcount(1),
+        _msg(msg) {};
+    virtual ~VLCMessage();
 
+    // IUnknown methods
+    STDMETHODIMP QueryInterface(REFIID riid, void **ppv)
+    {
+        if( NULL == ppv )
+          return E_POINTER;
+        if( (IID_IUnknown == riid)
+         || (IID_IDispatch == riid)
+         || (IID_IVLCMessage == riid) )
+        {
+            AddRef();
+            *ppv = reinterpret_cast<LPVOID>(this);
+            return NOERROR;
+        }
+        // behaves as a standalone object
+        return E_NOINTERFACE;
+    };
+
+    STDMETHODIMP_(ULONG) AddRef(void) { return InterlockedIncrement(&_refcount); };
+    STDMETHODIMP_(ULONG) Release(void)
+    {
+        ULONG refcount = InterlockedDecrement(&_refcount);
+        if( 0 == refcount )
+        {
+            delete this;
+            return 0;
+        }
+        return refcount;
+    };
+
+    // IDispatch methods
+    STDMETHODIMP GetTypeInfoCount(UINT*);
+    STDMETHODIMP GetTypeInfo(UINT, LCID, LPTYPEINFO*);
+    STDMETHODIMP GetIDsOfNames(REFIID,LPOLESTR*,UINT,LCID,DISPID*);
+    STDMETHODIMP Invoke(DISPID,REFIID,LCID,WORD,DISPPARAMS*,VARIANT*,EXCEPINFO*,UINT*);
+
+    // IVLCMessage methods
+    STDMETHODIMP get__Value(VARIANT *);
+    STDMETHODIMP get_severity(long *);
+    STDMETHODIMP get_type(BSTR *);
+    STDMETHODIMP get_name(BSTR *);
+    STDMETHODIMP get_header(BSTR *);
+    STDMETHODIMP get_message(BSTR *);
+
+protected:
+    HRESULT loadTypeInfo();
+
+private:
+    VLCPlugin*      _p_instance;
+    ITypeInfo*      _p_typeinfo;
+    LONG            _refcount;
+
+    struct libvlc_log_message_t _msg;
 };
+
+class VLCLog;
+
+class VLCMessageIterator : public IVLCMessageIterator
+{
+public:
+
+    VLCMessageIterator(VLCPlugin *p_instance, VLCLog* p_vlclog);
+    virtual ~VLCMessageIterator();
+
+    // IUnknown methods
+    STDMETHODIMP QueryInterface(REFIID riid, void **ppv)
+    {
+        if( NULL == ppv )
+          return E_POINTER;
+        if( (IID_IUnknown == riid)
+         || (IID_IDispatch == riid)
+         || (IID_IVLCMessageIterator == riid) )
+        {
+            AddRef();
+            *ppv = reinterpret_cast<LPVOID>(this);
+            return NOERROR;
+        }
+        // behaves as a standalone object
+        return E_NOINTERFACE;
+    };
+
+    STDMETHODIMP_(ULONG) AddRef(void) { return InterlockedIncrement(&_refcount); };
+    STDMETHODIMP_(ULONG) Release(void)
+    {
+        ULONG refcount = InterlockedDecrement(&_refcount);
+        if( 0 == refcount )
+        {
+            delete this;
+            return 0;
+        }
+        return refcount;
+    };
+
+    // IDispatch methods
+    STDMETHODIMP GetTypeInfoCount(UINT*);
+    STDMETHODIMP GetTypeInfo(UINT, LCID, LPTYPEINFO*);
+    STDMETHODIMP GetIDsOfNames(REFIID,LPOLESTR*,UINT,LCID,DISPID*);
+    STDMETHODIMP Invoke(DISPID,REFIID,LCID,WORD,DISPPARAMS*,VARIANT*,EXCEPINFO*,UINT*);
+
+    // IVLCMessageIterator methods
+    STDMETHODIMP get_hasNext(VARIANT_BOOL*);
+    STDMETHODIMP next(IVLCMessage**);
  
-class VLCPlaylist : public IVLCPlaylist
+protected:
+    HRESULT loadTypeInfo();
+
+private:
+    VLCPlugin*      _p_instance;
+    ITypeInfo*      _p_typeinfo;
+    LONG            _refcount;
+
+    VLCLog*                 _p_vlclog;
+    libvlc_log_iterator_t*  _p_iter;
+};
+
+class VLCMessages : public IVLCMessages
+{
+public:
+
+    VLCMessages(VLCPlugin *p_instance, VLCLog *p_vlclog) :
+        _p_vlclog(p_vlclog),
+        _p_instance(p_instance),
+        _p_typeinfo(NULL) {}
+    virtual ~VLCMessages();
+
+    // IUnknown methods
+    STDMETHODIMP QueryInterface(REFIID riid, void **ppv)
+    {
+        if( NULL == ppv )
+          return E_POINTER;
+        if( (IID_IUnknown == riid)
+         || (IID_IDispatch == riid)
+         || (IID_IVLCMessages == riid) )
+        {
+            AddRef();
+            *ppv = reinterpret_cast<LPVOID>(this);
+            return NOERROR;
+        }
+        // behaves as a standalone object
+        return E_NOINTERFACE;
+    };
+
+    STDMETHODIMP_(ULONG) AddRef(void) { return _p_instance->pUnkOuter->AddRef(); };
+    STDMETHODIMP_(ULONG) Release(void) { return _p_instance->pUnkOuter->Release(); };
+
+    // IDispatch methods
+    STDMETHODIMP GetTypeInfoCount(UINT*);
+    STDMETHODIMP GetTypeInfo(UINT, LCID, LPTYPEINFO*);
+    STDMETHODIMP GetIDsOfNames(REFIID,LPOLESTR*,UINT,LCID,DISPID*);
+    STDMETHODIMP Invoke(DISPID,REFIID,LCID,WORD,DISPPARAMS*,VARIANT*,EXCEPINFO*,UINT*);
+
+    // IVLCMessages methods
+    STDMETHODIMP get__NewEnum(LPUNKNOWN*);
+    STDMETHODIMP clear();
+    STDMETHODIMP get_count(long*);
+    STDMETHODIMP iterator(IVLCMessageIterator**);
+
+protected:
+    HRESULT loadTypeInfo();
+
+    VLCLog*     _p_vlclog;
+
+private:
+    VLCPlugin*  _p_instance;
+    ITypeInfo*  _p_typeinfo;
+};
+class VLCLog : public IVLCLog
 {
-    
 public:
 
-    VLCPlaylist(VLCPlugin *p_instance) :  _p_instance(p_instance), _p_typeinfo(NULL) {};
+    friend class VLCMessages;
+    friend class VLCMessageIterator;
+
+    VLCLog(VLCPlugin *p_instance) :
+        _p_log(NULL),
+        _p_instance(p_instance),
+        _p_typeinfo(NULL),
+        _p_vlcmessages(NULL)
+    {
+        _p_vlcmessages = new VLCMessages(p_instance, this);
+    };
+    virtual ~VLCLog();
+
+    // IUnknown methods
+    STDMETHODIMP QueryInterface(REFIID riid, void **ppv)
+    {
+        if( NULL == ppv )
+          return E_POINTER;
+        if( (IID_IUnknown == riid)
+         || (IID_IDispatch == riid)
+         || (IID_IVLCLog == riid) )
+        {
+            AddRef();
+            *ppv = reinterpret_cast<LPVOID>(this);
+            return NOERROR;
+        }
+        // behaves as a standalone object
+        return E_NOINTERFACE;
+    };
+
+    STDMETHODIMP_(ULONG) AddRef(void) { return _p_instance->pUnkOuter->AddRef(); };
+    STDMETHODIMP_(ULONG) Release(void) { return _p_instance->pUnkOuter->Release(); };
+
+    // IDispatch methods
+    STDMETHODIMP GetTypeInfoCount(UINT*);
+    STDMETHODIMP GetTypeInfo(UINT, LCID, LPTYPEINFO*);
+    STDMETHODIMP GetIDsOfNames(REFIID,LPOLESTR*,UINT,LCID,DISPID*);
+    STDMETHODIMP Invoke(DISPID,REFIID,LCID,WORD,DISPPARAMS*,VARIANT*,EXCEPINFO*,UINT*);
+
+    // IVLCLog methods
+    STDMETHODIMP get_messages(IVLCMessages**);
+    STDMETHODIMP get_verbosity(long *);
+    STDMETHODIMP put_verbosity(long);
+
+protected:
+    HRESULT loadTypeInfo();
+
+    libvlc_log_t    *_p_log;
+
+private:
+    VLCPlugin*      _p_instance;
+    ITypeInfo*      _p_typeinfo;
+
+    VLCMessages*    _p_vlcmessages;
+};
+
+class VLCPlaylistItems : public IVLCPlaylistItems
+{
+public:
+    VLCPlaylistItems(VLCPlugin *p_instance) :
+        _p_instance(p_instance), _p_typeinfo(NULL) {};
+    virtual ~VLCPlaylistItems();
+
+    // IUnknown methods
+    STDMETHODIMP QueryInterface(REFIID riid, void **ppv)
+    {
+        if( NULL == ppv )
+          return E_POINTER;
+        if( (IID_IUnknown == riid)
+         || (IID_IDispatch == riid)
+         || (IID_IVLCPlaylistItems == riid) )
+        {
+            AddRef();
+            *ppv = reinterpret_cast<LPVOID>(this);
+            return NOERROR;
+        }
+        // behaves as a standalone object
+        return E_NOINTERFACE;
+    };
+
+    STDMETHODIMP_(ULONG) AddRef(void) { return _p_instance->pUnkOuter->AddRef(); };
+    STDMETHODIMP_(ULONG) Release(void) { return _p_instance->pUnkOuter->Release(); };
+
+    // IDispatch methods
+    STDMETHODIMP GetTypeInfoCount(UINT*);
+    STDMETHODIMP GetTypeInfo(UINT, LCID, LPTYPEINFO*);
+    STDMETHODIMP GetIDsOfNames(REFIID,LPOLESTR*,UINT,LCID,DISPID*);
+    STDMETHODIMP Invoke(DISPID,REFIID,LCID,WORD,DISPPARAMS*,VARIANT*,EXCEPINFO*,UINT*);
+
+    // IVLCPlaylistItems methods
+    STDMETHODIMP get_count(long*);
+    STDMETHODIMP clear();
+    STDMETHODIMP remove(long);
+
+protected:
+    HRESULT loadTypeInfo();
+
+private:
+    VLCPlugin*  _p_instance;
+    ITypeInfo*  _p_typeinfo;
+
+};
+
+class VLCPlaylist : public IVLCPlaylist
+{
+public:
+    VLCPlaylist(VLCPlugin *p_instance) :
+        _p_instance(p_instance),
+        _p_typeinfo(NULL),
+        _p_vlcplaylistitems(NULL)
+    {
+        _p_vlcplaylistitems = new VLCPlaylistItems(p_instance);
+    };
     virtual ~VLCPlaylist();
 
     // IUnknown methods
@@ -166,33 +459,34 @@ public:
     STDMETHODIMP Invoke(DISPID,REFIID,LCID,WORD,DISPPARAMS*,VARIANT*,EXCEPINFO*,UINT*);
 
     // IVLCPlaylist methods
-    STDMETHODIMP get_itemCount(int*);
+    STDMETHODIMP get_itemCount(long*);
     STDMETHODIMP get_isPlaying(VARIANT_BOOL*);
-    STDMETHODIMP add(BSTR, BSTR, VARIANT, int*);
+    STDMETHODIMP add(BSTR, VARIANT, VARIANT, long*);
     STDMETHODIMP play();
-    STDMETHODIMP playItem(int);
+    STDMETHODIMP playItem(long);
     STDMETHODIMP togglePause();
     STDMETHODIMP stop();
     STDMETHODIMP next();
     STDMETHODIMP prev();
     STDMETHODIMP clear();
-    STDMETHODIMP removeItem(int);
-private:
+    STDMETHODIMP removeItem(long);
+    STDMETHODIMP get_items(IVLCPlaylistItems**);
 
-    HRESULT      getTypeInfo();
+protected:
+    HRESULT loadTypeInfo();
 
-    VLCPlugin *_p_instance;
-    ITypeInfo *_p_typeinfo;
+private:
+    VLCPlugin*  _p_instance;
+    ITypeInfo*  _p_typeinfo;
 
+    VLCPlaylistItems*    _p_vlcplaylistitems;
 };
+
 class VLCVideo : public IVLCVideo
 {
-    
 public:
-
-    VLCVideo(VLCPlugin *p_instance) :  _p_instance(p_instance), _p_typeinfo(NULL) {};
+    VLCVideo(VLCPlugin *p_instance) :
+        _p_instance(p_instance), _p_typeinfo(NULL) {};
     virtual ~VLCVideo();
 
     // IUnknown methods
@@ -224,21 +518,30 @@ public:
     // IVLCVideo methods
     STDMETHODIMP get_fullscreen(VARIANT_BOOL*);
     STDMETHODIMP put_fullscreen(VARIANT_BOOL);
-    STDMETHODIMP get_width(int*);
-    STDMETHODIMP get_height(int*);
-private:
-
-    HRESULT      getTypeInfo();
+    STDMETHODIMP get_width(long*);
+    STDMETHODIMP get_height(long*);
+    STDMETHODIMP get_aspectRatio(BSTR*);
+    STDMETHODIMP put_aspectRatio(BSTR);
+    STDMETHODIMP get_subtitle(long*);
+    STDMETHODIMP put_subtitle(long);
+    STDMETHODIMP get_crop(BSTR*);
+    STDMETHODIMP put_crop(BSTR);
+    STDMETHODIMP get_teletext(long*);
+    STDMETHODIMP put_teletext(long);
+    STDMETHODIMP takeSnapshot(LPPICTUREDISP*);
+    STDMETHODIMP toggleFullscreen();
+
+protected:
+    HRESULT loadTypeInfo();
 
-    VLCPlugin *_p_instance;
-    ITypeInfo *_p_typeinfo;
+private:
+    VLCPlugin*      _p_instance;
+    ITypeInfo*      _p_typeinfo;
 
 };
+
 class VLCControl2 : public IVLCControl2
 {
-    
 public:
 
     VLCControl2(VLCPlugin *p_instance);
@@ -270,23 +573,42 @@ public:
     STDMETHODIMP Invoke(DISPID,REFIID,LCID,WORD,DISPPARAMS*,VARIANT*,EXCEPINFO*,UINT*);
 
     // IVLCControl2 methods
+    STDMETHODIMP get_AutoLoop(VARIANT_BOOL *autoloop);
+    STDMETHODIMP put_AutoLoop(VARIANT_BOOL autoloop);
+    STDMETHODIMP get_AutoPlay(VARIANT_BOOL *autoplay);
+    STDMETHODIMP put_AutoPlay(VARIANT_BOOL autoplay);
+    STDMETHODIMP get_BaseURL(BSTR *url);
+    STDMETHODIMP put_BaseURL(BSTR url);
+    STDMETHODIMP get_MRL(BSTR *mrl);
+    STDMETHODIMP put_MRL(BSTR mrl);
+    STDMETHODIMP get_StartTime(long *seconds);
+    STDMETHODIMP put_StartTime(long seconds);
+    STDMETHODIMP get_VersionInfo(BSTR *version);
+    STDMETHODIMP get_Visible(VARIANT_BOOL *visible);
+    STDMETHODIMP put_Visible(VARIANT_BOOL visible);
+    STDMETHODIMP get_Volume(long *volume);
+    STDMETHODIMP put_Volume(long volume);
+    STDMETHODIMP get_BackColor(OLE_COLOR *backcolor);
+    STDMETHODIMP put_BackColor(OLE_COLOR backcolor);
+
     STDMETHODIMP get_audio(IVLCAudio**);
     STDMETHODIMP get_input(IVLCInput**);
+    STDMETHODIMP get_log(IVLCLog**);
     STDMETHODIMP get_playlist(IVLCPlaylist**);
     STDMETHODIMP get_video(IVLCVideo**);
-private:
 
-    HRESULT      getTypeInfo();
+protected:
+    HRESULT loadTypeInfo();
 
+private:
     VLCPlugin*      _p_instance;
     ITypeInfo*      _p_typeinfo;
 
     VLCAudio*       _p_vlcaudio;
     VLCInput*       _p_vlcinput;
+    VLCLog  *       _p_vlclog;
     VLCPlaylist*    _p_vlcplaylist;
     VLCVideo*       _p_vlcvideo;
 };
-#endif
 
+#endif