X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=activex%2Fconnectioncontainer.h;h=3713e9ee77aea0ed8b4869ae5bbdfea980547985;hb=d0121363a97f0bf35434aaaca2e96bda5e3f6a76;hp=87d97dc624c85dad56cac282af9cbc806c10879a;hpb=f533f3d8aa01c57102e16a829fe9146b35a32cef;p=vlc diff --git a/activex/connectioncontainer.h b/activex/connectioncontainer.h index 87d97dc624..3713e9ee77 100644 --- a/activex/connectioncontainer.h +++ b/activex/connectioncontainer.h @@ -1,116 +1,130 @@ -/***************************************************************************** - * connectioncontainer.h: ActiveX control for VLC - ***************************************************************************** - * Copyright (C) 2005 VideoLAN - * - * Authors: Damien Fouilleul - * - * 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 - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * 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. - *****************************************************************************/ - -#ifndef __CONNECTIONCONTAINER_H__ -#define __CONNECTIONCONTAINER_H__ - -#include -#include - -using namespace std; - -class VLCConnectionPoint : public IConnectionPoint -{ - -public: - - VLCConnectionPoint(IConnectionPointContainer *p_cpc, REFIID iid) : - _iid(iid), _p_cpc(p_cpc) {}; - virtual ~VLCConnectionPoint() {}; - - // IUnknown methods - STDMETHODIMP QueryInterface(REFIID riid, void **ppv) - { - if( NULL == ppv ) return E_POINTER; - if( (IID_IUnknown == riid) - && (IID_IConnectionPoint == riid) ) { - AddRef(); - *ppv = reinterpret_cast(this); - return NOERROR; - } - // must be a standalone object - return E_NOINTERFACE; - }; - - STDMETHODIMP_(ULONG) AddRef(void) { return _p_cpc->AddRef(); }; - STDMETHODIMP_(ULONG) Release(void) { return _p_cpc->Release(); }; - - // IConnectionPoint methods - STDMETHODIMP GetConnectionInterface(IID *); - STDMETHODIMP GetConnectionPointContainer(LPCONNECTIONPOINTCONTAINER *); - STDMETHODIMP Advise(IUnknown *, DWORD *); - STDMETHODIMP Unadvise(DWORD); - STDMETHODIMP EnumConnections(LPENUMCONNECTIONS *); - - void fireEvent(DISPID dispIdMember, DISPPARAMS* pDispParams); - void firePropChangedEvent(DISPID dispId); - -private: - - REFIID _iid; - IConnectionPointContainer *_p_cpc; - vector _connections; -}; - -////////////////////////////////////////////////////////////////////////// - -class VLCConnectionPointContainer : public IConnectionPointContainer -{ - -public: - - VLCConnectionPointContainer(VLCPlugin *p_instance); - virtual ~VLCConnectionPointContainer(); - - // IUnknown methods - STDMETHODIMP QueryInterface(REFIID riid, void **ppv) - { - if( (NULL != ppv) - && (IID_IUnknown == riid) - && (IID_IConnectionPointContainer == riid) ) { - AddRef(); - *ppv = reinterpret_cast(this); - return NOERROR; - } - return _p_instance->QueryInterface(riid, ppv); - }; - - STDMETHODIMP_(ULONG) AddRef(void) { return _p_instance->AddRef(); }; - STDMETHODIMP_(ULONG) Release(void) { return _p_instance->Release(); }; - - // IConnectionPointContainer methods - STDMETHODIMP EnumConnectionPoints(LPENUMCONNECTIONPOINTS *); - STDMETHODIMP FindConnectionPoint(REFIID, LPCONNECTIONPOINT *); - - void fireEvent(DISPID, DISPPARAMS*); - void firePropChangedEvent(DISPID dispId); - -private: - - VLCPlugin *_p_instance; - VLCConnectionPoint *_p_events; - VLCConnectionPoint *_p_props; - vector _v_cps; -}; - -#endif - +/***************************************************************************** + * connectioncontainer.h: ActiveX control for VLC + ***************************************************************************** + * Copyright (C) 2005 the VideoLAN team + * + * Authors: Damien Fouilleul + * + * 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 + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * 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. + *****************************************************************************/ + +#ifndef __CONNECTIONCONTAINER_H__ +#define __CONNECTIONCONTAINER_H__ + +#include +#include +#include + +class VLCConnectionPoint : public IConnectionPoint +{ + +public: + + VLCConnectionPoint(IConnectionPointContainer *p_cpc, REFIID iid) : + _iid(iid), _p_cpc(p_cpc) {}; + virtual ~VLCConnectionPoint() {}; + + // IUnknown methods + STDMETHODIMP QueryInterface(REFIID riid, void **ppv) + { + if( NULL == ppv ) return E_POINTER; + if( (IID_IUnknown == riid) + && (IID_IConnectionPoint == riid) ) { + AddRef(); + *ppv = reinterpret_cast(this); + return NOERROR; + } + // must be a standalone object + return E_NOINTERFACE; + }; + + STDMETHODIMP_(ULONG) AddRef(void) { return _p_cpc->AddRef(); }; + STDMETHODIMP_(ULONG) Release(void) { return _p_cpc->Release(); }; + + // IConnectionPoint methods + STDMETHODIMP GetConnectionInterface(IID *); + STDMETHODIMP GetConnectionPointContainer(LPCONNECTIONPOINTCONTAINER *); + STDMETHODIMP Advise(IUnknown *, DWORD *); + STDMETHODIMP Unadvise(DWORD); + STDMETHODIMP EnumConnections(LPENUMCONNECTIONS *); + + void fireEvent(DISPID dispIdMember, DISPPARAMS* pDispParams); + void firePropChangedEvent(DISPID dispId); + +private: + + REFIID _iid; + IConnectionPointContainer *_p_cpc; + std::vector _connections; +}; + +////////////////////////////////////////////////////////////////////////// + +class VLCDispatchEvent { + +public: + VLCDispatchEvent(DISPID dispId, DISPPARAMS dispParams) : + _dispId(dispId), _dispParams(dispParams) {}; + VLCDispatchEvent(const VLCDispatchEvent&); + ~VLCDispatchEvent(); + + DISPID _dispId; + DISPPARAMS _dispParams; +}; + +class VLCConnectionPointContainer : public IConnectionPointContainer +{ + +public: + + VLCConnectionPointContainer(VLCPlugin *p_instance); + virtual ~VLCConnectionPointContainer(); + + // IUnknown methods + STDMETHODIMP QueryInterface(REFIID riid, void **ppv) + { + if( (NULL != ppv) + && (IID_IUnknown == riid) + && (IID_IConnectionPointContainer == riid) ) { + AddRef(); + *ppv = reinterpret_cast(this); + return NOERROR; + } + return _p_instance->pUnkOuter->QueryInterface(riid, ppv); + }; + + STDMETHODIMP_(ULONG) AddRef(void) { return _p_instance->pUnkOuter->AddRef(); }; + STDMETHODIMP_(ULONG) Release(void) { return _p_instance->pUnkOuter->Release(); }; + + // IConnectionPointContainer methods + STDMETHODIMP EnumConnectionPoints(LPENUMCONNECTIONPOINTS *); + STDMETHODIMP FindConnectionPoint(REFIID, LPCONNECTIONPOINT *); + + void freezeEvents(BOOL); + void fireEvent(DISPID, DISPPARAMS*); + void firePropChangedEvent(DISPID dispId); + +private: + + VLCPlugin *_p_instance; + BOOL _b_freeze; + VLCConnectionPoint *_p_events; + VLCConnectionPoint *_p_props; + std::vector _v_cps; + std::queue _q_events; +}; + +#endif +