X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=activex%2Fplugin.h;h=9d09a4fa0cecdfd11b11f3b66f4a74aa58940ca0;hb=c546e0f1ac083a1aef8955b248b3e1378e1d400b;hp=e9e7206c3305d800b71504703d0c4d9de71015f5;hpb=da4dc63b33a3cbffa38513107882a05f2043d17c;p=vlc diff --git a/activex/plugin.h b/activex/plugin.h index e9e7206c33..9d09a4fa0c 100644 --- a/activex/plugin.h +++ b/activex/plugin.h @@ -1,7 +1,7 @@ /***************************************************************************** * plugin.h: ActiveX control for VLC ***************************************************************************** - * Copyright (C) 2005 VideoLAN + * Copyright (C) 2005 the VideoLAN team * * Authors: Damien Fouilleul * @@ -17,7 +17,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. *****************************************************************************/ #ifndef __PLUGIN_H__ @@ -26,9 +26,10 @@ #include #include -#include +#include extern const GUID CLSID_VLCPlugin; +extern const GUID CLSID_VLCPlugin2; extern const GUID LIBID_AXVLC; extern const GUID DIID_DVLCEvents; @@ -37,7 +38,7 @@ class VLCPluginClass : public IClassFactory public: - VLCPluginClass(LONG *p_class_ref,HINSTANCE hInstance); + VLCPluginClass(LONG *p_class_ref, HINSTANCE hInstance, REFCLSID rclsid); /* IUnknown methods */ STDMETHODIMP QueryInterface(REFIID riid, void **ppv); @@ -45,13 +46,15 @@ public: STDMETHODIMP_(ULONG) Release(void); /* IClassFactory methods */ - STDMETHODIMP CreateInstance(IUnknown *pUnkOuter, REFIID riid, void **ppv); + STDMETHODIMP CreateInstance(LPUNKNOWN pUnkOuter, REFIID riid, void **ppv); STDMETHODIMP LockServer(BOOL fLock); - LPCSTR getInPlaceWndClassName(void) const { return TEXT("VLC Plugin In-Place"); }; - LPCSTR getVideoWndClassName(void) const { return TEXT("VLC Plugin Video"); }; + REFCLSID getClassID(void) { return (REFCLSID)_classid; }; + + LPCTSTR getInPlaceWndClassName(void) const { return TEXT("VLC Plugin In-Place"); }; HINSTANCE getHInstance(void) const { return _hinstance; }; - HBITMAP getInPlacePict(void) const { return _inplace_hbitmap; }; + LPPICTURE getInPlacePict(void) const + { if( NULL != _inplace_picture) _inplace_picture->AddRef(); return _inplace_picture; }; protected: @@ -61,9 +64,9 @@ private: LPLONG _p_class_ref; HINSTANCE _hinstance; + CLSID _classid; ATOM _inplace_wndclass_atom; - ATOM _video_wndclass_atom; - HBITMAP _inplace_hbitmap; + LPPICTURE _inplace_picture; }; class VLCPlugin : public IUnknown @@ -71,7 +74,7 @@ class VLCPlugin : public IUnknown public: - VLCPlugin(VLCPluginClass *p_class); + VLCPlugin(VLCPluginClass *p_class, LPUNKNOWN pUnkOuter); /* IUnknown methods */ STDMETHODIMP QueryInterface(REFIID riid, void **ppv); @@ -79,54 +82,144 @@ public: STDMETHODIMP_(ULONG) Release(void); /* custom methods */ - HRESULT getTypeLib(LCID lcid, ITypeLib **pTL) - { return LoadRegTypeLib(LIBID_AXVLC, 1, 0, lcid, pTL); }; - REFCLSID getClassID(void) { return (REFCLSID)CLSID_VLCPlugin; }; + HRESULT getTypeLib(LCID lcid, ITypeLib **pTL) { return LoadRegTypeLib(LIBID_AXVLC, 1, 0, lcid, pTL); }; + REFCLSID getClassID(void) { return _p_class->getClassID(); }; REFIID getDispEventID(void) { return (REFIID)DIID_DVLCEvents; }; - HRESULT onInit(void); - HRESULT onLoad(void); - HRESULT onClientSiteChanged(LPOLECLIENTSITE pActiveSite); - HRESULT onClose(DWORD dwSaveOption); + /* + ** persistant properties + */ + void setMRL(BSTR mrl) + { + SysFreeString(_bstr_mrl); + _bstr_mrl = SysAllocStringLen(mrl, SysStringLen(mrl)); + setDirty(TRUE); + }; + const BSTR getMRL(void) { return _bstr_mrl; }; + + inline void setAutoPlay(BOOL autoplay) + { + _b_autoplay = autoplay; + setDirty(TRUE); + }; + inline BOOL getAutoPlay(void) { return _b_autoplay; }; + + inline void setAutoLoop(BOOL autoloop) + { + _b_autoloop = autoloop; + setDirty(TRUE); + }; + inline BOOL getAutoLoop(void) { return _b_autoloop;}; + + void setVolume(int volume); + int getVolume(void) { return _i_volume; }; + + void setBackColor(OLE_COLOR backcolor); + OLE_COLOR getBackColor(void) { return _i_backcolor; }; - BOOL isInPlaceActive(void); - HRESULT onActivateInPlace(LPMSG lpMesg, HWND hwndParent, LPCRECT lprcPosRect, LPCRECT lprcClipRect); - HRESULT onInPlaceDeactivate(void); - HWND getInPlaceWindow(void) const { return _inplacewnd; }; + void setVisible(BOOL fVisible); + BOOL getVisible(void) { return _b_visible; }; + BOOL isVisible(void) { return _b_visible || (! _b_usermode); }; + + inline void setStartTime(int time) + { + _i_time = time; + setDirty(TRUE); + }; + inline int getStartTime(void) { return _i_time; }; + + void setTime(int time); + int getTime(void) { return _i_time; }; + + void setBaseURL(BSTR url) + { + SysFreeString(_bstr_baseurl); + _bstr_baseurl = SysAllocStringLen(url, SysStringLen(url)); + setDirty(TRUE); + }; + const BSTR getBaseURL(void) { return _bstr_baseurl; }; + + // control size in HIMETRIC + inline void setExtent(const SIZEL& extent) + { + _extent = extent; + setDirty(TRUE); + }; + const SIZEL& getExtent(void) { return _extent; }; + + // transient properties + inline void setMute(BOOL mute) { _b_mute = mute; }; + + inline void setPicture(LPPICTURE pict) + { + if( NULL != _p_pict ) + _p_pict->Release(); + if( NULL != pict ) + _p_pict->AddRef(); + _p_pict = pict; + }; + + inline LPPICTURE getPicture(void) + { + if( NULL != _p_pict ) + _p_pict->AddRef(); + return _p_pict; + }; BOOL hasFocus(void); void setFocus(BOOL fFocus); - UINT getCodePage(void) { return _codepage; }; - void setCodePage(UINT cp) { _codepage = cp; }; + inline UINT getCodePage(void) { return _i_codepage; }; + inline void setCodePage(UINT cp) + { + // accept new codepage only if it works on this system + size_t mblen = WideCharToMultiByte(cp, + 0, L"test", -1, NULL, 0, NULL, NULL); + if( mblen > 0 ) + _i_codepage = cp; + }; - int getVLCObject(void) { return _i_vlc; }; + inline BOOL isUserMode(void) { return _b_usermode; }; + inline void setUserMode(BOOL um) { _b_usermode = um; }; - // persistent control properties, may be overriden by HTML & javascript - void setSourceURL(const char *url) { _psz_src = strdup(url); }; - void setAutoStart(BOOL autostart) { _b_autostart = autostart; }; - void setLoopMode(BOOL loopmode) { _b_loopmode = loopmode; }; - void setMute(BOOL mute) { _b_mute = mute; }; - void setSendEvents(BOOL sendevents) { _b_sendevents = sendevents; }; - void setVisible(BOOL fVisible); - BOOL getVisible(void) { return _b_visible; }; - - // container events + inline BOOL isDirty(void) { return _b_dirty; }; + inline void setDirty(BOOL dirty) { _b_dirty = dirty; }; + + inline BOOL isRunning(void) { return NULL != _p_libvlc; }; + HRESULT getVLCObject(int *i_vlc); + HRESULT getVLC(libvlc_instance_t** p_vlc); + void setErrorInfo(REFIID riid, const char *description); + + // control geometry within container + RECT getPosRect(void) { return _posRect; }; + inline HWND getInPlaceWindow(void) const { return _inplacewnd; }; + BOOL isInPlaceActive(void); + + /* + ** container events + */ + HRESULT onInit(void); + HRESULT onLoad(void); + HRESULT onActivateInPlace(LPMSG lpMesg, HWND hwndParent, LPCRECT lprcPosRect, LPCRECT lprcClipRect); + HRESULT onInPlaceDeactivate(void); + HRESULT onAmbientChanged(LPUNKNOWN pContainer, DISPID dispID); + HRESULT onClose(DWORD dwSaveOption); void onPositionChange(LPCRECT lprcPosRect, LPCRECT lprcClipRect); + void onDraw(DVTARGETDEVICE * ptd, HDC hicTargetDev, + HDC hdcDraw, LPCRECTL lprcBounds, LPCRECTL lprcWBounds); void onPaint(HDC hdc, const RECT &bounds, const RECT &pr); - // control events + /* + ** control events + */ + void freezeEvents(BOOL freeze); void firePropChangedEvent(DISPID dispid); void fireOnPlayEvent(void); void fireOnPauseEvent(void); void fireOnStopEvent(void); - // control size in HIMETRIC - const SIZEL& getExtent(void) { return _extent; }; - void setExtent(const SIZEL& extent) { _extent = extent; }; - - // control geometry within container - RECT getPosRect(void) { return _posRect; }; + // controlling IUnknown interface + LPUNKNOWN pUnkOuter; protected: @@ -146,28 +239,36 @@ private: class VLCConnectionPointContainer *vlcConnectionPointContainer; class VLCObjectSafety *vlcObjectSafety; class VLCControl *vlcControl; + class VLCControl2 *vlcControl2; class VLCViewObject *vlcViewObject; + class VLCDataObject *vlcDataObject; + class VLCSupportErrorInfo *vlcSupportErrorInfo; - // in place activated window (Clipping window) + // in place activated window (Plugin window) HWND _inplacewnd; - // video window (Drawing window) - HWND _videownd; - VLCPluginClass *_p_class; + VLCPluginClass* _p_class; ULONG _i_ref; - UINT _codepage; - char *_psz_src; - BOOL _b_autostart; - BOOL _b_loopmode; + libvlc_instance_t* _p_libvlc; + UINT _i_codepage; + BOOL _b_usermode; + RECT _posRect; + LPPICTURE _p_pict; + + // persistable properties + BSTR _bstr_baseurl; + BSTR _bstr_mrl; + BOOL _b_autoplay; + BOOL _b_autoloop; BOOL _b_visible; BOOL _b_mute; - BOOL _b_sendevents; - int _i_vlc; - + int _i_volume; + int _i_time; SIZEL _extent; - RECT _posRect; + OLE_COLOR _i_backcolor; + // indicates whether properties needs persisting + BOOL _b_dirty; }; #endif -