*
* 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__
#include <ole2.h>
#include <olectl.h>
-#include <vlc/vlc.h>
+#include <vlc/libvlc.h>
extern const GUID CLSID_VLCPlugin;
+extern const GUID CLSID_VLCPlugin2;
extern const GUID LIBID_AXVLC;
extern const GUID DIID_DVLCEvents;
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);
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:
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
public:
- VLCPlugin(VLCPluginClass *p_class);
+ VLCPlugin(VLCPluginClass *p_class, LPUNKNOWN pUnkOuter);
/* IUnknown methods */
STDMETHODIMP QueryInterface(REFIID riid, void **ppv);
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:
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
-