Update of /cvsroot/pywin32/pywin32/com/win32comext/shell/src
In directory sc8-pr-cvs1:/tmp/cvs-serv4026
Modified Files:
PyIEnumIDList.cpp PyIEnumIDList.h PyIShellFolder.cpp
PyIShellFolder.h
Log Message:
New iterator world order.
Index: PyIEnumIDList.cpp
===================================================================
RCS file: /cvsroot/pywin32/pywin32/com/win32comext/shell/src/PyIEnumIDList.cpp,v
retrieving revision 1.3
retrieving revision 1.4
diff -C2 -d -r1.3 -r1.4
*** PyIEnumIDList.cpp 31 Oct 2003 06:58:13 -0000 1.3
--- PyIEnumIDList.cpp 2 Nov 2003 09:58:32 -0000 1.4
***************
*** 25,55 ****
}
- PyObject *
- PyIEnumIDList::iter()
- {
- Py_INCREF(this);
- return this;
- }
-
- PyObject *
- PyIEnumIDList::iternext()
- {
- ULONG celtFetched = 0;
- ITEMIDLIST *pRet;
- IEnumIDList *peidl = GetI(this);
- if ( peidl == NULL )
- return NULL;
- PY_INTERFACE_PRECALL;
- HRESULT hr = peidl->Next(1, &pRet, &celtFetched);
- PY_INTERFACE_POSTCALL;
- if ( HRESULT_CODE(hr) != ERROR_NO_MORE_ITEMS && FAILED(hr) )
- return PyCom_BuildPyException(hr,peidl, IID_IEnumIDList);
- if (celtFetched==0) {
- PyErr_SetNone(PyExc_StopIteration);
- return NULL;
- }
- return PyObject_FromPIDL(pRet, TRUE);
- }
-
// @pymethod object|PyIEnumIDList|Next|Retrieves a specified number of items in the enumeration sequence.
PyObject *PyIEnumIDList::Next(PyObject *self, PyObject *args)
--- 25,28 ----
***************
*** 64,72 ****
return NULL;
! ITEMIDLIST *rgVar = new ITEMIDLIST [celt];
if ( rgVar == NULL ) {
PyErr_SetString(PyExc_MemoryError, "allocating result ITEMIDLISTs");
return NULL;
}
int i;
--- 37,46 ----
return NULL;
! LPITEMIDLIST *rgVar = new LPITEMIDLIST [celt];
if ( rgVar == NULL ) {
PyErr_SetString(PyExc_MemoryError, "allocating result ITEMIDLISTs");
return NULL;
}
+ memset(rgVar, 0, sizeof(ITEMIDLIST *) * celt);
int i;
***************
*** 77,81 ****
ULONG celtFetched = 0;
PY_INTERFACE_PRECALL;
! HRESULT hr = peidl->Next(celt, &rgVar, &celtFetched);
PY_INTERFACE_POSTCALL;
if ( HRESULT_CODE(hr) != ERROR_NO_MORE_ITEMS && FAILED(hr) )
--- 51,55 ----
ULONG celtFetched = 0;
PY_INTERFACE_PRECALL;
! HRESULT hr = peidl->Next(celt, rgVar, &celtFetched);
PY_INTERFACE_POSTCALL;
if ( HRESULT_CODE(hr) != ERROR_NO_MORE_ITEMS && FAILED(hr) )
***************
*** 90,94 ****
for ( i = celtFetched; i--; )
{
! PyObject *ob = PyObject_FromPIDL(rgVar+i, TRUE);
if ( ob == NULL )
{
--- 64,68 ----
for ( i = celtFetched; i--; )
{
! PyObject *ob = PyObject_FromPIDL(rgVar[i], TRUE);
if ( ob == NULL )
{
***************
*** 101,107 ****
}
! /* for ( i = celtFetched; i--; )
! // *** possibly cleanup each structure element???
! */
delete [] rgVar;
return result;
--- 75,79 ----
}
! // Each item free'd by PyObject_FromPIDL'd TRUE param
delete [] rgVar;
return result;
Index: PyIEnumIDList.h
===================================================================
RCS file: /cvsroot/pywin32/pywin32/com/win32comext/shell/src/PyIEnumIDList.h,v
retrieving revision 1.3
retrieving revision 1.4
diff -C2 -d -r1.3 -r1.4
*** PyIEnumIDList.h 31 Oct 2003 06:58:13 -0000 1.3
--- PyIEnumIDList.h 2 Nov 2003 09:58:32 -0000 1.4
***************
*** 12,18 ****
static PyComEnumTypeObject type;
- virtual PyObject *iter();
- virtual PyObject *iternext();
-
// The Python methods
static PyObject *Next(PyObject *self, PyObject *args);
--- 12,15 ----
Index: PyIShellFolder.cpp
===================================================================
RCS file: /cvsroot/pywin32/pywin32/com/win32comext/shell/src/PyIShellFolder.cpp,v
retrieving revision 1.2
retrieving revision 1.3
diff -C2 -d -r1.2 -r1.3
*** PyIShellFolder.cpp 31 Oct 2003 06:58:13 -0000 1.2
--- PyIShellFolder.cpp 2 Nov 2003 09:58:32 -0000 1.3
***************
*** 25,46 ****
}
- // @pymethod |PyIShellFolder|__iter__|Enumerates all objects in this folder.
- // @comm Calls EnumObjects(SHCONTF_FOLDERS\|SHCONTF_NONFOLDERS\|SHCONTF_INCLUDEHIDDEN),
- // returning PIDL objects.
- PyObject *
- PyIShellFolder::iter()
- {
- IShellFolder *pISF = GetI(this);
- DWORD flags = SHCONTF_FOLDERS|SHCONTF_NONFOLDERS|SHCONTF_INCLUDEHIDDEN;
- IEnumIDList * ppeidl;
- HRESULT hr;
- PY_INTERFACE_PRECALL;
- hr = pISF->EnumObjects( 0, flags, &ppeidl );
- PY_INTERFACE_POSTCALL;
- if ( FAILED(hr) )
- return PyCom_BuildPyException(hr, pISF, IID_IShellFolder );
- return PyCom_PyObjectFromIUnknown(ppeidl, IID_IEnumIDList, FALSE);
- }
-
// @pymethod |PyIShellFolder|ParseDisplayName|Description of ParseDisplayName.
PyObject *PyIShellFolder::ParseDisplayName(PyObject *self, PyObject *args)
--- 25,28 ----
***************
*** 91,100 ****
if ( pISF == NULL )
return NULL;
! // @pyparm HWND|hwndOwner||Description for hwndOwner
! // @pyparm int|grfFlags||Description for grfFlags
! HWND hwndOwner;
! DWORD grfFlags;
IEnumIDList * ppeidl;
! if ( !PyArg_ParseTuple(args, "ll:EnumObjects", &hwndOwner, &grfFlags) )
return NULL;
HRESULT hr;
--- 73,82 ----
if ( pISF == NULL )
return NULL;
! // @pyparm HWND|hwndOwner|0|Description for hwndOwner
! // @pyparm int|grfFlags|SHCONTF_FOLDERS\|SHCONTF_NONFOLDERS\|SHCONTF_INCLUDEHIDDEN|Description for grfFlags
! HWND hwndOwner = 0;
! DWORD grfFlags = SHCONTF_FOLDERS|SHCONTF_NONFOLDERS|SHCONTF_INCLUDEHIDDEN;
IEnumIDList * ppeidl;
! if ( !PyArg_ParseTuple(args, "|ll:EnumObjects", &hwndOwner, &grfFlags) )
return NULL;
HRESULT hr;
***************
*** 416,420 ****
sizeof(PyIShellFolder),
PyIShellFolder_methods,
! GET_PYCOM_CTOR(PyIShellFolder));
// ---------------------------------------------------
//
--- 398,403 ----
sizeof(PyIShellFolder),
PyIShellFolder_methods,
! GET_PYCOM_CTOR(PyIShellFolder),
! "EnumObjects");
// ---------------------------------------------------
//
Index: PyIShellFolder.h
===================================================================
RCS file: /cvsroot/pywin32/pywin32/com/win32comext/shell/src/PyIShellFolder.h,v
retrieving revision 1.2
retrieving revision 1.3
diff -C2 -d -r1.2 -r1.3
*** PyIShellFolder.h 31 Oct 2003 06:58:13 -0000 1.2
--- PyIShellFolder.h 2 Nov 2003 09:58:32 -0000 1.3
***************
*** 12,17 ****
static PyComEnumProviderTypeObject type;
- virtual PyObject *iter();
-
// The Python methods
static PyObject *ParseDisplayName(PyObject *self, PyObject *args);
--- 12,15 ----
|