mirror of
				https://github.com/python/cpython.git
				synced 2025-11-03 23:21:29 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			1129 lines
		
	
	
	
		
			30 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			1129 lines
		
	
	
	
		
			30 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
 | 
						|
/* ========================== Module _List ========================== */
 | 
						|
 | 
						|
#include "Python.h"
 | 
						|
 | 
						|
 | 
						|
 | 
						|
#include "pymactoolbox.h"
 | 
						|
 | 
						|
/* Macro to test whether a weak-loaded CFM function exists */
 | 
						|
#define PyMac_PRECHECK(rtn) do { if ( &rtn == NULL )  {\
 | 
						|
        PyErr_SetString(PyExc_NotImplementedError, \
 | 
						|
        "Not available in this shared library/OS version"); \
 | 
						|
        return NULL; \
 | 
						|
    }} while(0)
 | 
						|
 | 
						|
 | 
						|
#include <Carbon/Carbon.h>
 | 
						|
 | 
						|
#ifdef USE_TOOLBOX_OBJECT_GLUE
 | 
						|
extern PyObject *_ListObj_New(ListHandle);
 | 
						|
extern int _ListObj_Convert(PyObject *, ListHandle *);
 | 
						|
 | 
						|
#define ListObj_New _ListObj_New
 | 
						|
#define ListObj_Convert _ListObj_Convert
 | 
						|
#endif
 | 
						|
 | 
						|
#define as_List(x) ((ListHandle)x)
 | 
						|
#define as_Resource(lh) ((Handle)lh)
 | 
						|
 | 
						|
static ListDefUPP myListDefFunctionUPP;
 | 
						|
 | 
						|
 | 
						|
static PyObject *List_Error;
 | 
						|
 | 
						|
/* ------------------------ Object type List ------------------------ */
 | 
						|
 | 
						|
PyTypeObject List_Type;
 | 
						|
 | 
						|
#define ListObj_Check(x) ((x)->ob_type == &List_Type || PyObject_TypeCheck((x), &List_Type))
 | 
						|
 | 
						|
typedef struct ListObject {
 | 
						|
	PyObject_HEAD
 | 
						|
	ListHandle ob_itself;
 | 
						|
	PyObject *ob_ldef_func;
 | 
						|
	int ob_must_be_disposed;
 | 
						|
} ListObject;
 | 
						|
 | 
						|
PyObject *ListObj_New(ListHandle itself)
 | 
						|
{
 | 
						|
	ListObject *it;
 | 
						|
	if (itself == NULL) {
 | 
						|
						PyErr_SetString(List_Error,"Cannot create null List");
 | 
						|
						return NULL;
 | 
						|
					}
 | 
						|
	it = PyObject_NEW(ListObject, &List_Type);
 | 
						|
	if (it == NULL) return NULL;
 | 
						|
	it->ob_itself = itself;
 | 
						|
	it->ob_ldef_func = NULL;
 | 
						|
	it->ob_must_be_disposed = 1;
 | 
						|
	SetListRefCon(itself, (long)it);
 | 
						|
	return (PyObject *)it;
 | 
						|
}
 | 
						|
int ListObj_Convert(PyObject *v, ListHandle *p_itself)
 | 
						|
{
 | 
						|
	if (!ListObj_Check(v))
 | 
						|
	{
 | 
						|
		PyErr_SetString(PyExc_TypeError, "List required");
 | 
						|
		return 0;
 | 
						|
	}
 | 
						|
	*p_itself = ((ListObject *)v)->ob_itself;
 | 
						|
	return 1;
 | 
						|
}
 | 
						|
 | 
						|
static void ListObj_dealloc(ListObject *self)
 | 
						|
{
 | 
						|
	Py_XDECREF(self->ob_ldef_func);
 | 
						|
	self->ob_ldef_func = NULL;
 | 
						|
	SetListRefCon(self->ob_itself, (long)0);
 | 
						|
	if (self->ob_must_be_disposed && self->ob_itself) LDispose(self->ob_itself);
 | 
						|
	self->ob_type->tp_free((PyObject *)self);
 | 
						|
}
 | 
						|
 | 
						|
static PyObject *ListObj_LAddColumn(ListObject *_self, PyObject *_args)
 | 
						|
{
 | 
						|
	PyObject *_res = NULL;
 | 
						|
	short _rv;
 | 
						|
	short count;
 | 
						|
	short colNum;
 | 
						|
	if (!PyArg_ParseTuple(_args, "hh",
 | 
						|
	                      &count,
 | 
						|
	                      &colNum))
 | 
						|
		return NULL;
 | 
						|
	_rv = LAddColumn(count,
 | 
						|
	                 colNum,
 | 
						|
	                 _self->ob_itself);
 | 
						|
	_res = Py_BuildValue("h",
 | 
						|
	                     _rv);
 | 
						|
	return _res;
 | 
						|
}
 | 
						|
 | 
						|
static PyObject *ListObj_LAddRow(ListObject *_self, PyObject *_args)
 | 
						|
{
 | 
						|
	PyObject *_res = NULL;
 | 
						|
	short _rv;
 | 
						|
	short count;
 | 
						|
	short rowNum;
 | 
						|
	if (!PyArg_ParseTuple(_args, "hh",
 | 
						|
	                      &count,
 | 
						|
	                      &rowNum))
 | 
						|
		return NULL;
 | 
						|
	_rv = LAddRow(count,
 | 
						|
	              rowNum,
 | 
						|
	              _self->ob_itself);
 | 
						|
	_res = Py_BuildValue("h",
 | 
						|
	                     _rv);
 | 
						|
	return _res;
 | 
						|
}
 | 
						|
 | 
						|
static PyObject *ListObj_LDelColumn(ListObject *_self, PyObject *_args)
 | 
						|
{
 | 
						|
	PyObject *_res = NULL;
 | 
						|
	short count;
 | 
						|
	short colNum;
 | 
						|
	if (!PyArg_ParseTuple(_args, "hh",
 | 
						|
	                      &count,
 | 
						|
	                      &colNum))
 | 
						|
		return NULL;
 | 
						|
	LDelColumn(count,
 | 
						|
	           colNum,
 | 
						|
	           _self->ob_itself);
 | 
						|
	Py_INCREF(Py_None);
 | 
						|
	_res = Py_None;
 | 
						|
	return _res;
 | 
						|
}
 | 
						|
 | 
						|
static PyObject *ListObj_LDelRow(ListObject *_self, PyObject *_args)
 | 
						|
{
 | 
						|
	PyObject *_res = NULL;
 | 
						|
	short count;
 | 
						|
	short rowNum;
 | 
						|
	if (!PyArg_ParseTuple(_args, "hh",
 | 
						|
	                      &count,
 | 
						|
	                      &rowNum))
 | 
						|
		return NULL;
 | 
						|
	LDelRow(count,
 | 
						|
	        rowNum,
 | 
						|
	        _self->ob_itself);
 | 
						|
	Py_INCREF(Py_None);
 | 
						|
	_res = Py_None;
 | 
						|
	return _res;
 | 
						|
}
 | 
						|
 | 
						|
