• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 
2 /* ======================== Module _IBCarbon ======================== */
3 
4 #include "Python.h"
5 #include "pymactoolbox.h"
6 
7 
8 #if APPLE_SUPPORTS_QUICKTIME
9 
10 #include <Carbon/Carbon.h>
11 
12 #ifdef USE_TOOLBOX_OBJECT_GLUE
13 extern int _CFStringRefObj_Convert(PyObject *, CFStringRef *);
14 #endif
15 
16 
17 static PyObject *IBCarbon_Error;
18 
19 /* ---------------------- Object type IBNibRef ---------------------- */
20 
21 PyTypeObject IBNibRef_Type;
22 
23 #define IBNibRefObj_Check(x) ((x)->ob_type == &IBNibRef_Type || PyObject_TypeCheck((x), &IBNibRef_Type))
24 
25 typedef struct IBNibRefObject {
26     PyObject_HEAD
27     IBNibRef ob_itself;
28 } IBNibRefObject;
29 
IBNibRefObj_New(IBNibRef itself)30 PyObject *IBNibRefObj_New(IBNibRef itself)
31 {
32     IBNibRefObject *it;
33     it = PyObject_NEW(IBNibRefObject, &IBNibRef_Type);
34     if (it == NULL) return NULL;
35     it->ob_itself = itself;
36     return (PyObject *)it;
37 }
38 
IBNibRefObj_Convert(PyObject * v,IBNibRef * p_itself)39 int IBNibRefObj_Convert(PyObject *v, IBNibRef *p_itself)
40 {
41     if (!IBNibRefObj_Check(v))
42     {
43         PyErr_SetString(PyExc_TypeError, "IBNibRef required");
44         return 0;
45     }
46     *p_itself = ((IBNibRefObject *)v)->ob_itself;
47     return 1;
48 }
49 
IBNibRefObj_dealloc(IBNibRefObject * self)50 static void IBNibRefObj_dealloc(IBNibRefObject *self)
51 {
52     DisposeNibReference(self->ob_itself);
53     self->ob_type->tp_free((PyObject *)self);
54 }
55 
IBNibRefObj_CreateWindowFromNib(IBNibRefObject * _self,PyObject * _args)56 static PyObject *IBNibRefObj_CreateWindowFromNib(IBNibRefObject *_self, PyObject *_args)
57 {
58     PyObject *_res = NULL;
59     OSStatus _err;
60     CFStringRef inName;
61     WindowPtr outWindow;
62     if (!PyArg_ParseTuple(_args, "O&",
63                           CFStringRefObj_Convert, &inName))
64         return NULL;
65     _err = CreateWindowFromNib(_self->ob_itself,
66                                inName,
67                                &outWindow);
68     if (_err != noErr) return PyMac_Error(_err);
69     _res = Py_BuildValue("O&",
70                          WinObj_New, outWindow);
71     return _res;
72 }
73 
IBNibRefObj_CreateMenuFromNib(IBNibRefObject * _self,PyObject * _args)74 static PyObject *IBNibRefObj_CreateMenuFromNib(IBNibRefObject *_self, PyObject *_args)
75 {
76     PyObject *_res = NULL;
77     OSStatus _err;
78     CFStringRef inName;
79     MenuHandle outMenuRef;
80     if (!PyArg_ParseTuple(_args, "O&",
81                           CFStringRefObj_Convert, &inName))
82         return NULL;
83     _err = CreateMenuFromNib(_self->ob_itself,
84                              inName,
85                              &outMenuRef);
86     if (_err != noErr) return PyMac_Error(_err);
87     _res = Py_BuildValue("O&",
88                          MenuObj_New, outMenuRef);
89     return _res;
90 }
91 
IBNibRefObj_CreateMenuBarFromNib(IBNibRefObject * _self,PyObject * _args)92 static PyObject *IBNibRefObj_CreateMenuBarFromNib(IBNibRefObject *_self, PyObject *_args)
93 {
94     PyObject *_res = NULL;
95     OSStatus _err;
96     CFStringRef inName;
97     Handle outMenuBar;
98     if (!PyArg_ParseTuple(_args, "O&",
99                           CFStringRefObj_Convert, &inName))
100         return NULL;
101     _err = CreateMenuBarFromNib(_self->ob_itself,
102                                 inName,
103                                 &outMenuBar);
104     if (_err != noErr) return PyMac_Error(_err);
105     _res = Py_BuildValue("O&",
106                          ResObj_New, outMenuBar);
107     return _res;
108 }
109 
IBNibRefObj_SetMenuBarFromNib(IBNibRefObject * _self,PyObject * _args)110 static PyObject *IBNibRefObj_SetMenuBarFromNib(IBNibRefObject *_self, PyObject *_args)
111 {
112     PyObject *_res = NULL;
113     OSStatus _err;
114     CFStringRef inName;
115     if (!PyArg_ParseTuple(_args, "O&",
116                           CFStringRefObj_Convert, &inName))
117         return NULL;
118     _err = SetMenuBarFromNib(_self->ob_itself,
119                              inName);
120     if (_err != noErr) return PyMac_Error(_err);
121     Py_INCREF(Py_None);
122     _res = Py_None;
123     return _res;
124 }
125 
126 static PyMethodDef IBNibRefObj_methods[] = {
127     {"CreateWindowFromNib", (PyCFunction)IBNibRefObj_CreateWindowFromNib, 1,
128      PyDoc_STR("(CFStringRef inName) -> (WindowPtr outWindow)")},
129     {"CreateMenuFromNib", (PyCFunction)IBNibRefObj_CreateMenuFromNib, 1,
130      PyDoc_STR("(CFStringRef inName) -> (MenuHandle outMenuRef)")},
131     {"CreateMenuBarFromNib", (PyCFunction)IBNibRefObj_CreateMenuBarFromNib, 1,
132      PyDoc_STR("(CFStringRef inName) -> (Handle outMenuBar)")},
133     {"SetMenuBarFromNib", (PyCFunction)IBNibRefObj_SetMenuBarFromNib, 1,
134      PyDoc_STR("(CFStringRef inName) -> None")},
135     {NULL, NULL, 0}
136 };
137 
138 #define IBNibRefObj_getsetlist NULL
139 
140 
141 #define IBNibRefObj_compare NULL
142 
143 #define IBNibRefObj_repr NULL
144 
145 #define IBNibRefObj_hash NULL
146 #define IBNibRefObj_tp_init 0
147 
148 #define IBNibRefObj_tp_alloc PyType_GenericAlloc
149 
IBNibRefObj_tp_new(PyTypeObject * type,PyObject * _args,PyObject * _kwds)150 static PyObject *IBNibRefObj_tp_new(PyTypeObject *type, PyObject *_args, PyObject *_kwds)
151 {
152     PyObject *_self;
153     IBNibRef itself;
154     char *kw[] = {"itself", 0};
155 
156     if (!PyArg_ParseTupleAndKeywords(_args, _kwds, "O&", kw, IBNibRefObj_Convert, &itself)) return NULL;
157     if ((_self = type->tp_alloc(type, 0)) == NULL) return NULL;
158     ((IBNibRefObject *)_self)->ob_itself = itself;
159     return _self;
160 }
161 
162 #define IBNibRefObj_tp_free PyObject_Del
163 
164 
165 PyTypeObject IBNibRef_Type = {
166     PyObject_HEAD_INIT(NULL)
167     0, /*ob_size*/
168     "_IBCarbon.IBNibRef", /*tp_name*/
169     sizeof(IBNibRefObject), /*tp_basicsize*/
170     0, /*tp_itemsize*/
171     /* methods */
172     (destructor) IBNibRefObj_dealloc, /*tp_dealloc*/
173     0, /*tp_print*/
174     (getattrfunc)0, /*tp_getattr*/
175     (setattrfunc)0, /*tp_setattr*/
176     (cmpfunc) IBNibRefObj_compare, /*tp_compare*/
177     (reprfunc) IBNibRefObj_repr, /*tp_repr*/
178     (PyNumberMethods *)0, /* tp_as_number */
179     (PySequenceMethods *)0, /* tp_as_sequence */
180     (PyMappingMethods *)0, /* tp_as_mapping */
181     (hashfunc) IBNibRefObj_hash, /*tp_hash*/
182     0, /*tp_call*/
183     0, /*tp_str*/
184     PyObject_GenericGetAttr, /*tp_getattro*/
185     PyObject_GenericSetAttr, /*tp_setattro */
186     0, /*tp_as_buffer*/
187     Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE, /* tp_flags */
188     0, /*tp_doc*/
189     0, /*tp_traverse*/
190     0, /*tp_clear*/
191     0, /*tp_richcompare*/
192     0, /*tp_weaklistoffset*/
193     0, /*tp_iter*/
194     0, /*tp_iternext*/
195     IBNibRefObj_methods, /* tp_methods */
196     0, /*tp_members*/
197     IBNibRefObj_getsetlist, /*tp_getset*/
198     0, /*tp_base*/
199     0, /*tp_dict*/
200     0, /*tp_descr_get*/
201     0, /*tp_descr_set*/
202     0, /*tp_dictoffset*/
203     IBNibRefObj_tp_init, /* tp_init */
204     IBNibRefObj_tp_alloc, /* tp_alloc */
205     IBNibRefObj_tp_new, /* tp_new */
206     IBNibRefObj_tp_free, /* tp_free */
207 };
208 
209 /* -------------------- End object type IBNibRef -------------------- */
210 
211 
IBCarbon_CreateNibReference(PyObject * _self,PyObject * _args)212 static PyObject *IBCarbon_CreateNibReference(PyObject *_self, PyObject *_args)
213 {
214     PyObject *_res = NULL;
215     OSStatus _err;
216     CFStringRef inNibName;
217     IBNibRef outNibRef;
218     if (!PyArg_ParseTuple(_args, "O&",
219                           CFStringRefObj_Convert, &inNibName))
220         return NULL;
221     _err = CreateNibReference(inNibName,
222                               &outNibRef);
223     if (_err != noErr) return PyMac_Error(_err);
224     _res = Py_BuildValue("O&",
225                          IBNibRefObj_New, outNibRef);
226     return _res;
227 }
228 #endif /* APPLE_SUPPORTS_QUICKTIME */
229 
230 static PyMethodDef IBCarbon_methods[] = {
231 #if APPLE_SUPPORTS_QUICKTIME
232     {"CreateNibReference", (PyCFunction)IBCarbon_CreateNibReference, 1,
233      PyDoc_STR("(CFStringRef inNibName) -> (IBNibRef outNibRef)")},
234 #endif /* APPLE_SUPPORTS_QUICKTIME */
235     {NULL, NULL, 0}
236 };
237 
238 
239 
240 
init_IBCarbon(void)241 void init_IBCarbon(void)
242 {
243     PyObject *m;
244 #if APPLE_SUPPORTS_QUICKTIME
245     PyObject *d;
246 #endif /* APPLE_SUPPORTS_QUICKTIME */
247 
248 
249 
250 
251 
252     m = Py_InitModule("_IBCarbon", IBCarbon_methods);
253 #if APPLE_SUPPORTS_QUICKTIME
254     d = PyModule_GetDict(m);
255     IBCarbon_Error = PyMac_GetOSErrException();
256     if (IBCarbon_Error == NULL ||
257         PyDict_SetItemString(d, "Error", IBCarbon_Error) != 0)
258         return;
259     IBNibRef_Type.ob_type = &PyType_Type;
260     if (PyType_Ready(&IBNibRef_Type) < 0) return;
261     Py_INCREF(&IBNibRef_Type);
262     PyModule_AddObject(m, "IBNibRef", (PyObject *)&IBNibRef_Type);
263     /* Backward-compatible name */
264     Py_INCREF(&IBNibRef_Type);
265     PyModule_AddObject(m, "IBNibRefType", (PyObject *)&IBNibRef_Type);
266 #endif /* APPLE_SUPPORTS_QUICKTIME */
267 }
268 
269 /* ====================== End module _IBCarbon ====================== */
270 
271