Update of /cvsroot/pywin32/pywin32/com/win32comext/axcontrol/src
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv13113/com/win32comext/axcontrol/src
Modified Files:
AXControl.cpp
Added Files:
PyIObjectWithSite.cpp PyIObjectWithSite.h
PyIOleCommandTarget.cpp PyIOleCommandTarget.h
Log Message:
* Add IObjectWithSite and IOleCommandTarget to axcontrol
* Add IInputObject to shell
* Remove axcontrol VC project file
--- NEW FILE: PyIOleCommandTarget.cpp ---
// This file implements the IOleCommandTarget Interface and Gateway for Python.
// Generated by makegw.py
#include "axcontrol_pch.h"
#include "PyIOleCommandTarget.h"
// @doc - This file contains autoduck documentation
// ---------------------------------------------------
//
// Interface Implementation
PyIOleCommandTarget::PyIOleCommandTarget(IUnknown *pdisp):
PyIUnknown(pdisp)
{
ob_type = &type;
}
PyIOleCommandTarget::~PyIOleCommandTarget()
{
}
/* static */ IOleCommandTarget *PyIOleCommandTarget::GetI(PyObject *self)
{
return (IOleCommandTarget *)PyIUnknown::GetI(self);
}
// @pymethod |PyIOleCommandTarget|QueryStatus|Description of QueryStatus.
PyObject *PyIOleCommandTarget::QueryStatus(PyObject *self, PyObject *args)
{
PyObject *ret = NULL;
PyObject *obGUID, *obCmds;
IOleCommandTarget *pIOCT = GetI(self);
OLECMD *pCmds = NULL;
OLECMDTEXT *retText = NULL;
if ( pIOCT == NULL )
return NULL;
if (!PyArg_ParseTuple(args, "OO", &obGUID, &obCmds))
return NULL;
GUID guid;
GUID *pguid;
if (obGUID == Py_None) {
pguid = NULL;
} else {
if (!PyWinObject_AsIID(obGUID, &guid))
return FALSE;
pguid = &guid;
}
if (!PySequence_Check(obCmds))
return PyErr_Format(PyExc_TypeError, "cmds must be a sequence");
int ncmds = PySequence_Length(obCmds);
int i;
HRESULT hr;
// From here, exit via 'goto done'
const unsigned cbCmdText = 1024;
retText = (OLECMDTEXT *)malloc(cbCmdText);
if (!retText) {
PyErr_NoMemory();
goto done;
}
retText->cwBuf = (cbCmdText - sizeof(OLECMDTEXT)) / sizeof(WCHAR);
pCmds = (OLECMD *)malloc(ncmds * sizeof(OLECMD));
if (!pCmds) {
PyErr_NoMemory();
goto done;
}
for (i=0;i<ncmds;i++) {
OLECMD *pThis = pCmds + i;
PyObject *sub = PySequence_GetItem(obCmds, i);
if (!sub)
goto done;
if (!PyArg_ParseTuple(sub, "ii", &pThis->cmdID, &pThis->cmdf)) {
PyErr_Format(PyExc_TypeError, "Element %d of command buffer was not a tuple of 2 integers", i);
Py_DECREF(sub);
goto done;
}
Py_DECREF(sub);
}
{ // scope to prevent goto warning.
PY_INTERFACE_PRECALL;
hr = pIOCT->QueryStatus( pguid, ncmds, pCmds, retText );
PY_INTERFACE_POSTCALL;
}
if ( FAILED(hr) ) {
PyCom_BuildPyException(hr, pIOCT, IID_IOleCommandTarget );
goto done;
}
ret = Py_BuildValue("iN", retText->cmdtextf,
PyWinObject_FromWCHAR(retText->rgwz));
done:
if (retText)
free(retText);
if (pCmds)
free(pCmds);
return ret;
}
// @pymethod |PyIOleCommandTarget|Exec|Description of Exec.
PyObject *PyIOleCommandTarget::Exec(PyObject *self, PyObject *args)
{
PyObject *ret;
int cmdid, cmdopt;
PyObject *obVar;
PyObject *obGUID;
VARIANT varIn, varOut;
IOleCommandTarget *pIOCT = GetI(self);
if ( pIOCT == NULL )
return NULL;
if (!PyArg_ParseTuple(args, "OiiO", &obGUID, &cmdid, &cmdopt, &obVar))
return NULL;
GUID guid;
GUID *pguid;
if (obGUID == Py_None) {
pguid = NULL;
} else {
if (!PyWinObject_AsIID(obGUID, &guid))
return FALSE;
pguid = &guid;
}
VariantInit(&varIn);
VariantInit(&varOut);
if (!PyCom_VariantFromPyObject(obVar, &varIn))
return NULL;
HRESULT hr;
PY_INTERFACE_PRECALL;
hr = pIOCT->Exec( pguid, cmdid, cmdopt, &varIn, &varOut);
PY_INTERFACE_POSTCALL;
VariantClear(&varIn);
if ( FAILED(hr) ) {
PyCom_BuildPyException(hr, pIOCT, IID_IOleCommandTarget );
ret = NULL;
} else {
ret = PyCom_PyObjectFromVariant(&varOut);
}
VariantClear(&varOut);
return ret;
}
// @object PyIOleCommandTarget|Description of the interface
static struct PyMethodDef PyIOleCommandTarget_methods[] =
{
{ "QueryStatus", PyIOleCommandTarget::QueryStatus, 1 }, // @pymeth QueryStatus|Description of QueryStatus
{ "Exec", PyIOleCommandTarget::Exec, 1 }, // @pymeth Exec|Description of Exec
{ NULL }
};
PyComTypeObject PyIOleCommandTarget::type("PyIOleCommandTarget",
&PyIUnknown::type,
sizeof(PyIOleCommandTarget),
PyIOleCommandTarget_methods,
GET_PYCOM_CTOR(PyIOleCommandTarget));
// ---------------------------------------------------
//
// Gateway Implementation
STDMETHODIMP PyGOleCommandTarget::QueryStatus(
/* [unique][in] */ const GUID * pguidCmdGroup,
/* [in] */ ULONG cCmds,
/* [out][in][size_is] */ OLECMD prgCmds[],
/* [unique][out][in] */ OLECMDTEXT * pCmdText)
{
PY_GATEWAY_METHOD;
PyObject *obGUID;
if (pguidCmdGroup == NULL) {
obGUID = Py_None;
Py_INCREF(obGUID);
} else {
obGUID = PyWinObject_FromIID(*pguidCmdGroup);
}
PyObject *cmds = PyList_New(cCmds);
if (!cmds) {
Py_DECREF(obGUID);
MAKE_PYCOM_GATEWAY_FAILURE_CODE("QueryStatus");
}
for (ULONG i=0;i<cCmds;i++) {
PyList_SET_ITEM(cmds, i,
Py_BuildValue("ll", prgCmds[i].cmdID, prgCmds[i].cmdf));
}
PyObject *obTest = Py_None; // tbd
PyObject *result;
HRESULT hr=InvokeViaPolicy("QueryStatus", &result, "NNO", obGUID, cmds, obTest);
if (FAILED(hr)) return hr;
Py_DECREF(result);
return hr;
}
STDMETHODIMP PyGOleCommandTarget::Exec(
/* [unique][in] */ const GUID * pguidCmdGroup,
/* [in] */ DWORD nCmdID,
/* [in] */ DWORD nCmdexecopt,
/* [unique][in] */ VARIANT * pvaIn,
/* [unique][out][in] */ VARIANT * pvaOut)
{
PY_GATEWAY_METHOD;
PyObject *obGUID;
if (pguidCmdGroup == NULL) {
obGUID = Py_None;
Py_INCREF(obGUID);
} else {
obGUID = PyWinObject_FromIID(*pguidCmdGroup);
}
PyObject *obpvaIn = PyCom_PyObjectFromVariant(pvaIn);
PyObject *result;
HRESULT hr=InvokeViaPolicy("Exec", &result, "NllN", obGUID, nCmdID, nCmdexecopt, obpvaIn);
if (FAILED(hr)) return hr;
hr = PyCom_VariantFromPyObject(result, pvaOut);
Py_DECREF(result);
return hr;
}
--- NEW FILE: PyIOleCommandTarget.h ---
// This file declares the IOleCommandTarget Interface and Gateway for Python.
// Generated by makegw.py
// ---------------------------------------------------
//
// Interface Declaration
#include "docobj.h"
class PyIOleCommandTarget : public PyIUnknown
{
public:
MAKE_PYCOM_CTOR(PyIOleCommandTarget);
static IOleCommandTarget *GetI(PyObject *self);
static PyComTypeObject type;
// The Python methods
static PyObject *QueryStatus(PyObject *self, PyObject *args);
static PyObject *Exec(PyObject *self, PyObject *args);
protected:
PyIOleCommandTarget(IUnknown *pdisp);
~PyIOleCommandTarget();
};
// ---------------------------------------------------
//
// Gateway Declaration
class PyGOleCommandTarget : public PyGatewayBase, public IOleCommandTarget
{
protected:
PyGOleCommandTarget(PyObject *instance) : PyGatewayBase(instance) { ; }
PYGATEWAY_MAKE_SUPPORT2(PyGOleCommandTarget, IOleCommandTarget, IID_IOleCommandTarget, PyGatewayBase)
// IOleCommandTarget
STDMETHOD(QueryStatus)(
const GUID * pguidCmdGroup,
ULONG cCmds,
OLECMD prgCmds[],
OLECMDTEXT * pCmdText);
STDMETHOD(Exec)(
const GUID * pguidCmdGroup,
DWORD nCmdID,
DWORD nCmdexecopt,
VARIANT * pvaIn,
VARIANT * pvaOut);
};
--- NEW FILE: PyIObjectWithSite.cpp ---
// This file implements the IObjectWithSite Interface and Gateway for Python.
// Generated by makegw.py
#include "axcontrol_pch.h"
#include "PyIObjectWithSite.h"
// @doc - This file contains autoduck documentation
// ---------------------------------------------------
//
// Interface Implementation
PyIObjectWithSite::PyIObjectWithSite(IUnknown *pdisp):
PyIUnknown(pdisp)
{
ob_type = &type;
}
PyIObjectWithSite::~PyIObjectWithSite()
{
}
/* static */ IObjectWithSite *PyIObjectWithSite::GetI(PyObject *self)
{
return (IObjectWithSite *)PyIUnknown::GetI(self);
}
// @pymethod |PyIObjectWithSite|SetSite|Description of SetSite.
PyObject *PyIObjectWithSite::SetSite(PyObject *self, PyObject *args)
{
IObjectWithSite *pIOWS = GetI(self);
if ( pIOWS == NULL )
return NULL;
// @pyparm <o PyIUnknown *>|pUnkSite||Description for pUnkSite
PyObject *obpUnkSite;
IUnknown * pUnkSite;
if ( !PyArg_ParseTuple(args, "O:SetSite", &obpUnkSite) )
return NULL;
BOOL bPythonIsHappy = TRUE;
if (!PyCom_InterfaceFromPyInstanceOrObject(obpUnkSite, IID_IUnknown, (void **)&pUnkSite, TRUE /* bNoneOK */))
return NULL;
HRESULT hr;
PY_INTERFACE_PRECALL;
hr = pIOWS->SetSite( pUnkSite );
if (pUnkSite) pUnkSite->Release();
PY_INTERFACE_POSTCALL;
if ( FAILED(hr) )
return PyCom_BuildPyException(hr, pIOWS, IID_IObjectWithSite );
Py_INCREF(Py_None);
return Py_None;
}
// @pymethod |PyIObjectWithSite|GetSite|Description of GetSite.
PyObject *PyIObjectWithSite::GetSite(PyObject *self, PyObject *args)
{
IObjectWithSite *pIOWS = GetI(self);
if ( pIOWS == NULL )
return NULL;
// @pyparm <o PyIID>|riid||Description for riid
PyObject *obriid;
IID riid;
void *ppvSite;
if ( !PyArg_ParseTuple(args, "O:GetSite", &obriid) )
return NULL;
BOOL bPythonIsHappy = TRUE;
if (!PyWinObject_AsIID(obriid, &riid)) bPythonIsHappy = FALSE;
if (!bPythonIsHappy) return NULL;
HRESULT hr;
PY_INTERFACE_PRECALL;
hr = pIOWS->GetSite( riid, &ppvSite );
PY_INTERFACE_POSTCALL;
if ( FAILED(hr) )
return PyCom_BuildPyException(hr, pIOWS, IID_IObjectWithSite );
PyObject *obppvSite;
obppvSite = PyCom_PyObjectFromIUnknown((IUnknown *)ppvSite, riid, FALSE);
PyObject *pyretval = Py_BuildValue("O", obppvSite);
Py_XDECREF(obppvSite);
return pyretval;
}
// @object PyIObjectWithSite|Description of the interface
static struct PyMethodDef PyIObjectWithSite_methods[] =
{
{ "SetSite", PyIObjectWithSite::SetSite, 1 }, // @pymeth SetSite|Description of SetSite
{ "GetSite", PyIObjectWithSite::GetSite, 1 }, // @pymeth GetSite|Description of GetSite
{ NULL }
};
PyComTypeObject PyIObjectWithSite::type("PyIObjectWithSite",
&PyIUnknown::type,
sizeof(PyIObjectWithSite),
PyIObjectWithSite_methods,
GET_PYCOM_CTOR(PyIObjectWithSite));
// ---------------------------------------------------
//
// Gateway Implementation
STDMETHODIMP PyGObjectWithSite::SetSite(
/* [in] */ IUnknown * pUnkSite)
{
PY_GATEWAY_METHOD;
PyObject *obpUnkSite;
obpUnkSite = PyCom_PyObjectFromIUnknown(pUnkSite, IID_IUnknown, TRUE);
HRESULT hr=InvokeViaPolicy("SetSite", NULL, "O", obpUnkSite);
Py_XDECREF(obpUnkSite);
return hr;
}
STDMETHODIMP PyGObjectWithSite::GetSite(
/* [in] */ REFIID riid,
/* [iid_is][out] */ void ** ppvSite)
{
PY_GATEWAY_METHOD;
PyObject *obriid;
obriid = PyWinObject_FromIID(riid);
PyObject *result;
HRESULT hr=InvokeViaPolicy("GetSite", &result, "O", obriid);
Py_XDECREF(obriid);
if (FAILED(hr)) return hr;
// Process the Python results, and convert back to the real params
PyObject *obppvSite;
if (!PyArg_Parse(result, "O" , &obppvSite))
return MAKE_PYCOM_GATEWAY_FAILURE_CODE("GetSite");
BOOL bPythonIsHappy = TRUE;
if (bPythonIsHappy && !PyCom_InterfaceFromPyInstanceOrObject(obppvSite, riid, ppvSite, TRUE /* bNoneOK */))
bPythonIsHappy = FALSE;
if (!bPythonIsHappy) hr = MAKE_PYCOM_GATEWAY_FAILURE_CODE("GetSite");
Py_DECREF(result);
return hr;
}
Index: AXControl.cpp
===================================================================
RCS file: /cvsroot/pywin32/pywin32/com/win32comext/axcontrol/src/AXControl.cpp,v
retrieving revision 1.4
retrieving revision 1.5
diff -C2 -d -r1.4 -r1.5
*** AXControl.cpp 8 Oct 2003 23:40:23 -0000 1.4
--- AXControl.cpp 3 Dec 2005 03:46:15 -0000 1.5
***************
*** 31,34 ****
--- 31,36 ----
#include "PyIOleInPlaceSiteWindowless.h"
#include "PyISpecifyPropertyPages.h"
+ #include "PyIObjectWithSite.h"
+ #include "PyIOleCommandTarget.h"
BOOL PyObject_AsLOGPALETTE(PyObject *pbLogPal, LOGPALETTE **ppLogPal)
***************
*** 329,332 ****
--- 331,336 ----
PYCOM_INTERFACE_FULL (OleInPlaceSiteWindowless),
PYCOM_INTERFACE_FULL (SpecifyPropertyPages),
+ PYCOM_INTERFACE_FULL (ObjectWithSite),
+ PYCOM_INTERFACE_FULL (OleCommandTarget),
};
--- NEW FILE: PyIObjectWithSite.h ---
// This file declares the IObjectWithSite Interface and Gateway for Python.
// Generated by makegw.py
// ---------------------------------------------------
//
// Interface Declaration
class PyIObjectWithSite : public PyIUnknown
{
public:
MAKE_PYCOM_CTOR(PyIObjectWithSite);
static IObjectWithSite *GetI(PyObject *self);
static PyComTypeObject type;
// The Python methods
static PyObject *SetSite(PyObject *self, PyObject *args);
static PyObject *GetSite(PyObject *self, PyObject *args);
protected:
PyIObjectWithSite(IUnknown *pdisp);
~PyIObjectWithSite();
};
// ---------------------------------------------------
//
// Gateway Declaration
class PyGObjectWithSite : public PyGatewayBase, public IObjectWithSite
{
protected:
PyGObjectWithSite(PyObject *instance) : PyGatewayBase(instance) { ; }
PYGATEWAY_MAKE_SUPPORT2(PyGObjectWithSite, IObjectWithSite, IID_IObjectWithSite, PyGatewayBase)
// IObjectWithSite
STDMETHOD(SetSite)(
IUnknown * pUnkSite);
STDMETHOD(GetSite)(
REFIID riid,
void ** ppvSite);
};
|