static PyObject *ListObj_LGetSelect(ListObject *_self, PyObject *_args)
 | 
						|
{
 | 
						|
	PyObject *_res = NULL;
 | 
						|
	Boolean _rv;
 | 
						|
	Boolean next;
 | 
						|
	Point theCell;
 | 
						|
	if (!PyArg_ParseTuple(_args, "bO&",
 | 
						|
	                      &next,
 | 
						|
	                      PyMac_GetPoint, &theCell))
 | 
						|
		return NULL;
 | 
						|
	_rv = LGetSelect(next,
 | 
						|
	                 &theCell,
 | 
						|
	                 _self->ob_itself);
 | 
						|
	_res = Py_BuildValue("bO&",
 | 
						|
	                     _rv,
 | 
						|
	                     PyMac_BuildPoint, theCell);
 | 
						|
	return _res;
 | 
						|
}
 | 
						|
 | 
						|
static PyObject *ListObj_LLastClick(ListObject *_self, PyObject *_args)
 | 
						|
{
 | 
						|
	PyObject *_res = NULL;
 | 
						|
	Point _rv;
 | 
						|
	if (!PyArg_ParseTuple(_args, ""))
 | 
						|
		return NULL;
 | 
						|
	_rv = LLastClick(_self->ob_itself);
 | 
						|
	_res = Py_BuildValue("O&",
 | 
						|
	                     PyMac_BuildPoint, _rv);
 | 
						|
	return _res;
 | 
						|
}
 | 
						|
 | 
						|
static PyObject *ListObj_LNextCell(ListObject *_self, PyObject *_args)
 | 
						|
{
 | 
						|
	PyObject *_res = NULL;
 | 
						|
	Boolean _rv;
 | 
						|
	Boolean hNext;
 | 
						|
	Boolean vNext;
 | 
						|
	Point theCell;
 | 
						|
	if (!PyArg_ParseTuple(_args, "bbO&",
 | 
						|
	                      &hNext,
 | 
						|
	                      &vNext,
 | 
						|
	                      PyMac_GetPoint, &theCell))
 | 
						|
		return NULL;
 | 
						|
	_rv = LNextCell(hNext,
 | 
						|
	                vNext,
 | 
						|
	                &theCell,
 | 
						|
	                _self->ob_itself);
 | 
						|
	_res = Py_BuildValue("bO&",
 | 
						|
	                     _rv,
 | 
						|
	                     PyMac_BuildPoint, theCell);
 | 
						|
	return _res;
 | 
						|
}
 | 
						|
 | 
						|
static PyObject *ListObj_LSize(ListObject *_self, PyObject *_args)
 | 
						|
{
 | 
						|
	PyObject *_res = NULL;
 | 
						|
	short listWidth;
 | 
						|
	short listHeight;
 | 
						|
	if (!PyArg_ParseTuple(_args, "hh",
 | 
						|
	                      &listWidth,
 | 
						|
	                      &listHeight))
 | 
						|
		return NULL;
 | 
						|
	LSize(listWidth,
 | 
						|
	      listHeight,
 | 
						|
	      _self->ob_itself);
 | 
						|
	Py_INCREF(Py_None);
 | 
						|
	_res = Py_None;
 | 
						|
	return _res;
 | 
						|
}
 | 
						|
 | 
						|
static PyObject *ListObj_LSetDrawingMode(ListObject *_self, PyObject *_args)
 | 
						|
{
 | 
						|
	PyObject *_res = NULL;
 | 
						|
	Boolean drawIt;
 | 
						|
	if (!PyArg_ParseTuple(_args, "b",
 | 
						|
	                      &drawIt))
 | 
						|
		return NULL;
 | 
						|
	LSetDrawingMode(drawIt,
 | 
						|
	                _self->ob_itself);
 | 
						|
	Py_INCREF(Py_None);
 | 
						|
	_res = Py_None;
 | 
						|
	return _res;
 | 
						|
}
 | 
						|
 | 
						|
static PyObject *ListObj_LScroll(ListObject *_self, PyObject *_args)
 | 
						|
{
 | 
						|
	PyObject *_res = NULL;
 | 
						|
	short dCols;
 | 
						|
	short dRows;
 | 
						|
	if (!PyArg_ParseTuple(_args, "hh",
 | 
						|
	                      &dCols,
 | 
						|
	                      &dRows))
 | 
						|
		return NULL;
 | 
						|
	LScroll(dCols,
 | 
						|
	        dRows,
 | 
						|
	        _self->ob_itself);
 | 
						|
	Py_INCREF(Py_None);
 | 
						|
	_res = Py_None;
 | 
						|
	return _res;
 | 
						|
}
 | 
						|
 | 
						|
static PyObject *ListObj_LAutoScroll(ListObject *_self, PyObject *_args)
 | 
						|
{
 | 
						|
	PyObject *_res = NULL;
 | 
						|
	if (!PyArg_ParseTuple(_args, ""))
 | 
						|
		return NULL;
 | 
						|
	LAutoScroll(_self->ob_itself);
 | 
						|
	Py_INCREF(Py_None);
 | 
						|
	_res = Py_None;
 | 
						|
	return _res;
 | 
						|
}
 | 
						|
 | 
						|
static PyObject *ListObj_LUpdate(ListObject *_self, PyObject *_args)
 | 
						|
{
 | 
						|
	PyObject *_res = NULL;
 | 
						|
	RgnHandle theRgn;
 | 
						|
	if (!PyArg_ParseTuple(_args, "O&",
 | 
						|
	                      ResObj_Convert, &theRgn))
 | 
						|
		return NULL;
 | 
						|
	LUpdate(theRgn,
 | 
						|
	        _self->ob_itself);
 | 
						|
	Py_INCREF(Py_None);
 | 
						|
	_res = Py_None;
 | 
						|
	return _res;
 | 
						|
}
 | 
						|
 | 
						|
static PyObject *ListObj_LActivate(ListObject *_self, PyObject *_args)
 | 
						|
{
 | 
						|
	PyObject *_res = NULL;
 | 
						|
	Boolean act;
 | 
						|
	if (!PyArg_ParseTuple(_args, "b",
 | 
						|
	                      &act))
 | 
						|
		return NULL;
 | 
						|
	LActivate(act,
 | 
						|
	          _self->ob_itself);
 | 
						|
	Py_INCREF(Py_None);
 | 
						|
	_res = Py_None;
 | 
						|
	return _res;
 | 
						|
}
 | 
						|
 | 
						|
static PyObject *ListObj_LCellSize(ListObject *_self, PyObject *_args)
 | 
						|
{
 | 
						|
	PyObject *_res = NULL;
 | 
						|
	Point cSize;
 | 
						|
	if (!PyArg_ParseTuple(_args, "O&",
 | 
						|
	                      PyMac_GetPoint, &cSize))
 | 
						|
		return NULL;
 | 
						|
	LCellSize(cSize,
 | 
						|
	          _self->ob_itself);
 | 
						|
	Py_INCREF(Py_None);
 | 
						|
	_res = Py_None;
 | 
						|
	return _res;
 | 
						|
}
 | 
						|
 | 
						|
static PyObject *ListObj_LClick(ListObject *_self, PyObject *_args)
 | 
						|
{
 | 
						|
	PyObject *_res = NULL;
 | 
						|
	Boolean _rv;
 | 
						|
	Point pt;
 | 
						|
	EventModifiers modifiers;
 | 
						|
	if (!PyArg_ParseTuple(_args, "O&H",
 | 
						|
	                      PyMac_GetPoint, &pt,
 | 
						|
	                      &modifiers))
 | 
						|
		return NULL;
 | 
						|
	_rv = LClick(pt,
 | 
						|
	             modifiers,
 | 
						|
	             _self->ob_itself);
 | 
						|
	_res = Py_BuildValue("b",
 | 
						|
	                     _rv);
 | 
						|
	return _res;
 | 
						|
}
 | 
						|
 | 
						|
