1*f78e906fSAndrew Rist /**************************************************************
2cdf0e10cSrcweir  *
3*f78e906fSAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
4*f78e906fSAndrew Rist  * or more contributor license agreements.  See the NOTICE file
5*f78e906fSAndrew Rist  * distributed with this work for additional information
6*f78e906fSAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
7*f78e906fSAndrew Rist  * to you under the Apache License, Version 2.0 (the
8*f78e906fSAndrew Rist  * "License"); you may not use this file except in compliance
9*f78e906fSAndrew Rist  * with the License.  You may obtain a copy of the License at
10*f78e906fSAndrew Rist  *
11*f78e906fSAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12*f78e906fSAndrew Rist  *
13*f78e906fSAndrew Rist  * Unless required by applicable law or agreed to in writing,
14*f78e906fSAndrew Rist  * software distributed under the License is distributed on an
15*f78e906fSAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*f78e906fSAndrew Rist  * KIND, either express or implied.  See the License for the
17*f78e906fSAndrew Rist  * specific language governing permissions and limitations
18*f78e906fSAndrew Rist  * under the License.
19*f78e906fSAndrew Rist  *
20*f78e906fSAndrew Rist  *************************************************************/
21*f78e906fSAndrew Rist 
22*f78e906fSAndrew Rist 
23cdf0e10cSrcweir 
24cdf0e10cSrcweir #pragma warning(disable : 4668)
25cdf0e10cSrcweir 
26cdf0e10cSrcweir #include <advisesink.hxx>
27cdf0e10cSrcweir 
28cdf0e10cSrcweir namespace inprocserv
29cdf0e10cSrcweir {
30cdf0e10cSrcweir 
OleWrapperAdviseSink()31cdf0e10cSrcweir OleWrapperAdviseSink::OleWrapperAdviseSink()
32cdf0e10cSrcweir : m_nRefCount( 0 )
33cdf0e10cSrcweir , m_pFormatEtc( NULL )
34cdf0e10cSrcweir , m_nAspect( DVASPECT_CONTENT )
35cdf0e10cSrcweir , m_nRegID( 0 )
36cdf0e10cSrcweir , m_bObjectAdvise( TRUE )
37cdf0e10cSrcweir , m_nDataRegFlag( 0 )
38cdf0e10cSrcweir , m_nViewRegFlag( 0 )
39cdf0e10cSrcweir , m_bHandleClosed( TRUE )
40cdf0e10cSrcweir , m_bClosed( FALSE )
41cdf0e10cSrcweir {
42cdf0e10cSrcweir }
43cdf0e10cSrcweir 
OleWrapperAdviseSink(const ComSmart<IAdviseSink> & pListener)44cdf0e10cSrcweir OleWrapperAdviseSink::OleWrapperAdviseSink( const ComSmart< IAdviseSink >& pListener )
45cdf0e10cSrcweir : m_nRefCount( 0 )
46cdf0e10cSrcweir , m_pListener( pListener )
47cdf0e10cSrcweir , m_pFormatEtc( NULL )
48cdf0e10cSrcweir , m_nAspect( DVASPECT_CONTENT )
49cdf0e10cSrcweir , m_nRegID( 0 )
50cdf0e10cSrcweir , m_bObjectAdvise( TRUE )
51cdf0e10cSrcweir , m_nDataRegFlag( 0 )
52cdf0e10cSrcweir , m_nViewRegFlag( 0 )
53cdf0e10cSrcweir , m_bHandleClosed( FALSE )
54cdf0e10cSrcweir , m_bClosed( FALSE )
55cdf0e10cSrcweir {
56cdf0e10cSrcweir }
57cdf0e10cSrcweir 
OleWrapperAdviseSink(const ComSmart<IAdviseSink> & pListener,FORMATETC * pFormatEtc,DWORD nDataRegFlag)58cdf0e10cSrcweir OleWrapperAdviseSink::OleWrapperAdviseSink( const ComSmart< IAdviseSink >& pListener, FORMATETC* pFormatEtc, DWORD nDataRegFlag )
59cdf0e10cSrcweir : m_nRefCount( 0 )
60cdf0e10cSrcweir , m_pListener( pListener )
61cdf0e10cSrcweir , m_pFormatEtc( NULL )
62cdf0e10cSrcweir , m_nAspect( DVASPECT_CONTENT )
63cdf0e10cSrcweir , m_nRegID( 0 )
64cdf0e10cSrcweir , m_bObjectAdvise( FALSE )
65cdf0e10cSrcweir , m_nDataRegFlag( nDataRegFlag )
66cdf0e10cSrcweir , m_nViewRegFlag( 0 )
67cdf0e10cSrcweir , m_bHandleClosed( FALSE )
68cdf0e10cSrcweir , m_bClosed( FALSE )
69cdf0e10cSrcweir {
70cdf0e10cSrcweir     if ( pFormatEtc )
71cdf0e10cSrcweir     {
72cdf0e10cSrcweir         m_pFormatEtc = new FORMATETC;
73cdf0e10cSrcweir         m_pFormatEtc->cfFormat = pFormatEtc->cfFormat;
74cdf0e10cSrcweir         m_pFormatEtc->ptd = NULL;
75cdf0e10cSrcweir         m_pFormatEtc->dwAspect = pFormatEtc->dwAspect;
76cdf0e10cSrcweir         m_pFormatEtc->lindex = pFormatEtc->lindex;
77cdf0e10cSrcweir         m_pFormatEtc->tymed = pFormatEtc->tymed;
78cdf0e10cSrcweir     }
79cdf0e10cSrcweir }
80cdf0e10cSrcweir 
OleWrapperAdviseSink(const ComSmart<IAdviseSink> & pListener,DWORD nAspect,DWORD nViewRegFlag)81cdf0e10cSrcweir OleWrapperAdviseSink::OleWrapperAdviseSink( const ComSmart< IAdviseSink >& pListener, DWORD nAspect, DWORD nViewRegFlag )
82cdf0e10cSrcweir : m_nRefCount( 0 )
83cdf0e10cSrcweir , m_pListener( pListener )
84cdf0e10cSrcweir , m_pFormatEtc( NULL )
85cdf0e10cSrcweir , m_nAspect( nAspect )
86cdf0e10cSrcweir , m_nRegID( 0 )
87cdf0e10cSrcweir , m_bObjectAdvise( TRUE )
88cdf0e10cSrcweir , m_nDataRegFlag( 0 )
89cdf0e10cSrcweir , m_nViewRegFlag( nViewRegFlag )
90cdf0e10cSrcweir , m_bHandleClosed( FALSE )
91cdf0e10cSrcweir , m_bClosed( FALSE )
92cdf0e10cSrcweir {
93cdf0e10cSrcweir }
94cdf0e10cSrcweir 
~OleWrapperAdviseSink()95cdf0e10cSrcweir OleWrapperAdviseSink::~OleWrapperAdviseSink()
96cdf0e10cSrcweir {
97cdf0e10cSrcweir     if ( m_pFormatEtc )
98cdf0e10cSrcweir         delete m_pFormatEtc;
99cdf0e10cSrcweir }
100cdf0e10cSrcweir 
QueryInterface(REFIID riid,void ** ppv)101cdf0e10cSrcweir STDMETHODIMP OleWrapperAdviseSink::QueryInterface( REFIID riid , void** ppv )
102cdf0e10cSrcweir {
103cdf0e10cSrcweir 	*ppv=NULL;
104cdf0e10cSrcweir 
105cdf0e10cSrcweir 	if ( riid == IID_IUnknown )
106cdf0e10cSrcweir 		*ppv = (IUnknown*)this;
107cdf0e10cSrcweir 
108cdf0e10cSrcweir 	if ( riid == IID_IAdviseSink )
109cdf0e10cSrcweir 		*ppv = (IAdviseSink*)this;
110cdf0e10cSrcweir 
111cdf0e10cSrcweir 	if ( *ppv != NULL )
112cdf0e10cSrcweir 	{
113cdf0e10cSrcweir 		((IUnknown*)*ppv)->AddRef();
114cdf0e10cSrcweir 		return S_OK;
115cdf0e10cSrcweir 	}
116cdf0e10cSrcweir 
117cdf0e10cSrcweir 	return E_NOINTERFACE;
118cdf0e10cSrcweir }
119cdf0e10cSrcweir 
STDMETHODIMP_(ULONG)120cdf0e10cSrcweir STDMETHODIMP_(ULONG) OleWrapperAdviseSink::AddRef()
121cdf0e10cSrcweir {
122cdf0e10cSrcweir 	return ++m_nRefCount;
123cdf0e10cSrcweir }
124cdf0e10cSrcweir 
STDMETHODIMP_(ULONG)125cdf0e10cSrcweir STDMETHODIMP_(ULONG) OleWrapperAdviseSink::Release()
126cdf0e10cSrcweir {
127cdf0e10cSrcweir 	ULONG nReturn = --m_nRefCount;
128cdf0e10cSrcweir 	if ( m_nRefCount == 0 )
129cdf0e10cSrcweir 		delete this;
130cdf0e10cSrcweir 
131cdf0e10cSrcweir     return nReturn;
132cdf0e10cSrcweir }
133cdf0e10cSrcweir 
STDMETHODIMP_(void)134cdf0e10cSrcweir STDMETHODIMP_(void) OleWrapperAdviseSink::OnDataChange( LPFORMATETC pFetc, LPSTGMEDIUM pMedium )
135cdf0e10cSrcweir {
136cdf0e10cSrcweir     if ( m_pListener )
137cdf0e10cSrcweir     {
138cdf0e10cSrcweir         WRITEDEBUGINFO( "OleWrapperAdviseSink::OnDataChange():" );
139cdf0e10cSrcweir         m_pListener->OnDataChange( pFetc, pMedium );
140cdf0e10cSrcweir     }
141cdf0e10cSrcweir }
142cdf0e10cSrcweir 
STDMETHODIMP_(void)143cdf0e10cSrcweir STDMETHODIMP_(void) OleWrapperAdviseSink::OnViewChange( DWORD dwAspect, LONG lindex )
144cdf0e10cSrcweir {
145cdf0e10cSrcweir     if ( m_pListener )
146cdf0e10cSrcweir     {
147cdf0e10cSrcweir         WRITEDEBUGINFO( "OleWrapperAdviseSink::OnViewChange():" );
148cdf0e10cSrcweir         m_pListener->OnViewChange( dwAspect, lindex );
149cdf0e10cSrcweir     }
150cdf0e10cSrcweir }
151cdf0e10cSrcweir 
STDMETHODIMP_(void)152cdf0e10cSrcweir STDMETHODIMP_(void) OleWrapperAdviseSink::OnRename( LPMONIKER pMoniker )
153cdf0e10cSrcweir {
154cdf0e10cSrcweir     if ( m_pListener )
155cdf0e10cSrcweir     {
156cdf0e10cSrcweir         WRITEDEBUGINFO( "OleWrapperAdviseSink::OnRename():" );
157cdf0e10cSrcweir         m_pListener->OnRename( pMoniker );
158cdf0e10cSrcweir     }
159cdf0e10cSrcweir }
160cdf0e10cSrcweir 
STDMETHODIMP_(void)161cdf0e10cSrcweir STDMETHODIMP_(void) OleWrapperAdviseSink::OnSave(void)
162cdf0e10cSrcweir {
163cdf0e10cSrcweir     if ( m_pListener )
164cdf0e10cSrcweir     {
165cdf0e10cSrcweir         WRITEDEBUGINFO( "OleWrapperAdviseSink::OnSave():" );
166cdf0e10cSrcweir         m_pListener->OnSave();
167cdf0e10cSrcweir     }
168cdf0e10cSrcweir }
169cdf0e10cSrcweir 
STDMETHODIMP_(void)170cdf0e10cSrcweir STDMETHODIMP_(void) OleWrapperAdviseSink::OnClose(void)
171cdf0e10cSrcweir {
172cdf0e10cSrcweir     if ( m_pListener )
173cdf0e10cSrcweir     {
174cdf0e10cSrcweir         WRITEDEBUGINFO( "OleWrapperAdviseSink::OnClose():" );
175cdf0e10cSrcweir         m_pListener->OnClose();
176cdf0e10cSrcweir     }
177cdf0e10cSrcweir 
178cdf0e10cSrcweir     if ( m_bHandleClosed )
179cdf0e10cSrcweir         m_bClosed = TRUE;
180cdf0e10cSrcweir }
181cdf0e10cSrcweir 
182cdf0e10cSrcweir } // namespace inprocserv
183cdf0e10cSrcweir 
184