mirror of
https://github.com/ONLYOFFICE/core.git
synced 2026-04-07 13:55:33 +08:00
144 lines
3.8 KiB
C++
144 lines
3.8 KiB
C++
#pragma once
|
|
#include "../AVSOfficeFile/OfficeEventsTemplate.h"
|
|
|
|
template <class T, class Reciever>
|
|
class COfficeFileConverterEvents : public COfficeEventTemplate<T,Reciever>
|
|
{
|
|
public:
|
|
COfficeFileConverterEvents(Reciever *pReciever):COfficeEventTemplate(pReciever)
|
|
{
|
|
m_cnt = 0;
|
|
m_dwAdvise = 0;
|
|
};
|
|
HRESULT OnProgress( LONG nID, LONG nPercent)
|
|
{
|
|
m_pReciever->_OnProgress( nID, nPercent );
|
|
return S_OK;
|
|
}
|
|
HRESULT OnProgressEx( LONG nID, LONG nPercent, SHORT* Cancel )
|
|
{
|
|
m_pReciever->_OnProgressEx( nID, nPercent, Cancel );
|
|
return S_OK;
|
|
}
|
|
STDMETHOD(Invoke)(DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS* pDispParams,
|
|
VARIANT* pVarResult, EXCEPINFO* pExcepInfo, UINT* puArgErr)
|
|
{
|
|
CTemporaryCS oCS(&m_csThread);
|
|
HRESULT hr;
|
|
VARIANTARG varg0;
|
|
VARIANTARG varg1;
|
|
VARIANTARG varg2;
|
|
switch(dispIdMember) {
|
|
case 1:
|
|
VariantInit(&varg0);
|
|
VariantInit(&varg1);
|
|
hr = DispGetParam(pDispParams,0,VT_I4,&varg0,puArgErr);
|
|
hr = DispGetParam(pDispParams,1,VT_I4,&varg1,puArgErr);
|
|
OnProgress( varg0.lVal, varg1.lVal );
|
|
return(S_OK);
|
|
break;
|
|
case 2:
|
|
VariantInit(&varg0);
|
|
VariantInit(&varg1);
|
|
VariantInit(&varg2);
|
|
hr = DispGetParam(pDispParams,0,VT_I4,&varg0,puArgErr);
|
|
hr = DispGetParam(pDispParams,1,VT_I4,&varg1,puArgErr);
|
|
hr = DispGetParam(pDispParams,2,VT_I2,&varg2,puArgErr);
|
|
OnProgressEx( varg0.lVal, varg1.lVal, &varg2.iVal );
|
|
if (pDispParams->rgvarg[0].vt & VT_BYREF) // implemented now for last VT_I2 arg only
|
|
{
|
|
SHORT* p = (SHORT*)pDispParams->rgvarg[0].byref;
|
|
if (p) *p = varg2.iVal;
|
|
}
|
|
return(S_OK);
|
|
break;
|
|
default:
|
|
return(E_NOTIMPL);
|
|
}
|
|
}
|
|
};
|
|
|
|
template <class T, class Reciever>
|
|
class COfficeFileEvents : public COfficeEventTemplate<T,Reciever>
|
|
{
|
|
public:
|
|
COfficeFileEvents(Reciever *pReciever):COfficeEventTemplate(pReciever)
|
|
{
|
|
m_cnt = 0;
|
|
m_dwAdvise = 0;
|
|
};
|
|
HRESULT OnError( LONG lError )
|
|
{
|
|
m_pReciever->_OnError( lError );
|
|
return S_OK;
|
|
}
|
|
HRESULT OnCompleteParseFile( )
|
|
{
|
|
m_pReciever->_OnCompleteParseFile();
|
|
return S_OK;
|
|
}
|
|
HRESULT OnProgressParseFile( LONG nID, LONG lProgressPage, SHORT* Cancel )
|
|
{
|
|
m_pReciever->_OnProgressParseFile( nID, lProgressPage, Cancel, this );
|
|
return S_OK;
|
|
}
|
|
HRESULT OnProgressParsePage( LONG lProgress )
|
|
{
|
|
m_pReciever->_OnProgressParsePage( lProgress );
|
|
return S_OK;
|
|
}
|
|
HRESULT OnCompleteParsePage( )
|
|
{
|
|
m_pReciever->_OnCompleteParsePage();
|
|
return S_OK;
|
|
}
|
|
|
|
STDMETHOD(Invoke)(DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS* pDispParams,
|
|
VARIANT* pVarResult, EXCEPINFO* pExcepInfo, UINT* puArgErr)
|
|
{
|
|
CTemporaryCS oCS(&m_csThread);
|
|
HRESULT hr;
|
|
VARIANTARG varg0;
|
|
VARIANTARG varg1;
|
|
VARIANTARG varg2;
|
|
switch(dispIdMember) {
|
|
case 0:
|
|
VariantInit(&varg0);
|
|
hr = DispGetParam(pDispParams,0,VT_I4,&varg0,puArgErr);
|
|
OnError( varg0.lVal );
|
|
return(S_OK);
|
|
break;
|
|
case 1:
|
|
OnCompleteParseFile();
|
|
return(S_OK);
|
|
break;
|
|
case 5:
|
|
VariantInit(&varg0);
|
|
VariantInit(&varg1);
|
|
VariantInit(&varg2);
|
|
hr = DispGetParam(pDispParams,0,VT_I4,&varg0,puArgErr);
|
|
hr = DispGetParam(pDispParams,1,VT_I4,&varg1,puArgErr);
|
|
hr = DispGetParam(pDispParams,2,VT_I2,&varg2,puArgErr);
|
|
OnProgressParseFile( varg0.lVal, varg1.lVal, &varg2.iVal );
|
|
if (pDispParams->rgvarg[0].vt & VT_BYREF) // implemented now for last VT_I2 arg only
|
|
{
|
|
SHORT* p = (SHORT*)pDispParams->rgvarg[0].byref;
|
|
if (p) *p = varg2.iVal;
|
|
}
|
|
return(S_OK);
|
|
break;
|
|
case 6:
|
|
VariantInit(&varg0);
|
|
hr = DispGetParam(pDispParams,0,VT_I4,&varg0,puArgErr);
|
|
OnProgressParsePage( varg0.lVal );
|
|
return(S_OK);
|
|
break;
|
|
case 7:
|
|
OnCompleteParsePage();
|
|
return(S_OK);
|
|
break;
|
|
default:
|
|
return(E_NOTIMPL);
|
|
}
|
|
}
|
|
}; |