static PyObject *ListObj_LAddToCell(ListObject *_self, PyObject *_args)
 | 
						|
{
 | 
						|
	PyObject *_res = NULL;
 | 
						|
	char *dataPtr__in__;
 | 
						|
	short dataPtr__len__;
 | 
						|
	int dataPtr__in_len__;
 | 
						|
	Point theCell;
 | 
						|
	if (!PyArg_ParseTuple(_args, "s#O&",
 | 
						|
	                      &dataPtr__in__, &dataPtr__in_len__,
 | 
						|
	                      PyMac_GetPoint, &theCell))
 | 
						|
		return NULL;
 | 
						|
	dataPtr__len__ = dataPtr__in_len__;
 | 
						|
	LAddToCell(dataPtr__in__, dataPtr__len__,
 | 
						|
	           theCell,
 | 
						|
	           _self->ob_itself);
 | 
						|
	Py_INCREF(Py_None);
 | 
						|
	_res = Py_None;
 | 
						|
	return _res;
 | 
						|
}
 | 
						|
 | 
						|
static PyObject *ListObj_LClrCell(ListObject *_self, PyObject *_args)
 | 
						|
{
 | 
						|
	PyObject *_res = NULL;
 | 
						|
	Point theCell;
 | 
						|
	if (!PyArg_ParseTuple(_args, "O&",
 | 
						|
	                      PyMac_GetPoint, &theCell))
 | 
						|
		return NULL;
 | 
						|
	LClrCell(theCell,
 | 
						|
	         _self->ob_itself);
 | 
						|
	Py_INCREF(Py_None);
 | 
						|
	_res = Py_None;
 | 
						|
	return _res;
 | 
						|
}
 | 
						|
 | 
						|
static PyObject *ListObj_LGetCell(ListObject *_self, PyObject *_args)
 | 
						|
{
 | 
						|
	PyObject *_res = NULL;
 | 
						|
	char *dataPtr__out__;
 | 
						|
	short dataPtr__len__;
 | 
						|
	int dataPtr__in_len__;
 | 
						|
	Point theCell;
 | 
						|
	if (!PyArg_ParseTuple(_args, "iO&",
 | 
						|
	                      &dataPtr__in_len__,
 | 
						|
	                      PyMac_GetPoint, &theCell))
 | 
						|
		return NULL;
 | 
						|
	if ((dataPtr__out__ = malloc(dataPtr__in_len__)) == NULL)
 | 
						|
	{
 | 
						|
		PyErr_NoMemory();
 | 
						|
		goto dataPtr__error__;
 | 
						|
	}
 | 
						|
	dataPtr__len__ = dataPtr__in_len__;
 | 
						|
	LGetCell(dataPtr__out__, &dataPtr__len__,
 | 
						|
	         theCell,
 | 
						|
	         _self->ob_itself);
 | 
						|
	_res = Py_BuildValue("s#",
 | 
						|
	                     dataPtr__out__, (int)dataPtr__len__);
 | 
						|
	free(dataPtr__out__);
 | 
						|
 dataPtr__error__: ;
 | 
						|
	return _res;
 | 
						|
}
 | 
						|
 | 
						|
static PyObject *ListObj_LRect(ListObject *_self, PyObject *_args)
 | 
						|
{
 | 
						|
	PyObject *_res = NULL;
 | 
						|
	Rect cellRect;
 | 
						|
	Point theCell;
 | 
						|
	if (!PyArg_ParseTuple(_args, "O&",
 | 
						|
	                      PyMac_GetPoint, &theCell))
 | 
						|
		return NULL;
 | 
						|
	LRect(&cellRect,
 | 
						|
	      theCell,
 | 
						|
	      _self->ob_itself);
 | 
						|
	_res = Py_BuildValue("O&",
 | 
						|
	                     PyMac_BuildRect, &cellRect);
 | 
						|
	return _res;
 | 
						|
}
 | 
						|
 | 
						|
static PyObject *ListObj_LSetCell(ListObject *_self, PyObject *_args)
 | 
						|
{
 | 
						|
	PyObject *_res = NULL;
 | 
						|
	char *dataPtr__in__;
 | 
						|
	short dataPtr__len__;
 | 
						|
	int dataPtr__in_len__;
 | 
						|
	Point theCell;
 | 
						|
	if (!PyArg_ParseTuple(_args, "s#O&",
 | 
						|
	                      &dataPtr__in__, &dataPtr__in_len__,
 | 
						|
	                      PyMac_GetPoint, &theCell))
 | 
						|
		return NULL;
 | 
						|
	dataPtr__len__ = dataPtr__in_len__;
 | 
						|
	LSetCell(dataPtr__in__, dataPtr__len__,
 | 
						|
	         theCell,
 | 
						|
	         _self->ob_itself);
 | 
						|
	Py_INCREF(Py_None);
 | 
						|
	_res = Py_None;
 | 
						|
	return _res;
 | 
						|
}
 | 
						|
 | 
						|
static PyObject *ListObj_LSetSelect(ListObject *_self, PyObject *_args)
 | 
						|
{
 | 
						|
	PyObject *_res = NULL;
 | 
						|
	Boolean setIt;
 | 
						|
	Point theCell;
 | 
						|
	if (!PyArg_ParseTuple(_args, "bO&",
 | 
						|
	                      &setIt,
 | 
						|
	                      PyMac_GetPoint, &theCell))
 | 
						|
		return NULL;
 | 
						|
	LSetSelect(setIt,
 | 
						|
	           theCell,
 | 
						|
	           _self->ob_itself);
 | 
						|
	Py_INCREF(Py_None);
 | 
						|
	_res = Py_None;
 | 
						|
	return _res;
 | 
						|
}
 | 
						|
 | 
						|
static PyObject *ListObj_LDraw(ListObject *_self, PyObject *_args)
 | 
						|
{
 | 
						|
	PyObject *_res = NULL;
 | 
						|
	Point theCell;
 | 
						|
	if (!PyArg_ParseTuple(_args, "O&",
 | 
						|
	                      PyMac_GetPoint, &theCell))
 | 
						|
		return NULL;
 | 
						|
	LDraw(theCell,
 | 
						|
	      _self->ob_itself);
 | 
						|
	Py_INCREF(Py_None);
 | 
						|
	_res = Py_None;
 | 
						|
	return _res;
 | 
						|
}
 | 
						|
 | 
						|
static PyObject *ListObj_LGetCellDataLocation(ListObject *_self, PyObject *_args)
 | 
						|
{
 | 
						|
	PyObject *_res = NULL;
 | 
						|
	short offset;
 | 
						|
	short len;
 | 
						|
	Point theCell;
 | 
						|
	if (!PyArg_ParseTuple(_args, "O&",
 | 
						|
	                      PyMac_GetPoint, &theCell))
 | 
						|
		return NULL;
 | 
						|
	LGetCellDataLocation(&offset,
 | 
						|
	                     &len,
 | 
						|
	                     theCell,
 | 
						|
	                     _self->ob_itself);
 | 
						|
	_res = Py_BuildValue("hh",
 | 
						|
	                     offset,
 | 
						|
	                     len);
 | 
						|
	return _res;
 | 
						|
}
 | 
						|
 | 
						|
