/* ========================== Module _Drag ========================== */ #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 /* Callback glue routines */ DragTrackingHandlerUPP dragglue_TrackingHandlerUPP; DragReceiveHandlerUPP dragglue_ReceiveHandlerUPP; DragSendDataUPP dragglue_SendDataUPP; #if 0 DragInputUPP dragglue_InputUPP; DragDrawingUPP dragglue_DrawingUPP; #endif #ifdef USE_TOOLBOX_OBJECT_GLUE extern PyObject *_DragObj_New(DragRef); extern int _DragObj_Convert(PyObject *, DragRef *); #define DragObj_New _DragObj_New #define DragObj_Convert _DragObj_Convert #endif static PyObject *Drag_Error; /* ---------------------- Object type DragObj ----------------------- */ PyTypeObject DragObj_Type; #define DragObj_Check(x) (Py_Type(x) == &DragObj_Type || PyObject_TypeCheck((x), &DragObj_Type)) typedef struct DragObjObject { PyObject_HEAD DragRef ob_itself; PyObject *sendproc; } DragObjObject; PyObject *DragObj_New(DragRef itself) { DragObjObject *it; if (itself == NULL) { PyErr_SetString(Drag_Error,"Cannot create null Drag"); return NULL; } it = PyObject_NEW(DragObjObject, &DragObj_Type); if (it == NULL) return NULL; it->ob_itself = itself; it->sendproc = NULL; return (PyObject *)it; } int DragObj_Convert(PyObject *v, DragRef *p_itself) { if (!DragObj_Check(v)) { PyErr_SetString(PyExc_TypeError, "DragObj required"); return 0; } *p_itself = ((DragObjObject *)v)->ob_itself; return 1; } static void DragObj_dealloc(DragObjObject *self) { Py_XDECREF(self->sendproc); Py_Type(self)->tp_free((PyObject *)self); } static PyObject *DragObj_DisposeDrag(DragObjObject *_self, PyObject *_args) { PyObject *_res = NULL; OSErr _err; #ifndef DisposeDrag PyMac_PRECHECK(DisposeDrag); #endif if (!PyArg_ParseTuple(_args, "")) return NULL; _err = DisposeDrag(_self->ob_itself); if (_err != noErr) return PyMac_Error(_err); Py_INCREF(Py_None); _res = Py_None; return _res; } static PyObject *DragObj_AddDragItemFlavor(DragObjObject *_self, PyObject *_args) { PyObject *_res = NULL; OSErr _err; ItemReference theItemRef; FlavorType theType; char *dataPtr__in__; long dataPtr__len__; int dataPtr__in_len__; FlavorFlags theFlags; #ifndef AddDragItemFlavor PyMac_PRECHECK(AddDragItemFlavor); #endif if (!PyArg_ParseTuple(_args, "lO&z#l", &theItemRef, PyMac_GetOSType, &theType, &dataPtr__in__, &dataPtr__in_len__, &theFlags)) return NULL; dataPtr__len__ = dataPtr__in_len__; _err = AddDragItemFlavor(_self->ob_itself, theItemRef, theType, dataPtr__in__, dataPtr__len__, theFlags); if (_err != noErr) return PyMac_Error(_err); Py_INCREF(Py_None); _res = Py_None; return _res; } static PyObject *DragObj_SetDragItemFlavorData(DragObjObject *_self, PyObject *_args) { PyObject *_res = NULL; OSErr _err; ItemReference theItemRef; FlavorType theType; char *dataPtr__in__; long dataPtr__len__; int dataPtr__in_len__; UInt32 dataOffset; #ifndef SetDragItemFlavorData PyMac_PRECHECK(SetDragItemFlavorData); #endif if (!PyArg_ParseTuple(_args, "lO&z#l", &theItemRef, PyMac_GetOSType, &theType, &dataPtr__in__, &dataPtr__in_len__, &dataOffset)) return NULL; dataPtr__len__ = dataPtr__in_len__; _err = SetDragItemFlavorData(_self->ob_itself, theItemRef, theType, dataPtr__in__, dataPtr__len__, dataOffset); if (_err != noErr) return PyMac_Error(_err); Py_INCREF(Py_None); _res = Py_None; return _res; } static PyObject *DragObj_SetDragImage(DragObjObject *_self, PyObject *_args) { PyObject *_res = NULL; OSErr _err; PixMapHandle imagePixMap; RgnHandle imageRgn; Point imageOffsetPt; DragImageFlags theImageFlags; #ifndef SetDragImage PyMac_PRECHECK(SetDragImage); #endif if (!PyArg_ParseTuple(_args, "O&O&O&l", ResObj_Convert, &imagePixMap, ResObj_Convert, &imageRgn, PyMac_GetPoint, &imageOffsetPt, &theImageFlags)) return NULL; _err = SetDragImage(_self->ob_itself, imagePixMap, imageRgn, imageOffsetPt, theImageFlags); if (_err != noErr) return PyMac_Error(_err); Py_INCREF(Py_None); _res = Py_None; return _res; } static PyObject *DragObj_ChangeDragBehaviors(DragObjObject *_self, PyObject *_args) { PyObject *_res = NULL; OSErr _err; DragBehaviors inBehaviorsToSet; DragBehaviors inBehaviorsToClear; #ifndef ChangeDragBehaviors PyMac_PRECHECK(ChangeDragBehaviors); #endif if (!PyArg_ParseTuple(_args, "ll", &inBehaviorsToSet, &inBehaviorsToClear)) return NULL; _err = ChangeDragBehaviors(_self->ob_itself, inBehaviorsToSet, inBehaviorsToClear); if (_err != noErr) return PyMac_Error(_err); Py_INCREF(Py_None); _res = Py_None; return _res; } static PyObject *DragObj_TrackDrag(DragObjObject *_self, PyObject *_args) { PyObject *_res = NULL; OSErr _err; EventRecord theEvent; RgnHandle theRegion; #ifndef TrackDrag PyMac_PRECHECK(TrackDrag); #endif if (!PyArg_ParseTuple(_args, "O&O&", PyMac_GetEventRecord, &theEvent, ResObj_Convert, &theRegion)) return NULL; _err = TrackDrag(_self->ob_itself, &theEvent, theRegion); if (_err != noErr) return PyMac_Error(_err); Py_INCREF(Py_None); _res = Py_None; return _res; } static PyObject *DragObj_CountDragItems(DragObjObject *_self, PyObject *_args) { PyObject *_res = NULL; OSErr _err; UInt16 numItems; #ifndef CountDragItems PyMac_PRECHECK(CountDragItems); #endif if (!PyArg_ParseTuple(_args, "")) return NULL; _err = CountDragItems(_self->ob_itself, &numItems); if (_err != noErr) return PyMac_Error(_err); _res = Py_BuildValue("H", numItems); return _res; } static PyObject *DragObj_GetDragItemReferenceNumber(DragObjObject *_self, PyObject *_args) { PyObject *_res = NULL; OSErr _err; UInt16 index; ItemReference theItemRef; #ifndef GetDragItemReferenceNumber PyMac_PRECHECK(GetDragItemReferenceNumber); #endif if (!PyArg_ParseTuple(_args, "H", &index)) return NULL; _err = GetDragItemReferenceNumber(_self->ob_itself, index, &theItemRef); if (_err != noErr) return PyMac_Error(_err); _res = Py_BuildValue("l", theItemRef); return _res; } static PyObject *DragObj_CountDragItemFlavors(DragObjObject *_self, PyObject *_args) { PyObject *_res = NULL; OSErr _err; ItemReference theItemRef; UInt16 numFlavors; #ifndef CountDragItemFlavors PyMac_PRECHECK(CountDragItemFlavors); #endif if (!PyArg_ParseTuple(_args, "l", &theItemRef)) return NULL; _err = CountDragItemFlavors(_self->ob_itself, theItemRef, &numFlavors); if (_err != noErr) return PyMac_Error(_err); _res = Py_BuildValue("H", numFlavors); return _res; } static PyObject *DragObj_GetFlavorType(DragObjObject *_self, PyObject *_args) { PyObject *_res = NULL; OSErr _err; ItemReference theItemRef; UInt16 index; FlavorType theType; #ifndef GetFlavorType PyMac_PRECHECK(GetFlavorType); #endif if (!PyArg_ParseTuple(_args, "lH", &theItemRef, &index)) return NULL; _err = GetFlavorType(_self->ob_itself, theItemRef, index, &theType); if (_err != noErr) return PyMac_Error(_err); _res = Py_BuildValue("O&", PyMac_BuildOSType, theType); return _res; } static PyObject *DragObj_GetFlavorFlags(DragObjObject *_self, PyObject *_args) { PyObject *_res = NULL; OSErr _err; ItemReference theItemRef; FlavorType theType; FlavorFlags theFlags; #ifndef GetFlavorFlags PyMac_PRECHECK(GetFlavorFlags); #endif if (!PyArg_ParseTuple(_args, "lO&", &theItemRef, PyMac_GetOSType, &theType)) return NULL; _err = GetFlavorFlags(_self->ob_itself, theItemRef, theType, &theFlags); if (_err != noErr) return PyMac_Error(_err); _res = Py_BuildValue("l", theFlags); return _res; } static PyObject *DragObj_GetFlavorDataSize(DragObjObject *_self, PyObject *_args) { PyObject *_res = NULL; OSErr _err; ItemReference theItemRef; FlavorType theType; Size dataSize; #ifndef GetFlavorDataSize PyMac_PRECHECK(GetFlavorDataSize); #endif if (!PyArg_ParseTuple(_args, "lO&", &theItemRef, PyMac_GetOSType, &theType)) return NULL; _err = GetFlavorDataSize(_self->ob_itself, theItemRef, theType, &dataSize); if (_err != noErr) return PyMac_Error(_err); _res = Py_BuildValue("l", dataSize); return _res; } static PyObject *DragObj_GetFlavorData(DragObjObject *_self, PyObject *_args) { PyObject *_res = NULL; OSErr _err; ItemReference theItemRef; FlavorType theType; char *dataPtr__out__; long dataPtr__len__; int dataPtr__in_len__; UInt32 dataOffset; #ifndef GetFlavorData PyMac_PRECHECK(GetFlavorData); #endif if (!PyArg_ParseTuple(_args, "lO&il", &theItemRef, PyMac_GetOSType, &theType, &dataPtr__in_len__, &dataOffset)) return NULL; if ((dataPtr__out__ = malloc(dataPtr__in_len__)) == NULL) { PyErr_NoMemory(); goto dataPtr__error__; } dataPtr__len__ = dataPtr__in_len__; _err = GetFlavorData(_self->ob_itself, theItemRef, theType, dataPtr__out__, &dataPtr__len__, dataOffset); if (_err != noErr) return PyMac_Error(_err); _res = Py_BuildValue("s#", dataPtr__out__, (int)dataPtr__len__); free(dataPtr__out__); dataPtr__error__: ; return _res; } static PyObject *DragObj_GetDragItemBounds(DragObjObject *_self, PyObject *_args) { PyObject *_res = NULL; OSErr _err; ItemReference theItemRef; Rect itemBounds; #ifndef GetDragItemBounds PyMac_PRECHECK(GetDragItemBounds); #endif if (!PyArg_ParseTuple(_args, "l", &theItemRef)) return NULL; _err = GetDragItemBounds(_self->ob_itself, theItemRef, &itemBounds); if (_err != noErr) return PyMac_Error(_err); _res = Py_BuildValue("O&", PyMac_BuildRect, &itemBounds); return _res; } static PyObject *DragObj_SetDragItemBounds(DragObjObject *_self, PyObject *_args) { PyObject *_res = NULL; OSErr _err; ItemReference theItemRef; Rect itemBounds; #ifndef SetDragItemBounds PyMac_PRECHECK(SetDragItemBounds); #endif if (!PyArg_ParseTuple(_args, "lO&", &theItemRef, PyMac_GetRect, &itemBounds)) return NULL; _err = SetDragItemBounds(_self->ob_itself, theItemRef, &itemBounds); if (_err != noErr) return PyMac_Error(_err); Py_INCREF(Py_None); _res = Py_None; return _res; } static PyObject *DragObj_GetDropLocation(DragObjObject *_self, PyObject *_args) { PyObject *_res = NULL; OSErr _err; AEDesc dropLocation; #ifndef GetDropLocation PyMac_PRECHECK(GetDropLocation); #endif if (!PyArg_ParseTuple(_args, "")) return NULL; _err = GetDropLocation(_self->ob_itself, &dropLocation); if (_err != noErr) return PyMac_Error(_err); _res = Py_BuildValue("O&", AEDesc_New, &dropLocation); return _res; } static PyObject *DragObj_SetDropLocation(DragObjObject *_self, PyObject *_args) { PyObject *_res = NULL; OSErr _err; AEDesc dropLocation; #ifndef SetDropLocation PyMac_PRECHECK(SetDropLocation); #endif if (!PyArg_ParseTuple(_args, "O&", AEDesc_Convert, &dropLocation)) return NULL; _err = SetDropLocation(_self->ob_itself, &dropLocation); if (_err != noErr) return PyMac_Error(_err); Py_INCREF(Py_None); _res = Py_None; return _res; } static PyObject *DragObj_GetDragAttributes(DragObjObject *_self, PyObject *_args) { PyObject *_res = NULL; OSErr _err; DragAttributes flags; #ifndef GetDragAttributes PyMac_PRECHECK(GetDragAttributes); #endif if (!PyArg_ParseTuple(_args, "")) return NULL; _err = GetDragAttributes(_self->ob_itself, &flags); if (_err != noErr) return PyMac_Error(_err); _res = Py_BuildValue("l", flags); return _res; } static PyObject *DragObj_GetDragMouse(DragObjObject *_self, PyObject *_args) { PyObject *_res = NULL; OSErr _err; Point mouse; Point globalPinnedMouse; #ifndef GetDragMouse PyMac_PRECHECK(GetDragMouse); #endif if (!PyArg_ParseTuple(_args, "")) return NULL; _err = GetDragMouse(_self->ob_itself, &mouse, &globalPinnedMouse); if (_err != noErr) return PyMac_Error(_err); _res = Py_BuildValue("O&O&", PyMac_BuildPoint, mouse, PyMac_BuildPoint, globalPinnedMouse); return _res; } static PyObject *DragObj_SetDragMouse(DragObjObject *_self, PyObject *_args) { PyObject *_res = NULL; OSErr _err; Point globalPinnedMouse; #ifndef SetDragMouse PyMac_PRECHECK(SetDragMouse); #endif if (!PyArg_ParseTuple(_args, "O&", PyMac_GetPoint, &globalPinnedMouse)) return NULL; _err = SetDragMouse(_self->ob_itself, globalPinnedMouse); if (_err != noErr) return PyMac_Error(_err); Py_INCREF(Py_None); _res = Py_None; return _res; } static PyObject *DragObj_GetDragOrigin(DragObjObject *_self, PyObject *_args) { PyObject *_res = NULL; OSErr _err; Point globalInitialMouse; #ifndef GetDragOrigin PyMac_PRECHECK(GetDragOrigin); #endif if (!PyArg_ParseTuple(_args, "")) return NULL; _err = GetDragOrigin(_self->ob_itself, &globalInitialMouse); if (_err != noErr) return PyMac_Error(_err); _res = Py_BuildValue("O&", PyMac_BuildPoint, globalInitialMouse); return _res; } static PyObject *DragObj_GetDragModifiers(DragObjObject *_self, PyObject *_args) { PyObject *_res = NULL; OSErr _err; SInt16 modifiers; SInt16 mouseDownModifiers; SInt16 mouseUpModifiers; #ifndef GetDragModifiers PyMac_PRECHECK(GetDragModifiers); #endif if (!PyArg_ParseTuple(_args, "")) return NULL; _err = GetDragModifiers(_self->ob_itself, &modifiers, &mouseDownModifiers, &mouseUpModifiers); if (_err != noErr) return PyMac_Error(_err); _res = Py_BuildValue("hhh", modifiers, mouseDownModifiers, mouseUpModifiers); return _res; } static PyObject *DragObj_ShowDragHilite(DragObjObject *_self, PyObject *_args) { PyObject *_res = NULL; OSErr _err; RgnHandle hiliteFrame; Boolean inside; #ifndef ShowDragHilite PyMac_PRECHECK(ShowDragHilite); #endif if (!PyArg_ParseTuple(_args, "O&b", ResObj_Convert, &hiliteFrame, &inside)) return NULL; _err = ShowDragHilite(_self->ob_itself, hiliteFrame, inside); if (_err != noErr) return PyMac_Error(_err); Py_INCREF(Py_None); _res = Py_None; return _res; } static PyObject *DragObj_HideDragHilite(DragObjObject *_self, PyObject *_args) { PyObject *_res = NULL; OSErr _err; #ifndef HideDragHilite PyMac_PRECHECK(HideDragHilite); #endif if (!PyArg_ParseTuple(_args, "")) return NULL; _err = HideDragHilite(_self->ob_itself); if (_err != noErr) return PyMac_Error(_err); Py_INCREF(Py_None); _res = Py_None; return _res; } static PyObject *DragObj_DragPreScroll(DragObjObject *_self, PyObject *_args) { PyObject *_res = NULL; OSErr _err; SInt16 dH; SInt16 dV; #ifndef DragPreScroll PyMac_PRECHECK(DragPreScroll); #endif if (!PyArg_ParseTuple(_args, "hh", &dH, &dV)) return NULL; _err = DragPreScroll(_self->ob_itself, dH, dV); if (_err != noErr) return PyMac_Error(_err); Py_INCREF(Py_None); _res = Py_None; return _res; } static PyObject *DragObj_DragPostScroll(DragObjObject *_self, PyObject *_args) { PyObject *_res = NULL; OSErr _err; #ifndef DragPostScroll PyMac_PRECHECK(DragPostScroll); #endif if (!PyArg_ParseTuple(_args, "")) return NULL; _err = DragPostScroll(_self->ob_itself); if (_err != noErr) return PyMac_Error(_err); Py_INCREF(Py_None); _res = Py_None; return _res; } static PyObject *DragObj_UpdateDragHilite(DragObjObject *_self, PyObject *_args) { PyObject *_res = NULL; OSErr _err; RgnHandle updateRgn; #ifndef UpdateDragHilite PyMac_PRECHECK(UpdateDragHilite); #endif if (!PyArg_ParseTuple(_args, "O&", ResObj_Convert, &updateRgn)) return NULL; _err = UpdateDragHilite(_self->ob_itself, updateRgn); if (_err != noErr) return PyMac_Error(_err); Py_INCREF(Py_None); _res = Py_None; return _res; } static PyMethodDef DragObj_methods[] = { {"DisposeDrag", (PyCFunction)DragObj_DisposeDrag, 1, PyDoc_STR("() -> None")}, {"AddDragItemFlavor", (PyCFunction)DragObj_AddDragItemFlavor, 1, PyDoc_STR("(ItemReference theItemRef, FlavorType theType, Buffer dataPtr, FlavorFlags theFlags) -> None")}, {"SetDragItemFlavorData", (PyCFunction)DragObj_SetDragItemFlavorData, 1, PyDoc_STR("(ItemReference theItemRef, FlavorType theType, Buffer dataPtr, UInt32 dataOffset) -> None")}, {"SetDragImage", (PyCFunction)DragObj_SetDragImage, 1, PyDoc_STR("(PixMapHandle imagePixMap, RgnHandle imageRgn, Point imageOffsetPt, DragImageFlags theImageFlags) -> None")}, {"ChangeDragBehaviors", (PyCFunction)DragObj_ChangeDragBehaviors, 1, PyDoc_STR("(DragBehaviors inBehaviorsToSet, DragBehaviors inBehaviorsToClear) -> None")}, {"TrackDrag", (PyCFunction)DragObj_TrackDrag, 1, PyDoc_STR("(EventRecord theEvent, RgnHandle theRegion) -> None")}, {"CountDragItems", (PyCFunction)DragObj_CountDragItems, 1, PyDoc_STR("() -> (UInt16 numItems)")}, {"GetDragItemReferenceNumber", (PyCFunction)DragObj_GetDragItemReferenceNumber, 1, PyDoc_STR("(UInt16 index) -> (ItemReference theItemRef)")}, {"CountDragItemFlavors", (PyCFunction)DragObj_CountDragItemFlavors, 1, PyDoc_STR("(ItemReference theItemRef) -> (UInt16 numFlavors)")}, {"GetFlavorType", (PyCFunction)DragObj_GetFlavorType, 1, PyDoc_STR("(ItemReference theItemRef, UInt16 index) -> (FlavorType theType)")}, {"GetFlavorFlags", (PyCFunction)DragObj_GetFlavorFlags, 1, PyDoc_STR("(ItemReference theItemRef, FlavorType theType) -> (FlavorFlags theFlags)")}, {"GetFlavorDataSize", (PyCFunction)DragObj_GetFlavorDataSize, 1, PyDoc_STR("(ItemReference theItemRef, FlavorType theType) -> (Size dataSize)")}, {"GetFlavorData", (PyCFunction)DragObj_GetFlavorData, 1, PyDoc_STR("(ItemReference theItemRef, FlavorType theType, Buffer dataPtr, UInt32 dataOffset) -> (Buffer dataPtr)")}, {"GetDragItemBounds", (PyCFunction)DragObj_GetDragItemBounds, 1, PyDoc_STR("(ItemReference theItemRef) -> (Rect itemBounds)")}, {"SetDragItemBounds", (PyCFunction)DragObj_SetDragItemBounds, 1, PyDoc_STR("(ItemReference theItemRef, Rect itemBounds) -> None")}, {"GetDropLocation", (PyCFunction)DragObj_GetDropLocation, 1, PyDoc_STR("() -> (AEDesc dropLocation)")}, {"SetDropLocation", (PyCFunction)DragObj_SetDropLocation, 1, PyDoc_STR("(AEDesc dropLocation) -> None")}, {"GetDragAttributes", (PyCFunction)DragObj_GetDragAttributes, 1, PyDoc_STR("() -> (DragAttributes flags)")}, {"GetDragMouse", (PyCFunction)DragObj_GetDragMouse, 1, PyDoc_STR("() -> (Point mouse, Point globalPinnedMouse)")}, {"SetDragMouse", (PyCFunction)DragObj_SetDragMouse, 1, PyDoc_STR("(Point globalPinnedMouse) -> None")}, {"GetDragOrigin", (PyCFunction)DragObj_GetDragOrigin, 1, PyDoc_STR("() -> (Point globalInitialMouse)")}, {"GetDragModifiers", (PyCFunction)DragObj_GetDragModifiers, 1, PyDoc_STR("() -> (SInt16 modifiers, SInt16 mouseDownModifiers, SInt16 mouseUpModifiers)")}, {"ShowDragHilite", (PyCFunction)DragObj_ShowDragHilite, 1, PyDoc_STR("(RgnHandle hiliteFrame, Boolean inside) -> None")}, {"HideDragHilite", (PyCFunction)DragObj_HideDragHilite, 1, PyDoc_STR("() -> None")}, {"DragPreScroll", (PyCFunction)DragObj_DragPreScroll, 1, PyDoc_STR("(SInt16 dH, SInt16 dV) -> None")}, {"DragPostScroll", (PyCFunction)DragObj_DragPostScroll, 1, PyDoc_STR("() -> None")}, {"UpdateDragHilite", (PyCFunction)DragObj_UpdateDragHilite, 1, PyDoc_STR("(RgnHandle updateRgn) -> None")}, {NULL, NULL, 0} }; #define DragObj_getsetlist NULL #define DragObj_compare NULL #define DragObj_repr NULL #define DragObj_hash NULL #define DragObj_tp_init 0 #define DragObj_tp_alloc PyType_GenericAlloc static PyObject *DragObj_tp_new(PyTypeObject *type, PyObject *_args, PyObject *_kwds) { PyObject *_self; DragRef itself; char *kw[] = {"itself", 0}; if (!PyArg_ParseTupleAndKeywords(_args, _kwds, "O&", kw, DragObj_Convert, &itself)) return NULL; if ((_self = type->tp_alloc(type, 0)) == NULL) return NULL; ((DragObjObject *)_self)->ob_itself = itself; return _self; } #define DragObj_tp_free PyObject_Del PyTypeObject DragObj_Type = { PyVarObject_HEAD_INIT(NULL, 0) "_Drag.DragObj", /*tp_name*/ sizeof(DragObjObject), /*tp_basicsize*/ 0, /*tp_itemsize*/ /* methods */ (destructor) DragObj_dealloc, /*tp_dealloc*/ 0, /*tp_print*/ (getattrfunc)0, /*tp_getattr*/ (setattrfunc)0, /*tp_setattr*/ (cmpfunc) DragObj_compare, /*tp_compare*/ (reprfunc) DragObj_repr, /*tp_repr*/ (PyNumberMethods *)0, /* tp_as_number */ (PySequenceMethods *)0, /* tp_as_sequence */ (PyMappingMethods *)0, /* tp_as_mapping */ (hashfunc) DragObj_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*/ DragObj_methods, /* tp_methods */ 0, /*tp_members*/ DragObj_getsetlist, /*tp_getset*/ 0, /*tp_base*/ 0, /*tp_dict*/ 0, /*tp_descr_get*/ 0, /*tp_descr_set*/ 0, /*tp_dictoffset*/ DragObj_tp_init, /* tp_init */ DragObj_tp_alloc, /* tp_alloc */ DragObj_tp_new, /* tp_new */ DragObj_tp_free, /* tp_free */ }; /* -------------------- End object type DragObj --------------------- */ static PyObject *Drag_NewDrag(PyObject *_self, PyObject *_args) { PyObject *_res = NULL; OSErr _err; DragRef theDrag; #ifndef NewDrag PyMac_PRECHECK(NewDrag); #endif if (!PyArg_ParseTuple(_args, "")) return NULL; _err = NewDrag(&theDrag); if (_err != noErr) return PyMac_Error(_err); _res = Py_BuildValue("O&", DragObj_New, theDrag); return _res; } static PyObject *Drag_GetDragHiliteColor(PyObject *_self, PyObject *_args) { PyObject *_res = NULL; OSErr _err; WindowPtr window; RGBColor color; #ifndef GetDragHiliteColor PyMac_PRECHECK(GetDragHiliteColor); #endif if (!PyArg_ParseTuple(_args, "O&", WinObj_Convert, &window)) return NULL; _err = GetDragHiliteColor(window, &color); if (_err != noErr) return PyMac_Error(_err); _res = Py_BuildValue("O&", QdRGB_New, &color); return _res; } static PyObject *Drag_WaitMouseMoved(PyObject *_self, PyObject *_args) { PyObject *_res = NULL; Boolean _rv; Point initialMouse; #ifndef WaitMouseMoved PyMac_PRECHECK(WaitMouseMoved); #endif if (!PyArg_ParseTuple(_args, "O&", PyMac_GetPoint, &initialMouse)) return NULL; _rv = WaitMouseMoved(initialMouse); _res = Py_BuildValue("b", _rv); return _res; } static PyObject *Drag_ZoomRects(PyObject *_self, PyObject *_args) { PyObject *_res = NULL; OSErr _err; Rect fromRect; Rect toRect; SInt16 zoomSteps; ZoomAcceleration acceleration; #ifndef ZoomRects PyMac_PRECHECK(ZoomRects); #endif if (!PyArg_ParseTuple(_args, "O&O&hh", PyMac_GetRect, &fromRect, PyMac_GetRect, &toRect, &zoomSteps, &acceleration)) return NULL; _err = ZoomRects(&fromRect, &toRect, zoomSteps, acceleration); if (_err != noErr) return PyMac_Error(_err); Py_INCREF(Py_None); _res = Py_None; return _res; } static PyObject *Drag_ZoomRegion(PyObject *_self, PyObject *_args) { PyObject *_res = NULL; OSErr _err; RgnHandle region; Point zoomDistance; SInt16 zoomSteps; ZoomAcceleration acceleration; #ifndef ZoomRegion PyMac_PRECHECK(ZoomRegion); #endif if (!PyArg_ParseTuple(_args, "O&O&hh", ResObj_Convert, ®ion, PyMac_GetPoint, &zoomDistance, &zoomSteps, &acceleration)) return NULL; _err = ZoomRegion(region, zoomDistance, zoomSteps, acceleration); if (_err != noErr) return PyMac_Error(_err); Py_INCREF(Py_None); _res = Py_None; return _res; } static PyObject *Drag_InstallTrackingHandler(PyObject *_self, PyObject *_args) { PyObject *_res = NULL; PyObject *callback; WindowPtr theWindow = NULL; OSErr _err; if ( !PyArg_ParseTuple(_args, "O|O&", &callback, WinObj_Convert, &theWindow) ) return NULL; Py_INCREF(callback); /* Cannot decref later, too bad */ _err = InstallTrackingHandler(dragglue_TrackingHandlerUPP, theWindow, (void *)callback); if (_err != noErr) return PyMac_Error(_err); Py_INCREF(Py_None); _res = Py_None; return _res; } static PyObject *Drag_InstallReceiveHandler(PyObject *_self, PyObject *_args) { PyObject *_res = NULL; PyObject *callback; WindowPtr theWindow = NULL; OSErr _err; if ( !PyArg_ParseTuple(_args, "O|O&", &callback, WinObj_Convert, &theWindow) ) return NULL; Py_INCREF(callback); /* Cannot decref later, too bad */ _err = InstallReceiveHandler(dragglue_ReceiveHandlerUPP, theWindow, (void *)callback); if (_err != noErr) return PyMac_Error(_err); Py_INCREF(Py_None); _res = Py_None; return _res; } static PyObject *Drag_RemoveTrackingHandler(PyObject *_self, PyObject *_args) { PyObject *_res = NULL; WindowPtr theWindow = NULL; OSErr _err; if ( !PyArg_ParseTuple(_args, "|O&", WinObj_Convert, &theWindow) ) return NULL; _err = RemoveTrackingHandler(dragglue_TrackingHandlerUPP, theWindow); if (_err != noErr) return PyMac_Error(_err); Py_INCREF(Py_None); _res = Py_None; return _res; } static PyObject *Drag_RemoveReceiveHandler(PyObject *_self, PyObject *_args) { PyObject *_res = NULL; WindowPtr theWindow = NULL; OSErr _err; if ( !PyArg_ParseTuple(_args, "|O&", WinObj_Convert, &theWindow) ) return NULL; _err = RemoveReceiveHandler(dragglue_ReceiveHandlerUPP, theWindow); if (_err != noErr) return PyMac_Error(_err); Py_INCREF(Py_None); _res = Py_None; return _res; } static PyMethodDef Drag_methods[] = { {"NewDrag", (PyCFunction)Drag_NewDrag, 1, PyDoc_STR("() -> (DragRef theDrag)")}, {"GetDragHiliteColor", (PyCFunction)Drag_GetDragHiliteColor, 1, PyDoc_STR("(WindowPtr window) -> (RGBColor color)")}, {"WaitMouseMoved", (PyCFunction)Drag_WaitMouseMoved, 1, PyDoc_STR("(Point initialMouse) -> (Boolean _rv)")}, {"ZoomRects", (PyCFunction)Drag_ZoomRects, 1, PyDoc_STR("(Rect fromRect, Rect toRect, SInt16 zoomSteps, ZoomAcceleration acceleration) -> None")}, {"ZoomRegion", (PyCFunction)Drag_ZoomRegion, 1, PyDoc_STR("(RgnHandle region, Point zoomDistance, SInt16 zoomSteps, ZoomAcceleration acceleration) -> None")}, {"InstallTrackingHandler", (PyCFunction)Drag_InstallTrackingHandler, 1, PyDoc_STR(NULL)}, {"InstallReceiveHandler", (PyCFunction)Drag_InstallReceiveHandler, 1, PyDoc_STR(NULL)}, {"RemoveTrackingHandler", (PyCFunction)Drag_RemoveTrackingHandler, 1, PyDoc_STR(NULL)}, {"RemoveReceiveHandler", (PyCFunction)Drag_RemoveReceiveHandler, 1, PyDoc_STR(NULL)}, {NULL, NULL, 0} }; static pascal OSErr dragglue_TrackingHandler(DragTrackingMessage theMessage, WindowPtr theWindow, void *handlerRefCon, DragReference theDrag) { PyObject *args, *rv; int i; args = Py_BuildValue("hO&O&", theMessage, DragObj_New, theDrag, WinObj_WhichWindow, theWindow); if ( args == NULL ) return -1; rv = PyEval_CallObject((PyObject *)handlerRefCon, args); Py_DECREF(args); if ( rv == NULL ) { PySys_WriteStderr("Drag: Exception in TrackingHandler\n"); PyErr_Print(); return -1; } i = -1; if ( rv == Py_None ) i = 0; else PyArg_Parse(rv, "l", &i); Py_DECREF(rv); return i; } static pascal OSErr dragglue_ReceiveHandler(WindowPtr theWindow, void *handlerRefCon, DragReference theDrag) { PyObject *args, *rv; int i; args = Py_BuildValue("O&O&", DragObj_New, theDrag, WinObj_WhichWindow, theWindow); if ( args == NULL ) return -1; rv = PyEval_CallObject((PyObject *)handlerRefCon, args); Py_DECREF(args); if ( rv == NULL ) { PySys_WriteStderr("Drag: Exception in ReceiveHandler\n"); PyErr_Print(); return -1; } i = -1; if ( rv == Py_None ) i = 0; else PyArg_Parse(rv, "l", &i); Py_DECREF(rv); return i; } static pascal OSErr dragglue_SendData(FlavorType theType, void *dragSendRefCon, ItemReference theItem, DragReference theDrag) { DragObjObject *self = (DragObjObject *)dragSendRefCon; PyObject *args, *rv; int i; if ( self->sendproc == NULL ) return -1; args = Py_BuildValue("O&l", PyMac_BuildOSType, theType, theItem); if ( args == NULL ) return -1; rv = PyEval_CallObject(self->sendproc, args); Py_DECREF(args); if ( rv == NULL ) { PySys_WriteStderr("Drag: Exception in SendDataHandler\n"); PyErr_Print(); return -1; } i = -1; if ( rv == Py_None ) i = 0; else PyArg_Parse(rv, "l", &i); Py_DECREF(rv); return i; } #if 0 static pascal OSErr dragglue_Input(Point *mouse, short *modifiers, void *dragSendRefCon, DragReference theDrag) { return 0; } static pascal OSErr dragglue_Drawing(xxxx void *dragSendRefCon, DragReference theDrag) { return 0; } #endif void init_Drag(void) { PyObject *m; PyObject *d; PyMac_INIT_TOOLBOX_OBJECT_NEW(DragRef, DragObj_New); PyMac_INIT_TOOLBOX_OBJECT_CONVERT(DragRef, DragObj_Convert); m = Py_InitModule("_Drag", Drag_methods); d = PyModule_GetDict(m); Drag_Error = PyMac_GetOSErrException(); if (Drag_Error == NULL || PyDict_SetItemString(d, "Error", Drag_Error) != 0) return; Py_Type(&DragObj_Type) = &PyType_Type; if (PyType_Ready(&DragObj_Type) < 0) return; Py_INCREF(&DragObj_Type); PyModule_AddObject(m, "DragObj", (PyObject *)&DragObj_Type); /* Backward-compatible name */ Py_INCREF(&DragObj_Type); PyModule_AddObject(m, "DragObjType", (PyObject *)&DragObj_Type); dragglue_TrackingHandlerUPP = NewDragTrackingHandlerUPP(dragglue_TrackingHandler); dragglue_ReceiveHandlerUPP = NewDragReceiveHandlerUPP(dragglue_ReceiveHandler); dragglue_SendDataUPP = NewDragSendDataUPP(dragglue_SendData); #if 0 dragglue_InputUPP = NewDragInputUPP(dragglue_Input); dragglue_DrawingUPP = NewDragDrawingUPP(dragglue_Drawing); #endif } /* ======================== End module _Drag ======================== */