Update of /cvsroot/pywin32/pywin32/com/win32comext/shell/src
In directory sc8-pr-cvs1:/tmp/cvs-serv1104/src
Modified Files:
shell.cpp
Added Files:
PyIColumnProvider.cpp PyIColumnProvider.h
Log Message:
IColumnProvider interface.
--- NEW FILE: PyIColumnProvider.cpp ---
// This file implements the IColumnProvider Interface and Gateway for Python.
// Generated by makegw.py
#include "shell_pch.h"
#include "PyIColumnProvider.h"
extern BOOL PyObject_AsSHCOLUMNINIT(PyObject *, SHCOLUMNINIT *);
extern PyObject *PyObject_FromSHCOLUMNINIT(LPCSHCOLUMNINIT);
extern BOOL PyObject_AsSHCOLUMNINFO(PyObject *, SHCOLUMNINFO *);
extern PyObject *PyObject_FromSHCOLUMNINFO(LPCSHCOLUMNINFO);
extern BOOL PyObject_AsSHCOLUMNID(PyObject *, SHCOLUMNID *);
extern PyObject *PyObject_FromSHCOLUMNID(LPCSHCOLUMNID);
extern BOOL PyObject_AsSHCOLUMNDATA(PyObject *, SHCOLUMNDATA *);
extern PyObject *PyObject_FromSHCOLUMNDATA(LPCSHCOLUMNDATA);
// @doc - This file contains autoduck documentation
// ---------------------------------------------------
//
// Interface Implementation
PyIColumnProvider::PyIColumnProvider(IUnknown *pdisp):
PyIUnknown(pdisp)
{
ob_type = &type;
}
PyIColumnProvider::~PyIColumnProvider()
{
}
/* static */ IColumnProvider *PyIColumnProvider::GetI(PyObject *self)
{
return (IColumnProvider *)PyIUnknown::GetI(self);
}
// @pymethod |PyIColumnProvider|Initialize|Description of Initialize.
PyObject *PyIColumnProvider::Initialize(PyObject *self, PyObject *args)
{
IColumnProvider *pICP = GetI(self);
if ( pICP == NULL )
return NULL;
SHCOLUMNINIT psci;
PyObject *obpsci;
// @pyparm <o PyCSHCOLUMNINIT>|psci||Description for psci
if ( !PyArg_ParseTuple(args, "O:Initialize", &obpsci) )
return NULL;
BOOL bPythonIsHappy = TRUE;
if (bPythonIsHappy && !PyObject_AsSHCOLUMNINIT( obpsci, &psci )) bPythonIsHappy = FALSE;
if (!bPythonIsHappy) return NULL;
HRESULT hr;
PY_INTERFACE_PRECALL;
hr = pICP->Initialize( &psci );
PY_INTERFACE_POSTCALL;
if ( FAILED(hr) )
return PyCom_BuildPyException(hr, pICP, IID_IColumnProvider );
Py_INCREF(Py_None);
return Py_None;
}
// @pymethod |PyIColumnProvider|GetColumnInfo|Description of GetColumnInfo.
PyObject *PyIColumnProvider::GetColumnInfo(PyObject *self, PyObject *args)
{
IColumnProvider *pICP = GetI(self);
if ( pICP == NULL )
return NULL;
// @pyparm int|dwIndex||Description for dwIndex
DWORD dwIndex;
if ( !PyArg_ParseTuple(args, "l:GetColumnInfo", &dwIndex) )
return NULL;
HRESULT hr;
SHCOLUMNINFO psci;
PY_INTERFACE_PRECALL;
hr = pICP->GetColumnInfo( dwIndex, &psci );
PY_INTERFACE_POSTCALL;
if ( FAILED(hr) )
return PyCom_BuildPyException(hr, pICP, IID_IColumnProvider );
return PyObject_FromSHCOLUMNINFO(&psci);
}
// @pymethod |PyIColumnProvider|GetItemData|Description of GetItemData.
PyObject *PyIColumnProvider::GetItemData(PyObject *self, PyObject *args)
{
IColumnProvider *pICP = GetI(self);
if ( pICP == NULL )
return NULL;
SHCOLUMNID pscid;
PyObject *obpscid;
// @pyparm <o PySHCOLUMNID>|pscid||Description for pscid
SHCOLUMNDATA pscd;
PyObject *obpscd;
// @pyparm <o PySHCOLUMNDATA>|pscd||Description for pscd
VARIANT varData;
VariantInit(&varData);
if ( !PyArg_ParseTuple(args, "OO:GetItemData", &obpscid, &obpscd) )
return NULL;
BOOL bPythonIsHappy = TRUE;
if (bPythonIsHappy && !PyObject_AsSHCOLUMNID( obpscid, &pscid )) bPythonIsHappy = FALSE;
if (bPythonIsHappy && !PyObject_AsSHCOLUMNDATA( obpscd, &pscd )) bPythonIsHappy = FALSE;
if (!bPythonIsHappy) return NULL;
HRESULT hr;
PY_INTERFACE_PRECALL;
hr = pICP->GetItemData( &pscid, &pscd, &varData );
PY_INTERFACE_POSTCALL;
if ( FAILED(hr) )
return PyCom_BuildPyException(hr, pICP, IID_IColumnProvider );
PyObject *obRet = PyCom_PyObjectFromVariant(&varData);
VariantClear(&varData);
return obRet;
}
// @object PyIColumnProvider|Description of the interface
static struct PyMethodDef PyIColumnProvider_methods[] =
{
{ "Initialize", PyIColumnProvider::Initialize, 1 }, // @pymeth Initialize|Description of Initialize
{ "GetColumnInfo", PyIColumnProvider::GetColumnInfo, 1 }, // @pymeth GetColumnInfo|Description of GetColumnInfo
{ "GetItemData", PyIColumnProvider::GetItemData, 1 }, // @pymeth GetItemData|Description of GetItemData
{ NULL }
};
PyComTypeObject PyIColumnProvider::type("PyIColumnProvider",
&PyIUnknown::type,
sizeof(PyIColumnProvider),
PyIColumnProvider_methods,
GET_PYCOM_CTOR(PyIColumnProvider));
// ---------------------------------------------------
//
// Gateway Implementation
STDMETHODIMP PyGColumnProvider::Initialize(
/* [unique][in] */ LPCSHCOLUMNINIT psci)
{
PY_GATEWAY_METHOD;
PyObject *obpsci = PyObject_FromSHCOLUMNINIT(psci);
if (obpsci==NULL) return PyCom_HandlePythonFailureToCOM();
HRESULT hr=InvokeViaPolicy("Initialize", NULL, "(O)", obpsci);
Py_DECREF(obpsci);
return hr;
}
STDMETHODIMP PyGColumnProvider::GetColumnInfo(
/* [unique][in] */ DWORD dwIndex,
/* [out] */ LPSHCOLUMNINFO psci)
{
PY_GATEWAY_METHOD;
PyObject *result;
HRESULT hr=InvokeViaPolicy("GetColumnInfo", &result, "l", dwIndex);
if (FAILED(hr)) return hr;
if (result==Py_None)
hr = S_FALSE;
else {
PyObject_AsSHCOLUMNINFO(result, psci);
hr = PyCom_SetCOMErrorFromPyException(GetIID());
}
Py_DECREF(result);
return hr;
}
STDMETHODIMP PyGColumnProvider::GetItemData(
/* [unique][in] */ LPCSHCOLUMNID pscid,
/* [unique][in] */ LPCSHCOLUMNDATA pscd,
/* [unique][out] */ VARIANT *pvarData)
{
PY_GATEWAY_METHOD;
PyObject *obpscid = PyObject_FromSHCOLUMNID(pscid);
if (obpscid==NULL) return PyCom_HandlePythonFailureToCOM();
PyObject *obpscd = PyObject_FromSHCOLUMNDATA(pscd);
if (obpscd==NULL) return PyCom_HandlePythonFailureToCOM();
PyObject *result;
HRESULT hr=InvokeViaPolicy("GetItemData", &result, "OO", obpscid, obpscd);
Py_DECREF(obpscid);
Py_DECREF(obpscd);
if (FAILED(hr)) return hr;
// Process the Python results, and convert back to the real params
if (result==Py_None)
hr = S_FALSE;
else {
PyCom_VariantFromPyObject(result, pvarData);
hr = PyCom_SetCOMErrorFromPyException(GetIID());
}
Py_DECREF(result);
return hr;
}
--- NEW FILE: PyIColumnProvider.h ---
// This file declares the IColumnProvider Interface and Gateway for Python.
// Generated by makegw.py
// ---------------------------------------------------
//
// Interface Declaration
class PyIColumnProvider : public PyIUnknown
{
public:
MAKE_PYCOM_CTOR(PyIColumnProvider);
static IColumnProvider *GetI(PyObject *self);
static PyComTypeObject type;
// The Python methods
static PyObject *Initialize(PyObject *self, PyObject *args);
static PyObject *GetColumnInfo(PyObject *self, PyObject *args);
static PyObject *GetItemData(PyObject *self, PyObject *args);
protected:
PyIColumnProvider(IUnknown *pdisp);
~PyIColumnProvider();
};
// ---------------------------------------------------
//
// Gateway Declaration
class PyGColumnProvider : public PyGatewayBase, public IColumnProvider
{
protected:
PyGColumnProvider(PyObject *instance) : PyGatewayBase(instance) { ; }
PYGATEWAY_MAKE_SUPPORT2(PyGColumnProvider, IColumnProvider, IID_IColumnProvider, PyGatewayBase)
// IColumnProvider
STDMETHOD(Initialize)(
LPCSHCOLUMNINIT psci);
STDMETHOD(GetColumnInfo)(
DWORD dwIndex,
LPSHCOLUMNINFO psci);
STDMETHOD(GetItemData)(
LPCSHCOLUMNID pscid,
LPCSHCOLUMNDATA pscd,
VARIANT *pvarData);
};
Index: shell.cpp
===================================================================
RCS file: /cvsroot/pywin32/pywin32/com/win32comext/shell/src/shell.cpp,v
retrieving revision 1.11
retrieving revision 1.12
diff -C2 -d -r1.11 -r1.12
*** shell.cpp 9 Oct 2003 12:48:27 -0000 1.11
--- shell.cpp 6 Nov 2003 06:15:03 -0000 1.12
***************
*** 27,30 ****
--- 27,31 ----
#include "PyIPersist.h"
#include "PyIPersistFolder.h"
+ #include "PyIColumnProvider.h"
#include "PythonCOMRegister.h" // For simpler registration of IIDs etc.
***************
*** 287,290 ****
--- 288,391 ----
}
+ static BOOL _CopyToWCHAR(PyObject *ob, WCHAR *buf, unsigned buf_size)
+ {
+ WCHAR *sz;
+ if (!PyWinObject_AsWCHAR(ob, &sz, FALSE))
+ return FALSE;
+ wcsncpy(buf, sz, buf_size);
+ buf[buf_size-1] = L'\0';
+ PyWinObject_FreeWCHAR(sz);
+ return TRUE;
+ }
+ #define COPY_TO_WCHAR(ob, buf) _CopyToWCHAR((ob), (buf), sizeof((buf))/sizeof((buf)[0]))
+
+ BOOL PyObject_AsSHCOLUMNID(PyObject *ob, SHCOLUMNID *p)
+ {
+ PyObject *obGUID;
+ if (!PyArg_ParseTuple(ob, "Oi:SHCOLUMNID tuple",
+ &obGUID, &p->pid))
+ return FALSE;
+ return PyWinObject_AsIID(obGUID, &p->fmtid);
+ }
+
+ PyObject *PyObject_FromSHCOLUMNID(LPCSHCOLUMNID p)
+ {
+ PyObject *obIID = PyWinObject_FromIID(p->fmtid);
+ if (!obIID)
+ return NULL;
+ return Py_BuildValue("Ni", obIID, p->pid);
+ }
+
+ BOOL PyObject_AsSHCOLUMNINIT(PyObject *ob, SHCOLUMNINIT *p)
+ {
+ PyObject *obName;
+ if (!PyArg_ParseTuple(ob, "iiO:SHCOLUMNINIT tuple",
+ &p->dwFlags, &p->dwReserved, &obName))
+ return FALSE;
+ return COPY_TO_WCHAR(ob, p->wszFolder);
+ }
+
+ PyObject *PyObject_FromSHCOLUMNINIT(LPCSHCOLUMNINIT p)
+ {
+ PyObject *obName = PyWinObject_FromWCHAR(p->wszFolder);
+ if (!obName)
+ return NULL;
+ return Py_BuildValue("iiN", p->dwFlags, p->dwReserved, obName);
+ }
+
+ BOOL PyObject_AsSHCOLUMNINFO(PyObject *ob, SHCOLUMNINFO *p)
+ {
+ PyObject *obID, *obTitle, *obDescription;
+ if (!PyArg_ParseTuple(ob, "OiiiiOO:SHCOLUMNINFO tuple",
+ &obID, &p->vt, &p->fmt, &p->cChars, &p->csFlags,
+ &obTitle, &obDescription))
+ return FALSE;
+ if (!PyObject_AsSHCOLUMNID(obID, &p->scid))
+ return FALSE;
+ if (!COPY_TO_WCHAR(obTitle, p->wszTitle))
+ return FALSE;
+ if (!COPY_TO_WCHAR(obDescription, p->wszDescription))
+ return FALSE;
+ return TRUE;
+ }
+ PyObject *PyObject_FromSHCOLUMNINFO(LPCSHCOLUMNINFO p)
+ {
+ PyObject *rc = NULL, *obID = NULL;
+ PyObject *obDescription = NULL, *obTitle = NULL;
+ obID = PyObject_FromSHCOLUMNID(&p->scid);
+ if (!obID) goto done;
+ obTitle = PyWinObject_FromWCHAR(p->wszTitle);
+ if (!obTitle) goto done;
+ obDescription = PyWinObject_FromWCHAR(p->wszDescription);
+ if (!obDescription) goto done;
+ rc = Py_BuildValue("OiiiiOO", obID, p->vt, p->fmt, p->cChars,
+ p->csFlags, obTitle, obDescription);
+ done:
+ Py_XDECREF(obID);
+ Py_XDECREF(obDescription);
+ Py_XDECREF(obTitle);
+ return rc;
+ }
+
+ BOOL PyObject_AsSHCOLUMNDATA(PyObject *, SHCOLUMNDATA *)
+ {
+ PyErr_SetString(PyExc_NotImplementedError,
+ "Not sure how to handle SHCOLUMNDATA pwszExt, and we don't need this anyway :)");
+ return FALSE;
+ }
+
+ PyObject *PyObject_FromSHCOLUMNDATA(LPCSHCOLUMNDATA p)
+ {
+ PyObject *obFile = PyWinObject_FromWCHAR(p->wszFile);
+ if (!obFile) return NULL;
+ PyObject *obExt = PyWinObject_FromWCHAR(p->pwszExt);
+ if (!obExt) {
+ Py_DECREF(obFile);
+ return NULL;
+ }
+ return Py_BuildValue("iiiNN", p->dwFlags, p->dwFileAttributes, p->dwReserved,
+ obExt, obFile);
+ }
+
//////////////////////////////////////////////////
//
***************
*** 753,756 ****
--- 854,858 ----
PYCOM_INTERFACE_FULL(BrowserFrameOptions),
PYCOM_INTERFACE_FULL(PersistFolder),
+ PYCOM_INTERFACE_FULL(ColumnProvider),
// IID_ICopyHook doesn't exist - hack it up
{ &IID_IShellCopyHook, "IShellCopyHook", "IID_IShellCopyHook", &PyICopyHook::type, GET_PYGATEWAY_CTOR(PyGCopyHook) },
***************
*** 812,814 ****
--- 914,960 ----
ADD_CONSTANT(HOTKEYF_SHIFT);
ADD_IID(CLSID_ShellLink);
+ ADD_IID(CLSID_ShellDesktop);
+ ADD_IID(CLSID_NetworkPlaces);
+ ADD_IID(CLSID_NetworkDomain);
+ ADD_IID(CLSID_NetworkServer);
+ ADD_IID(CLSID_NetworkShare);
+ ADD_IID(CLSID_MyComputer);
+ ADD_IID(CLSID_Internet);
+ ADD_IID(CLSID_ShellFSFolder);
+ ADD_IID(CLSID_RecycleBin);
+ ADD_IID(CLSID_ControlPanel);
+ ADD_IID(CLSID_Printers);
+ ADD_IID(CLSID_MyDocuments);
+
+ ADD_IID(FMTID_Intshcut);
+ ADD_IID(FMTID_InternetSite);
+
+ ADD_IID(CGID_Explorer);
+ ADD_IID(CGID_ShellDocView);
+
+ #if (_WIN32_IE >= 0x0400)
+ ADD_IID(CGID_ShellServiceObject);
+ ADD_IID(CGID_ExplorerBarDoc);
+ #else
+ # pragma message("Please update your SDK headers - IE5 features missing!")
+ #endif
+
+ #if (_WIN32_IE >= 0x0500)
+
+ ADD_IID(FMTID_ShellDetails);
+ ADD_IID(FMTID_Storage);
+ ADD_IID(FMTID_ImageProperties);
+ ADD_IID(FMTID_Displaced);
+ ADD_IID(FMTID_Briefcase);
+ ADD_IID(FMTID_Misc);
+ ADD_IID(FMTID_WebView);
+ ADD_IID(FMTID_AudioSummaryInformation);
+ ADD_IID(FMTID_Volume);
+ ADD_IID(FMTID_Query);
+ ADD_IID(FMTID_SummaryInformation);
+ ADD_IID(FMTID_MediaFileSummaryInformation);
+ ADD_IID(FMTID_ImageSummaryInformation);
+ #else
+ # pragma message("Please update your SDK headers - IE5 features missing!")
+ #endif
}
|