static PyObject *ListObj_GetListPort(ListObject *_self, PyObject *_args)
 | 
						|
{
 | 
						|
	PyObject *_res = NULL;
 | 
						|
	CGrafPtr _rv;
 | 
						|
	if (!PyArg_ParseTuple(_args, ""))
 | 
						|
		return NULL;
 | 
						|
	_rv = GetListPort(_self->ob_itself);
 | 
						|
	_res = Py_BuildValue("O&",
 | 
						|
	                     GrafObj_New, _rv);
 | 
						|
	return _res;
 | 
						|
}
 | 
						|
 | 
						|
static PyObject *ListObj_GetListVerticalScrollBar(ListObject *_self, PyObject *_args)
 | 
						|
{
 | 
						|
	PyObject *_res = NULL;
 | 
						|
	ControlHandle _rv;
 | 
						|
	if (!PyArg_ParseTuple(_args, ""))
 | 
						|
		return NULL;
 | 
						|
	_rv = GetListVerticalScrollBar(_self->ob_itself);
 | 
						|
	_res = Py_BuildValue("O&",
 | 
						|
	                     CtlObj_New, _rv);
 | 
						|
	return _res;
 | 
						|
}
 | 
						|
 | 
						|
static PyObject *ListObj_GetListHorizontalScrollBar(ListObject *_self, PyObject *_args)
 | 
						|
{
 | 
						|
	PyObject *_res = NULL;
 | 
						|
	ControlHandle _rv;
 | 
						|
	if (!PyArg_ParseTuple(_args, ""))
 | 
						|
		return NULL;
 | 
						|
	_rv = GetListHorizontalScrollBar(_self->ob_itself);
 | 
						|
	_res = Py_BuildValue("O&",
 | 
						|
	                     CtlObj_New, _rv);
 | 
						|
	return _res;
 | 
						|
}
 | 
						|
 | 
						|
static PyObject *ListObj_GetListActive(ListObject *_self, PyObject *_args)
 | 
						|
{
 | 
						|
	PyObject *_res = NULL;
 | 
						|
	Boolean _rv;
 | 
						|
	if (!PyArg_ParseTuple(_args, ""))
 | 
						|
		return NULL;
 | 
						|
	_rv = GetListActive(_self->ob_itself);
 | 
						|
	_res = Py_BuildValue("b",
 | 
						|
	                     _rv);
 | 
						|
	return _res;
 | 
						|
}
 | 
						|
 | 
						|
static PyObject *ListObj_GetListClickTime(ListObject *_self, PyObject *_args)
 | 
						|
{
 | 
						|
	PyObject *_res = NULL;
 | 
						|
	SInt32 _rv;
 | 
						|
	if (!PyArg_ParseTuple(_args, ""))
 | 
						|
		return NULL;
 | 
						|
	_rv = GetListClickTime(_self->ob_itself);
 | 
						|
	_res = Py_BuildValue("l",
 | 
						|
	                     _rv);
 | 
						|
	return _res;
 | 
						|
}
 | 
						|
 | 
						|
static PyObject *ListObj_GetListRefCon(ListObject *_self, PyObject *_args)
 | 
						|
{
 | 
						|
	PyObject *_res = NULL;
 | 
						|
	SInt32 _rv;
 | 
						|
	if (!PyArg_ParseTuple(_args, ""))
 | 
						|
		return NULL;
 | 
						|
	_rv = GetListRefCon(_self->ob_itself);
 | 
						|
	_res = Py_BuildValue("l",
 | 
						|
	                     _rv);
 | 
						|
	return _res;
 | 
						|
}
 | 
						|
 | 
						|
static PyObject *ListObj_GetListDefinition(ListObject *_self, PyObject *_args)
 | 
						|
{
 | 
						|
	PyObject *_res = NULL;
 | 
						|
	Handle _rv;
 | 
						|
	if (!PyArg_ParseTuple(_args, ""))
 | 
						|
		return NULL;
 | 
						|
	_rv = GetListDefinition(_self->ob_itself);
 | 
						|
	_res = Py_BuildValue("O&",
 | 
						|
	                     ResObj_New, _rv);
 | 
						|
	return _res;
 | 
						|
}
 | 
						|
 | 
						|
static PyObject *ListObj_GetListUserHandle(ListObject *_self, PyObject *_args)
 | 
						|
{
 | 
						|
	PyObject *_res = NULL;
 | 
						|
	Handle _rv;
 | 
						|
	if (!PyArg_ParseTuple(_args, ""))
 | 
						|
		return NULL;
 | 
						|
	_rv = GetListUserHandle(_self->ob_itself);
 | 
						|
	_res = Py_BuildValue("O&",
 | 
						|
	                     ResObj_New, _rv);
 | 
						|
	return _res;
 | 
						|
}
 | 
						|
 | 
						|
static PyObject *ListObj_GetListDataHandle(ListObject *_self, PyObject *_args)
 | 
						|
{
 | 
						|
	PyObject *_res = NULL;
 | 
						|
	DataHandle _rv;
 | 
						|
	if (!PyArg_ParseTuple(_args, ""))
 | 
						|
		return NULL;
 | 
						|
	_rv = GetListDataHandle(_self->ob_itself);
 | 
						|
	_res = Py_BuildValue("O&",
 | 
						|
	                     ResObj_New, _rv);
 | 
						|
	return _res;
 | 
						|
}
 | 
						|
 | 
						|
static PyObject *ListObj_GetListFlags(ListObject *_self, PyObject *_args)
 | 
						|
{
 | 
						|
	PyObject *_res = NULL;
 | 
						|
	OptionBits _rv;
 | 
						|
	if (!PyArg_ParseTuple(_args, ""))
 | 
						|
		return NULL;
 | 
						|
	_rv = GetListFlags(_self->ob_itself);
 | 
						|
	_res = Py_BuildValue("l",
 | 
						|
	                     _rv);
 | 
						|
	return _res;
 | 
						|
}
 | 
						|
 | 
						|
static PyObject *ListObj_GetListSelectionFlags(ListObject *_self, PyObject *_args)
 | 
						|
{
 | 
						|
	PyObject *_res = NULL;
 | 
						|
	OptionBits _rv;
 | 
						|
	if (!PyArg_ParseTuple(_args, ""))
 | 
						|
		return NULL;
 | 
						|
	_rv = GetListSelectionFlags(_self->ob_itself);
 | 
						|
	_res = Py_BuildValue("l",
 | 
						|
	                     _rv);
 | 
						|
	return _res;
 | 
						|
}
 | 
						|
 | 
						|
static PyObject *ListObj_as_Resource(ListObject *_self, PyObject *_args)
 | 
						|
{
 | 
						|
	PyObject *_res = NULL;
 | 
						|
	Handle _rv;
 | 
						|
	if (!PyArg_ParseTuple(_args, ""))
 | 
						|
		return NULL;
 | 
						|
	_rv = as_Resource(_self->ob_itself);
 | 
						|
	_res = Py_BuildValue("O&",
 | 
						|
	                     ResObj_New, _rv);
 | 
						|
	return _res;
 | 
						|
}
 | 
						|
 | 
						|
