2 /* =========================== Module Cm ============================ */
8 #define SystemSevenOrLater 1
16 extern PyObject
*ResObj_New(Handle
);
17 extern int ResObj_Convert(PyObject
*, Handle
*);
18 extern PyObject
*OptResObj_New(Handle
);
19 extern int OptResObj_Convert(PyObject
*, Handle
*);
21 extern PyObject
*WinObj_New(WindowPtr
);
22 extern int WinObj_Convert(PyObject
*, WindowPtr
*);
23 extern PyTypeObject Window_Type
;
24 #define WinObj_Check(x) ((x)->ob_type == &Window_Type)
26 extern PyObject
*DlgObj_New(DialogPtr
);
27 extern int DlgObj_Convert(PyObject
*, DialogPtr
*);
28 extern PyTypeObject Dialog_Type
;
29 #define DlgObj_Check(x) ((x)->ob_type == &Dialog_Type)
31 extern PyObject
*MenuObj_New(MenuHandle
);
32 extern int MenuObj_Convert(PyObject
*, MenuHandle
*);
34 extern PyObject
*CtlObj_New(ControlHandle
);
35 extern int CtlObj_Convert(PyObject
*, ControlHandle
*);
37 extern PyObject
*GrafObj_New(GrafPtr
);
38 extern int GrafObj_Convert(PyObject
*, GrafPtr
*);
40 extern PyObject
*BMObj_New(BitMapPtr
);
41 extern int BMObj_Convert(PyObject
*, BitMapPtr
*);
43 extern PyObject
*WinObj_WhichWindow(WindowPtr
);
45 #include <Components.h>
48 ** Parse/generate ComponentDescriptor records
50 PyObject
*CmpDesc_New(itself
)
51 ComponentDescription
*itself
;
54 return Py_BuildValue("O&O&O&ll",
55 PyMac_BuildOSType
, itself
->componentType
,
56 PyMac_BuildOSType
, itself
->componentSubType
,
57 PyMac_BuildOSType
, itself
->componentManufacturer
,
58 itself
->componentFlags
, itself
->componentFlagsMask
);
61 CmpDesc_Convert(v
, p_itself
)
63 ComponentDescription
*p_itself
;
65 return PyArg_ParseTuple(v
, "O&O&O&ll",
66 PyMac_GetOSType
, &p_itself
->componentType
,
67 PyMac_GetOSType
, &p_itself
->componentSubType
,
68 PyMac_GetOSType
, &p_itself
->componentManufacturer
,
69 &p_itself
->componentFlags
, &p_itself
->componentFlagsMask
);
73 static PyObject
*Cm_Error
;
75 /* ----------------- Object type ComponentInstance ------------------ */
77 PyTypeObject ComponentInstance_Type
;
79 #define CmpInstObj_Check(x) ((x)->ob_type == &ComponentInstance_Type)
81 typedef struct ComponentInstanceObject
{
83 ComponentInstance ob_itself
;
84 } ComponentInstanceObject
;
86 PyObject
*CmpInstObj_New(itself
)
87 ComponentInstance itself
;
89 ComponentInstanceObject
*it
;
91 PyErr_SetString(Cm_Error
,"NULL ComponentInstance");
94 it
= PyObject_NEW(ComponentInstanceObject
, &ComponentInstance_Type
);
95 if (it
== NULL
) return NULL
;
96 it
->ob_itself
= itself
;
97 return (PyObject
*)it
;
99 CmpInstObj_Convert(v
, p_itself
)
101 ComponentInstance
*p_itself
;
103 if (!CmpInstObj_Check(v
))
105 PyErr_SetString(PyExc_TypeError
, "ComponentInstance required");
108 *p_itself
= ((ComponentInstanceObject
*)v
)->ob_itself
;
112 static void CmpInstObj_dealloc(self
)
113 ComponentInstanceObject
*self
;
115 /* Cleanup of self->ob_itself goes here */
119 static PyObject
*CmpInstObj_CloseComponent(_self
, _args
)
120 ComponentInstanceObject
*_self
;
123 PyObject
*_res
= NULL
;
125 if (!PyArg_ParseTuple(_args
, ""))
127 _err
= CloseComponent(_self
->ob_itself
);
128 if (_err
!= noErr
) return PyMac_Error(_err
);
134 static PyObject
*CmpInstObj_GetComponentInstanceError(_self
, _args
)
135 ComponentInstanceObject
*_self
;
138 PyObject
*_res
= NULL
;
140 if (!PyArg_ParseTuple(_args
, ""))
142 _err
= GetComponentInstanceError(_self
->ob_itself
);
143 if (_err
!= noErr
) return PyMac_Error(_err
);
149 static PyObject
*CmpInstObj_ComponentFunctionImplemented(_self
, _args
)
150 ComponentInstanceObject
*_self
;
153 PyObject
*_res
= NULL
;
156 if (!PyArg_ParseTuple(_args
, "h",
159 _rv
= ComponentFunctionImplemented(_self
->ob_itself
,
161 _res
= Py_BuildValue("l",
166 static PyObject
*CmpInstObj_GetComponentVersion(_self
, _args
)
167 ComponentInstanceObject
*_self
;
170 PyObject
*_res
= NULL
;
172 if (!PyArg_ParseTuple(_args
, ""))
174 _rv
= GetComponentVersion(_self
->ob_itself
);
175 _res
= Py_BuildValue("l",
180 static PyObject
*CmpInstObj_ComponentSetTarget(_self
, _args
)
181 ComponentInstanceObject
*_self
;
184 PyObject
*_res
= NULL
;
186 ComponentInstance target
;
187 if (!PyArg_ParseTuple(_args
, "O&",
188 CmpInstObj_Convert
, &target
))
190 _rv
= ComponentSetTarget(_self
->ob_itself
,
192 _res
= Py_BuildValue("l",
197 static PyObject
*CmpInstObj_SetComponentInstanceError(_self
, _args
)
198 ComponentInstanceObject
*_self
;
201 PyObject
*_res
= NULL
;
203 if (!PyArg_ParseTuple(_args
, "h",
206 SetComponentInstanceError(_self
->ob_itself
,
213 static PyObject
*CmpInstObj_GetComponentInstanceStorage(_self
, _args
)
214 ComponentInstanceObject
*_self
;
217 PyObject
*_res
= NULL
;
219 if (!PyArg_ParseTuple(_args
, ""))
221 _rv
= GetComponentInstanceStorage(_self
->ob_itself
);
222 _res
= Py_BuildValue("O&",
227 static PyObject
*CmpInstObj_SetComponentInstanceStorage(_self
, _args
)
228 ComponentInstanceObject
*_self
;
231 PyObject
*_res
= NULL
;
233 if (!PyArg_ParseTuple(_args
, "O&",
234 ResObj_Convert
, &theStorage
))
236 SetComponentInstanceStorage(_self
->ob_itself
,
243 static PyObject
*CmpInstObj_GetComponentInstanceA5(_self
, _args
)
244 ComponentInstanceObject
*_self
;
247 PyObject
*_res
= NULL
;
249 if (!PyArg_ParseTuple(_args
, ""))
251 _rv
= GetComponentInstanceA5(_self
->ob_itself
);
252 _res
= Py_BuildValue("l",
257 static PyObject
*CmpInstObj_SetComponentInstanceA5(_self
, _args
)
258 ComponentInstanceObject
*_self
;
261 PyObject
*_res
= NULL
;
263 if (!PyArg_ParseTuple(_args
, "l",
266 SetComponentInstanceA5(_self
->ob_itself
,
273 static PyMethodDef CmpInstObj_methods
[] = {
274 {"CloseComponent", (PyCFunction
)CmpInstObj_CloseComponent
, 1,
276 {"GetComponentInstanceError", (PyCFunction
)CmpInstObj_GetComponentInstanceError
, 1,
278 {"ComponentFunctionImplemented", (PyCFunction
)CmpInstObj_ComponentFunctionImplemented
, 1,
279 "(short ftnNumber) -> (long _rv)"},
280 {"GetComponentVersion", (PyCFunction
)CmpInstObj_GetComponentVersion
, 1,
282 {"ComponentSetTarget", (PyCFunction
)CmpInstObj_ComponentSetTarget
, 1,
283 "(ComponentInstance target) -> (long _rv)"},
284 {"SetComponentInstanceError", (PyCFunction
)CmpInstObj_SetComponentInstanceError
, 1,
285 "(OSErr theError) -> None"},
286 {"GetComponentInstanceStorage", (PyCFunction
)CmpInstObj_GetComponentInstanceStorage
, 1,
287 "() -> (Handle _rv)"},
288 {"SetComponentInstanceStorage", (PyCFunction
)CmpInstObj_SetComponentInstanceStorage
, 1,
289 "(Handle theStorage) -> None"},
290 {"GetComponentInstanceA5", (PyCFunction
)CmpInstObj_GetComponentInstanceA5
, 1,
292 {"SetComponentInstanceA5", (PyCFunction
)CmpInstObj_SetComponentInstanceA5
, 1,
293 "(long theA5) -> None"},
297 PyMethodChain CmpInstObj_chain
= { CmpInstObj_methods
, NULL
};
299 static PyObject
*CmpInstObj_getattr(self
, name
)
300 ComponentInstanceObject
*self
;
303 return Py_FindMethodInChain(&CmpInstObj_chain
, (PyObject
*)self
, name
);
306 #define CmpInstObj_setattr NULL
308 PyTypeObject ComponentInstance_Type
= {
309 PyObject_HEAD_INIT(&PyType_Type
)
311 "ComponentInstance", /*tp_name*/
312 sizeof(ComponentInstanceObject
), /*tp_basicsize*/
315 (destructor
) CmpInstObj_dealloc
, /*tp_dealloc*/
317 (getattrfunc
) CmpInstObj_getattr
, /*tp_getattr*/
318 (setattrfunc
) CmpInstObj_setattr
, /*tp_setattr*/
321 /* --------------- End object type ComponentInstance ---------------- */
324 /* --------------------- Object type Component ---------------------- */
326 PyTypeObject Component_Type
;
328 #define CmpObj_Check(x) ((x)->ob_type == &Component_Type)
330 typedef struct ComponentObject
{
335 PyObject
*CmpObj_New(itself
)
339 if (itself
== NULL
) {
340 /* XXXX Or should we return None? */
341 PyErr_SetString(Cm_Error
,"No such component");
344 it
= PyObject_NEW(ComponentObject
, &Component_Type
);
345 if (it
== NULL
) return NULL
;
346 it
->ob_itself
= itself
;
347 return (PyObject
*)it
;
349 CmpObj_Convert(v
, p_itself
)
353 if ( v
== Py_None
) {
357 if (!CmpObj_Check(v
))
359 PyErr_SetString(PyExc_TypeError
, "Component required");
362 *p_itself
= ((ComponentObject
*)v
)->ob_itself
;
366 static void CmpObj_dealloc(self
)
367 ComponentObject
*self
;
369 /* Cleanup of self->ob_itself goes here */
373 static PyObject
*CmpObj_UnregisterComponent(_self
, _args
)
374 ComponentObject
*_self
;
377 PyObject
*_res
= NULL
;
379 if (!PyArg_ParseTuple(_args
, ""))
381 _err
= UnregisterComponent(_self
->ob_itself
);
382 if (_err
!= noErr
) return PyMac_Error(_err
);
388 static PyObject
*CmpObj_GetComponentInfo(_self
, _args
)
389 ComponentObject
*_self
;
392 PyObject
*_res
= NULL
;
394 ComponentDescription cd
;
395 Handle componentName
;
396 Handle componentInfo
;
397 Handle componentIcon
;
398 if (!PyArg_ParseTuple(_args
, "O&O&O&",
399 ResObj_Convert
, &componentName
,
400 ResObj_Convert
, &componentInfo
,
401 ResObj_Convert
, &componentIcon
))
403 _err
= GetComponentInfo(_self
->ob_itself
,
408 if (_err
!= noErr
) return PyMac_Error(_err
);
409 _res
= Py_BuildValue("O&",
414 static PyObject
*CmpObj_OpenComponent(_self
, _args
)
415 ComponentObject
*_self
;
418 PyObject
*_res
= NULL
;
419 ComponentInstance _rv
;
420 if (!PyArg_ParseTuple(_args
, ""))
422 _rv
= OpenComponent(_self
->ob_itself
);
423 _res
= Py_BuildValue("O&",
424 CmpInstObj_New
, _rv
);
428 static PyObject
*CmpObj_GetComponentRefcon(_self
, _args
)
429 ComponentObject
*_self
;
432 PyObject
*_res
= NULL
;
434 if (!PyArg_ParseTuple(_args
, ""))
436 _rv
= GetComponentRefcon(_self
->ob_itself
);
437 _res
= Py_BuildValue("l",
442 static PyObject
*CmpObj_SetComponentRefcon(_self
, _args
)
443 ComponentObject
*_self
;
446 PyObject
*_res
= NULL
;
448 if (!PyArg_ParseTuple(_args
, "l",
451 SetComponentRefcon(_self
->ob_itself
,
458 static PyObject
*CmpObj_OpenComponentResFile(_self
, _args
)
459 ComponentObject
*_self
;
462 PyObject
*_res
= NULL
;
464 if (!PyArg_ParseTuple(_args
, ""))
466 _rv
= OpenComponentResFile(_self
->ob_itself
);
467 _res
= Py_BuildValue("h",
472 static PyObject
*CmpObj_CountComponentInstances(_self
, _args
)
473 ComponentObject
*_self
;
476 PyObject
*_res
= NULL
;
478 if (!PyArg_ParseTuple(_args
, ""))
480 _rv
= CountComponentInstances(_self
->ob_itself
);
481 _res
= Py_BuildValue("l",
486 static PyObject
*CmpObj_SetDefaultComponent(_self
, _args
)
487 ComponentObject
*_self
;
490 PyObject
*_res
= NULL
;
493 if (!PyArg_ParseTuple(_args
, "h",
496 _err
= SetDefaultComponent(_self
->ob_itself
,
498 if (_err
!= noErr
) return PyMac_Error(_err
);
504 static PyObject
*CmpObj_CaptureComponent(_self
, _args
)
505 ComponentObject
*_self
;
508 PyObject
*_res
= NULL
;
510 Component capturingComponent
;
511 if (!PyArg_ParseTuple(_args
, "O&",
512 CmpObj_Convert
, &capturingComponent
))
514 _rv
= CaptureComponent(_self
->ob_itself
,
516 _res
= Py_BuildValue("O&",
521 static PyObject
*CmpObj_UncaptureComponent(_self
, _args
)
522 ComponentObject
*_self
;
525 PyObject
*_res
= NULL
;
527 if (!PyArg_ParseTuple(_args
, ""))
529 _err
= UncaptureComponent(_self
->ob_itself
);
530 if (_err
!= noErr
) return PyMac_Error(_err
);
536 static PyObject
*CmpObj_GetComponentIconSuite(_self
, _args
)
537 ComponentObject
*_self
;
540 PyObject
*_res
= NULL
;
543 if (!PyArg_ParseTuple(_args
, ""))
545 _err
= GetComponentIconSuite(_self
->ob_itself
,
547 if (_err
!= noErr
) return PyMac_Error(_err
);
548 _res
= Py_BuildValue("O&",
549 ResObj_New
, iconSuite
);
553 static PyMethodDef CmpObj_methods
[] = {
554 {"UnregisterComponent", (PyCFunction
)CmpObj_UnregisterComponent
, 1,
556 {"GetComponentInfo", (PyCFunction
)CmpObj_GetComponentInfo
, 1,
557 "(Handle componentName, Handle componentInfo, Handle componentIcon) -> (ComponentDescription cd)"},
558 {"OpenComponent", (PyCFunction
)CmpObj_OpenComponent
, 1,
559 "() -> (ComponentInstance _rv)"},
560 {"GetComponentRefcon", (PyCFunction
)CmpObj_GetComponentRefcon
, 1,
562 {"SetComponentRefcon", (PyCFunction
)CmpObj_SetComponentRefcon
, 1,
563 "(long theRefcon) -> None"},
564 {"OpenComponentResFile", (PyCFunction
)CmpObj_OpenComponentResFile
, 1,
565 "() -> (short _rv)"},
566 {"CountComponentInstances", (PyCFunction
)CmpObj_CountComponentInstances
, 1,
568 {"SetDefaultComponent", (PyCFunction
)CmpObj_SetDefaultComponent
, 1,
569 "(short flags) -> None"},
570 {"CaptureComponent", (PyCFunction
)CmpObj_CaptureComponent
, 1,
571 "(Component capturingComponent) -> (Component _rv)"},
572 {"UncaptureComponent", (PyCFunction
)CmpObj_UncaptureComponent
, 1,
574 {"GetComponentIconSuite", (PyCFunction
)CmpObj_GetComponentIconSuite
, 1,
575 "() -> (Handle iconSuite)"},
579 PyMethodChain CmpObj_chain
= { CmpObj_methods
, NULL
};
581 static PyObject
*CmpObj_getattr(self
, name
)
582 ComponentObject
*self
;
585 return Py_FindMethodInChain(&CmpObj_chain
, (PyObject
*)self
, name
);
588 #define CmpObj_setattr NULL
590 PyTypeObject Component_Type
= {
591 PyObject_HEAD_INIT(&PyType_Type
)
593 "Component", /*tp_name*/
594 sizeof(ComponentObject
), /*tp_basicsize*/
597 (destructor
) CmpObj_dealloc
, /*tp_dealloc*/
599 (getattrfunc
) CmpObj_getattr
, /*tp_getattr*/
600 (setattrfunc
) CmpObj_setattr
, /*tp_setattr*/
603 /* ------------------- End object type Component -------------------- */
606 static PyObject
*Cm_RegisterComponentResource(_self
, _args
)
610 PyObject
*_res
= NULL
;
612 ComponentResourceHandle tr
;
614 if (!PyArg_ParseTuple(_args
, "O&h",
618 _rv
= RegisterComponentResource(tr
,
620 _res
= Py_BuildValue("O&",
625 static PyObject
*Cm_FindNextComponent(_self
, _args
)
629 PyObject
*_res
= NULL
;
631 Component aComponent
;
632 ComponentDescription looking
;
633 if (!PyArg_ParseTuple(_args
, "O&O&",
634 CmpObj_Convert
, &aComponent
,
635 CmpDesc_Convert
, &looking
))
637 _rv
= FindNextComponent(aComponent
,
639 _res
= Py_BuildValue("O&",
644 static PyObject
*Cm_CountComponents(_self
, _args
)
648 PyObject
*_res
= NULL
;
650 ComponentDescription looking
;
651 if (!PyArg_ParseTuple(_args
, "O&",
652 CmpDesc_Convert
, &looking
))
654 _rv
= CountComponents(&looking
);
655 _res
= Py_BuildValue("l",
660 static PyObject
*Cm_GetComponentListModSeed(_self
, _args
)
664 PyObject
*_res
= NULL
;
666 if (!PyArg_ParseTuple(_args
, ""))
668 _rv
= GetComponentListModSeed();
669 _res
= Py_BuildValue("l",
674 static PyObject
*Cm_CloseComponentResFile(_self
, _args
)
678 PyObject
*_res
= NULL
;
681 if (!PyArg_ParseTuple(_args
, "h",
684 _err
= CloseComponentResFile(refnum
);
685 if (_err
!= noErr
) return PyMac_Error(_err
);
691 static PyObject
*Cm_OpenDefaultComponent(_self
, _args
)
695 PyObject
*_res
= NULL
;
696 ComponentInstance _rv
;
697 OSType componentType
;
698 OSType componentSubType
;
699 if (!PyArg_ParseTuple(_args
, "O&O&",
700 PyMac_GetOSType
, &componentType
,
701 PyMac_GetOSType
, &componentSubType
))
703 _rv
= OpenDefaultComponent(componentType
,
705 _res
= Py_BuildValue("O&",
706 CmpInstObj_New
, _rv
);
710 static PyObject
*Cm_RegisterComponentResourceFile(_self
, _args
)
714 PyObject
*_res
= NULL
;
718 if (!PyArg_ParseTuple(_args
, "hh",
722 _rv
= RegisterComponentResourceFile(resRefNum
,
724 _res
= Py_BuildValue("l",
729 static PyMethodDef Cm_methods
[] = {
730 {"RegisterComponentResource", (PyCFunction
)Cm_RegisterComponentResource
, 1,
731 "(ComponentResourceHandle tr, short global) -> (Component _rv)"},
732 {"FindNextComponent", (PyCFunction
)Cm_FindNextComponent
, 1,
733 "(Component aComponent, ComponentDescription looking) -> (Component _rv)"},
734 {"CountComponents", (PyCFunction
)Cm_CountComponents
, 1,
735 "(ComponentDescription looking) -> (long _rv)"},
736 {"GetComponentListModSeed", (PyCFunction
)Cm_GetComponentListModSeed
, 1,
738 {"CloseComponentResFile", (PyCFunction
)Cm_CloseComponentResFile
, 1,
739 "(short refnum) -> None"},
740 {"OpenDefaultComponent", (PyCFunction
)Cm_OpenDefaultComponent
, 1,
741 "(OSType componentType, OSType componentSubType) -> (ComponentInstance _rv)"},
742 {"RegisterComponentResourceFile", (PyCFunction
)Cm_RegisterComponentResourceFile
, 1,
743 "(short resRefNum, short global) -> (long _rv)"},
758 m
= Py_InitModule("Cm", Cm_methods
);
759 d
= PyModule_GetDict(m
);
760 Cm_Error
= PyMac_GetOSErrException();
761 if (Cm_Error
== NULL
||
762 PyDict_SetItemString(d
, "Error", Cm_Error
) != 0)
763 Py_FatalError("can't initialize Cm.Error");
766 /* ========================= End module Cm ========================== */