• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 
2 /* ========================== Module _List ========================== */
3 
4 #include "Python.h"
5 #include "pymactoolbox.h"
6 
7 #if APPLE_SUPPORTS_QUICKTIME
8 
9 
10 /* Macro to test whether a weak-loaded CFM function exists */
11 #define PyMac_PRECHECK(rtn) do { if ( &rtn == NULL )  {\
12         PyErr_SetString(PyExc_NotImplementedError, \
13             "Not available in this shared library/OS version"); \
14         return NULL; \
15     }} while(0)
16 
17 
18 #include <Carbon/Carbon.h>
19 
20 #ifdef USE_TOOLBOX_OBJECT_GLUE
21 extern PyObject *_ListObj_New(ListHandle);
22 extern int _ListObj_Convert(PyObject *, ListHandle *);
23 
24 #define ListObj_New _ListObj_New
25 #define ListObj_Convert _ListObj_Convert
26 #endif
27 
28 #define as_List(x) ((ListHandle)x)
29 #define as_Resource(lh) ((Handle)lh)
30 
31 static ListDefUPP myListDefFunctionUPP;
32 
33 
34 static PyObject *List_Error;
35 
36 /* ------------------------ Object type List ------------------------ */
37 
38 PyTypeObject List_Type;
39 
40 #define ListObj_Check(x) ((x)->ob_type == &List_Type || PyObject_TypeCheck((x), &List_Type))
41 
42 typedef struct ListObject {
43     PyObject_HEAD
44     ListHandle ob_itself;
45     PyObject *ob_ldef_func;
46     int ob_must_be_disposed;
47 } ListObject;
48 
ListObj_New(ListHandle itself)49 PyObject *ListObj_New(ListHandle itself)
50 {
51     ListObject *it;
52     if (itself == NULL) {
53                                     PyErr_SetString(List_Error,"Cannot create null List");
54                                     return NULL;
55                             }
56     it = PyObject_NEW(ListObject, &List_Type);
57     if (it == NULL) return NULL;
58     it->ob_itself = itself;
59     it->ob_ldef_func = NULL;
60     it->ob_must_be_disposed = 1;
61     SetListRefCon(itself, (long)it);
62     return (PyObject *)it;
63 }
64 
ListObj_Convert(PyObject * v,ListHandle * p_itself)65 int ListObj_Convert(PyObject *v, ListHandle *p_itself)
66 {
67     if (!ListObj_Check(v))
68     {
69         PyErr_SetString(PyExc_TypeError, "List required");
70         return 0;
71     }
72     *p_itself = ((ListObject *)v)->ob_itself;
73     return 1;
74 }
75 
ListObj_dealloc(ListObject * self)76 static void ListObj_dealloc(ListObject *self)
77 {
78     Py_CLEAR(self->ob_ldef_func);
79     SetListRefCon(self->ob_itself, (long)0);
80     if (self->ob_must_be_disposed && self->ob_itself) LDispose(self->ob_itself);
81     self->ob_type->tp_free((PyObject *)self);
82 }
83 
ListObj_LAddColumn(ListObject * _self,PyObject * _args)84 static PyObject *ListObj_LAddColumn(ListObject *_self, PyObject *_args)
85 {
86     PyObject *_res = NULL;
87     short _rv;
88     short count;
89     short colNum;
90     if (!PyArg_ParseTuple(_args, "hh",
91                           &count,
92                           &colNum))
93         return NULL;
94     _rv = LAddColumn(count,
95                      colNum,
96                      _self->ob_itself);
97     _res = Py_BuildValue("h",
98                          _rv);
99     return _res;
100 }
101 
ListObj_LAddRow(ListObject * _self,PyObject * _args)102 static PyObject *ListObj_LAddRow(ListObject *_self, PyObject *_args)
103 {
104     PyObject *_res = NULL;
105     short _rv;
106     short count;
107     short rowNum;
108     if (!PyArg_ParseTuple(_args, "hh",
109                           &count,
110                           &rowNum))
111         return NULL;
112     _rv = LAddRow(count,
113                   rowNum,
114                   _self->ob_itself);
115     _res = Py_BuildValue("h",
116                          _rv);
117     return _res;
118 }
119 
ListObj_LDelColumn(ListObject * _self,PyObject * _args)120 static PyObject *ListObj_LDelColumn(ListObject *_self, PyObject *_args)
121 {
122     PyObject *_res = NULL;
123     short count;
124     short colNum;
125     if (!PyArg_ParseTuple(_args, "hh",
126                           &count,
127                           &colNum))
128         return NULL;
129     LDelColumn(count,
130                colNum,
131                _self->ob_itself);
132     Py_INCREF(Py_None);
133     _res = Py_None;
134     return _res;
135 }
136 
ListObj_LDelRow(ListObject * _self,PyObject * _args)137 static PyObject *ListObj_LDelRow(ListObject *_self, PyObject *_args)
138 {
139     PyObject *_res = NULL;
140     short count;
141     short rowNum;
142     if (!PyArg_ParseTuple(_args, "hh",
143                           &count,
144                           &rowNum))
145         return NULL;
146     LDelRow(count,
147         rowNum,
148         _self->ob_itself);
149     Py_INCREF(Py_None);
150     _res = Py_None;
151     return _res;
152 }
153 
ListObj_LGetSelect(ListObject * _self,PyObject * _args)154 static PyObject *ListObj_LGetSelect(ListObject *_self, PyObject *_args)
155 {
156     PyObject *_res = NULL;
157     Boolean _rv;
158     Boolean next;
159     Point theCell;
160     if (!PyArg_ParseTuple(_args, "bO&",
161                           &next,
162                           PyMac_GetPoint, &theCell))
163         return NULL;
164     _rv = LGetSelect(next,
165                      &theCell,
166                      _self->ob_itself);
167     _res = Py_BuildValue("bO&",
168                          _rv,
169                          PyMac_BuildPoint, theCell);
170     return _res;
171 }
172 
ListObj_LLastClick(ListObject * _self,PyObject * _args)173 static PyObject *ListObj_LLastClick(ListObject *_self, PyObject *_args)
174 {
175     PyObject *_res = NULL;
176     Point _rv;
177     if (!PyArg_ParseTuple(_args, ""))
178         return NULL;
179     _rv = LLastClick(_self->ob_itself);
180     _res = Py_BuildValue("O&",
181                          PyMac_BuildPoint, _rv);
182     return _res;
183 }
184 
ListObj_LNextCell(ListObject * _self,PyObject * _args)185 static PyObject *ListObj_LNextCell(ListObject *_self, PyObject *_args)
186 {
187     PyObject *_res = NULL;
188     Boolean _rv;
189     Boolean hNext;
190     Boolean vNext;
191     Point theCell;
192     if (!PyArg_ParseTuple(_args, "bbO&",
193                           &hNext,
194                           &vNext,
195                           PyMac_GetPoint, &theCell))
196         return NULL;
197     _rv = LNextCell(hNext,
198                     vNext,
199                     &theCell,
200                     _self->ob_itself);
201     _res = Py_BuildValue("bO&",
202                          _rv,
203                          PyMac_BuildPoint, theCell);
204     return _res;
205 }
206 
ListObj_LSize(ListObject * _self,PyObject * _args)207 static PyObject *ListObj_LSize(ListObject *_self, PyObject *_args)
208 {
209     PyObject *_res = NULL;
210     short listWidth;
211     short listHeight;
212     if (!PyArg_ParseTuple(_args, "hh",
213                           &listWidth,
214                           &listHeight))
215         return NULL;
216     LSize(listWidth,
217           listHeight,
218           _self->ob_itself);
219     Py_INCREF(Py_None);
220     _res = Py_None;
221     return _res;
222 }
223 
ListObj_LSetDrawingMode(ListObject * _self,PyObject * _args)224 static PyObject *ListObj_LSetDrawingMode(ListObject *_self, PyObject *_args)
225 {
226     PyObject *_res = NULL;
227     Boolean drawIt;
228     if (!PyArg_ParseTuple(_args, "b",
229                           &drawIt))
230         return NULL;
231     LSetDrawingMode(drawIt,
232                     _self->ob_itself);
233     Py_INCREF(Py_None);
234     _res = Py_None;
235     return _res;
236 }
237 
ListObj_LScroll(ListObject * _self,PyObject * _args)238 static PyObject *ListObj_LScroll(ListObject *_self, PyObject *_args)
239 {
240     PyObject *_res = NULL;
241     short dCols;
242     short dRows;
243     if (!PyArg_ParseTuple(_args, "hh",
244                           &dCols,
245                           &dRows))
246         return NULL;
247     LScroll(dCols,
248         dRows,
249         _self->ob_itself);
250     Py_INCREF(Py_None);
251     _res = Py_None;
252     return _res;
253 }
254 
ListObj_LAutoScroll(ListObject * _self,PyObject * _args)255 static PyObject *ListObj_LAutoScroll(ListObject *_self, PyObject *_args)
256 {
257     PyObject *_res = NULL;
258     if (!PyArg_ParseTuple(_args, ""))
259         return NULL;
260     LAutoScroll(_self->ob_itself);
261     Py_INCREF(Py_None);
262     _res = Py_None;
263     return _res;
264 }
265 
ListObj_LUpdate(ListObject * _self,PyObject * _args)266 static PyObject *ListObj_LUpdate(ListObject *_self, PyObject *_args)
267 {
268     PyObject *_res = NULL;
269     RgnHandle theRgn;
270     if (!PyArg_ParseTuple(_args, "O&",
271                           ResObj_Convert, &theRgn))
272         return NULL;
273     LUpdate(theRgn,
274         _self->ob_itself);
275     Py_INCREF(Py_None);
276     _res = Py_None;
277     return _res;
278 }
279 
ListObj_LActivate(ListObject * _self,PyObject * _args)280 static PyObject *ListObj_LActivate(ListObject *_self, PyObject *_args)
281 {
282     PyObject *_res = NULL;
283     Boolean act;
284     if (!PyArg_ParseTuple(_args, "b",
285                           &act))
286         return NULL;
287     LActivate(act,
288               _self->ob_itself);
289     Py_INCREF(Py_None);
290     _res = Py_None;
291     return _res;
292 }
293 
ListObj_LCellSize(ListObject * _self,PyObject * _args)294 static PyObject *ListObj_LCellSize(ListObject *_self, PyObject *_args)
295 {
296     PyObject *_res = NULL;
297     Point cSize;
298     if (!PyArg_ParseTuple(_args, "O&",
299                           PyMac_GetPoint, &cSize))
300         return NULL;
301     LCellSize(cSize,
302               _self->ob_itself);
303     Py_INCREF(Py_None);
304     _res = Py_None;
305     return _res;
306 }
307 
ListObj_LClick(ListObject * _self,PyObject * _args)308 static PyObject *ListObj_LClick(ListObject *_self, PyObject *_args)
309 {
310     PyObject *_res = NULL;
311     Boolean _rv;
312     Point pt;
313     EventModifiers modifiers;
314     if (!PyArg_ParseTuple(_args, "O&H",
315                           PyMac_GetPoint, &pt,
316                           &modifiers))
317         return NULL;
318     _rv = LClick(pt,
319                  modifiers,
320                  _self->ob_itself);
321     _res = Py_BuildValue("b",
322                          _rv);
323     return _res;
324 }
325 
ListObj_LAddToCell(ListObject * _self,PyObject * _args)326 static PyObject *ListObj_LAddToCell(ListObject *_self, PyObject *_args)
327 {
328     PyObject *_res = NULL;
329     char *dataPtr__in__;
330     short dataPtr__len__;
331     int dataPtr__in_len__;
332     Point theCell;
333     if (!PyArg_ParseTuple(_args, "s#O&",
334                           &dataPtr__in__, &dataPtr__in_len__,
335                           PyMac_GetPoint, &theCell))
336         return NULL;
337     dataPtr__len__ = dataPtr__in_len__;
338     LAddToCell(dataPtr__in__, dataPtr__len__,
339                theCell,
340                _self->ob_itself);
341     Py_INCREF(Py_None);
342     _res = Py_None;
343     return _res;
344 }
345 
ListObj_LClrCell(ListObject * _self,PyObject * _args)346 static PyObject *ListObj_LClrCell(ListObject *_self, PyObject *_args)
347 {
348     PyObject *_res = NULL;
349     Point theCell;
350     if (!PyArg_ParseTuple(_args, "O&",
351                           PyMac_GetPoint, &theCell))
352         return NULL;
353     LClrCell(theCell,
354              _self->ob_itself);
355     Py_INCREF(Py_None);
356     _res = Py_None;
357     return _res;
358 }
359 
ListObj_LGetCell(ListObject * _self,PyObject * _args)360 static PyObject *ListObj_LGetCell(ListObject *_self, PyObject *_args)
361 {
362     PyObject *_res = NULL;
363     char *dataPtr__out__;
364     short dataPtr__len__;
365     int dataPtr__in_len__;
366     Point theCell;
367     if (!PyArg_ParseTuple(_args, "iO&",
368                           &dataPtr__in_len__,
369                           PyMac_GetPoint, &theCell))
370         return NULL;
371     if ((dataPtr__out__ = malloc(dataPtr__in_len__)) == NULL)
372     {
373         PyErr_NoMemory();
374         goto dataPtr__error__;
375     }
376     dataPtr__len__ = dataPtr__in_len__;
377     LGetCell(dataPtr__out__, &dataPtr__len__,
378              theCell,
379              _self->ob_itself);
380     _res = Py_BuildValue("s#",
381                          dataPtr__out__, (int)dataPtr__len__);
382     free(dataPtr__out__);
383  dataPtr__error__: ;
384     return _res;
385 }
386 
ListObj_LRect(ListObject * _self,PyObject * _args)387 static PyObject *ListObj_LRect(ListObject *_self, PyObject *_args)
388 {
389     PyObject *_res = NULL;
390     Rect cellRect;
391     Point theCell;
392     if (!PyArg_ParseTuple(_args, "O&",
393                           PyMac_GetPoint, &theCell))
394         return NULL;
395     LRect(&cellRect,
396           theCell,
397           _self->ob_itself);
398     _res = Py_BuildValue("O&",
399                          PyMac_BuildRect, &cellRect);
400     return _res;
401 }
402 
ListObj_LSetCell(ListObject * _self,PyObject * _args)403 static PyObject *ListObj_LSetCell(ListObject *_self, PyObject *_args)
404 {
405     PyObject *_res = NULL;
406     char *dataPtr__in__;
407     short dataPtr__len__;
408     int dataPtr__in_len__;
409     Point theCell;
410     if (!PyArg_ParseTuple(_args, "s#O&",
411                           &dataPtr__in__, &dataPtr__in_len__,
412                           PyMac_GetPoint, &theCell))
413         return NULL;
414     dataPtr__len__ = dataPtr__in_len__;
415     LSetCell(dataPtr__in__, dataPtr__len__,
416              theCell,
417              _self->ob_itself);
418     Py_INCREF(Py_None);
419     _res = Py_None;
420     return _res;
421 }
422 
ListObj_LSetSelect(ListObject * _self,PyObject * _args)423 static PyObject *ListObj_LSetSelect(ListObject *_self, PyObject *_args)
424 {
425     PyObject *_res = NULL;
426     Boolean setIt;
427     Point theCell;
428     if (!PyArg_ParseTuple(_args, "bO&",
429                           &setIt,
430                           PyMac_GetPoint, &theCell))
431         return NULL;
432     LSetSelect(setIt,
433                theCell,
434                _self->ob_itself);
435     Py_INCREF(Py_None);
436     _res = Py_None;
437     return _res;
438 }
439 
ListObj_LDraw(ListObject * _self,PyObject * _args)440 static PyObject *ListObj_LDraw(ListObject *_self, PyObject *_args)
441 {
442     PyObject *_res = NULL;
443     Point theCell;
444     if (!PyArg_ParseTuple(_args, "O&",
445                           PyMac_GetPoint, &theCell))
446         return NULL;
447     LDraw(theCell,
448           _self->ob_itself);
449     Py_INCREF(Py_None);
450     _res = Py_None;
451     return _res;
452 }
453 
ListObj_LGetCellDataLocation(ListObject * _self,PyObject * _args)454 static PyObject *ListObj_LGetCellDataLocation(ListObject *_self, PyObject *_args)
455 {
456     PyObject *_res = NULL;
457     short offset;
458     short len;
459     Point theCell;
460     if (!PyArg_ParseTuple(_args, "O&",
461                           PyMac_GetPoint, &theCell))
462         return NULL;
463     LGetCellDataLocation(&offset,
464                          &len,
465                          theCell,
466                          _self->ob_itself);
467     _res = Py_BuildValue("hh",
468                          offset,
469                          len);
470     return _res;
471 }
472 
ListObj_GetListPort(ListObject * _self,PyObject * _args)473 static PyObject *ListObj_GetListPort(ListObject *_self, PyObject *_args)
474 {
475     PyObject *_res = NULL;
476     CGrafPtr _rv;
477     if (!PyArg_ParseTuple(_args, ""))
478         return NULL;
479     _rv = GetListPort(_self->ob_itself);
480     _res = Py_BuildValue("O&",
481                          GrafObj_New, _rv);
482     return _res;
483 }
484 
ListObj_GetListVerticalScrollBar(ListObject * _self,PyObject * _args)485 static PyObject *ListObj_GetListVerticalScrollBar(ListObject *_self, PyObject *_args)
486 {
487     PyObject *_res = NULL;
488     ControlHandle _rv;
489     if (!PyArg_ParseTuple(_args, ""))
490         return NULL;
491     _rv = GetListVerticalScrollBar(_self->ob_itself);
492     _res = Py_BuildValue("O&",
493                          CtlObj_New, _rv);
494     return _res;
495 }
496 
ListObj_GetListHorizontalScrollBar(ListObject * _self,PyObject * _args)497 static PyObject *ListObj_GetListHorizontalScrollBar(ListObject *_self, PyObject *_args)
498 {
499     PyObject *_res = NULL;
500     ControlHandle _rv;
501     if (!PyArg_ParseTuple(_args, ""))
502         return NULL;
503     _rv = GetListHorizontalScrollBar(_self->ob_itself);
504     _res = Py_BuildValue("O&",
505                          CtlObj_New, _rv);
506     return _res;
507 }
508 
ListObj_GetListActive(ListObject * _self,PyObject * _args)509 static PyObject *ListObj_GetListActive(ListObject *_self, PyObject *_args)
510 {
511     PyObject *_res = NULL;
512     Boolean _rv;
513     if (!PyArg_ParseTuple(_args, ""))
514         return NULL;
515     _rv = GetListActive(_self->ob_itself);
516     _res = Py_BuildValue("b",
517                          _rv);
518     return _res;
519 }
520 
ListObj_GetListClickTime(ListObject * _self,PyObject * _args)521 static PyObject *ListObj_GetListClickTime(ListObject *_self, PyObject *_args)
522 {
523     PyObject *_res = NULL;
524     SInt32 _rv;
525     if (!PyArg_ParseTuple(_args, ""))
526         return NULL;
527     _rv = GetListClickTime(_self->ob_itself);
528     _res = Py_BuildValue("l",
529                          _rv);
530     return _res;
531 }
532 
ListObj_GetListRefCon(ListObject * _self,PyObject * _args)533 static PyObject *ListObj_GetListRefCon(ListObject *_self, PyObject *_args)
534 {
535     PyObject *_res = NULL;
536     SInt32 _rv;
537     if (!PyArg_ParseTuple(_args, ""))
538         return NULL;
539     _rv = GetListRefCon(_self->ob_itself);
540     _res = Py_BuildValue("l",
541                          _rv);
542     return _res;
543 }
544 
ListObj_GetListDefinition(ListObject * _self,PyObject * _args)545 static PyObject *ListObj_GetListDefinition(ListObject *_self, PyObject *_args)
546 {
547     PyObject *_res = NULL;
548     Handle _rv;
549     if (!PyArg_ParseTuple(_args, ""))
550         return NULL;
551     _rv = GetListDefinition(_self->ob_itself);
552     _res = Py_BuildValue("O&",
553                          ResObj_New, _rv);
554     return _res;
555 }
556 
ListObj_GetListUserHandle(ListObject * _self,PyObject * _args)557 static PyObject *ListObj_GetListUserHandle(ListObject *_self, PyObject *_args)
558 {
559     PyObject *_res = NULL;
560     Handle _rv;
561     if (!PyArg_ParseTuple(_args, ""))
562         return NULL;
563     _rv = GetListUserHandle(_self->ob_itself);
564     _res = Py_BuildValue("O&",
565                          ResObj_New, _rv);
566     return _res;
567 }
568 
ListObj_GetListDataHandle(ListObject * _self,PyObject * _args)569 static PyObject *ListObj_GetListDataHandle(ListObject *_self, PyObject *_args)
570 {
571     PyObject *_res = NULL;
572     DataHandle _rv;
573     if (!PyArg_ParseTuple(_args, ""))
574         return NULL;
575     _rv = GetListDataHandle(_self->ob_itself);
576     _res = Py_BuildValue("O&",
577                          ResObj_New, _rv);
578     return _res;
579 }
580 
ListObj_GetListFlags(ListObject * _self,PyObject * _args)581 static PyObject *ListObj_GetListFlags(ListObject *_self, PyObject *_args)
582 {
583     PyObject *_res = NULL;
584     OptionBits _rv;
585     if (!PyArg_ParseTuple(_args, ""))
586         return NULL;
587     _rv = GetListFlags(_self->ob_itself);
588     _res = Py_BuildValue("l",
589                          _rv);
590     return _res;
591 }
592 
ListObj_GetListSelectionFlags(ListObject * _self,PyObject * _args)593 static PyObject *ListObj_GetListSelectionFlags(ListObject *_self, PyObject *_args)
594 {
595     PyObject *_res = NULL;
596     OptionBits _rv;
597     if (!PyArg_ParseTuple(_args, ""))
598         return NULL;
599     _rv = GetListSelectionFlags(_self->ob_itself);
600     _res = Py_BuildValue("l",
601                          _rv);
602     return _res;
603 }
604 
ListObj_as_Resource(ListObject * _self,PyObject * _args)605 static PyObject *ListObj_as_Resource(ListObject *_self, PyObject *_args)
606 {
607     PyObject *_res = NULL;
608     Handle _rv;
609     if (!PyArg_ParseTuple(_args, ""))
610         return NULL;
611     _rv = as_Resource(_self->ob_itself);
612     _res = Py_BuildValue("O&",
613                          ResObj_New, _rv);
614     return _res;
615 }
616 
617 static PyMethodDef ListObj_methods[] = {
618     {"LAddColumn", (PyCFunction)ListObj_LAddColumn, 1,
619      PyDoc_STR("(short count, short colNum) -> (short _rv)")},
620     {"LAddRow", (PyCFunction)ListObj_LAddRow, 1,
621      PyDoc_STR("(short count, short rowNum) -> (short _rv)")},
622     {"LDelColumn", (PyCFunction)ListObj_LDelColumn, 1,
623      PyDoc_STR("(short count, short colNum) -> None")},
624     {"LDelRow", (PyCFunction)ListObj_LDelRow, 1,
625      PyDoc_STR("(short count, short rowNum) -> None")},
626     {"LGetSelect", (PyCFunction)ListObj_LGetSelect, 1,
627      PyDoc_STR("(Boolean next, Point theCell) -> (Boolean _rv, Point theCell)")},
628     {"LLastClick", (PyCFunction)ListObj_LLastClick, 1,
629      PyDoc_STR("() -> (Point _rv)")},
630     {"LNextCell", (PyCFunction)ListObj_LNextCell, 1,
631      PyDoc_STR("(Boolean hNext, Boolean vNext, Point theCell) -> (Boolean _rv, Point theCell)")},
632     {"LSize", (PyCFunction)ListObj_LSize, 1,
633      PyDoc_STR("(short listWidth, short listHeight) -> None")},
634     {"LSetDrawingMode", (PyCFunction)ListObj_LSetDrawingMode, 1,
635      PyDoc_STR("(Boolean drawIt) -> None")},
636     {"LScroll", (PyCFunction)ListObj_LScroll, 1,
637      PyDoc_STR("(short dCols, short dRows) -> None")},
638     {"LAutoScroll", (PyCFunction)ListObj_LAutoScroll, 1,
639      PyDoc_STR("() -> None")},
640     {"LUpdate", (PyCFunction)ListObj_LUpdate, 1,
641      PyDoc_STR("(RgnHandle theRgn) -> None")},
642     {"LActivate", (PyCFunction)ListObj_LActivate, 1,
643      PyDoc_STR("(Boolean act) -> None")},
644     {"LCellSize", (PyCFunction)ListObj_LCellSize, 1,
645      PyDoc_STR("(Point cSize) -> None")},
646     {"LClick", (PyCFunction)ListObj_LClick, 1,
647      PyDoc_STR("(Point pt, EventModifiers modifiers) -> (Boolean _rv)")},
648     {"LAddToCell", (PyCFunction)ListObj_LAddToCell, 1,
649      PyDoc_STR("(Buffer dataPtr, Point theCell) -> None")},
650     {"LClrCell", (PyCFunction)ListObj_LClrCell, 1,
651      PyDoc_STR("(Point theCell) -> None")},
652     {"LGetCell", (PyCFunction)ListObj_LGetCell, 1,
653      PyDoc_STR("(Buffer dataPtr, Point theCell) -> (Buffer dataPtr)")},
654     {"LRect", (PyCFunction)ListObj_LRect, 1,
655      PyDoc_STR("(Point theCell) -> (Rect cellRect)")},
656     {"LSetCell", (PyCFunction)ListObj_LSetCell, 1,
657      PyDoc_STR("(Buffer dataPtr, Point theCell) -> None")},
658     {"LSetSelect", (PyCFunction)ListObj_LSetSelect, 1,
659      PyDoc_STR("(Boolean setIt, Point theCell) -> None")},
660     {"LDraw", (PyCFunction)ListObj_LDraw, 1,
661      PyDoc_STR("(Point theCell) -> None")},
662     {"LGetCellDataLocation", (PyCFunction)ListObj_LGetCellDataLocation, 1,
663      PyDoc_STR("(Point theCell) -> (short offset, short len)")},
664     {"GetListPort", (PyCFunction)ListObj_GetListPort, 1,
665      PyDoc_STR("() -> (CGrafPtr _rv)")},
666     {"GetListVerticalScrollBar", (PyCFunction)ListObj_GetListVerticalScrollBar, 1,
667      PyDoc_STR("() -> (ControlHandle _rv)")},
668     {"GetListHorizontalScrollBar", (PyCFunction)ListObj_GetListHorizontalScrollBar, 1,
669      PyDoc_STR("() -> (ControlHandle _rv)")},
670     {"GetListActive", (PyCFunction)ListObj_GetListActive, 1,
671      PyDoc_STR("() -> (Boolean _rv)")},
672     {"GetListClickTime", (PyCFunction)ListObj_GetListClickTime, 1,
673      PyDoc_STR("() -> (SInt32 _rv)")},
674     {"GetListRefCon", (PyCFunction)ListObj_GetListRefCon, 1,
675      PyDoc_STR("() -> (SInt32 _rv)")},
676     {"GetListDefinition", (PyCFunction)ListObj_GetListDefinition, 1,
677      PyDoc_STR("() -> (Handle _rv)")},
678     {"GetListUserHandle", (PyCFunction)ListObj_GetListUserHandle, 1,
679      PyDoc_STR("() -> (Handle _rv)")},
680     {"GetListDataHandle", (PyCFunction)ListObj_GetListDataHandle, 1,
681      PyDoc_STR("() -> (DataHandle _rv)")},
682     {"GetListFlags", (PyCFunction)ListObj_GetListFlags, 1,
683      PyDoc_STR("() -> (OptionBits _rv)")},
684     {"GetListSelectionFlags", (PyCFunction)ListObj_GetListSelectionFlags, 1,
685      PyDoc_STR("() -> (OptionBits _rv)")},
686     {"as_Resource", (PyCFunction)ListObj_as_Resource, 1,
687      PyDoc_STR("() -> (Handle _rv)")},
688     {NULL, NULL, 0}
689 };
690 
ListObj_get_listFlags(ListObject * self,void * closure)691 static PyObject *ListObj_get_listFlags(ListObject *self, void *closure)
692 {
693     return Py_BuildValue("l", (long)GetListFlags(self->ob_itself) & 0xff);
694 }
695 
ListObj_set_listFlags(ListObject * self,PyObject * v,void * closure)696 static int ListObj_set_listFlags(ListObject *self, PyObject *v, void *closure)
697 {
698     if (!PyArg_Parse(v, "B", &(*self->ob_itself)->listFlags)) return -1;
699     return 0;
700 }
701 
ListObj_get_selFlags(ListObject * self,void * closure)702 static PyObject *ListObj_get_selFlags(ListObject *self, void *closure)
703 {
704     return Py_BuildValue("l", (long)GetListSelectionFlags(self->ob_itself) & 0xff);
705 }
706 
ListObj_set_selFlags(ListObject * self,PyObject * v,void * closure)707 static int ListObj_set_selFlags(ListObject *self, PyObject *v, void *closure)
708 {
709     if (!PyArg_Parse(v, "B", &(*self->ob_itself)->selFlags)) return -1;
710     return 0;
711 }
712 
ListObj_get_cellSize(ListObject * self,void * closure)713 static PyObject *ListObj_get_cellSize(ListObject *self, void *closure)
714 {
715     return Py_BuildValue("O&", PyMac_BuildPoint, (*self->ob_itself)->cellSize);
716 }
717 
ListObj_set_cellSize(ListObject * self,PyObject * v,void * closure)718 static int ListObj_set_cellSize(ListObject *self, PyObject *v, void *closure)
719 {
720     if (!PyArg_Parse(v, "O&", PyMac_GetPoint, &(*self->ob_itself)->cellSize)) return -1;
721     return 0;
722 }
723 
724 static PyGetSetDef ListObj_getsetlist[] = {
725     {"listFlags", (getter)ListObj_get_listFlags, (setter)ListObj_set_listFlags, NULL},
726     {"selFlags", (getter)ListObj_get_selFlags, (setter)ListObj_set_selFlags, NULL},
727     {"cellSize", (getter)ListObj_get_cellSize, (setter)ListObj_set_cellSize, NULL},
728     {NULL, NULL, NULL, NULL},
729 };
730 
731 
732 #define ListObj_compare NULL
733 
734 #define ListObj_repr NULL
735 
736 #define ListObj_hash NULL
737 #define ListObj_tp_init 0
738 
739 #define ListObj_tp_alloc PyType_GenericAlloc
740 
ListObj_tp_new(PyTypeObject * type,PyObject * _args,PyObject * _kwds)741 static PyObject *ListObj_tp_new(PyTypeObject *type, PyObject *_args, PyObject *_kwds)
742 {
743     PyObject *_self;
744     ListHandle itself;
745     char *kw[] = {"itself", 0};
746 
747     if (!PyArg_ParseTupleAndKeywords(_args, _kwds, "O&", kw, ListObj_Convert, &itself)) return NULL;
748     if ((_self = type->tp_alloc(type, 0)) == NULL) return NULL;
749     ((ListObject *)_self)->ob_itself = itself;
750     return _self;
751 }
752 
753 #define ListObj_tp_free PyObject_Del
754 
755 
756 PyTypeObject List_Type = {
757     PyObject_HEAD_INIT(NULL)
758     0, /*ob_size*/
759     "_List.List", /*tp_name*/
760     sizeof(ListObject), /*tp_basicsize*/
761     0, /*tp_itemsize*/
762     /* methods */
763     (destructor) ListObj_dealloc, /*tp_dealloc*/
764     0, /*tp_print*/
765     (getattrfunc)0, /*tp_getattr*/
766     (setattrfunc)0, /*tp_setattr*/
767     (cmpfunc) ListObj_compare, /*tp_compare*/
768     (reprfunc) ListObj_repr, /*tp_repr*/
769     (PyNumberMethods *)0, /* tp_as_number */
770     (PySequenceMethods *)0, /* tp_as_sequence */
771     (PyMappingMethods *)0, /* tp_as_mapping */
772     (hashfunc) ListObj_hash, /*tp_hash*/
773     0, /*tp_call*/
774     0, /*tp_str*/
775     PyObject_GenericGetAttr, /*tp_getattro*/
776     PyObject_GenericSetAttr, /*tp_setattro */
777     0, /*tp_as_buffer*/
778     Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE, /* tp_flags */
779     0, /*tp_doc*/
780     0, /*tp_traverse*/
781     0, /*tp_clear*/
782     0, /*tp_richcompare*/
783     0, /*tp_weaklistoffset*/
784     0, /*tp_iter*/
785     0, /*tp_iternext*/
786     ListObj_methods, /* tp_methods */
787     0, /*tp_members*/
788     ListObj_getsetlist, /*tp_getset*/
789     0, /*tp_base*/
790     0, /*tp_dict*/
791     0, /*tp_descr_get*/
792     0, /*tp_descr_set*/
793     0, /*tp_dictoffset*/
794     ListObj_tp_init, /* tp_init */
795     ListObj_tp_alloc, /* tp_alloc */
796     ListObj_tp_new, /* tp_new */
797     ListObj_tp_free, /* tp_free */
798 };
799 
800 /* ---------------------- End object type List ---------------------- */
801 
802 
List_CreateCustomList(PyObject * _self,PyObject * _args)803 static PyObject *List_CreateCustomList(PyObject *_self, PyObject *_args)
804 {
805     PyObject *_res = NULL;
806     Rect rView;
807     Rect dataBounds;
808     Point cellSize;
809 
810     PyObject *listDefFunc;
811     ListDefSpec theSpec;
812     WindowPtr theWindow;
813     Boolean drawIt;
814     Boolean hasGrow;
815     Boolean scrollHoriz;
816     Boolean scrollVert;
817     ListHandle outList;
818 
819     if (!PyArg_ParseTuple(_args, "O&O&O&(iO)O&bbbb",
820                           PyMac_GetRect, &rView,
821                           PyMac_GetRect, &dataBounds,
822                           PyMac_GetPoint, &cellSize,
823                           &theSpec.defType, &listDefFunc,
824                           WinObj_Convert, &theWindow,
825                           &drawIt,
826                           &hasGrow,
827                           &scrollHoriz,
828                           &scrollVert))
829         return NULL;
830 
831 
832     /* Carbon applications use the CreateCustomList API */
833     theSpec.u.userProc = myListDefFunctionUPP;
834     CreateCustomList(&rView,
835                      &dataBounds,
836                      cellSize,
837                      &theSpec,
838                      theWindow,
839                      drawIt,
840                      hasGrow,
841                      scrollHoriz,
842                      scrollVert,
843                      &outList);
844 
845 
846     _res = ListObj_New(outList);
847     if (_res == NULL)
848         return NULL;
849     Py_INCREF(listDefFunc);
850     ((ListObject*)_res)->ob_ldef_func = listDefFunc;
851     return _res;
852 }
853 
List_LNew(PyObject * _self,PyObject * _args)854 static PyObject *List_LNew(PyObject *_self, PyObject *_args)
855 {
856     PyObject *_res = NULL;
857     ListHandle _rv;
858     Rect rView;
859     Rect dataBounds;
860     Point cSize;
861     short theProc;
862     WindowPtr theWindow;
863     Boolean drawIt;
864     Boolean hasGrow;
865     Boolean scrollHoriz;
866     Boolean scrollVert;
867     if (!PyArg_ParseTuple(_args, "O&O&O&hO&bbbb",
868                           PyMac_GetRect, &rView,
869                           PyMac_GetRect, &dataBounds,
870                           PyMac_GetPoint, &cSize,
871                           &theProc,
872                           WinObj_Convert, &theWindow,
873                           &drawIt,
874                           &hasGrow,
875                           &scrollHoriz,
876                           &scrollVert))
877         return NULL;
878     _rv = LNew(&rView,
879                &dataBounds,
880                cSize,
881                theProc,
882                theWindow,
883                drawIt,
884                hasGrow,
885                scrollHoriz,
886                scrollVert);
887     _res = Py_BuildValue("O&",
888                          ListObj_New, _rv);
889     return _res;
890 }
891 
List_SetListViewBounds(PyObject * _self,PyObject * _args)892 static PyObject *List_SetListViewBounds(PyObject *_self, PyObject *_args)
893 {
894     PyObject *_res = NULL;
895     ListHandle list;
896     Rect view;
897     if (!PyArg_ParseTuple(_args, "O&O&",
898                           ListObj_Convert, &list,
899                           PyMac_GetRect, &view))
900         return NULL;
901     SetListViewBounds(list,
902                       &view);
903     Py_INCREF(Py_None);
904     _res = Py_None;
905     return _res;
906 }
907 
List_SetListPort(PyObject * _self,PyObject * _args)908 static PyObject *List_SetListPort(PyObject *_self, PyObject *_args)
909 {
910     PyObject *_res = NULL;
911     ListHandle list;
912     CGrafPtr port;
913     if (!PyArg_ParseTuple(_args, "O&O&",
914                           ListObj_Convert, &list,
915                           GrafObj_Convert, &port))
916         return NULL;
917     SetListPort(list,
918                 port);
919     Py_INCREF(Py_None);
920     _res = Py_None;
921     return _res;
922 }
923 
List_SetListCellIndent(PyObject * _self,PyObject * _args)924 static PyObject *List_SetListCellIndent(PyObject *_self, PyObject *_args)
925 {
926     PyObject *_res = NULL;
927     ListHandle list;
928     Point indent;
929     if (!PyArg_ParseTuple(_args, "O&O&",
930                           ListObj_Convert, &list,
931                           PyMac_GetPoint, &indent))
932         return NULL;
933     SetListCellIndent(list,
934                       &indent);
935     Py_INCREF(Py_None);
936     _res = Py_None;
937     return _res;
938 }
939 
List_SetListClickTime(PyObject * _self,PyObject * _args)940 static PyObject *List_SetListClickTime(PyObject *_self, PyObject *_args)
941 {
942     PyObject *_res = NULL;
943     ListHandle list;
944     SInt32 time;
945     if (!PyArg_ParseTuple(_args, "O&l",
946                           ListObj_Convert, &list,
947                           &time))
948         return NULL;
949     SetListClickTime(list,
950                      time);
951     Py_INCREF(Py_None);
952     _res = Py_None;
953     return _res;
954 }
955 
List_SetListRefCon(PyObject * _self,PyObject * _args)956 static PyObject *List_SetListRefCon(PyObject *_self, PyObject *_args)
957 {
958     PyObject *_res = NULL;
959     ListHandle list;
960     SInt32 refCon;
961     if (!PyArg_ParseTuple(_args, "O&l",
962                           ListObj_Convert, &list,
963                           &refCon))
964         return NULL;
965     SetListRefCon(list,
966                   refCon);
967     Py_INCREF(Py_None);
968     _res = Py_None;
969     return _res;
970 }
971 
List_SetListUserHandle(PyObject * _self,PyObject * _args)972 static PyObject *List_SetListUserHandle(PyObject *_self, PyObject *_args)
973 {
974     PyObject *_res = NULL;
975     ListHandle list;
976     Handle userHandle;
977     if (!PyArg_ParseTuple(_args, "O&O&",
978                           ListObj_Convert, &list,
979                           ResObj_Convert, &userHandle))
980         return NULL;
981     SetListUserHandle(list,
982                       userHandle);
983     Py_INCREF(Py_None);
984     _res = Py_None;
985     return _res;
986 }
987 
List_SetListFlags(PyObject * _self,PyObject * _args)988 static PyObject *List_SetListFlags(PyObject *_self, PyObject *_args)
989 {
990     PyObject *_res = NULL;
991     ListHandle list;
992     OptionBits listFlags;
993     if (!PyArg_ParseTuple(_args, "O&l",
994                           ListObj_Convert, &list,
995                           &listFlags))
996         return NULL;
997     SetListFlags(list,
998                  listFlags);
999     Py_INCREF(Py_None);
1000     _res = Py_None;
1001     return _res;
1002 }
1003 
List_SetListSelectionFlags(PyObject * _self,PyObject * _args)1004 static PyObject *List_SetListSelectionFlags(PyObject *_self, PyObject *_args)
1005 {
1006     PyObject *_res = NULL;
1007     ListHandle list;
1008     OptionBits selectionFlags;
1009     if (!PyArg_ParseTuple(_args, "O&l",
1010                           ListObj_Convert, &list,
1011                           &selectionFlags))
1012         return NULL;
1013     SetListSelectionFlags(list,
1014                           selectionFlags);
1015     Py_INCREF(Py_None);
1016     _res = Py_None;
1017     return _res;
1018 }
1019 
List_as_List(PyObject * _self,PyObject * _args)1020 static PyObject *List_as_List(PyObject *_self, PyObject *_args)
1021 {
1022     PyObject *_res = NULL;
1023 
1024     Handle h;
1025     ListObject *l;
1026     if (!PyArg_ParseTuple(_args, "O&", ResObj_Convert, &h))
1027         return NULL;
1028     l = (ListObject *)ListObj_New(as_List(h));
1029     l->ob_must_be_disposed = 0;
1030     _res = Py_BuildValue("O", l);
1031     return _res;
1032 
1033 }
1034 #endif /* APPLE_SUPPORTS_QUICKTIME */
1035 
1036 static PyMethodDef List_methods[] = {
1037 #if APPLE_SUPPORTS_QUICKTIME
1038     {"CreateCustomList", (PyCFunction)List_CreateCustomList, 1,
1039      PyDoc_STR("(Rect rView, Rect dataBounds, Point cellSize, ListDefSpec theSpec, WindowPtr theWindow, Boolean drawIt, Boolean hasGrow, Boolean scrollHoriz, Boolean scrollVert) -> (ListHandle outList)")},
1040     {"LNew", (PyCFunction)List_LNew, 1,
1041      PyDoc_STR("(Rect rView, Rect dataBounds, Point cSize, short theProc, WindowPtr theWindow, Boolean drawIt, Boolean hasGrow, Boolean scrollHoriz, Boolean scrollVert) -> (ListHandle _rv)")},
1042     {"SetListViewBounds", (PyCFunction)List_SetListViewBounds, 1,
1043      PyDoc_STR("(ListHandle list, Rect view) -> None")},
1044     {"SetListPort", (PyCFunction)List_SetListPort, 1,
1045      PyDoc_STR("(ListHandle list, CGrafPtr port) -> None")},
1046     {"SetListCellIndent", (PyCFunction)List_SetListCellIndent, 1,
1047      PyDoc_STR("(ListHandle list, Point indent) -> None")},
1048     {"SetListClickTime", (PyCFunction)List_SetListClickTime, 1,
1049      PyDoc_STR("(ListHandle list, SInt32 time) -> None")},
1050     {"SetListRefCon", (PyCFunction)List_SetListRefCon, 1,
1051      PyDoc_STR("(ListHandle list, SInt32 refCon) -> None")},
1052     {"SetListUserHandle", (PyCFunction)List_SetListUserHandle, 1,
1053      PyDoc_STR("(ListHandle list, Handle userHandle) -> None")},
1054     {"SetListFlags", (PyCFunction)List_SetListFlags, 1,
1055      PyDoc_STR("(ListHandle list, OptionBits listFlags) -> None")},
1056     {"SetListSelectionFlags", (PyCFunction)List_SetListSelectionFlags, 1,
1057      PyDoc_STR("(ListHandle list, OptionBits selectionFlags) -> None")},
1058     {"as_List", (PyCFunction)List_as_List, 1,
1059      PyDoc_STR("(Resource)->List.\nReturns List object (which is not auto-freed!)")},
1060 #endif /* APPLE_SUPPORTS_QUICKTIME */
1061     {NULL, NULL, 0}
1062 };
1063 
1064 #if APPLE_SUPPORTS_QUICKTIME
1065 
1066 
myListDefFunction(SInt16 message,Boolean selected,Rect * cellRect,Cell theCell,SInt16 dataOffset,SInt16 dataLen,ListHandle theList)1067 static void myListDefFunction(SInt16 message,
1068                        Boolean selected,
1069                        Rect *cellRect,
1070                        Cell theCell,
1071                        SInt16 dataOffset,
1072                        SInt16 dataLen,
1073                        ListHandle theList)
1074 {
1075     PyObject *listDefFunc, *args, *rv=NULL;
1076     ListObject *self;
1077 
1078     self = (ListObject*)GetListRefCon(theList);
1079     if (self == NULL || self->ob_itself != theList)
1080         return;  /* nothing we can do */
1081     listDefFunc = self->ob_ldef_func;
1082     if (listDefFunc == NULL)
1083         return;  /* nothing we can do */
1084     args = Py_BuildValue("hbO&O&hhO", message,
1085                                       selected,
1086                                       PyMac_BuildRect, cellRect,
1087                                       PyMac_BuildPoint, theCell,
1088                                       dataOffset,
1089                                       dataLen,
1090                                       self);
1091     if (args != NULL) {
1092         rv = PyEval_CallObject(listDefFunc, args);
1093         Py_DECREF(args);
1094     }
1095     if (rv == NULL) {
1096         PySys_WriteStderr("error in list definition callback:\n");
1097         PyErr_Print();
1098     } else {
1099         Py_DECREF(rv);
1100     }
1101 }
1102 #endif /* APPLE_SUPPORTS_QUICKTIME */
1103 
1104 
init_List(void)1105 void init_List(void)
1106 {
1107     PyObject *m;
1108 #if APPLE_SUPPORTS_QUICKTIME
1109     PyObject *d;
1110 
1111 
1112 
1113     myListDefFunctionUPP = NewListDefUPP((ListDefProcPtr)myListDefFunction);
1114 
1115     PyMac_INIT_TOOLBOX_OBJECT_NEW(ListHandle, ListObj_New);
1116     PyMac_INIT_TOOLBOX_OBJECT_CONVERT(ListHandle, ListObj_Convert);
1117 #endif /* APPLE_SUPPORTS_QUICKTIME */
1118 
1119 
1120     m = Py_InitModule("_List", List_methods);
1121 #if APPLE_SUPPORTS_QUICKTIME
1122     d = PyModule_GetDict(m);
1123     List_Error = PyMac_GetOSErrException();
1124     if (List_Error == NULL ||
1125         PyDict_SetItemString(d, "Error", List_Error) != 0)
1126         return;
1127     List_Type.ob_type = &PyType_Type;
1128     if (PyType_Ready(&List_Type) < 0) return;
1129     Py_INCREF(&List_Type);
1130     PyModule_AddObject(m, "List", (PyObject *)&List_Type);
1131     /* Backward-compatible name */
1132     Py_INCREF(&List_Type);
1133     PyModule_AddObject(m, "ListType", (PyObject *)&List_Type);
1134 #endif /* APPLE_SUPPORTS_QUICKTIME */
1135 }
1136 
1137 /* ======================== End module _List ======================== */
1138 
1139