static PyMethodDef ListObj_methods[] = {
 | 
						|
	{"LAddColumn", (PyCFunction)ListObj_LAddColumn, 1,
 | 
						|
	 PyDoc_STR("(short count, short colNum) -> (short _rv)")},
 | 
						|
	{"LAddRow", (PyCFunction)ListObj_LAddRow, 1,
 | 
						|
	 PyDoc_STR("(short count, short rowNum) -> (short _rv)")},
 | 
						|
	{"LDelColumn", (PyCFunction)ListObj_LDelColumn, 1,
 | 
						|
	 PyDoc_STR("(short count, short colNum) -> None")},
 | 
						|
	{"LDelRow", (PyCFunction)ListObj_LDelRow, 1,
 | 
						|
	 PyDoc_STR("(short count, short rowNum) -> None")},
 | 
						|
	{"LGetSelect", (PyCFunction)ListObj_LGetSelect, 1,
 | 
						|
	 PyDoc_STR("(Boolean next, Point theCell) -> (Boolean _rv, Point theCell)")},
 | 
						|
	{"LLastClick", (PyCFunction)ListObj_LLastClick, 1,
 | 
						|
	 PyDoc_STR("() -> (Point _rv)")},
 | 
						|
	{"LNextCell", (PyCFunction)ListObj_LNextCell, 1,
 | 
						|
	 PyDoc_STR("(Boolean hNext, Boolean vNext, Point theCell) -> (Boolean _rv, Point theCell)")},
 | 
						|
	{"LSize", (PyCFunction)ListObj_LSize, 1,
 | 
						|
	 PyDoc_STR("(short listWidth, short listHeight) -> None")},
 | 
						|
	{"LSetDrawingMode", (PyCFunction)ListObj_LSetDrawingMode, 1,
 | 
						|
	 PyDoc_STR("(Boolean drawIt) -> None")},
 | 
						|
	{"LScroll", (PyCFunction)ListObj_LScroll, 1,
 | 
						|
	 PyDoc_STR("(short dCols, short dRows) -> None")},
 | 
						|
	{"LAutoScroll", (PyCFunction)ListObj_LAutoScroll, 1,
 | 
						|
	 PyDoc_STR("() -> None")},
 | 
						|
	{"LUpdate", (PyCFunction)ListObj_LUpdate, 1,
 | 
						|
	 PyDoc_STR("(RgnHandle theRgn) -> None")},
 | 
						|
	{"LActivate", (PyCFunction)ListObj_LActivate, 1,
 | 
						|
	 PyDoc_STR("(Boolean act) -> None")},
 | 
						|
	{"LCellSize", (PyCFunction)ListObj_LCellSize, 1,
 | 
						|
	 PyDoc_STR("(Point cSize) -> None")},
 | 
						|
	{"LClick", (PyCFunction)ListObj_LClick, 1,
 | 
						|
	 PyDoc_STR("(Point pt, EventModifiers modifiers) -> (Boolean _rv)")},
 | 
						|
	{"LAddToCell", (PyCFunction)ListObj_LAddToCell, 1,
 | 
						|
	 PyDoc_STR("(Buffer dataPtr, Point theCell) -> None")},
 | 
						|
	{"LClrCell", (PyCFunction)ListObj_LClrCell, 1,
 | 
						|
	 PyDoc_STR("(Point theCell) -> None")},
 | 
						|
	{"LGetCell", (PyCFunction)ListObj_LGetCell, 1,
 | 
						|
	 PyDoc_STR("(Buffer dataPtr, Point theCell) -> (Buffer dataPtr)")},
 | 
						|
	{"LRect", (PyCFunction)ListObj_LRect, 1,
 | 
						|
	 PyDoc_STR("(Point theCell) -> (Rect cellRect)")},
 | 
						|
	{"LSetCell", (PyCFunction)ListObj_LSetCell, 1,
 | 
						|
	 PyDoc_STR("(Buffer dataPtr, Point theCell) -> None")},
 | 
						|
	{"LSetSelect", (PyCFunction)ListObj_LSetSelect, 1,
 | 
						|
	 PyDoc_STR("(Boolean setIt, Point theCell) -> None")},
 | 
						|
	{"LDraw", (PyCFunction)ListObj_LDraw, 1,
 | 
						|
	 PyDoc_STR("(Point theCell) -> None")},
 | 
						|
	{"LGetCellDataLocation", (PyCFunction)ListObj_LGetCellDataLocation, 1,
 | 
						|
	 PyDoc_STR("(Point theCell) -> (short offset, short len)")},
 | 
						|
	{"GetListPort", (PyCFunction)ListObj_GetListPort, 1,
 | 
						|
	 PyDoc_STR("() -> (CGrafPtr _rv)")},
 | 
						|
	{"GetListVerticalScrollBar", (PyCFunction)ListObj_GetListVerticalScrollBar, 1,
 | 
						|
	 PyDoc_STR("() -> (ControlHandle _rv)")},
 | 
						|
	{"GetListHorizontalScrollBar", (PyCFunction)ListObj_GetListHorizontalScrollBar, 1,
 | 
						|
	 PyDoc_STR("() -> (ControlHandle _rv)")},
 | 
						|
	{"GetListActive", (PyCFunction)ListObj_GetListActive, 1,
 | 
						|
	 PyDoc_STR("() -> (Boolean _rv)")},
 | 
						|
	{"GetListClickTime", (PyCFunction)ListObj_GetListClickTime, 1,
 | 
						|
	 PyDoc_STR("() -> (SInt32 _rv)")},
 | 
						|
	{"GetListRefCon", (PyCFunction)ListObj_GetListRefCon, 1,
 | 
						|
	 PyDoc_STR("() -> (SInt32 _rv)")},
 | 
						|
	{"GetListDefinition", (PyCFunction)ListObj_GetListDefinition, 1,
 | 
						|
	 PyDoc_STR("() -> (Handle _rv)")},
 | 
						|
	{"GetListUserHandle", (PyCFunction)ListObj_GetListUserHandle, 1,
 | 
						|
	 PyDoc_STR("() -> (Handle _rv)")},
 | 
						|
	{"GetListDataHandle", (PyCFunction)ListObj_GetListDataHandle, 1,
 | 
						|
	 PyDoc_STR("() -> (DataHandle _rv)")},
 | 
						|
	{"GetListFlags", (PyCFunction)ListObj_GetListFlags, 1,
 | 
						|
	 PyDoc_STR("() -> (OptionBits _rv)")},
 | 
						|
	{"GetListSelectionFlags", (PyCFunction)ListObj_GetListSelectionFlags, 1,
 | 
						|
	 PyDoc_STR("() -> (OptionBits _rv)")},
 | 
						|
	{"as_Resource", (PyCFunction)ListObj_as_Resource, 1,
 | 
						|
	 PyDoc_STR("() -> (Handle _rv)")},
 | 
						|
	{NULL, NULL, 0}
 | 
						|
};
 | 
						|
 | 
						|
static PyObject *ListObj_get_listFlags(ListObject *self, void *closure)
 | 
						|
{
 | 
						|
	return Py_BuildValue("l", (long)GetListFlags(self->ob_itself) & 0xff);
 | 
						|
}
 | 
						|
 | 
						|
static int ListObj_set_listFlags(ListObject *self, PyObject *v, void *closure)
 | 
						|
{
 | 
						|
	if (!PyArg_Parse(v, "B", &(*self->ob_itself)->listFlags)) return -1;
 | 
						|
	return 0;
 | 
						|
}
 | 
						|
 | 
						|
