Update of /cvsroot/pywin32/pywin32/com/win32comext/shell/src
In directory ddv4jf1.ch3.sourceforge.com:/tmp/cvs-serv7417/com/win32comext/shell/src
Modified Files:
PyICopyHook.cpp PyICopyHook.h shell.cpp
Log Message:
Add ICopyHookW support.
Index: PyICopyHook.cpp
===================================================================
RCS file: /cvsroot/pywin32/pywin32/com/win32comext/shell/src/PyICopyHook.cpp,v
retrieving revision 1.4
retrieving revision 1.5
diff -C2 -d -r1.4 -r1.5
*** PyICopyHook.cpp 3 Jun 2007 14:53:07 -0000 1.4
--- PyICopyHook.cpp 24 Nov 2008 06:10:08 -0000 1.5
***************
*** 1,3 ****
! // This file implements the ICopyHook Interface and Gateway for Python.
// Generated by makegw.py
--- 1,4 ----
! // This file implements the ICopyHookA and ICopyHookW interfaces and
! // Gateways for Python.
// Generated by makegw.py
***************
*** 10,14 ****
// Interface Implementation
! PyICopyHook::PyICopyHook(IUnknown *pdisp):
PyIUnknown(pdisp)
{
--- 11,15 ----
// Interface Implementation
! PyICopyHookA::PyICopyHookA(IUnknown *pdisp):
PyIUnknown(pdisp)
{
***************
*** 16,32 ****
}
! PyICopyHook::~PyICopyHook()
{
}
! /* static */ ICopyHook *PyICopyHook::GetI(PyObject *self)
{
! return (ICopyHook *)PyIUnknown::GetI(self);
}
! // @pymethod |PyICopyHook|CopyCallback|Description of CopyCallback.
! PyObject *PyICopyHook::CopyCallback(PyObject *self, PyObject *args)
{
! ICopyHook *pICH = GetI(self);
if ( pICH == NULL )
return NULL;
--- 17,33 ----
}
! PyICopyHookA::~PyICopyHookA()
{
}
! /* static */ ICopyHookA *PyICopyHookA::GetI(PyObject *self)
{
! return (ICopyHookA *)PyIUnknown::GetI(self);
}
! // @pymethod |PyICopyHookA|CopyCallback|Description of CopyCallback.
! PyObject *PyICopyHookA::CopyCallback(PyObject *self, PyObject *args)
{
! ICopyHookA *pICH = GetI(self);
if ( pICH == NULL )
return NULL;
***************
*** 44,50 ****
UINT wFunc;
UINT wFlags;
! LPTSTR srcFile;
DWORD srcAttribs;
! LPTSTR destFile;
DWORD destAttribs;
if ( !PyArg_ParseTuple(args, "OiiOlOl:CopyCallback", &obhwnd, &wFunc, &wFlags, &obsrcFile, &srcAttribs, &obdestFile, &destAttribs) )
--- 45,51 ----
UINT wFunc;
UINT wFlags;
! LPSTR srcFile;
DWORD srcAttribs;
! LPSTR destFile;
DWORD destAttribs;
if ( !PyArg_ParseTuple(args, "OiiOlOl:CopyCallback", &obhwnd, &wFunc, &wFlags, &obsrcFile, &srcAttribs, &obdestFile, &destAttribs) )
***************
*** 53,64 ****
return NULL;
BOOL bPythonIsHappy = TRUE;
! if (bPythonIsHappy && !PyWinObject_AsTCHAR(obsrcFile, &srcFile)) bPythonIsHappy = FALSE;
! if (bPythonIsHappy && !PyWinObject_AsTCHAR(obdestFile, &destFile)) bPythonIsHappy = FALSE;
if (!bPythonIsHappy) return NULL;
HRESULT hr;
PY_INTERFACE_PRECALL;
hr = pICH->CopyCallback( hwnd, wFunc, wFlags, srcFile, srcAttribs, destFile, destAttribs );
! PyWinObject_FreeTCHAR(srcFile);
! PyWinObject_FreeTCHAR(destFile);
PY_INTERFACE_POSTCALL;
--- 54,65 ----
return NULL;
BOOL bPythonIsHappy = TRUE;
! if (bPythonIsHappy && !PyWinObject_AsString(obsrcFile, &srcFile)) bPythonIsHappy = FALSE;
! if (bPythonIsHappy && !PyWinObject_AsString(obdestFile, &destFile)) bPythonIsHappy = FALSE;
if (!bPythonIsHappy) return NULL;
HRESULT hr;
PY_INTERFACE_PRECALL;
hr = pICH->CopyCallback( hwnd, wFunc, wFlags, srcFile, srcAttribs, destFile, destAttribs );
! PyWinObject_FreeString(srcFile);
! PyWinObject_FreeString(destFile);
PY_INTERFACE_POSTCALL;
***************
*** 71,113 ****
}
! // @object PyICopyHook|Description of the interface
! static struct PyMethodDef PyICopyHook_methods[] =
{
! { "CopyCallback", PyICopyHook::CopyCallback, 1 }, // @pymeth CopyCallback|Description of CopyCallback
{ NULL }
};
! PyComTypeObject PyICopyHook::type("PyICopyHook",
&PyIUnknown::type,
! sizeof(PyICopyHook),
! PyICopyHook_methods,
! GET_PYCOM_CTOR(PyICopyHook));
// ---------------------------------------------------
//
// Gateway Implementation
! STDMETHODIMP_(UINT) PyGCopyHook::CopyCallback(
/* [unique][in] */ HWND hwnd,
/* [unique][in] */ UINT wFunc,
/* [unique][in] */ UINT wFlags,
! /* [unique][in] */ LPCTSTR srcFile,
/* [unique][in] */ DWORD srcAttribs,
! /* [unique][in] */ LPCTSTR destFile,
/* [unique][in] */ DWORD destAttribs)
{
PY_GATEWAY_METHOD;
PyObject *obsrcFile;
PyObject *obdestFile;
! obsrcFile = PyWinObject_FromTCHAR((LPTSTR)srcFile);
! // Dest file can be NULL for FO_DELETE
! if (destFile!=NULL)
! obdestFile = PyWinObject_FromTCHAR((LPTSTR)destFile);
! else{
! obdestFile=Py_None;
! Py_INCREF(Py_None);
! }
PyObject *result;
! HRESULT hr=InvokeViaPolicy("CopyCallback", &result, "NiiOlOl", PyWinLong_FromHANDLE(hwnd), wFunc, wFlags, obsrcFile, srcAttribs, obdestFile, destAttribs);
! Py_XDECREF(obsrcFile);
! Py_XDECREF(obdestFile);
if (FAILED(hr)) return hr;
hr = PyInt_AsLong(result);
--- 72,206 ----
}
! // @object PyICopyHookA|Description of the interface
! static struct PyMethodDef PyICopyHookA_methods[] =
{
! { "CopyCallback", PyICopyHookA::CopyCallback, 1 }, // @pymeth CopyCallback|Description of CopyCallback
{ NULL }
};
! PyComTypeObject PyICopyHookA::type("PyICopyHookA",
&PyIUnknown::type,
! sizeof(PyICopyHookA),
! PyICopyHookA_methods,
! GET_PYCOM_CTOR(PyICopyHookA));
// ---------------------------------------------------
//
// Gateway Implementation
! STDMETHODIMP_(UINT) PyGCopyHookA::CopyCallback(
/* [unique][in] */ HWND hwnd,
/* [unique][in] */ UINT wFunc,
/* [unique][in] */ UINT wFlags,
! /* [unique][in] */ LPCSTR srcFile,
/* [unique][in] */ DWORD srcAttribs,
! /* [unique][in] */ LPCSTR destFile,
/* [unique][in] */ DWORD destAttribs)
{
PY_GATEWAY_METHOD;
+ PyObject *result;
+ HRESULT hr=InvokeViaPolicy("CopyCallback", &result, "Niizlzl", PyWinLong_FromHANDLE(hwnd), wFunc, wFlags, srcFile, srcAttribs, destFile, destAttribs);
+ if (FAILED(hr)) return hr;
+ hr = PyInt_AsLong(result);
+ if ((hr==-1) && PyErr_Occurred())
+ hr = MAKE_PYCOM_GATEWAY_FAILURE_CODE("CopyCallBack");
+ Py_DECREF(result);
+ return hr;
+ }
+
+ // ICopyHookW
+ PyICopyHookW::PyICopyHookW(IUnknown *pdisp):
+ PyIUnknown(pdisp)
+ {
+ ob_type = &type;
+ }
+
+ PyICopyHookW::~PyICopyHookW()
+ {
+ }
+
+ /* static */ ICopyHookW *PyICopyHookW::GetI(PyObject *self)
+ {
+ return (ICopyHookW *)PyIUnknown::GetI(self);
+ }
+
+ // @pymethod |PyICopyHookW|CopyCallback|Description of CopyCallback.
+ PyObject *PyICopyHookW::CopyCallback(PyObject *self, PyObject *args)
+ {
+ ICopyHookW *pICH = GetI(self);
+ if ( pICH == NULL )
+ return NULL;
+ // @pyparm HWND|hwnd||Description for hwnd
+ // @pyparm int|wFunc||Description for wFunc
+ // @pyparm int|wFlags||Description for wFlags
+ // @pyparm string/<o unicode>|srcFile||Description for srcFile
+ // @pyparm int|srcAttribs||Description for srcAttribs
+ // @pyparm string/<o unicode>|destFile||Description for destFile
+ // @pyparm int|destAttribs||Description for destAttribs
PyObject *obsrcFile;
PyObject *obdestFile;
! HWND hwnd;
! PyObject *obhwnd;
! UINT wFunc;
! UINT wFlags;
! LPWSTR srcFile;
! DWORD srcAttribs;
! LPWSTR destFile;
! DWORD destAttribs;
! if ( !PyArg_ParseTuple(args, "OiiOlOl:CopyCallback", &obhwnd, &wFunc, &wFlags, &obsrcFile, &srcAttribs, &obdestFile, &destAttribs) )
! return NULL;
! if (!PyWinObject_AsHANDLE(obhwnd, (HANDLE *)&hwnd))
! return NULL;
! BOOL bPythonIsHappy = TRUE;
! if (bPythonIsHappy && !PyWinObject_AsWCHAR(obsrcFile, &srcFile)) bPythonIsHappy = FALSE;
! if (bPythonIsHappy && !PyWinObject_AsWCHAR(obdestFile, &destFile)) bPythonIsHappy = FALSE;
! if (!bPythonIsHappy) return NULL;
! HRESULT hr;
! PY_INTERFACE_PRECALL;
! hr = pICH->CopyCallback( hwnd, wFunc, wFlags, srcFile, srcAttribs, destFile, destAttribs );
! PyWinObject_FreeWCHAR(srcFile);
! PyWinObject_FreeWCHAR(destFile);
!
! PY_INTERFACE_POSTCALL;
!
! if ( FAILED(hr) )
! return PyCom_BuildPyException(hr, pICH, IID_IShellCopyHook );
! Py_INCREF(Py_None);
! return Py_None;
!
! }
!
! // @object PyICopyHookW|Description of the interface
! static struct PyMethodDef PyICopyHookW_methods[] =
! {
! { "CopyCallback", PyICopyHookW::CopyCallback, 1 }, // @pymeth CopyCallback|Description of CopyCallback
! { NULL }
! };
!
! PyComTypeObject PyICopyHookW::type("PyICopyHookW",
! &PyIUnknown::type,
! sizeof(PyICopyHookW),
! PyICopyHookW_methods,
! GET_PYCOM_CTOR(PyICopyHookW));
! // ---------------------------------------------------
! //
! // Gateway Implementation
! STDMETHODIMP_(UINT) PyGCopyHookW::CopyCallback(
! /* [unique][in] */ HWND hwnd,
! /* [unique][in] */ UINT wFunc,
! /* [unique][in] */ UINT wFlags,
! /* [unique][in] */ LPCWSTR srcFile,
! /* [unique][in] */ DWORD srcAttribs,
! /* [unique][in] */ LPCWSTR destFile,
! /* [unique][in] */ DWORD destAttribs)
! {
! PY_GATEWAY_METHOD;
PyObject *result;
! HRESULT hr=InvokeViaPolicy("CopyCallback", &result, "NiiNlNl",
! PyWinLong_FromHANDLE(hwnd),
! wFunc,
! wFlags,
! PyWinObject_FromWCHAR(srcFile),
! srcAttribs,
! PyWinObject_FromWCHAR(destFile),
! destAttribs);
if (FAILED(hr)) return hr;
hr = PyInt_AsLong(result);
Index: PyICopyHook.h
===================================================================
RCS file: /cvsroot/pywin32/pywin32/com/win32comext/shell/src/PyICopyHook.h,v
retrieving revision 1.1
retrieving revision 1.2
diff -C2 -d -r1.1 -r1.2
*** PyICopyHook.h 7 Oct 2003 05:13:22 -0000 1.1
--- PyICopyHook.h 24 Nov 2008 06:10:08 -0000 1.2
***************
*** 5,13 ****
// Interface Declaration
! class PyICopyHook : public PyIUnknown
{
public:
! MAKE_PYCOM_CTOR(PyICopyHook);
! static ICopyHook *GetI(PyObject *self);
static PyComTypeObject type;
--- 5,13 ----
// Interface Declaration
! class PyICopyHookA : public PyIUnknown
{
public:
! MAKE_PYCOM_CTOR(PyICopyHookA);
! static ICopyHookA *GetI(PyObject *self);
static PyComTypeObject type;
***************
*** 16,31 ****
protected:
! PyICopyHook(IUnknown *pdisp);
! ~PyICopyHook();
};
// ---------------------------------------------------
//
// Gateway Declaration
! class PyGCopyHook : public PyGatewayBase, public ICopyHook
{
protected:
! PyGCopyHook(PyObject *instance) : PyGatewayBase(instance) { ; }
! PYGATEWAY_MAKE_SUPPORT2(PyGCopyHook, ICopyHook, IID_IShellCopyHook, PyGatewayBase)
// ICopyHook
--- 16,47 ----
protected:
! PyICopyHookA(IUnknown *pdisp);
! ~PyICopyHookA();
! };
!
! class PyICopyHookW : public PyIUnknown
! {
! public:
! MAKE_PYCOM_CTOR(PyICopyHookW);
! static ICopyHookW *GetI(PyObject *self);
! static PyComTypeObject type;
!
! // The Python methods
! static PyObject *CopyCallback(PyObject *self, PyObject *args);
!
! protected:
! PyICopyHookW(IUnknown *pdisp);
! ~PyICopyHookW();
};
+
// ---------------------------------------------------
//
// Gateway Declaration
! class PyGCopyHookA : public PyGatewayBase, public ICopyHookA
{
protected:
! PyGCopyHookA(PyObject *instance) : PyGatewayBase(instance) { ; }
! PYGATEWAY_MAKE_SUPPORT2(PyGCopyHookA, ICopyHookA, IID_IShellCopyHookA, PyGatewayBase)
// ICopyHook
***************
*** 34,41 ****
UINT wFunc,
UINT wFlags,
! LPCTSTR srcFile,
DWORD srcAttribs,
! LPCTSTR destFile,
DWORD destAttribs);
};
--- 50,73 ----
UINT wFunc,
UINT wFlags,
! LPCSTR srcFile,
DWORD srcAttribs,
! LPCSTR destFile,
DWORD destAttribs);
+ };
+
+ class PyGCopyHookW : public PyGatewayBase, public ICopyHookW
+ {
+ protected:
+ PyGCopyHookW(PyObject *instance) : PyGatewayBase(instance) { ; }
+ PYGATEWAY_MAKE_SUPPORT2(PyGCopyHookW, ICopyHookW, IID_IShellCopyHookW, PyGatewayBase)
+ // ICopyHook
+ STDMETHOD_(UINT, CopyCallback)(
+ HWND hwnd,
+ UINT wFunc,
+ UINT wFlags,
+ LPCWSTR srcFile,
+ DWORD srcAttribs,
+ LPCWSTR destFile,
+ DWORD destAttribs);
};
Index: shell.cpp
===================================================================
RCS file: /cvsroot/pywin32/pywin32/com/win32comext/shell/src/shell.cpp,v
retrieving revision 1.69
retrieving revision 1.70
diff -C2 -d -r1.69 -r1.70
*** shell.cpp 2 Nov 2008 12:42:58 -0000 1.69
--- shell.cpp 24 Nov 2008 06:10:08 -0000 1.70
***************
*** 3272,3278 ****
PYCOM_INTERFACE_CLIENT_ONLY(ExplorerPaneVisibility),
PYCOM_INTERFACE_CLIENT_ONLY(NameSpaceTreeControl),
! // IID_ICopyHook doesn't exist - hack it up
! { &IID_IShellCopyHook, "IShellCopyHook", "IID_IShellCopyHook", &PyICopyHook::type, GET_PYGATEWAY_CTOR(PyGCopyHook) },
! { &IID_IShellCopyHook, "ICopyHook", "IID_ICopyHook", NULL, NULL },
PYCOM_INTERFACE_FULL(ShellItem),
PYCOM_INTERFACE_FULL(ShellItemArray),
--- 3272,3283 ----
PYCOM_INTERFACE_CLIENT_ONLY(ExplorerPaneVisibility),
PYCOM_INTERFACE_CLIENT_ONLY(NameSpaceTreeControl),
! PYCOM_INTERFACE_FULL(ExplorerCommand),
! PYCOM_INTERFACE_FULL(CopyHookA),
! PYCOM_INTERFACE_FULL(CopyHookW),
! // For b/w compat, Add IID_ICopyHook as IID_CopyHookA
! { &IID_ICopyHookA, "ICopyHook", "IID_ICopyHook", NULL, NULL },
! PYCOM_INTERFACE_IID_ONLY(ShellCopyHookA),
! PYCOM_INTERFACE_IID_ONLY(ShellCopyHookW),
! PYCOM_INTERFACE_IID_ONLY(ShellCopyHook),
PYCOM_INTERFACE_FULL(ShellItem),
PYCOM_INTERFACE_FULL(ShellItemArray),
|