654 lines
15 KiB
C
654 lines
15 KiB
C
|
|
/* ========================== Module List =========================== */
|
|
|
|
#include "Python.h"
|
|
|
|
|
|
|
|
#define SystemSevenOrLater 1
|
|
|
|
#include "macglue.h"
|
|
#include <Memory.h>
|
|
#include <Dialogs.h>
|
|
#include <Menus.h>
|
|
#include <Controls.h>
|
|
|
|
extern PyObject *ResObj_New(Handle);
|
|
extern int ResObj_Convert(PyObject *, Handle *);
|
|
extern PyObject *OptResObj_New(Handle);
|
|
extern int OptResObj_Convert(PyObject *, Handle *);
|
|
|
|
extern PyObject *WinObj_New(WindowPtr);
|
|
extern int WinObj_Convert(PyObject *, WindowPtr *);
|
|
extern PyTypeObject Window_Type;
|
|
#define WinObj_Check(x) ((x)->ob_type == &Window_Type)
|
|
|
|
extern PyObject *DlgObj_New(DialogPtr);
|
|
extern int DlgObj_Convert(PyObject *, DialogPtr *);
|
|
extern PyTypeObject Dialog_Type;
|
|
#define DlgObj_Check(x) ((x)->ob_type == &Dialog_Type)
|
|
|
|
extern PyObject *MenuObj_New(MenuHandle);
|
|
extern int MenuObj_Convert(PyObject *, MenuHandle *);
|
|
|
|
extern PyObject *CtlObj_New(ControlHandle);
|
|
extern int CtlObj_Convert(PyObject *, ControlHandle *);
|
|
|
|
extern PyObject *GrafObj_New(GrafPtr);
|
|
extern int GrafObj_Convert(PyObject *, GrafPtr *);
|
|
|
|
extern PyObject *BMObj_New(BitMapPtr);
|
|
extern int BMObj_Convert(PyObject *, BitMapPtr *);
|
|
|
|
extern PyObject *PMObj_New(PixMapHandle);
|
|
extern int PMObj_Convert(PyObject *, PixMapHandle *);
|
|
|
|
extern PyObject *WinObj_WhichWindow(WindowPtr);
|
|
|
|
#include <Lists.h>
|
|
|
|
static PyObject *List_Error;
|
|
|
|
/* ------------------------ Object type List ------------------------ */
|
|
|
|
PyTypeObject List_Type;
|
|
|
|
#define ListObj_Check(x) ((x)->ob_type == &List_Type)
|
|
|
|
typedef struct ListObject {
|
|
PyObject_HEAD
|
|
ListRef ob_itself;
|
|
} ListObject;
|
|
|
|
PyObject *ListObj_New(itself)
|
|
ListRef 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;
|
|
return (PyObject *)it;
|
|
}
|
|
ListObj_Convert(v, p_itself)
|
|
PyObject *v;
|
|
ListRef *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(self)
|
|
ListObject *self;
|
|
{
|
|
LDispose(self->ob_itself);
|
|
PyMem_DEL(self);
|
|
}
|
|
|
|
static PyObject *ListObj_LAddColumn(_self, _args)
|
|
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(_self, _args)
|
|
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(_self, _args)
|
|
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(_self, _args)
|
|
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(_self, _args)
|
|
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(_self, _args)
|
|
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(_self, _args)
|
|
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(_self, _args)
|
|
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(_self, _args)
|
|
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(_self, _args)
|
|
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(_self, _args)
|
|
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(_self, _args)
|
|
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(_self, _args)
|
|
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(_self, _args)
|
|
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(_self, _args)
|
|
ListObject *_self;
|
|
PyObject *_args;
|
|
{
|
|
PyObject *_res = NULL;
|
|
Boolean _rv;
|
|
Point pt;
|
|
short 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(_self, _args)
|
|
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;
|
|
dataPtr__error__: ;
|
|
return _res;
|
|
}
|
|
|
|
static PyObject *ListObj_LClrCell(_self, _args)
|
|
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(_self, _args)
|
|
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(_self, _args)
|
|
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(_self, _args)
|
|
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;
|
|
dataPtr__error__: ;
|
|
return _res;
|
|
}
|
|
|
|
static PyObject *ListObj_LSetSelect(_self, _args)
|
|
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(_self, _args)
|
|
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 PyMethodDef ListObj_methods[] = {
|
|
{"LAddColumn", (PyCFunction)ListObj_LAddColumn, 1,
|
|
"(short count, short colNum) -> (short _rv)"},
|
|
{"LAddRow", (PyCFunction)ListObj_LAddRow, 1,
|
|
"(short count, short rowNum) -> (short _rv)"},
|
|
{"LDelColumn", (PyCFunction)ListObj_LDelColumn, 1,
|
|
"(short count, short colNum) -> None"},
|
|
{"LDelRow", (PyCFunction)ListObj_LDelRow, 1,
|
|
"(short count, short rowNum) -> None"},
|
|
{"LGetSelect", (PyCFunction)ListObj_LGetSelect, 1,
|
|
"(Boolean next, Point theCell) -> (Boolean _rv, Point theCell)"},
|
|
{"LLastClick", (PyCFunction)ListObj_LLastClick, 1,
|
|
"() -> (Point _rv)"},
|
|
{"LNextCell", (PyCFunction)ListObj_LNextCell, 1,
|
|
"(Boolean hNext, Boolean vNext, Point theCell) -> (Boolean _rv, Point theCell)"},
|
|
{"LSize", (PyCFunction)ListObj_LSize, 1,
|
|
"(short listWidth, short listHeight) -> None"},
|
|
{"LSetDrawingMode", (PyCFunction)ListObj_LSetDrawingMode, 1,
|
|
"(Boolean drawIt) -> None"},
|
|
{"LScroll", (PyCFunction)ListObj_LScroll, 1,
|
|
"(short dCols, short dRows) -> None"},
|
|
{"LAutoScroll", (PyCFunction)ListObj_LAutoScroll, 1,
|
|
"() -> None"},
|
|
{"LUpdate", (PyCFunction)ListObj_LUpdate, 1,
|
|
"(RgnHandle theRgn) -> None"},
|
|
{"LActivate", (PyCFunction)ListObj_LActivate, 1,
|
|
"(Boolean act) -> None"},
|
|
{"LCellSize", (PyCFunction)ListObj_LCellSize, 1,
|
|
"(Point cSize) -> None"},
|
|
{"LClick", (PyCFunction)ListObj_LClick, 1,
|
|
"(Point pt, short modifiers) -> (Boolean _rv)"},
|
|
{"LAddToCell", (PyCFunction)ListObj_LAddToCell, 1,
|
|
"(Buffer dataPtr, Point theCell) -> None"},
|
|
{"LClrCell", (PyCFunction)ListObj_LClrCell, 1,
|
|
"(Point theCell) -> None"},
|
|
{"LGetCell", (PyCFunction)ListObj_LGetCell, 1,
|
|
"(Buffer dataPtr, Point theCell) -> (Buffer dataPtr)"},
|
|
{"LRect", (PyCFunction)ListObj_LRect, 1,
|
|
"(Point theCell) -> (Rect cellRect)"},
|
|
{"LSetCell", (PyCFunction)ListObj_LSetCell, 1,
|
|
"(Buffer dataPtr, Point theCell) -> None"},
|
|
{"LSetSelect", (PyCFunction)ListObj_LSetSelect, 1,
|
|
"(Boolean setIt, Point theCell) -> None"},
|
|
{"LDraw", (PyCFunction)ListObj_LDraw, 1,
|
|
"(Point theCell) -> None"},
|
|
{NULL, NULL, 0}
|
|
};
|
|
|
|
PyMethodChain ListObj_chain = { ListObj_methods, NULL };
|
|
|
|
static PyObject *ListObj_getattr(self, name)
|
|
ListObject *self;
|
|
char *name;
|
|
{
|
|
return Py_FindMethodInChain(&ListObj_chain, (PyObject *)self, name);
|
|
}
|
|
|
|
#define ListObj_setattr NULL
|
|
|
|
PyTypeObject List_Type = {
|
|
PyObject_HEAD_INIT(&PyType_Type)
|
|
0, /*ob_size*/
|
|
"List", /*tp_name*/
|
|
sizeof(ListObject), /*tp_basicsize*/
|
|
0, /*tp_itemsize*/
|
|
/* methods */
|
|
(destructor) ListObj_dealloc, /*tp_dealloc*/
|
|
0, /*tp_print*/
|
|
(getattrfunc) ListObj_getattr, /*tp_getattr*/
|
|
(setattrfunc) ListObj_setattr, /*tp_setattr*/
|
|
};
|
|
|
|
/* ---------------------- End object type List ---------------------- */
|
|
|
|
|
|
static PyObject *List_LNew(_self, _args)
|
|
PyObject *_self;
|
|
PyObject *_args;
|
|
{
|
|
PyObject *_res = NULL;
|
|
ListRef _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 PyMethodDef List_methods[] = {
|
|
{"LNew", (PyCFunction)List_LNew, 1,
|
|
"(Rect rView, Rect dataBounds, Point cSize, short theProc, WindowPtr theWindow, Boolean drawIt, Boolean hasGrow, Boolean scrollHoriz, Boolean scrollVert) -> (ListRef _rv)"},
|
|
{NULL, NULL, 0}
|
|
};
|
|
|
|
|
|
|
|
|
|
void initList()
|
|
{
|
|
PyObject *m;
|
|
PyObject *d;
|
|
|
|
|
|
|
|
|
|
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)
|
|
Py_FatalError("can't initialize List.Error");
|
|
}
|
|
|
|
/* ======================== End module List ========================= */
|
|
|