static PyObject *ListObj_get_selFlags(ListObject *self, void *closure)
 | 
						|
{
 | 
						|
	return Py_BuildValue("l", (long)GetListSelectionFlags(self->ob_itself) & 0xff);
 | 
						|
}
 | 
						|
 | 
						|
static int ListObj_set_selFlags(ListObject *self, PyObject *v, void *closure)
 | 
						|
{
 | 
						|
	if (!PyArg_Parse(v, "B", &(*self->ob_itself)->selFlags)) return -1;
 | 
						|
	return 0;
 | 
						|
}
 | 
						|
 | 
						|
static PyObject *ListObj_get_cellSize(ListObject *self, void *closure)
 | 
						|
{
 | 
						|
	return Py_BuildValue("O&", PyMac_BuildPoint, (*self->ob_itself)->cellSize);
 | 
						|
}
 | 
						|
 | 
						|
static int ListObj_set_cellSize(ListObject *self, PyObject *v, void *closure)
 | 
						|
{
 | 
						|
	if (!PyArg_Parse(v, "O&", PyMac_GetPoint, &(*self->ob_itself)->cellSize)) return -1;
 | 
						|
	return 0;
 | 
						|
}
 | 
						|
 | 
						|
static PyGetSetDef ListObj_getsetlist[] = {
 | 
						|
	{"listFlags", (getter)ListObj_get_listFlags, (setter)ListObj_set_listFlags, NULL},
 | 
						|
	{"selFlags", (getter)ListObj_get_selFlags, (setter)ListObj_set_selFlags, NULL},
 | 
						|
	{"cellSize", (getter)ListObj_get_cellSize, (setter)ListObj_set_cellSize, NULL},
 | 
						|
	{NULL, NULL, NULL, NULL},
 | 
						|
};
 | 
						|
 | 
						|
 | 
						|
#define ListObj_compare NULL
 | 
						|
 | 
						|
#define ListObj_repr NULL
 | 
						|
 | 
						|
#define ListObj_hash NULL
 | 
						|
#define ListObj_tp_init 0
 | 
						|
 | 
						|
#define ListObj_tp_alloc PyType_GenericAlloc
 | 
						|
 | 
						|
static PyObject *ListObj_tp_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
 | 
						|
{
 | 
						|
	PyObject *self;
 | 
						|
	ListHandle itself;
 | 
						|
	char *kw[] = {"itself", 0};
 | 
						|
 | 
						|
	if (!PyArg_ParseTupleAndKeywords(args, kwds, "O&", kw, ListObj_Convert, &itself)) return NULL;
 | 
						|
	if ((self = type->tp_alloc(type, 0)) == NULL) return NULL;
 | 
						|
	((ListObject *)self)->ob_itself = itself;
 | 
						|
	return self;
 | 
						|
}
 | 
						|
 | 
						|
#define ListObj_tp_free PyObject_Del
 | 
						|
 | 
						|
 | 
						|
PyTypeObject List_Type = {
 | 
						|
	PyObject_HEAD_INIT(NULL)
 | 
						|
	0, /*ob_size*/
 | 
						|
	"_List.List", /*tp_name*/
 | 
						|
	sizeof(ListObject), /*tp_basicsize*/
 | 
						|
	0, /*tp_itemsize*/
 | 
						|
	/* methods */
 | 
						|
	(destructor) ListObj_dealloc, /*tp_dealloc*/
 | 
						|
	0, /*tp_print*/
 | 
						|
	(getattrfunc)0, /*tp_getattr*/
 | 
						|
	(setattrfunc)0, /*tp_setattr*/
 | 
						|
	(cmpfunc) ListObj_compare, /*tp_compare*/
 | 
						|
	(reprfunc) ListObj_repr, /*tp_repr*/
 | 
						|
	(PyNumberMethods *)0, /* tp_as_number */
 | 
						|
	(PySequenceMethods *)0, /* tp_as_sequence */
 | 
						|
	(PyMappingMethods *)0, /* tp_as_mapping */
 | 
						|
	(hashfunc) ListObj_hash, /*tp_hash*/
 | 
						|
	0, /*tp_call*/
 | 
						|
	0, /*tp_str*/
 | 
						|
	PyObject_GenericGetAttr, /*tp_getattro*/
 | 
						|
	PyObject_GenericSetAttr, /*tp_setattro */
 | 
						|
	0, /*tp_as_buffer*/
 | 
						|
	Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE, /* tp_flags */
 | 
						|
	0, /*tp_doc*/
 | 
						|
	0, /*tp_traverse*/
 | 
						|
	0, /*tp_clear*/
 | 
						|
	0, /*tp_richcompare*/
 | 
						|
	0, /*tp_weaklistoffset*/
 | 
						|
	0, /*tp_iter*/
 | 
						|
	0, /*tp_iternext*/
 | 
						|
	ListObj_methods, /* tp_methods */
 | 
						|
	0, /*tp_members*/
 | 
						|
	ListObj_getsetlist, /*tp_getset*/
 | 
						|
	0, /*tp_base*/
 | 
						|
	0, /*tp_dict*/
 | 
						|
	0, /*tp_descr_get*/
 | 
						|
	0, /*tp_descr_set*/
 | 
						|
	0, /*tp_dictoffset*/
 | 
						|
	ListObj_tp_init, /* tp_init */
 | 
						|
	ListObj_tp_alloc, /* tp_alloc */
 | 
						|
	ListObj_tp_new, /* tp_new */
 | 
						|
	ListObj_tp_free, /* tp_free */
 | 
						|
};
 | 
						|
 | 
						|
/* ---------------------- End object type List ---------------------- */
 | 
						|
 | 
						|
 | 
						|
static PyObject *List_CreateCustomList(PyObject *_self, PyObject *_args)
 | 
						|
{
 | 
						|
	PyObject *_res = NULL;
 | 
						|
	Rect rView;
 | 
						|
	Rect dataBounds;
 | 
						|
	Point cellSize;
 | 
						|
 | 
						|
	PyObject *listDefFunc;
 | 
						|
	ListDefSpec theSpec;
 | 
						|
	WindowPtr theWindow;
 | 
						|
	Boolean drawIt;
 | 
						|
	Boolean hasGrow;
 | 
						|
	Boolean scrollHoriz;
 | 
						|
	Boolean scrollVert;
 | 
						|
	ListHandle outList;
 | 
						|
 | 
						|
	if (!PyArg_ParseTuple(_args, "O&O&O&(iO)O&bbbb",
 | 
						|
	                      PyMac_GetRect, &rView,
 | 
						|
	                      PyMac_GetRect, &dataBounds,
 | 
						|
	                      PyMac_GetPoint, &cellSize,
 | 
						|
	                      &theSpec.defType, &listDefFunc,
 | 
						|
	                      WinObj_Convert, &theWindow,
 | 
						|
	                      &drawIt,
 | 
						|
	                      &hasGrow,
 | 
						|
	                      &scrollHoriz,
 | 
						|
	                      &scrollVert))
 | 
						|
		return NULL;
 | 
						|
 | 
						|
 | 
						|
	/* Carbon applications use the CreateCustomList API */ 
 | 
						|
	theSpec.u.userProc = myListDefFunctionUPP;
 | 
						|
	CreateCustomList(&rView,
 | 
						|
	                 &dataBounds,
 | 
						|
	                 cellSize,
 | 
						|
	                 &theSpec,
 | 
						|
	                 theWindow,
 | 
						|
	                 drawIt,
 | 
						|
	                 hasGrow,
 | 
						|
	                 scrollHoriz,
 | 
						|
	                 scrollVert,
 | 
						|
	                 &outList);
 | 
						|
 | 
						|
 | 
						|
	_res = ListObj_New(outList);
 | 
						|
	if (_res == NULL)
 | 
						|
		return NULL;
 | 
						|
	Py_INCREF(listDefFunc);
 | 
						|
	((ListObject*)_res)->ob_ldef_func = listDefFunc;
 | 
						|
	return _res;
 | 
						|
}
 | 
						|
 | 
						|
static PyObject *List_LNew(PyObject *_self, PyObject *_args)
 | 
						|
{
 | 
						|
	PyObject *_res = NULL;
 | 
						|
	ListHandle _rv;
 | 
						|
	Rect rView;
 | 
						|
	Rect dataBounds;
 | 
						|
	Point cSize;
 | 
						|
	short theProc;
 | 
						|
	WindowPtr theWindow;
 | 
						|
	Boolean drawIt;
 | 
						|
	Boolean hasGrow;
 | 
						|
	Boolean scrollHoriz;
 | 
						|
	Boolean scrollVert;
 | 
						|
	if (!PyArg_ParseTuple(_args, "O&O&O&hO&bbbb",
 | 
						|
	                      PyMac_GetRect, &rView,
 | 
						|
	                      PyMac_GetRect, &dataBounds,
 | 
						|
	                      PyMac_GetPoint, &cSize,
 | 
						|
	                      &theProc,
 | 
						|
	                      WinObj_Convert, &theWindow,
 | 
						|
	                      &drawIt,
 | 
						|
	                      &hasGrow,
 | 
						|
	                      &scrollHoriz,
 | 
						|
	                      &scrollVert))
 | 
						|
		return NULL;
 | 
						|
	_rv = LNew(&rView,
 | 
						|
	           &dataBounds,
 | 
						|
	           cSize,
 | 
						|
	           theProc,
 | 
						|
	           theWindow,
 | 
						|
	           drawIt,
 | 
						|
	           hasGrow,
 | 
						|
	           scrollHoriz,
 | 
						|
	           scrollVert);
 | 
						|
	_res = Py_BuildValue("O&",
 | 
						|
	                     ListObj_New, _rv);
 | 
						|
	return _res;
 | 
						|
}
 | 
						|
 | 
						|
static PyObject *List_SetListViewBounds(PyObject *_self, PyObject *_args)
 | 
						|
{
 | 
						|
	PyObject *_res = NULL;
 | 
						|
	ListHandle list;
 | 
						|
	Rect view;
 | 
						|
	if (!PyArg_ParseTuple(_args, "O&O&",
 | 
						|
	                      ListObj_Convert, &list,
 | 
						|
	                      PyMac_GetRect, &view))
 | 
						|
		return NULL;
 | 
						|
	SetListViewBounds(list,
 | 
						|
	                  &view);
 | 
						|
	Py_INCREF(Py_None);
 | 
						|
	_res = Py_None;
 | 
						|
	return _res;
 | 
						|
}
 | 
						|
 | 
						|
static PyObject *List_SetListPort(PyObject *_self, PyObject *_args)
 | 
						|
{
 | 
						|
	PyObject *_res = NULL;
 | 
						|
	ListHandle list;
 | 
						|
	CGrafPtr port;
 | 
						|
	if (!PyArg_ParseTuple(_args, "O&O&",
 | 
						|
	                      ListObj_Convert, &list,
 | 
						|
	                      GrafObj_Convert, &port))
 | 
						|
		return NULL;
 | 
						|
	SetListPort(list,
 | 
						|
	            port);
 | 
						|
	Py_INCREF(Py_None);
 | 
						|
	_res = Py_None;
 | 
						|
	return _res;
 | 
						|
}
 | 
						|
 | 
						|
static PyObject *List_SetListCellIndent(PyObject *_self, PyObject *_args)
 | 
						|
{
 | 
						|
	PyObject *_res = NULL;
 | 
						|
	ListHandle list;
 | 
						|
	Point indent;
 | 
						|
	if (!PyArg_ParseTuple(_args, "O&O&",
 | 
						|
	                      ListObj_Convert, &list,
 | 
						|
	                      PyMac_GetPoint, &indent))
 | 
						|
		return NULL;
 | 
						|
	SetListCellIndent(list,
 | 
						|
	                  &indent);
 | 
						|
	Py_INCREF(Py_None);
 | 
						|
	_res = Py_None;
 | 
						|
	return _res;
 | 
						|
}
 | 
						|
 | 
						|
static PyObject *List_SetListClickTime(PyObject *_self, PyObject *_args)
 | 
						|
{
 | 
						|
	PyObject *_res = NULL;
 | 
						|
	ListHandle list;
 | 
						|
	SInt32 time;
 | 
						|
	if (!PyArg_ParseTuple(_args, "O&l",
 | 
						|
	                      ListObj_Convert, &list,
 | 
						|
	                      &time))
 | 
						|
		return NULL;
 | 
						|
	SetListClickTime(list,
 | 
						|
	                 time);
 | 
						|
	Py_INCREF(Py_None);
 | 
						|
	_res = Py_None;
 | 
						|
	return _res;
 | 
						|
}
 | 
						|
 | 
						|
static PyObject *List_SetListRefCon(PyObject *_self, PyObject *_args)
 | 
						|
{
 | 
						|
	PyObject *_res = NULL;
 | 
						|
	ListHandle list;
 | 
						|
	SInt32 refCon;
 | 
						|
	if (!PyArg_ParseTuple(_args, "O&l",
 | 
						|
	                      ListObj_Convert, &list,
 | 
						|
	                      &refCon))
 | 
						|
		return NULL;
 | 
						|
	SetListRefCon(list,
 | 
						|
	              refCon);
 | 
						|
	Py_INCREF(Py_None);
 | 
						|
	_res = Py_None;
 | 
						|
	return _res;
 | 
						|
}
 | 
						|
 | 
						|
static PyObject *List_SetListUserHandle(PyObject *_self, PyObject *_args)
 | 
						|
{
 | 
						|
	PyObject *_res = NULL;
 | 
						|
	ListHandle list;
 | 
						|
	Handle userHandle;
 | 
						|
	if (!PyArg_ParseTuple(_args, "O&O&",
 | 
						|
	                      ListObj_Convert, &list,
 | 
						|
	                      ResObj_Convert, &userHandle))
 | 
						|
		return NULL;
 | 
						|
	SetListUserHandle(list,
 | 
						|
	                  userHandle);
 | 
						|
	Py_INCREF(Py_None);
 | 
						|
	_res = Py_None;
 | 
						|
	return _res;
 | 
						|
}
 | 
						|
 | 
						|
static PyObject *List_SetListFlags(PyObject *_self, PyObject *_args)
 | 
						|
{
 | 
						|
	PyObject *_res = NULL;
 | 
						|
	ListHandle list;
 | 
						|
	OptionBits listFlags;
 | 
						|
	if (!PyArg_ParseTuple(_args, "O&l",
 | 
						|
	                      ListObj_Convert, &list,
 | 
						|
	                      &listFlags))
 | 
						|
		return NULL;
 | 
						|
	SetListFlags(list,
 | 
						|
	             listFlags);
 | 
						|
	Py_INCREF(Py_None);
 | 
						|
	_res = Py_None;
 | 
						|
	return _res;
 | 
						|
}
 | 
						|
 | 
						|
static PyObject *List_SetListSelectionFlags(PyObject *_self, PyObject *_args)
 | 
						|
{
 | 
						|
	PyObject *_res = NULL;
 | 
						|
	ListHandle list;
 | 
						|
	OptionBits selectionFlags;
 | 
						|
	if (!PyArg_ParseTuple(_args, "O&l",
 | 
						|
	                      ListObj_Convert, &list,
 | 
						|
	                      &selectionFlags))
 | 
						|
		return NULL;
 | 
						|
	SetListSelectionFlags(list,
 | 
						|
	                      selectionFlags);
 | 
						|
	Py_INCREF(Py_None);
 | 
						|
	_res = Py_None;
 | 
						|
	return _res;
 | 
						|
}
 | 
						|
 | 
						|
static PyObject *List_as_List(PyObject *_self, PyObject *_args)
 | 
						|
{
 | 
						|
	PyObject *_res = NULL;
 | 
						|
 | 
						|
	Handle h;
 | 
						|
	ListObject *l;
 | 
						|
	if (!PyArg_ParseTuple(_args, "O&", ResObj_Convert, &h))
 | 
						|
		return NULL;
 | 
						|
	l = (ListObject *)ListObj_New(as_List(h));
 | 
						|
	l->ob_must_be_disposed = 0;
 | 
						|
	_res = Py_BuildValue("O", l);
 | 
						|
	return _res;
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
static PyMethodDef List_methods[] = {
 | 
						|
	{"CreateCustomList", (PyCFunction)List_CreateCustomList, 1,
 | 
						|
	 PyDoc_STR("(Rect rView, Rect dataBounds, Point cellSize, ListDefSpec theSpec, WindowPtr theWindow, Boolean drawIt, Boolean hasGrow, Boolean scrollHoriz, Boolean scrollVert) -> (ListHandle outList)")},
 | 
						|
	{"LNew", (PyCFunction)List_LNew, 1,
 | 
						|
	 PyDoc_STR("(Rect rView, Rect dataBounds, Point cSize, short theProc, WindowPtr theWindow, Boolean drawIt, Boolean hasGrow, Boolean scrollHoriz, Boolean scrollVert) -> (ListHandle _rv)")},
 | 
						|
	{"SetListViewBounds", (PyCFunction)List_SetListViewBounds, 1,
 | 
						|
	 PyDoc_STR("(ListHandle list, Rect view) -> None")},
 | 
						|
	{"SetListPort", (PyCFunction)List_SetListPort, 1,
 | 
						|
	 PyDoc_STR("(ListHandle list, CGrafPtr port) -> None")},
 | 
						|
	{"SetListCellIndent", (PyCFunction)List_SetListCellIndent, 1,
 | 
						|
	 PyDoc_STR("(ListHandle list, Point indent) -> None")},
 | 
						|
	{"SetListClickTime", (PyCFunction)List_SetListClickTime, 1,
 | 
						|
	 PyDoc_STR("(ListHandle list, SInt32 time) -> None")},
 | 
						|
	{"SetListRefCon", (PyCFunction)List_SetListRefCon, 1,
 | 
						|
	 PyDoc_STR("(ListHandle list, SInt32 refCon) -> None")},
 | 
						|
	{"SetListUserHandle", (PyCFunction)List_SetListUserHandle, 1,
 | 
						|
	 PyDoc_STR("(ListHandle list, Handle userHandle) -> None")},
 | 
						|
	{"SetListFlags", (PyCFunction)List_SetListFlags, 1,
 | 
						|
	 PyDoc_STR("(ListHandle list, OptionBits listFlags) -> None")},
 | 
						|
	{"SetListSelectionFlags", (PyCFunction)List_SetListSelectionFlags, 1,
 | 
						|
	 PyDoc_STR("(ListHandle list, OptionBits selectionFlags) -> None")},
 | 
						|
	{"as_List", (PyCFunction)List_as_List, 1,
 | 
						|
	 PyDoc_STR("(Resource)->List.\nReturns List object (which is not auto-freed!)")},
 | 
						|
	{NULL, NULL, 0}
 | 
						|
};
 | 
						|
 | 
						|
 | 
						|
 | 
						|
static void myListDefFunction(SInt16 message,
 | 
						|
                       Boolean selected,
 | 
						|
                       Rect *cellRect,
 | 
						|
                       Cell theCell,
 | 
						|
                       SInt16 dataOffset,
 | 
						|
                       SInt16 dataLen,
 | 
						|
                       ListHandle theList)  
 | 
						|
{
 | 
						|
	PyObject *listDefFunc, *args, *rv=NULL;
 | 
						|
	ListObject *self;
 | 
						|
	
 | 
						|
	self = (ListObject*)GetListRefCon(theList);
 | 
						|
	if (self == NULL || self->ob_itself != theList)
 | 
						|
		return;  /* nothing we can do */
 | 
						|
	listDefFunc = self->ob_ldef_func;
 | 
						|
	if (listDefFunc == NULL)
 | 
						|
		return;  /* nothing we can do */
 | 
						|
	args = Py_BuildValue("hbO&O&hhO", message,
 | 
						|
	                                  selected,
 | 
						|
	                                  PyMac_BuildRect, cellRect,
 | 
						|
	                                  PyMac_BuildPoint, theCell,
 | 
						|
	                                  dataOffset,
 | 
						|
	                                  dataLen,
 | 
						|
	                                  self);
 | 
						|
	if (args != NULL) {
 | 
						|
		rv = PyEval_CallObject(listDefFunc, args);
 | 
						|
		Py_DECREF(args);
 | 
						|
	}
 | 
						|
	if (rv == NULL) {
 | 
						|
		PySys_WriteStderr("error in list definition callback:\n");
 | 
						|
		PyErr_Print();
 | 
						|
	} else {
 | 
						|
		Py_DECREF(rv);
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
void init_List(void)
 | 
						|
{
 | 
						|
	PyObject *m;
 | 
						|
	PyObject *d;
 | 
						|
 | 
						|
 | 
						|
 | 
						|
	myListDefFunctionUPP = NewListDefUPP((ListDefProcPtr)myListDefFunction);
 | 
						|
 | 
						|
	PyMac_INIT_TOOLBOX_OBJECT_NEW(ListHandle, ListObj_New);
 | 
						|
	PyMac_INIT_TOOLBOX_OBJECT_CONVERT(ListHandle, ListObj_Convert);
 | 
						|
 | 
						|
 | 
						|
	m = Py_InitModule("_List", List_methods);
 | 
						|
	d = PyModule_GetDict(m);
 | 
						|
	List_Error = PyMac_GetOSErrException();
 | 
						|
	if (List_Error == NULL ||
 | 
						|
	    PyDict_SetItemString(d, "Error", List_Error) != 0)
 | 
						|
		return;
 | 
						|
	List_Type.ob_type = &PyType_Type;
 | 
						|
	if (PyType_Ready(&List_Type) < 0) return;
 | 
						|
	Py_INCREF(&List_Type);
 | 
						|
	PyModule_AddObject(m, "List", (PyObject *)&List_Type);
 | 
						|
	/* Backward-compatible name */
 | 
						|
	Py_INCREF(&List_Type);
 | 
						|
	PyModule_AddObject(m, "ListType", (PyObject *)&List_Type);
 | 
						|
}
 | 
						|
 | 
						|
/* ======================== End module _List ======================== */
 | 
						|
 |