cpython/Mac/Modules/ctl/_Ctlmodule.c

2701 lines
73 KiB
C

/* ========================== Module _Ctl =========================== */
#include "Python.h"
#ifdef _WIN32
#include "pywintoolbox.h"
#else
#include "macglue.h"
#include "pymactoolbox.h"
#endif
/* 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)
#ifdef WITHOUT_FRAMEWORKS
#include <Controls.h>
#include <ControlDefinitions.h>
#else
#include <Carbon/Carbon.h>
#endif
#ifdef USE_TOOLBOX_OBJECT_GLUE
extern PyObject *_CtlObj_New(ControlHandle);
extern int _CtlObj_Convert(PyObject *, ControlHandle *);
#define CtlObj_New _CtlObj_New
#define CtlObj_Convert _CtlObj_Convert
#endif
staticforward PyObject *CtlObj_WhichControl(ControlHandle);
#define as_Control(h) ((ControlHandle)h)
#define as_Resource(ctl) ((Handle)ctl)
#if TARGET_API_MAC_CARBON
#define GetControlRect(ctl, rectp) GetControlBounds(ctl, rectp)
#else
#define GetControlRect(ctl, rectp) (*(rectp) = ((*(ctl))->contrlRect))
#endif
/*
** Parse/generate ControlFontStyleRec records
*/
#if 0 /* Not needed */
static PyObject *
ControlFontStyle_New(ControlFontStyleRec *itself)
{
return Py_BuildValue("hhhhhhO&O&", itself->flags, itself->font,
itself->size, itself->style, itself->mode, itself->just,
QdRGB_New, &itself->foreColor, QdRGB_New, &itself->backColor);
}
#endif
static int
ControlFontStyle_Convert(PyObject *v, ControlFontStyleRec *itself)
{
return PyArg_ParseTuple(v, "hhhhhhO&O&", &itself->flags,
&itself->font, &itself->size, &itself->style, &itself->mode,
&itself->just, QdRGB_Convert, &itself->foreColor,
QdRGB_Convert, &itself->backColor);
}
/*
** Parse/generate ControlID records
*/
static PyObject *
PyControlID_New(ControlID *itself)
{
return Py_BuildValue("O&l", PyMac_BuildOSType, itself->signature, itself->id);
}
static int
PyControlID_Convert(PyObject *v, ControlID *itself)
{
return PyArg_ParseTuple(v, "O&l", PyMac_GetOSType, &itself->signature, &itself->id);
}
/* TrackControl and HandleControlClick callback support */
static PyObject *tracker;
static ControlActionUPP mytracker_upp;
static ControlUserPaneDrawUPP mydrawproc_upp;
static ControlUserPaneIdleUPP myidleproc_upp;
static ControlUserPaneHitTestUPP myhittestproc_upp;
static ControlUserPaneTrackingUPP mytrackingproc_upp;
staticforward int settrackfunc(PyObject *); /* forward */
staticforward void clrtrackfunc(void); /* forward */
staticforward int setcallback(PyObject *, OSType, PyObject *, UniversalProcPtr *);
static PyObject *Ctl_Error;
/* ---------------------- Object type Control ----------------------- */
PyTypeObject Control_Type;
#define CtlObj_Check(x) ((x)->ob_type == &Control_Type)
typedef struct ControlObject {
PyObject_HEAD
ControlHandle ob_itself;
PyObject *ob_callbackdict;
} ControlObject;
PyObject *CtlObj_New(ControlHandle itself)
{
ControlObject *it;
if (itself == NULL) return PyMac_Error(resNotFound);
it = PyObject_NEW(ControlObject, &Control_Type);
if (it == NULL) return NULL;
it->ob_itself = itself;
SetControlReference(itself, (long)it);
it->ob_callbackdict = NULL;
return (PyObject *)it;
}
int CtlObj_Convert(PyObject *v, ControlHandle *p_itself)
{
if (!CtlObj_Check(v))
{
PyErr_SetString(PyExc_TypeError, "Control required");
return 0;
}
*p_itself = ((ControlObject *)v)->ob_itself;
return 1;
}
static void CtlObj_dealloc(ControlObject *self)
{
Py_XDECREF(self->ob_callbackdict);
if (self->ob_itself)SetControlReference(self->ob_itself, (long)0); /* Make it forget about us */
PyMem_DEL(self);
}
static PyObject *CtlObj_HiliteControl(ControlObject *_self, PyObject *_args)
{
PyObject *_res = NULL;
ControlPartCode hiliteState;
if (!PyArg_ParseTuple(_args, "h",
&hiliteState))
return NULL;
HiliteControl(_self->ob_itself,
hiliteState);
Py_INCREF(Py_None);
_res = Py_None;
return _res;
}
static PyObject *CtlObj_ShowControl(ControlObject *_self, PyObject *_args)
{
PyObject *_res = NULL;
if (!PyArg_ParseTuple(_args, ""))
return NULL;
ShowControl(_self->ob_itself);
Py_INCREF(Py_None);
_res = Py_None;
return _res;
}
static PyObject *CtlObj_HideControl(ControlObject *_self, PyObject *_args)
{
PyObject *_res = NULL;
if (!PyArg_ParseTuple(_args, ""))
return NULL;
HideControl(_self->ob_itself);
Py_INCREF(Py_None);
_res = Py_None;
return _res;
}
static PyObject *CtlObj_IsControlActive(ControlObject *_self, PyObject *_args)
{
PyObject *_res = NULL;
Boolean _rv;
if (!PyArg_ParseTuple(_args, ""))
return NULL;
_rv = IsControlActive(_self->ob_itself);
_res = Py_BuildValue("b",
_rv);
return _res;
}
static PyObject *CtlObj_IsControlVisible(ControlObject *_self, PyObject *_args)
{
PyObject *_res = NULL;
Boolean _rv;
if (!PyArg_ParseTuple(_args, ""))
return NULL;
_rv = IsControlVisible(_self->ob_itself);
_res = Py_BuildValue("b",
_rv);
return _res;
}
static PyObject *CtlObj_ActivateControl(ControlObject *_self, PyObject *_args)
{
PyObject *_res = NULL;
OSErr _err;
if (!PyArg_ParseTuple(_args, ""))
return NULL;
_err = ActivateControl(_self->ob_itself);
if (_err != noErr) return PyMac_Error(_err);
Py_INCREF(Py_None);
_res = Py_None;
return _res;
}
static PyObject *CtlObj_DeactivateControl(ControlObject *_self, PyObject *_args)
{
PyObject *_res = NULL;
OSErr _err;
if (!PyArg_ParseTuple(_args, ""))
return NULL;
_err = DeactivateControl(_self->ob_itself);
if (_err != noErr) return PyMac_Error(_err);
Py_INCREF(Py_None);
_res = Py_None;
return _res;
}
static PyObject *CtlObj_SetControlVisibility(ControlObject *_self, PyObject *_args)
{
PyObject *_res = NULL;
OSErr _err;
Boolean inIsVisible;
Boolean inDoDraw;
if (!PyArg_ParseTuple(_args, "bb",
&inIsVisible,
&inDoDraw))
return NULL;
_err = SetControlVisibility(_self->ob_itself,
inIsVisible,
inDoDraw);
if (_err != noErr) return PyMac_Error(_err);
Py_INCREF(Py_None);
_res = Py_None;
return _res;
}
static PyObject *CtlObj_Draw1Control(ControlObject *_self, PyObject *_args)
{
PyObject *_res = NULL;
if (!PyArg_ParseTuple(_args, ""))
return NULL;
Draw1Control(_self->ob_itself);
Py_INCREF(Py_None);
_res = Py_None;
return _res;
}
static PyObject *CtlObj_GetBestControlRect(ControlObject *_self, PyObject *_args)
{
PyObject *_res = NULL;
OSErr _err;
Rect outRect;
SInt16 outBaseLineOffset;
if (!PyArg_ParseTuple(_args, ""))
return NULL;
_err = GetBestControlRect(_self->ob_itself,
&outRect,
&outBaseLineOffset);
if (_err != noErr) return PyMac_Error(_err);
_res = Py_BuildValue("O&h",
PyMac_BuildRect, &outRect,
outBaseLineOffset);
return _res;
}
static PyObject *CtlObj_SetControlFontStyle(ControlObject *_self, PyObject *_args)
{
PyObject *_res = NULL;
OSErr _err;
ControlFontStyleRec inStyle;
if (!PyArg_ParseTuple(_args, "O&",
ControlFontStyle_Convert, &inStyle))
return NULL;
_err = SetControlFontStyle(_self->ob_itself,
&inStyle);
if (_err != noErr) return PyMac_Error(_err);
Py_INCREF(Py_None);
_res = Py_None;
return _res;
}
static PyObject *CtlObj_DrawControlInCurrentPort(ControlObject *_self, PyObject *_args)
{
PyObject *_res = NULL;
if (!PyArg_ParseTuple(_args, ""))
return NULL;
DrawControlInCurrentPort(_self->ob_itself);
Py_INCREF(Py_None);
_res = Py_None;
return _res;
}
static PyObject *CtlObj_SetUpControlBackground(ControlObject *_self, PyObject *_args)
{
PyObject *_res = NULL;
OSErr _err;
SInt16 inDepth;
Boolean inIsColorDevice;
if (!PyArg_ParseTuple(_args, "hb",
&inDepth,
&inIsColorDevice))
return NULL;
_err = SetUpControlBackground(_self->ob_itself,
inDepth,
inIsColorDevice);
if (_err != noErr) return PyMac_Error(_err);
Py_INCREF(Py_None);
_res = Py_None;
return _res;
}
static PyObject *CtlObj_SetUpControlTextColor(ControlObject *_self, PyObject *_args)
{
PyObject *_res = NULL;
OSErr _err;
SInt16 inDepth;
Boolean inIsColorDevice;
if (!PyArg_ParseTuple(_args, "hb",
&inDepth,
&inIsColorDevice))
return NULL;
_err = SetUpControlTextColor(_self->ob_itself,
inDepth,
inIsColorDevice);
if (_err != noErr) return PyMac_Error(_err);
Py_INCREF(Py_None);
_res = Py_None;
return _res;
}
static PyObject *CtlObj_DragControl(ControlObject *_self, PyObject *_args)
{
PyObject *_res = NULL;
Point startPoint;
Rect limitRect;
Rect slopRect;
DragConstraint axis;
if (!PyArg_ParseTuple(_args, "O&O&O&H",
PyMac_GetPoint, &startPoint,
PyMac_GetRect, &limitRect,
PyMac_GetRect, &slopRect,
&axis))
return NULL;
DragControl(_self->ob_itself,
startPoint,
&limitRect,
&slopRect,
axis);
Py_INCREF(Py_None);
_res = Py_None;
return _res;
}
static PyObject *CtlObj_TestControl(ControlObject *_self, PyObject *_args)
{
PyObject *_res = NULL;
ControlPartCode _rv;
Point testPoint;
if (!PyArg_ParseTuple(_args, "O&",
PyMac_GetPoint, &testPoint))
return NULL;
_rv = TestControl(_self->ob_itself,
testPoint);
_res = Py_BuildValue("h",
_rv);
return _res;
}
#if TARGET_API_MAC_CARBON
static PyObject *CtlObj_HandleControlContextualMenuClick(ControlObject *_self, PyObject *_args)
{
PyObject *_res = NULL;
OSStatus _err;
Point inWhere;
Boolean menuDisplayed;
if (!PyArg_ParseTuple(_args, "O&",
PyMac_GetPoint, &inWhere))
return NULL;
_err = HandleControlContextualMenuClick(_self->ob_itself,
inWhere,
&menuDisplayed);
if (_err != noErr) return PyMac_Error(_err);
_res = Py_BuildValue("b",
menuDisplayed);
return _res;
}
#endif
#if TARGET_API_MAC_CARBON
static PyObject *CtlObj_GetControlClickActivation(ControlObject *_self, PyObject *_args)
{
PyObject *_res = NULL;
OSStatus _err;
Point inWhere;
EventModifiers inModifiers;
ClickActivationResult outResult;
if (!PyArg_ParseTuple(_args, "O&H",
PyMac_GetPoint, &inWhere,
&inModifiers))
return NULL;
_err = GetControlClickActivation(_self->ob_itself,
inWhere,
inModifiers,
&outResult);
if (_err != noErr) return PyMac_Error(_err);
_res = Py_BuildValue("l",
outResult);
return _res;
}
#endif
static PyObject *CtlObj_HandleControlKey(ControlObject *_self, PyObject *_args)
{
PyObject *_res = NULL;
SInt16 _rv;
SInt16 inKeyCode;
SInt16 inCharCode;
EventModifiers inModifiers;
if (!PyArg_ParseTuple(_args, "hhH",
&inKeyCode,
&inCharCode,
&inModifiers))
return NULL;
_rv = HandleControlKey(_self->ob_itself,
inKeyCode,
inCharCode,
inModifiers);
_res = Py_BuildValue("h",
_rv);
return _res;
}
#if TARGET_API_MAC_CARBON
static PyObject *CtlObj_HandleControlSetCursor(ControlObject *_self, PyObject *_args)
{
PyObject *_res = NULL;
OSStatus _err;
Point localPoint;
EventModifiers modifiers;
Boolean cursorWasSet;
if (!PyArg_ParseTuple(_args, "O&H",
PyMac_GetPoint, &localPoint,
&modifiers))
return NULL;
_err = HandleControlSetCursor(_self->ob_itself,
localPoint,
modifiers,
&cursorWasSet);
if (_err != noErr) return PyMac_Error(_err);
_res = Py_BuildValue("b",
cursorWasSet);
return _res;
}
#endif
static PyObject *CtlObj_MoveControl(ControlObject *_self, PyObject *_args)
{
PyObject *_res = NULL;
SInt16 h;
SInt16 v;
if (!PyArg_ParseTuple(_args, "hh",
&h,
&v))
return NULL;
MoveControl(_self->ob_itself,
h,
v);
Py_INCREF(Py_None);
_res = Py_None;
return _res;
}
static PyObject *CtlObj_SizeControl(ControlObject *_self, PyObject *_args)
{
PyObject *_res = NULL;
SInt16 w;
SInt16 h;
if (!PyArg_ParseTuple(_args, "hh",
&w,
&h))
return NULL;
SizeControl(_self->ob_itself,
w,
h);
Py_INCREF(Py_None);
_res = Py_None;
return _res;
}
static PyObject *CtlObj_SetControlTitle(ControlObject *_self, PyObject *_args)
{
PyObject *_res = NULL;
Str255 title;
if (!PyArg_ParseTuple(_args, "O&",
PyMac_GetStr255, title))
return NULL;
SetControlTitle(_self->ob_itself,
title);
Py_INCREF(Py_None);
_res = Py_None;
return _res;
}
static PyObject *CtlObj_GetControlTitle(ControlObject *_self, PyObject *_args)
{
PyObject *_res = NULL;
Str255 title;
if (!PyArg_ParseTuple(_args, ""))
return NULL;
GetControlTitle(_self->ob_itself,
title);
_res = Py_BuildValue("O&",
PyMac_BuildStr255, title);
return _res;
}
static PyObject *CtlObj_GetControlValue(ControlObject *_self, PyObject *_args)
{
PyObject *_res = NULL;
SInt16 _rv;
if (!PyArg_ParseTuple(_args, ""))
return NULL;
_rv = GetControlValue(_self->ob_itself);
_res = Py_BuildValue("h",
_rv);
return _res;
}
static PyObject *CtlObj_SetControlValue(ControlObject *_self, PyObject *_args)
{
PyObject *_res = NULL;
SInt16 newValue;
if (!PyArg_ParseTuple(_args, "h",
&newValue))
return NULL;
SetControlValue(_self->ob_itself,
newValue);
Py_INCREF(Py_None);
_res = Py_None;
return _res;
}
static PyObject *CtlObj_GetControlMinimum(ControlObject *_self, PyObject *_args)
{
PyObject *_res = NULL;
SInt16 _rv;
if (!PyArg_ParseTuple(_args, ""))
return NULL;
_rv = GetControlMinimum(_self->ob_itself);
_res = Py_BuildValue("h",
_rv);
return _res;
}
static PyObject *CtlObj_SetControlMinimum(ControlObject *_self, PyObject *_args)
{
PyObject *_res = NULL;
SInt16 newMinimum;
if (!PyArg_ParseTuple(_args, "h",
&newMinimum))
return NULL;
SetControlMinimum(_self->ob_itself,
newMinimum);
Py_INCREF(Py_None);
_res = Py_None;
return _res;
}
static PyObject *CtlObj_GetControlMaximum(ControlObject *_self, PyObject *_args)
{
PyObject *_res = NULL;
SInt16 _rv;
if (!PyArg_ParseTuple(_args, ""))
return NULL;
_rv = GetControlMaximum(_self->ob_itself);
_res = Py_BuildValue("h",
_rv);
return _res;
}
static PyObject *CtlObj_SetControlMaximum(ControlObject *_self, PyObject *_args)
{
PyObject *_res = NULL;
SInt16 newMaximum;
if (!PyArg_ParseTuple(_args, "h",
&newMaximum))
return NULL;
SetControlMaximum(_self->ob_itself,
newMaximum);
Py_INCREF(Py_None);
_res = Py_None;
return _res;
}
static PyObject *CtlObj_GetControlViewSize(ControlObject *_self, PyObject *_args)
{
PyObject *_res = NULL;
SInt32 _rv;
if (!PyArg_ParseTuple(_args, ""))
return NULL;
_rv = GetControlViewSize(_self->ob_itself);
_res = Py_BuildValue("l",
_rv);
return _res;
}
static PyObject *CtlObj_SetControlViewSize(ControlObject *_self, PyObject *_args)
{
PyObject *_res = NULL;
SInt32 newViewSize;
if (!PyArg_ParseTuple(_args, "l",
&newViewSize))
return NULL;
SetControlViewSize(_self->ob_itself,
newViewSize);
Py_INCREF(Py_None);
_res = Py_None;
return _res;
}
static PyObject *CtlObj_GetControl32BitValue(ControlObject *_self, PyObject *_args)
{
PyObject *_res = NULL;
SInt32 _rv;
if (!PyArg_ParseTuple(_args, ""))
return NULL;
_rv = GetControl32BitValue(_self->ob_itself);
_res = Py_BuildValue("l",
_rv);
return _res;
}
static PyObject *CtlObj_SetControl32BitValue(ControlObject *_self, PyObject *_args)
{
PyObject *_res = NULL;
SInt32 newValue;
if (!PyArg_ParseTuple(_args, "l",
&newValue))
return NULL;
SetControl32BitValue(_self->ob_itself,
newValue);
Py_INCREF(Py_None);
_res = Py_None;
return _res;
}
static PyObject *CtlObj_GetControl32BitMaximum(ControlObject *_self, PyObject *_args)
{
PyObject *_res = NULL;
SInt32 _rv;
if (!PyArg_ParseTuple(_args, ""))
return NULL;
_rv = GetControl32BitMaximum(_self->ob_itself);
_res = Py_BuildValue("l",
_rv);
return _res;
}
static PyObject *CtlObj_SetControl32BitMaximum(ControlObject *_self, PyObject *_args)
{
PyObject *_res = NULL;
SInt32 newMaximum;
if (!PyArg_ParseTuple(_args, "l",
&newMaximum))
return NULL;
SetControl32BitMaximum(_self->ob_itself,
newMaximum);
Py_INCREF(Py_None);
_res = Py_None;
return _res;
}
static PyObject *CtlObj_GetControl32BitMinimum(ControlObject *_self, PyObject *_args)
{
PyObject *_res = NULL;
SInt32 _rv;
if (!PyArg_ParseTuple(_args, ""))
return NULL;
_rv = GetControl32BitMinimum(_self->ob_itself);
_res = Py_BuildValue("l",
_rv);
return _res;
}
static PyObject *CtlObj_SetControl32BitMinimum(ControlObject *_self, PyObject *_args)
{
PyObject *_res = NULL;
SInt32 newMinimum;
if (!PyArg_ParseTuple(_args, "l",
&newMinimum))
return NULL;
SetControl32BitMinimum(_self->ob_itself,
newMinimum);
Py_INCREF(Py_None);
_res = Py_None;
return _res;
}
static PyObject *CtlObj_IsValidControlHandle(ControlObject *_self, PyObject *_args)
{
PyObject *_res = NULL;
Boolean _rv;
if (!PyArg_ParseTuple(_args, ""))
return NULL;
_rv = IsValidControlHandle(_self->ob_itself);
_res = Py_BuildValue("b",
_rv);
return _res;
}
#if TARGET_API_MAC_CARBON
static PyObject *CtlObj_SetControlID(ControlObject *_self, PyObject *_args)
{
PyObject *_res = NULL;
OSStatus _err;
ControlID inID;
if (!PyArg_ParseTuple(_args, "O&",
PyControlID_Convert, &inID))
return NULL;
_err = SetControlID(_self->ob_itself,
&inID);
if (_err != noErr) return PyMac_Error(_err);
Py_INCREF(Py_None);
_res = Py_None;
return _res;
}
#endif
#if TARGET_API_MAC_CARBON
static PyObject *CtlObj_GetControlID(ControlObject *_self, PyObject *_args)
{
PyObject *_res = NULL;
OSStatus _err;
ControlID outID;
if (!PyArg_ParseTuple(_args, ""))
return NULL;
_err = GetControlID(_self->ob_itself,
&outID);
if (_err != noErr) return PyMac_Error(_err);
_res = Py_BuildValue("O&",
PyControlID_New, &outID);
return _res;
}
#endif
static PyObject *CtlObj_RemoveControlProperty(ControlObject *_self, PyObject *_args)
{
PyObject *_res = NULL;
OSStatus _err;
OSType propertyCreator;
OSType propertyTag;
if (!PyArg_ParseTuple(_args, "O&O&",
PyMac_GetOSType, &propertyCreator,
PyMac_GetOSType, &propertyTag))
return NULL;
_err = RemoveControlProperty(_self->ob_itself,
propertyCreator,
propertyTag);
if (_err != noErr) return PyMac_Error(_err);
Py_INCREF(Py_None);
_res = Py_None;
return _res;
}
#if TARGET_API_MAC_CARBON
static PyObject *CtlObj_GetControlPropertyAttributes(ControlObject *_self, PyObject *_args)
{
PyObject *_res = NULL;
OSStatus _err;
OSType propertyCreator;
OSType propertyTag;
UInt32 attributes;
if (!PyArg_ParseTuple(_args, "O&O&",
PyMac_GetOSType, &propertyCreator,
PyMac_GetOSType, &propertyTag))
return NULL;
_err = GetControlPropertyAttributes(_self->ob_itself,
propertyCreator,
propertyTag,
&attributes);
if (_err != noErr) return PyMac_Error(_err);
_res = Py_BuildValue("l",
attributes);
return _res;
}
#endif
#if TARGET_API_MAC_CARBON
static PyObject *CtlObj_ChangeControlPropertyAttributes(ControlObject *_self, PyObject *_args)
{
PyObject *_res = NULL;
OSStatus _err;
OSType propertyCreator;
OSType propertyTag;
UInt32 attributesToSet;
UInt32 attributesToClear;
if (!PyArg_ParseTuple(_args, "O&O&ll",
PyMac_GetOSType, &propertyCreator,
PyMac_GetOSType, &propertyTag,
&attributesToSet,
&attributesToClear))
return NULL;
_err = ChangeControlPropertyAttributes(_self->ob_itself,
propertyCreator,
propertyTag,
attributesToSet,
attributesToClear);
if (_err != noErr) return PyMac_Error(_err);
Py_INCREF(Py_None);
_res = Py_None;
return _res;
}
#endif
static PyObject *CtlObj_GetControlRegion(ControlObject *_self, PyObject *_args)
{
PyObject *_res = NULL;
OSStatus _err;
ControlPartCode inPart;
RgnHandle outRegion;
if (!PyArg_ParseTuple(_args, "hO&",
&inPart,
ResObj_Convert, &outRegion))
return NULL;
_err = GetControlRegion(_self->ob_itself,
inPart,
outRegion);
if (_err != noErr) return PyMac_Error(_err);
Py_INCREF(Py_None);
_res = Py_None;
return _res;
}
static PyObject *CtlObj_GetControlVariant(ControlObject *_self, PyObject *_args)
{
PyObject *_res = NULL;
ControlVariant _rv;
if (!PyArg_ParseTuple(_args, ""))
return NULL;
_rv = GetControlVariant(_self->ob_itself);
_res = Py_BuildValue("h",
_rv);
return _res;
}
static PyObject *CtlObj_SetControlReference(ControlObject *_self, PyObject *_args)
{
PyObject *_res = NULL;
SInt32 data;
if (!PyArg_ParseTuple(_args, "l",
&data))
return NULL;
SetControlReference(_self->ob_itself,
data);
Py_INCREF(Py_None);
_res = Py_None;
return _res;
}
static PyObject *CtlObj_GetControlReference(ControlObject *_self, PyObject *_args)
{
PyObject *_res = NULL;
SInt32 _rv;
if (!PyArg_ParseTuple(_args, ""))
return NULL;
_rv = GetControlReference(_self->ob_itself);
_res = Py_BuildValue("l",
_rv);
return _res;
}
#if !TARGET_API_MAC_CARBON
static PyObject *CtlObj_GetAuxiliaryControlRecord(ControlObject *_self, PyObject *_args)
{
PyObject *_res = NULL;
Boolean _rv;
AuxCtlHandle acHndl;
if (!PyArg_ParseTuple(_args, ""))
return NULL;
_rv = GetAuxiliaryControlRecord(_self->ob_itself,
&acHndl);
_res = Py_BuildValue("bO&",
_rv,
ResObj_New, acHndl);
return _res;
}
#endif
#if !TARGET_API_MAC_CARBON
static PyObject *CtlObj_SetControlColor(ControlObject *_self, PyObject *_args)
{
PyObject *_res = NULL;
CCTabHandle newColorTable;
if (!PyArg_ParseTuple(_args, "O&",
ResObj_Convert, &newColorTable))
return NULL;
SetControlColor(_self->ob_itself,
newColorTable);
Py_INCREF(Py_None);
_res = Py_None;
return _res;
}
#endif
static PyObject *CtlObj_EmbedControl(ControlObject *_self, PyObject *_args)
{
PyObject *_res = NULL;
OSErr _err;
ControlHandle inContainer;
if (!PyArg_ParseTuple(_args, "O&",
CtlObj_Convert, &inContainer))
return NULL;
_err = EmbedControl(_self->ob_itself,
inContainer);
if (_err != noErr) return PyMac_Error(_err);
Py_INCREF(Py_None);
_res = Py_None;
return _res;
}
static PyObject *CtlObj_AutoEmbedControl(ControlObject *_self, PyObject *_args)
{
PyObject *_res = NULL;
OSErr _err;
WindowPtr inWindow;
if (!PyArg_ParseTuple(_args, "O&",
WinObj_Convert, &inWindow))
return NULL;
_err = AutoEmbedControl(_self->ob_itself,
inWindow);
if (_err != noErr) return PyMac_Error(_err);
Py_INCREF(Py_None);
_res = Py_None;
return _res;
}
static PyObject *CtlObj_GetSuperControl(ControlObject *_self, PyObject *_args)
{
PyObject *_res = NULL;
OSErr _err;
ControlHandle outParent;
if (!PyArg_ParseTuple(_args, ""))
return NULL;
_err = GetSuperControl(_self->ob_itself,
&outParent);
if (_err != noErr) return PyMac_Error(_err);
_res = Py_BuildValue("O&",
CtlObj_WhichControl, outParent);
return _res;
}
static PyObject *CtlObj_CountSubControls(ControlObject *_self, PyObject *_args)
{
PyObject *_res = NULL;
OSErr _err;
UInt16 outNumChildren;
if (!PyArg_ParseTuple(_args, ""))
return NULL;
_err = CountSubControls(_self->ob_itself,
&outNumChildren);
if (_err != noErr) return PyMac_Error(_err);
_res = Py_BuildValue("H",
outNumChildren);
return _res;
}
static PyObject *CtlObj_GetIndexedSubControl(ControlObject *_self, PyObject *_args)
{
PyObject *_res = NULL;
OSErr _err;
UInt16 inIndex;
ControlHandle outSubControl;
if (!PyArg_ParseTuple(_args, "H",
&inIndex))
return NULL;
_err = GetIndexedSubControl(_self->ob_itself,
inIndex,
&outSubControl);
if (_err != noErr) return PyMac_Error(_err);
_res = Py_BuildValue("O&",
CtlObj_WhichControl, outSubControl);
return _res;
}
static PyObject *CtlObj_SetControlSupervisor(ControlObject *_self, PyObject *_args)
{
PyObject *_res = NULL;
OSErr _err;
ControlHandle inBoss;
if (!PyArg_ParseTuple(_args, "O&",
CtlObj_Convert, &inBoss))
return NULL;
_err = SetControlSupervisor(_self->ob_itself,
inBoss);
if (_err != noErr) return PyMac_Error(_err);
Py_INCREF(Py_None);
_res = Py_None;
return _res;
}
static PyObject *CtlObj_GetControlFeatures(ControlObject *_self, PyObject *_args)
{
PyObject *_res = NULL;
OSErr _err;
UInt32 outFeatures;
if (!PyArg_ParseTuple(_args, ""))
return NULL;
_err = GetControlFeatures(_self->ob_itself,
&outFeatures);
if (_err != noErr) return PyMac_Error(_err);
_res = Py_BuildValue("l",
outFeatures);
return _res;
}
static PyObject *CtlObj_GetControlDataSize(ControlObject *_self, PyObject *_args)
{
PyObject *_res = NULL;
OSErr _err;
ControlPartCode inPart;
ResType inTagName;
Size outMaxSize;
if (!PyArg_ParseTuple(_args, "hO&",
&inPart,
PyMac_GetOSType, &inTagName))
return NULL;
_err = GetControlDataSize(_self->ob_itself,
inPart,
inTagName,
&outMaxSize);
if (_err != noErr) return PyMac_Error(_err);
_res = Py_BuildValue("l",
outMaxSize);
return _res;
}
#if TARGET_API_MAC_CARBON
static PyObject *CtlObj_HandleControlDragTracking(ControlObject *_self, PyObject *_args)
{
PyObject *_res = NULL;
OSStatus _err;
DragTrackingMessage inMessage;
DragReference inDrag;
Boolean outLikesDrag;
if (!PyArg_ParseTuple(_args, "hO&",
&inMessage,
DragObj_Convert, &inDrag))
return NULL;
_err = HandleControlDragTracking(_self->ob_itself,
inMessage,
inDrag,
&outLikesDrag);
if (_err != noErr) return PyMac_Error(_err);
_res = Py_BuildValue("b",
outLikesDrag);
return _res;
}
#endif
#if TARGET_API_MAC_CARBON
static PyObject *CtlObj_HandleControlDragReceive(ControlObject *_self, PyObject *_args)
{
PyObject *_res = NULL;
OSStatus _err;
DragReference inDrag;
if (!PyArg_ParseTuple(_args, "O&",
DragObj_Convert, &inDrag))
return NULL;
_err = HandleControlDragReceive(_self->ob_itself,
inDrag);
if (_err != noErr) return PyMac_Error(_err);
Py_INCREF(Py_None);
_res = Py_None;
return _res;
}
#endif
#if TARGET_API_MAC_CARBON
static PyObject *CtlObj_SetControlDragTrackingEnabled(ControlObject *_self, PyObject *_args)
{
PyObject *_res = NULL;
OSStatus _err;
Boolean tracks;
if (!PyArg_ParseTuple(_args, "b",
&tracks))
return NULL;
_err = SetControlDragTrackingEnabled(_self->ob_itself,
tracks);
if (_err != noErr) return PyMac_Error(_err);
Py_INCREF(Py_None);
_res = Py_None;
return _res;
}
#endif
#if TARGET_API_MAC_CARBON
static PyObject *CtlObj_IsControlDragTrackingEnabled(ControlObject *_self, PyObject *_args)
{
PyObject *_res = NULL;
OSStatus _err;
Boolean tracks;
if (!PyArg_ParseTuple(_args, ""))
return NULL;
_err = IsControlDragTrackingEnabled(_self->ob_itself,
&tracks);
if (_err != noErr) return PyMac_Error(_err);
_res = Py_BuildValue("b",
tracks);
return _res;
}
#endif
#if ACCESSOR_CALLS_ARE_FUNCTIONS
static PyObject *CtlObj_GetControlBounds(ControlObject *_self, PyObject *_args)
{
PyObject *_res = NULL;
Rect bounds;
if (!PyArg_ParseTuple(_args, ""))
return NULL;
GetControlBounds(_self->ob_itself,
&bounds);
_res = Py_BuildValue("O&",
PyMac_BuildRect, &bounds);
return _res;
}
#endif
#if ACCESSOR_CALLS_ARE_FUNCTIONS
static PyObject *CtlObj_IsControlHilited(ControlObject *_self, PyObject *_args)
{
PyObject *_res = NULL;
Boolean _rv;
if (!PyArg_ParseTuple(_args, ""))
return NULL;
_rv = IsControlHilited(_self->ob_itself);
_res = Py_BuildValue("b",
_rv);
return _res;
}
#endif
#if ACCESSOR_CALLS_ARE_FUNCTIONS
static PyObject *CtlObj_GetControlHilite(ControlObject *_self, PyObject *_args)
{
PyObject *_res = NULL;
UInt16 _rv;
if (!PyArg_ParseTuple(_args, ""))
return NULL;
_rv = GetControlHilite(_self->ob_itself);
_res = Py_BuildValue("H",
_rv);
return _res;
}
#endif
#if ACCESSOR_CALLS_ARE_FUNCTIONS
static PyObject *CtlObj_GetControlOwner(ControlObject *_self, PyObject *_args)
{
PyObject *_res = NULL;
WindowPtr _rv;
if (!PyArg_ParseTuple(_args, ""))
return NULL;
_rv = GetControlOwner(_self->ob_itself);
_res = Py_BuildValue("O&",
WinObj_New, _rv);
return _res;
}
#endif
#if ACCESSOR_CALLS_ARE_FUNCTIONS
static PyObject *CtlObj_GetControlDataHandle(ControlObject *_self, PyObject *_args)
{
PyObject *_res = NULL;
Handle _rv;
if (!PyArg_ParseTuple(_args, ""))
return NULL;
_rv = GetControlDataHandle(_self->ob_itself);
_res = Py_BuildValue("O&",
ResObj_New, _rv);
return _res;
}
#endif
#if ACCESSOR_CALLS_ARE_FUNCTIONS
static PyObject *CtlObj_GetControlPopupMenuHandle(ControlObject *_self, PyObject *_args)
{
PyObject *_res = NULL;
MenuHandle _rv;
if (!PyArg_ParseTuple(_args, ""))
return NULL;
_rv = GetControlPopupMenuHandle(_self->ob_itself);
_res = Py_BuildValue("O&",
MenuObj_New, _rv);
return _res;
}
#endif
#if ACCESSOR_CALLS_ARE_FUNCTIONS
static PyObject *CtlObj_GetControlPopupMenuID(ControlObject *_self, PyObject *_args)
{
PyObject *_res = NULL;
short _rv;
if (!PyArg_ParseTuple(_args, ""))
return NULL;
_rv = GetControlPopupMenuID(_self->ob_itself);
_res = Py_BuildValue("h",
_rv);
return _res;
}
#endif
#if ACCESSOR_CALLS_ARE_FUNCTIONS
static PyObject *CtlObj_SetControlDataHandle(ControlObject *_self, PyObject *_args)
{
PyObject *_res = NULL;
Handle dataHandle;
if (!PyArg_ParseTuple(_args, "O&",
ResObj_Convert, &dataHandle))
return NULL;
SetControlDataHandle(_self->ob_itself,
dataHandle);
Py_INCREF(Py_None);
_res = Py_None;
return _res;
}
#endif
#if ACCESSOR_CALLS_ARE_FUNCTIONS
static PyObject *CtlObj_SetControlBounds(ControlObject *_self, PyObject *_args)
{
PyObject *_res = NULL;
Rect bounds;
if (!PyArg_ParseTuple(_args, "O&",
PyMac_GetRect, &bounds))
return NULL;
SetControlBounds(_self->ob_itself,
&bounds);
Py_INCREF(Py_None);
_res = Py_None;
return _res;
}
#endif
#if ACCESSOR_CALLS_ARE_FUNCTIONS
static PyObject *CtlObj_SetControlPopupMenuHandle(ControlObject *_self, PyObject *_args)
{
PyObject *_res = NULL;
MenuHandle popupMenu;
if (!PyArg_ParseTuple(_args, "O&",
MenuObj_Convert, &popupMenu))
return NULL;
SetControlPopupMenuHandle(_self->ob_itself,
popupMenu);
Py_INCREF(Py_None);
_res = Py_None;
return _res;
}
#endif
#if ACCESSOR_CALLS_ARE_FUNCTIONS
static PyObject *CtlObj_SetControlPopupMenuID(ControlObject *_self, PyObject *_args)
{
PyObject *_res = NULL;
short menuID;
if (!PyArg_ParseTuple(_args, "h",
&menuID))
return NULL;
SetControlPopupMenuID(_self->ob_itself,
menuID);
Py_INCREF(Py_None);
_res = Py_None;
return _res;
}
#endif
static PyObject *CtlObj_GetBevelButtonMenuValue(ControlObject *_self, PyObject *_args)
{
PyObject *_res = NULL;
OSErr _err;
SInt16 outValue;
if (!PyArg_ParseTuple(_args, ""))
return NULL;
_err = GetBevelButtonMenuValue(_self->ob_itself,
&outValue);
if (_err != noErr) return PyMac_Error(_err);
_res = Py_BuildValue("h",
outValue);
return _res;
}
static PyObject *CtlObj_SetBevelButtonMenuValue(ControlObject *_self, PyObject *_args)
{
PyObject *_res = NULL;
OSErr _err;
SInt16 inValue;
if (!PyArg_ParseTuple(_args, "h",
&inValue))
return NULL;
_err = SetBevelButtonMenuValue(_self->ob_itself,
inValue);
if (_err != noErr) return PyMac_Error(_err);
Py_INCREF(Py_None);
_res = Py_None;
return _res;
}
static PyObject *CtlObj_GetBevelButtonMenuHandle(ControlObject *_self, PyObject *_args)
{
PyObject *_res = NULL;
OSErr _err;
MenuHandle outHandle;
if (!PyArg_ParseTuple(_args, ""))
return NULL;
_err = GetBevelButtonMenuHandle(_self->ob_itself,
&outHandle);
if (_err != noErr) return PyMac_Error(_err);
_res = Py_BuildValue("O&",
MenuObj_New, outHandle);
return _res;
}
static PyObject *CtlObj_SetBevelButtonTransform(ControlObject *_self, PyObject *_args)
{
PyObject *_res = NULL;
OSErr _err;
IconTransformType transform;
if (!PyArg_ParseTuple(_args, "h",
&transform))
return NULL;
_err = SetBevelButtonTransform(_self->ob_itself,
transform);
if (_err != noErr) return PyMac_Error(_err);
Py_INCREF(Py_None);
_res = Py_None;
return _res;
}
static PyObject *CtlObj_SetDisclosureTriangleLastValue(ControlObject *_self, PyObject *_args)
{
PyObject *_res = NULL;
OSErr _err;
SInt16 inValue;
if (!PyArg_ParseTuple(_args, "h",
&inValue))
return NULL;
_err = SetDisclosureTriangleLastValue(_self->ob_itself,
inValue);
if (_err != noErr) return PyMac_Error(_err);
Py_INCREF(Py_None);
_res = Py_None;
return _res;
}
static PyObject *CtlObj_GetTabContentRect(ControlObject *_self, PyObject *_args)
{
PyObject *_res = NULL;
OSErr _err;
Rect outContentRect;
if (!PyArg_ParseTuple(_args, ""))
return NULL;
_err = GetTabContentRect(_self->ob_itself,
&outContentRect);
if (_err != noErr) return PyMac_Error(_err);
_res = Py_BuildValue("O&",
PyMac_BuildRect, &outContentRect);
return _res;
}
static PyObject *CtlObj_SetTabEnabled(ControlObject *_self, PyObject *_args)
{
PyObject *_res = NULL;
OSErr _err;
SInt16 inTabToHilite;
Boolean inEnabled;
if (!PyArg_ParseTuple(_args, "hb",
&inTabToHilite,
&inEnabled))
return NULL;
_err = SetTabEnabled(_self->ob_itself,
inTabToHilite,
inEnabled);
if (_err != noErr) return PyMac_Error(_err);
Py_INCREF(Py_None);
_res = Py_None;
return _res;
}
static PyObject *CtlObj_SetImageWellTransform(ControlObject *_self, PyObject *_args)
{
PyObject *_res = NULL;
OSErr _err;
IconTransformType inTransform;
if (!PyArg_ParseTuple(_args, "h",
&inTransform))
return NULL;
_err = SetImageWellTransform(_self->ob_itself,
inTransform);
if (_err != noErr) return PyMac_Error(_err);
Py_INCREF(Py_None);
_res = Py_None;
return _res;
}
static PyObject *CtlObj_as_Resource(ControlObject *_self, PyObject *_args)
{
PyObject *_res = NULL;
Handle _rv;
if (!PyArg_ParseTuple(_args, ""))
return NULL;
_rv = as_Resource(_self->ob_itself);
_res = Py_BuildValue("O&",
ResObj_New, _rv);
return _res;
}
static PyObject *CtlObj_GetControlRect(ControlObject *_self, PyObject *_args)
{
PyObject *_res = NULL;
Rect rect;
if (!PyArg_ParseTuple(_args, ""))
return NULL;
GetControlRect(_self->ob_itself,
&rect);
_res = Py_BuildValue("O&",
PyMac_BuildRect, &rect);
return _res;
}
static PyObject *CtlObj_DisposeControl(ControlObject *_self, PyObject *_args)
{
PyObject *_res = NULL;
if (!PyArg_ParseTuple(_args, ""))
return NULL;
if ( _self->ob_itself ) {
SetControlReference(_self->ob_itself, (long)0); /* Make it forget about us */
DisposeControl(_self->ob_itself);
_self->ob_itself = NULL;
}
Py_INCREF(Py_None);
_res = Py_None;
return _res;
}
static PyObject *CtlObj_TrackControl(ControlObject *_self, PyObject *_args)
{
PyObject *_res = NULL;
ControlPartCode _rv;
Point startPoint;
ControlActionUPP upp = 0;
PyObject *callback = 0;
if (!PyArg_ParseTuple(_args, "O&|O",
PyMac_GetPoint, &startPoint, &callback))
return NULL;
if (callback && callback != Py_None) {
if (PyInt_Check(callback) && PyInt_AS_LONG(callback) == -1)
upp = (ControlActionUPP)-1;
else {
settrackfunc(callback);
upp = mytracker_upp;
}
}
_rv = TrackControl(_self->ob_itself,
startPoint,
upp);
clrtrackfunc();
_res = Py_BuildValue("h",
_rv);
return _res;
}
static PyObject *CtlObj_HandleControlClick(ControlObject *_self, PyObject *_args)
{
PyObject *_res = NULL;
ControlPartCode _rv;
Point startPoint;
SInt16 modifiers;
ControlActionUPP upp = 0;
PyObject *callback = 0;
if (!PyArg_ParseTuple(_args, "O&h|O",
PyMac_GetPoint, &startPoint,
&modifiers,
&callback))
return NULL;
if (callback && callback != Py_None) {
if (PyInt_Check(callback) && PyInt_AS_LONG(callback) == -1)
upp = (ControlActionUPP)-1;
else {
settrackfunc(callback);
upp = mytracker_upp;
}
}
_rv = HandleControlClick(_self->ob_itself,
startPoint,
modifiers,
upp);
clrtrackfunc();
_res = Py_BuildValue("h",
_rv);
return _res;
}
static PyObject *CtlObj_SetControlData(ControlObject *_self, PyObject *_args)
{
PyObject *_res = NULL;
OSErr _err;
ControlPartCode inPart;
ResType inTagName;
Size bufferSize;
Ptr buffer;
if (!PyArg_ParseTuple(_args, "hO&s#",
&inPart,
PyMac_GetOSType, &inTagName,
&buffer, &bufferSize))
return NULL;
_err = SetControlData(_self->ob_itself,
inPart,
inTagName,
bufferSize,
buffer);
if (_err != noErr)
return PyMac_Error(_err);
_res = Py_None;
return _res;
}
static PyObject *CtlObj_GetControlData(ControlObject *_self, PyObject *_args)
{
PyObject *_res = NULL;
OSErr _err;
ControlPartCode inPart;
ResType inTagName;
Size bufferSize;
Ptr buffer;
Size outSize;
if (!PyArg_ParseTuple(_args, "hO&",
&inPart,
PyMac_GetOSType, &inTagName))
return NULL;
/* allocate a buffer for the data */
_err = GetControlDataSize(_self->ob_itself,
inPart,
inTagName,
&bufferSize);
if (_err != noErr)
return PyMac_Error(_err);
buffer = PyMem_NEW(char, bufferSize);
if (buffer == NULL)
return PyErr_NoMemory();
_err = GetControlData(_self->ob_itself,
inPart,
inTagName,
bufferSize,
buffer,
&outSize);
if (_err != noErr) {
PyMem_DEL(buffer);
return PyMac_Error(_err);
}
_res = Py_BuildValue("s#", buffer, outSize);
PyMem_DEL(buffer);
return _res;
}
static PyObject *CtlObj_SetControlData_Handle(ControlObject *_self, PyObject *_args)
{
PyObject *_res = NULL;
OSErr _err;
ControlPartCode inPart;
ResType inTagName;
Handle buffer;
if (!PyArg_ParseTuple(_args, "hO&O&",
&inPart,
PyMac_GetOSType, &inTagName,
OptResObj_Convert, &buffer))
return NULL;
_err = SetControlData(_self->ob_itself,
inPart,
inTagName,
sizeof(buffer),
(Ptr)&buffer);
if (_err != noErr)
return PyMac_Error(_err);
_res = Py_None;
return _res;
}
static PyObject *CtlObj_GetControlData_Handle(ControlObject *_self, PyObject *_args)
{
PyObject *_res = NULL;
OSErr _err;
ControlPartCode inPart;
ResType inTagName;
Size bufferSize;
Handle hdl;
if (!PyArg_ParseTuple(_args, "hO&",
&inPart,
PyMac_GetOSType, &inTagName))
return NULL;
/* Check it is handle-sized */
_err = GetControlDataSize(_self->ob_itself,
inPart,
inTagName,
&bufferSize);
if (_err != noErr)
return PyMac_Error(_err);
if (bufferSize != sizeof(Handle)) {
PyErr_SetString(Ctl_Error, "GetControlDataSize() != sizeof(Handle)");
return NULL;
}
_err = GetControlData(_self->ob_itself,
inPart,
inTagName,
sizeof(Handle),
(Ptr)&hdl,
&bufferSize);
if (_err != noErr) {
return PyMac_Error(_err);
}
_res = Py_BuildValue("O&", OptResObj_New, hdl);
return _res;
}
static PyObject *CtlObj_SetControlData_Callback(ControlObject *_self, PyObject *_args)
{
PyObject *_res = NULL;
OSErr _err;
ControlPartCode inPart;
ResType inTagName;
PyObject *callback;
UniversalProcPtr c_callback;
if (!PyArg_ParseTuple(_args, "hO&O",
&inPart,
PyMac_GetOSType, &inTagName,
&callback))
return NULL;
if ( setcallback((PyObject *)_self, inTagName, callback, &c_callback) < 0 )
return NULL;
_err = SetControlData(_self->ob_itself,
inPart,
inTagName,
sizeof(c_callback),
(Ptr)&c_callback);
if (_err != noErr)
return PyMac_Error(_err);
_res = Py_None;
return _res;
}
#if !TARGET_API_MAC_CARBON
static PyObject *CtlObj_GetPopupData(ControlObject *_self, PyObject *_args)
{
PyObject *_res = NULL;
PopupPrivateDataHandle hdl;
if ( (*_self->ob_itself)->contrlData == NULL ) {
PyErr_SetString(Ctl_Error, "No contrlData handle in control");
return 0;
}
hdl = (PopupPrivateDataHandle)(*_self->ob_itself)->contrlData;
HLock((Handle)hdl);
_res = Py_BuildValue("O&i", MenuObj_New, (*hdl)->mHandle, (int)(*hdl)->mID);
HUnlock((Handle)hdl);
return _res;
}
#endif
#if !TARGET_API_MAC_CARBON
static PyObject *CtlObj_SetPopupData(ControlObject *_self, PyObject *_args)
{
PyObject *_res = NULL;
PopupPrivateDataHandle hdl;
MenuHandle mHandle;
short mID;
if (!PyArg_ParseTuple(_args, "O&h", MenuObj_Convert, &mHandle, &mID) )
return 0;
if ( (*_self->ob_itself)->contrlData == NULL ) {
PyErr_SetString(Ctl_Error, "No contrlData handle in control");
return 0;
}
hdl = (PopupPrivateDataHandle)(*_self->ob_itself)->contrlData;
(*hdl)->mHandle = mHandle;
(*hdl)->mID = mID;
Py_INCREF(Py_None);
return Py_None;
}
#endif
static PyMethodDef CtlObj_methods[] = {
{"HiliteControl", (PyCFunction)CtlObj_HiliteControl, 1,
"(ControlPartCode hiliteState) -> None"},
{"ShowControl", (PyCFunction)CtlObj_ShowControl, 1,
"() -> None"},
{"HideControl", (PyCFunction)CtlObj_HideControl, 1,
"() -> None"},
{"IsControlActive", (PyCFunction)CtlObj_IsControlActive, 1,
"() -> (Boolean _rv)"},
{"IsControlVisible", (PyCFunction)CtlObj_IsControlVisible, 1,
"() -> (Boolean _rv)"},
{"ActivateControl", (PyCFunction)CtlObj_ActivateControl, 1,
"() -> None"},
{"DeactivateControl", (PyCFunction)CtlObj_DeactivateControl, 1,
"() -> None"},
{"SetControlVisibility", (PyCFunction)CtlObj_SetControlVisibility, 1,
"(Boolean inIsVisible, Boolean inDoDraw) -> None"},
{"Draw1Control", (PyCFunction)CtlObj_Draw1Control, 1,
"() -> None"},
{"GetBestControlRect", (PyCFunction)CtlObj_GetBestControlRect, 1,
"() -> (Rect outRect, SInt16 outBaseLineOffset)"},
{"SetControlFontStyle", (PyCFunction)CtlObj_SetControlFontStyle, 1,
"(ControlFontStyleRec inStyle) -> None"},
{"DrawControlInCurrentPort", (PyCFunction)CtlObj_DrawControlInCurrentPort, 1,
"() -> None"},
{"SetUpControlBackground", (PyCFunction)CtlObj_SetUpControlBackground, 1,
"(SInt16 inDepth, Boolean inIsColorDevice) -> None"},
{"SetUpControlTextColor", (PyCFunction)CtlObj_SetUpControlTextColor, 1,
"(SInt16 inDepth, Boolean inIsColorDevice) -> None"},
{"DragControl", (PyCFunction)CtlObj_DragControl, 1,
"(Point startPoint, Rect limitRect, Rect slopRect, DragConstraint axis) -> None"},
{"TestControl", (PyCFunction)CtlObj_TestControl, 1,
"(Point testPoint) -> (ControlPartCode _rv)"},
#if TARGET_API_MAC_CARBON
{"HandleControlContextualMenuClick", (PyCFunction)CtlObj_HandleControlContextualMenuClick, 1,
"(Point inWhere) -> (Boolean menuDisplayed)"},
#endif
#if TARGET_API_MAC_CARBON
{"GetControlClickActivation", (PyCFunction)CtlObj_GetControlClickActivation, 1,
"(Point inWhere, EventModifiers inModifiers) -> (ClickActivationResult outResult)"},
#endif
{"HandleControlKey", (PyCFunction)CtlObj_HandleControlKey, 1,
"(SInt16 inKeyCode, SInt16 inCharCode, EventModifiers inModifiers) -> (SInt16 _rv)"},
#if TARGET_API_MAC_CARBON
{"HandleControlSetCursor", (PyCFunction)CtlObj_HandleControlSetCursor, 1,
"(Point localPoint, EventModifiers modifiers) -> (Boolean cursorWasSet)"},
#endif
{"MoveControl", (PyCFunction)CtlObj_MoveControl, 1,
"(SInt16 h, SInt16 v) -> None"},
{"SizeControl", (PyCFunction)CtlObj_SizeControl, 1,
"(SInt16 w, SInt16 h) -> None"},
{"SetControlTitle", (PyCFunction)CtlObj_SetControlTitle, 1,
"(Str255 title) -> None"},
{"GetControlTitle", (PyCFunction)CtlObj_GetControlTitle, 1,
"() -> (Str255 title)"},
{"GetControlValue", (PyCFunction)CtlObj_GetControlValue, 1,
"() -> (SInt16 _rv)"},
{"SetControlValue", (PyCFunction)CtlObj_SetControlValue, 1,
"(SInt16 newValue) -> None"},
{"GetControlMinimum", (PyCFunction)CtlObj_GetControlMinimum, 1,
"() -> (SInt16 _rv)"},
{"SetControlMinimum", (PyCFunction)CtlObj_SetControlMinimum, 1,
"(SInt16 newMinimum) -> None"},
{"GetControlMaximum", (PyCFunction)CtlObj_GetControlMaximum, 1,
"() -> (SInt16 _rv)"},
{"SetControlMaximum", (PyCFunction)CtlObj_SetControlMaximum, 1,
"(SInt16 newMaximum) -> None"},
{"GetControlViewSize", (PyCFunction)CtlObj_GetControlViewSize, 1,
"() -> (SInt32 _rv)"},
{"SetControlViewSize", (PyCFunction)CtlObj_SetControlViewSize, 1,
"(SInt32 newViewSize) -> None"},
{"GetControl32BitValue", (PyCFunction)CtlObj_GetControl32BitValue, 1,
"() -> (SInt32 _rv)"},
{"SetControl32BitValue", (PyCFunction)CtlObj_SetControl32BitValue, 1,
"(SInt32 newValue) -> None"},
{"GetControl32BitMaximum", (PyCFunction)CtlObj_GetControl32BitMaximum, 1,
"() -> (SInt32 _rv)"},
{"SetControl32BitMaximum", (PyCFunction)CtlObj_SetControl32BitMaximum, 1,
"(SInt32 newMaximum) -> None"},
{"GetControl32BitMinimum", (PyCFunction)CtlObj_GetControl32BitMinimum, 1,
"() -> (SInt32 _rv)"},
{"SetControl32BitMinimum", (PyCFunction)CtlObj_SetControl32BitMinimum, 1,
"(SInt32 newMinimum) -> None"},
{"IsValidControlHandle", (PyCFunction)CtlObj_IsValidControlHandle, 1,
"() -> (Boolean _rv)"},
#if TARGET_API_MAC_CARBON
{"SetControlID", (PyCFunction)CtlObj_SetControlID, 1,
"(ControlID inID) -> None"},
#endif
#if TARGET_API_MAC_CARBON
{"GetControlID", (PyCFunction)CtlObj_GetControlID, 1,
"() -> (ControlID outID)"},
#endif
{"RemoveControlProperty", (PyCFunction)CtlObj_RemoveControlProperty, 1,
"(OSType propertyCreator, OSType propertyTag) -> None"},
#if TARGET_API_MAC_CARBON
{"GetControlPropertyAttributes", (PyCFunction)CtlObj_GetControlPropertyAttributes, 1,
"(OSType propertyCreator, OSType propertyTag) -> (UInt32 attributes)"},
#endif
#if TARGET_API_MAC_CARBON
{"ChangeControlPropertyAttributes", (PyCFunction)CtlObj_ChangeControlPropertyAttributes, 1,
"(OSType propertyCreator, OSType propertyTag, UInt32 attributesToSet, UInt32 attributesToClear) -> None"},
#endif
{"GetControlRegion", (PyCFunction)CtlObj_GetControlRegion, 1,
"(ControlPartCode inPart, RgnHandle outRegion) -> None"},
{"GetControlVariant", (PyCFunction)CtlObj_GetControlVariant, 1,
"() -> (ControlVariant _rv)"},
{"SetControlReference", (PyCFunction)CtlObj_SetControlReference, 1,
"(SInt32 data) -> None"},
{"GetControlReference", (PyCFunction)CtlObj_GetControlReference, 1,
"() -> (SInt32 _rv)"},
#if !TARGET_API_MAC_CARBON
{"GetAuxiliaryControlRecord", (PyCFunction)CtlObj_GetAuxiliaryControlRecord, 1,
"() -> (Boolean _rv, AuxCtlHandle acHndl)"},
#endif
#if !TARGET_API_MAC_CARBON
{"SetControlColor", (PyCFunction)CtlObj_SetControlColor, 1,
"(CCTabHandle newColorTable) -> None"},
#endif
{"EmbedControl", (PyCFunction)CtlObj_EmbedControl, 1,
"(ControlHandle inContainer) -> None"},
{"AutoEmbedControl", (PyCFunction)CtlObj_AutoEmbedControl, 1,
"(WindowPtr inWindow) -> None"},
{"GetSuperControl", (PyCFunction)CtlObj_GetSuperControl, 1,
"() -> (ControlHandle outParent)"},
{"CountSubControls", (PyCFunction)CtlObj_CountSubControls, 1,
"() -> (UInt16 outNumChildren)"},
{"GetIndexedSubControl", (PyCFunction)CtlObj_GetIndexedSubControl, 1,
"(UInt16 inIndex) -> (ControlHandle outSubControl)"},
{"SetControlSupervisor", (PyCFunction)CtlObj_SetControlSupervisor, 1,
"(ControlHandle inBoss) -> None"},
{"GetControlFeatures", (PyCFunction)CtlObj_GetControlFeatures, 1,
"() -> (UInt32 outFeatures)"},
{"GetControlDataSize", (PyCFunction)CtlObj_GetControlDataSize, 1,
"(ControlPartCode inPart, ResType inTagName) -> (Size outMaxSize)"},
#if TARGET_API_MAC_CARBON
{"HandleControlDragTracking", (PyCFunction)CtlObj_HandleControlDragTracking, 1,
"(DragTrackingMessage inMessage, DragReference inDrag) -> (Boolean outLikesDrag)"},
#endif
#if TARGET_API_MAC_CARBON
{"HandleControlDragReceive", (PyCFunction)CtlObj_HandleControlDragReceive, 1,
"(DragReference inDrag) -> None"},
#endif
#if TARGET_API_MAC_CARBON
{"SetControlDragTrackingEnabled", (PyCFunction)CtlObj_SetControlDragTrackingEnabled, 1,
"(Boolean tracks) -> None"},
#endif
#if TARGET_API_MAC_CARBON
{"IsControlDragTrackingEnabled", (PyCFunction)CtlObj_IsControlDragTrackingEnabled, 1,
"() -> (Boolean tracks)"},
#endif
#if ACCESSOR_CALLS_ARE_FUNCTIONS
{"GetControlBounds", (PyCFunction)CtlObj_GetControlBounds, 1,
"() -> (Rect bounds)"},
#endif
#if ACCESSOR_CALLS_ARE_FUNCTIONS
{"IsControlHilited", (PyCFunction)CtlObj_IsControlHilited, 1,
"() -> (Boolean _rv)"},
#endif
#if ACCESSOR_CALLS_ARE_FUNCTIONS
{"GetControlHilite", (PyCFunction)CtlObj_GetControlHilite, 1,
"() -> (UInt16 _rv)"},
#endif
#if ACCESSOR_CALLS_ARE_FUNCTIONS
{"GetControlOwner", (PyCFunction)CtlObj_GetControlOwner, 1,
"() -> (WindowPtr _rv)"},
#endif
#if ACCESSOR_CALLS_ARE_FUNCTIONS
{"GetControlDataHandle", (PyCFunction)CtlObj_GetControlDataHandle, 1,
"() -> (Handle _rv)"},
#endif
#if ACCESSOR_CALLS_ARE_FUNCTIONS
{"GetControlPopupMenuHandle", (PyCFunction)CtlObj_GetControlPopupMenuHandle, 1,
"() -> (MenuHandle _rv)"},
#endif
#if ACCESSOR_CALLS_ARE_FUNCTIONS
{"GetControlPopupMenuID", (PyCFunction)CtlObj_GetControlPopupMenuID, 1,
"() -> (short _rv)"},
#endif
#if ACCESSOR_CALLS_ARE_FUNCTIONS
{"SetControlDataHandle", (PyCFunction)CtlObj_SetControlDataHandle, 1,
"(Handle dataHandle) -> None"},
#endif
#if ACCESSOR_CALLS_ARE_FUNCTIONS
{"SetControlBounds", (PyCFunction)CtlObj_SetControlBounds, 1,
"(Rect bounds) -> None"},
#endif
#if ACCESSOR_CALLS_ARE_FUNCTIONS
{"SetControlPopupMenuHandle", (PyCFunction)CtlObj_SetControlPopupMenuHandle, 1,
"(MenuHandle popupMenu) -> None"},
#endif
#if ACCESSOR_CALLS_ARE_FUNCTIONS
{"SetControlPopupMenuID", (PyCFunction)CtlObj_SetControlPopupMenuID, 1,
"(short menuID) -> None"},
#endif
{"GetBevelButtonMenuValue", (PyCFunction)CtlObj_GetBevelButtonMenuValue, 1,
"() -> (SInt16 outValue)"},
{"SetBevelButtonMenuValue", (PyCFunction)CtlObj_SetBevelButtonMenuValue, 1,
"(SInt16 inValue) -> None"},
{"GetBevelButtonMenuHandle", (PyCFunction)CtlObj_GetBevelButtonMenuHandle, 1,
"() -> (MenuHandle outHandle)"},
{"SetBevelButtonTransform", (PyCFunction)CtlObj_SetBevelButtonTransform, 1,
"(IconTransformType transform) -> None"},
{"SetDisclosureTriangleLastValue", (PyCFunction)CtlObj_SetDisclosureTriangleLastValue, 1,
"(SInt16 inValue) -> None"},
{"GetTabContentRect", (PyCFunction)CtlObj_GetTabContentRect, 1,
"() -> (Rect outContentRect)"},
{"SetTabEnabled", (PyCFunction)CtlObj_SetTabEnabled, 1,
"(SInt16 inTabToHilite, Boolean inEnabled) -> None"},
{"SetImageWellTransform", (PyCFunction)CtlObj_SetImageWellTransform, 1,
"(IconTransformType inTransform) -> None"},
{"as_Resource", (PyCFunction)CtlObj_as_Resource, 1,
"() -> (Handle _rv)"},
{"GetControlRect", (PyCFunction)CtlObj_GetControlRect, 1,
"() -> (Rect rect)"},
{"DisposeControl", (PyCFunction)CtlObj_DisposeControl, 1,
"() -> None"},
{"TrackControl", (PyCFunction)CtlObj_TrackControl, 1,
"(Point startPoint [,trackercallback]) -> (ControlPartCode _rv)"},
{"HandleControlClick", (PyCFunction)CtlObj_HandleControlClick, 1,
"(Point startPoint, Integer modifiers, [,trackercallback]) -> (ControlPartCode _rv)"},
{"SetControlData", (PyCFunction)CtlObj_SetControlData, 1,
"(stuff) -> None"},
{"GetControlData", (PyCFunction)CtlObj_GetControlData, 1,
"(part, type) -> String"},
{"SetControlData_Handle", (PyCFunction)CtlObj_SetControlData_Handle, 1,
"(ResObj) -> None"},
{"GetControlData_Handle", (PyCFunction)CtlObj_GetControlData_Handle, 1,
"(part, type) -> ResObj"},
{"SetControlData_Callback", (PyCFunction)CtlObj_SetControlData_Callback, 1,
"(callbackfunc) -> None"},
#if !TARGET_API_MAC_CARBON
{"GetPopupData", (PyCFunction)CtlObj_GetPopupData, 1,
NULL},
#endif
#if !TARGET_API_MAC_CARBON
{"SetPopupData", (PyCFunction)CtlObj_SetPopupData, 1,
NULL},
#endif
{NULL, NULL, 0}
};
PyMethodChain CtlObj_chain = { CtlObj_methods, NULL };
static PyObject *CtlObj_getattr(ControlObject *self, char *name)
{
return Py_FindMethodInChain(&CtlObj_chain, (PyObject *)self, name);
}
#define CtlObj_setattr NULL
static int CtlObj_compare(ControlObject *self, ControlObject *other)
{
unsigned long v, w;
if (!CtlObj_Check((PyObject *)other))
{
v=(unsigned long)self;
w=(unsigned long)other;
}
else
{
v=(unsigned long)self->ob_itself;
w=(unsigned long)other->ob_itself;
}
if( v < w ) return -1;
if( v > w ) return 1;
return 0;
}
#define CtlObj_repr NULL
static long CtlObj_hash(ControlObject *self)
{
return (long)self->ob_itself;
}
PyTypeObject Control_Type = {
PyObject_HEAD_INIT(&PyType_Type)
0, /*ob_size*/
"Control", /*tp_name*/
sizeof(ControlObject), /*tp_basicsize*/
0, /*tp_itemsize*/
/* methods */
(destructor) CtlObj_dealloc, /*tp_dealloc*/
0, /*tp_print*/
(getattrfunc) CtlObj_getattr, /*tp_getattr*/
(setattrfunc) CtlObj_setattr, /*tp_setattr*/
(cmpfunc) CtlObj_compare, /*tp_compare*/
(reprfunc) CtlObj_repr, /*tp_repr*/
(PyNumberMethods *)0, /* tp_as_number */
(PySequenceMethods *)0, /* tp_as_sequence */
(PyMappingMethods *)0, /* tp_as_mapping */
(hashfunc) CtlObj_hash, /*tp_hash*/
};
/* -------------------- End object type Control --------------------- */
static PyObject *Ctl_NewControl(PyObject *_self, PyObject *_args)
{
PyObject *_res = NULL;
ControlHandle _rv;
WindowPtr owningWindow;
Rect boundsRect;
Str255 controlTitle;
Boolean initiallyVisible;
SInt16 initialValue;
SInt16 minimumValue;
SInt16 maximumValue;
SInt16 procID;
SInt32 controlReference;
if (!PyArg_ParseTuple(_args, "O&O&O&bhhhhl",
WinObj_Convert, &owningWindow,
PyMac_GetRect, &boundsRect,
PyMac_GetStr255, controlTitle,
&initiallyVisible,
&initialValue,
&minimumValue,
&maximumValue,
&procID,
&controlReference))
return NULL;
_rv = NewControl(owningWindow,
&boundsRect,
controlTitle,
initiallyVisible,
initialValue,
minimumValue,
maximumValue,
procID,
controlReference);
_res = Py_BuildValue("O&",
CtlObj_New, _rv);
return _res;
}
static PyObject *Ctl_GetNewControl(PyObject *_self, PyObject *_args)
{
PyObject *_res = NULL;
ControlHandle _rv;
SInt16 resourceID;
WindowPtr owningWindow;
if (!PyArg_ParseTuple(_args, "hO&",
&resourceID,
WinObj_Convert, &owningWindow))
return NULL;
_rv = GetNewControl(resourceID,
owningWindow);
_res = Py_BuildValue("O&",
CtlObj_New, _rv);
return _res;
}
static PyObject *Ctl_DrawControls(PyObject *_self, PyObject *_args)
{
PyObject *_res = NULL;
WindowPtr theWindow;
if (!PyArg_ParseTuple(_args, "O&",
WinObj_Convert, &theWindow))
return NULL;
DrawControls(theWindow);
Py_INCREF(Py_None);
_res = Py_None;
return _res;
}
static PyObject *Ctl_UpdateControls(PyObject *_self, PyObject *_args)
{
PyObject *_res = NULL;
WindowPtr theWindow;
RgnHandle updateRegion;
if (!PyArg_ParseTuple(_args, "O&O&",
WinObj_Convert, &theWindow,
ResObj_Convert, &updateRegion))
return NULL;
UpdateControls(theWindow,
updateRegion);
Py_INCREF(Py_None);
_res = Py_None;
return _res;
}
static PyObject *Ctl_FindControl(PyObject *_self, PyObject *_args)
{
PyObject *_res = NULL;
ControlPartCode _rv;
Point testPoint;
WindowPtr theWindow;
ControlHandle theControl;
if (!PyArg_ParseTuple(_args, "O&O&",
PyMac_GetPoint, &testPoint,
WinObj_Convert, &theWindow))
return NULL;
_rv = FindControl(testPoint,
theWindow,
&theControl);
_res = Py_BuildValue("hO&",
_rv,
CtlObj_WhichControl, theControl);
return _res;
}
static PyObject *Ctl_FindControlUnderMouse(PyObject *_self, PyObject *_args)
{
PyObject *_res = NULL;
ControlHandle _rv;
Point inWhere;
WindowPtr inWindow;
SInt16 outPart;
if (!PyArg_ParseTuple(_args, "O&O&",
PyMac_GetPoint, &inWhere,
WinObj_Convert, &inWindow))
return NULL;
_rv = FindControlUnderMouse(inWhere,
inWindow,
&outPart);
_res = Py_BuildValue("O&h",
CtlObj_New, _rv,
outPart);
return _res;
}
static PyObject *Ctl_IdleControls(PyObject *_self, PyObject *_args)
{
PyObject *_res = NULL;
WindowPtr inWindow;
if (!PyArg_ParseTuple(_args, "O&",
WinObj_Convert, &inWindow))
return NULL;
IdleControls(inWindow);
Py_INCREF(Py_None);
_res = Py_None;
return _res;
}
#if TARGET_API_MAC_CARBON
static PyObject *Ctl_GetControlByID(PyObject *_self, PyObject *_args)
{
PyObject *_res = NULL;
OSStatus _err;
WindowPtr inWindow;
ControlID inID;
ControlHandle outControl;
if (!PyArg_ParseTuple(_args, "O&O&",
WinObj_Convert, &inWindow,
PyControlID_Convert, &inID))
return NULL;
_err = GetControlByID(inWindow,
&inID,
&outControl);
if (_err != noErr) return PyMac_Error(_err);
_res = Py_BuildValue("O&",
CtlObj_WhichControl, outControl);
return _res;
}
#endif
static PyObject *Ctl_DumpControlHierarchy(PyObject *_self, PyObject *_args)
{
PyObject *_res = NULL;
OSErr _err;
WindowPtr inWindow;
FSSpec inDumpFile;
if (!PyArg_ParseTuple(_args, "O&O&",
WinObj_Convert, &inWindow,
PyMac_GetFSSpec, &inDumpFile))
return NULL;
_err = DumpControlHierarchy(inWindow,
&inDumpFile);
if (_err != noErr) return PyMac_Error(_err);
Py_INCREF(Py_None);
_res = Py_None;
return _res;
}
static PyObject *Ctl_CreateRootControl(PyObject *_self, PyObject *_args)
{
PyObject *_res = NULL;
OSErr _err;
WindowPtr inWindow;
ControlHandle outControl;
if (!PyArg_ParseTuple(_args, "O&",
WinObj_Convert, &inWindow))
return NULL;
_err = CreateRootControl(inWindow,
&outControl);
if (_err != noErr) return PyMac_Error(_err);
_res = Py_BuildValue("O&",
CtlObj_WhichControl, outControl);
return _res;
}
static PyObject *Ctl_GetRootControl(PyObject *_self, PyObject *_args)
{
PyObject *_res = NULL;
OSErr _err;
WindowPtr inWindow;
ControlHandle outControl;
if (!PyArg_ParseTuple(_args, "O&",
WinObj_Convert, &inWindow))
return NULL;
_err = GetRootControl(inWindow,
&outControl);
if (_err != noErr) return PyMac_Error(_err);
_res = Py_BuildValue("O&",
CtlObj_WhichControl, outControl);
return _res;
}
static PyObject *Ctl_GetKeyboardFocus(PyObject *_self, PyObject *_args)
{
PyObject *_res = NULL;
OSErr _err;
WindowPtr inWindow;
ControlHandle outControl;
if (!PyArg_ParseTuple(_args, "O&",
WinObj_Convert, &inWindow))
return NULL;
_err = GetKeyboardFocus(inWindow,
&outControl);
if (_err != noErr) return PyMac_Error(_err);
_res = Py_BuildValue("O&",
CtlObj_WhichControl, outControl);
return _res;
}
static PyObject *Ctl_SetKeyboardFocus(PyObject *_self, PyObject *_args)
{
PyObject *_res = NULL;
OSErr _err;
WindowPtr inWindow;
ControlHandle inControl;
ControlFocusPart inPart;
if (!PyArg_ParseTuple(_args, "O&O&h",
WinObj_Convert, &inWindow,
CtlObj_Convert, &inControl,
&inPart))
return NULL;
_err = SetKeyboardFocus(inWindow,
inControl,
inPart);
if (_err != noErr) return PyMac_Error(_err);
Py_INCREF(Py_None);
_res = Py_None;
return _res;
}
static PyObject *Ctl_AdvanceKeyboardFocus(PyObject *_self, PyObject *_args)
{
PyObject *_res = NULL;
OSErr _err;
WindowPtr inWindow;
if (!PyArg_ParseTuple(_args, "O&",
WinObj_Convert, &inWindow))
return NULL;
_err = AdvanceKeyboardFocus(inWindow);
if (_err != noErr) return PyMac_Error(_err);
Py_INCREF(Py_None);
_res = Py_None;
return _res;
}
static PyObject *Ctl_ReverseKeyboardFocus(PyObject *_self, PyObject *_args)
{
PyObject *_res = NULL;
OSErr _err;
WindowPtr inWindow;
if (!PyArg_ParseTuple(_args, "O&",
WinObj_Convert, &inWindow))
return NULL;
_err = ReverseKeyboardFocus(inWindow);
if (_err != noErr) return PyMac_Error(_err);
Py_INCREF(Py_None);
_res = Py_None;
return _res;
}
static PyObject *Ctl_ClearKeyboardFocus(PyObject *_self, PyObject *_args)
{
PyObject *_res = NULL;
OSErr _err;
WindowPtr inWindow;
if (!PyArg_ParseTuple(_args, "O&",
WinObj_Convert, &inWindow))
return NULL;
_err = ClearKeyboardFocus(inWindow);
if (_err != noErr) return PyMac_Error(_err);
Py_INCREF(Py_None);
_res = Py_None;
return _res;
}
#if TARGET_API_MAC_CARBON
static PyObject *Ctl_SetAutomaticControlDragTrackingEnabledForWindow(PyObject *_self, PyObject *_args)
{
PyObject *_res = NULL;
OSStatus _err;
WindowPtr theWindow;
Boolean tracks;
if (!PyArg_ParseTuple(_args, "O&b",
WinObj_Convert, &theWindow,
&tracks))
return NULL;
_err = SetAutomaticControlDragTrackingEnabledForWindow(theWindow,
tracks);
if (_err != noErr) return PyMac_Error(_err);
Py_INCREF(Py_None);
_res = Py_None;
return _res;
}
#endif
#if TARGET_API_MAC_CARBON
static PyObject *Ctl_IsAutomaticControlDragTrackingEnabledForWindow(PyObject *_self, PyObject *_args)
{
PyObject *_res = NULL;
OSStatus _err;
WindowPtr theWindow;
Boolean tracks;
if (!PyArg_ParseTuple(_args, "O&",
WinObj_Convert, &theWindow))
return NULL;
_err = IsAutomaticControlDragTrackingEnabledForWindow(theWindow,
&tracks);
if (_err != noErr) return PyMac_Error(_err);
_res = Py_BuildValue("b",
tracks);
return _res;
}
#endif
static PyObject *Ctl_as_Control(PyObject *_self, PyObject *_args)
{
PyObject *_res = NULL;
ControlHandle _rv;
Handle h;
if (!PyArg_ParseTuple(_args, "O&",
ResObj_Convert, &h))
return NULL;
_rv = as_Control(h);
_res = Py_BuildValue("O&",
CtlObj_New, _rv);
return _res;
}
static PyMethodDef Ctl_methods[] = {
{"NewControl", (PyCFunction)Ctl_NewControl, 1,
"(WindowPtr owningWindow, Rect boundsRect, Str255 controlTitle, Boolean initiallyVisible, SInt16 initialValue, SInt16 minimumValue, SInt16 maximumValue, SInt16 procID, SInt32 controlReference) -> (ControlHandle _rv)"},
{"GetNewControl", (PyCFunction)Ctl_GetNewControl, 1,
"(SInt16 resourceID, WindowPtr owningWindow) -> (ControlHandle _rv)"},
{"DrawControls", (PyCFunction)Ctl_DrawControls, 1,
"(WindowPtr theWindow) -> None"},
{"UpdateControls", (PyCFunction)Ctl_UpdateControls, 1,
"(WindowPtr theWindow, RgnHandle updateRegion) -> None"},
{"FindControl", (PyCFunction)Ctl_FindControl, 1,
"(Point testPoint, WindowPtr theWindow) -> (ControlPartCode _rv, ControlHandle theControl)"},
{"FindControlUnderMouse", (PyCFunction)Ctl_FindControlUnderMouse, 1,
"(Point inWhere, WindowPtr inWindow) -> (ControlHandle _rv, SInt16 outPart)"},
{"IdleControls", (PyCFunction)Ctl_IdleControls, 1,
"(WindowPtr inWindow) -> None"},
#if TARGET_API_MAC_CARBON
{"GetControlByID", (PyCFunction)Ctl_GetControlByID, 1,
"(WindowPtr inWindow, ControlID inID) -> (ControlHandle outControl)"},
#endif
{"DumpControlHierarchy", (PyCFunction)Ctl_DumpControlHierarchy, 1,
"(WindowPtr inWindow, FSSpec inDumpFile) -> None"},
{"CreateRootControl", (PyCFunction)Ctl_CreateRootControl, 1,
"(WindowPtr inWindow) -> (ControlHandle outControl)"},
{"GetRootControl", (PyCFunction)Ctl_GetRootControl, 1,
"(WindowPtr inWindow) -> (ControlHandle outControl)"},
{"GetKeyboardFocus", (PyCFunction)Ctl_GetKeyboardFocus, 1,
"(WindowPtr inWindow) -> (ControlHandle outControl)"},
{"SetKeyboardFocus", (PyCFunction)Ctl_SetKeyboardFocus, 1,
"(WindowPtr inWindow, ControlHandle inControl, ControlFocusPart inPart) -> None"},
{"AdvanceKeyboardFocus", (PyCFunction)Ctl_AdvanceKeyboardFocus, 1,
"(WindowPtr inWindow) -> None"},
{"ReverseKeyboardFocus", (PyCFunction)Ctl_ReverseKeyboardFocus, 1,
"(WindowPtr inWindow) -> None"},
{"ClearKeyboardFocus", (PyCFunction)Ctl_ClearKeyboardFocus, 1,
"(WindowPtr inWindow) -> None"},
#if TARGET_API_MAC_CARBON
{"SetAutomaticControlDragTrackingEnabledForWindow", (PyCFunction)Ctl_SetAutomaticControlDragTrackingEnabledForWindow, 1,
"(WindowPtr theWindow, Boolean tracks) -> None"},
#endif
#if TARGET_API_MAC_CARBON
{"IsAutomaticControlDragTrackingEnabledForWindow", (PyCFunction)Ctl_IsAutomaticControlDragTrackingEnabledForWindow, 1,
"(WindowPtr theWindow) -> (Boolean tracks)"},
#endif
{"as_Control", (PyCFunction)Ctl_as_Control, 1,
"(Handle h) -> (ControlHandle _rv)"},
{NULL, NULL, 0}
};
static PyObject *
CtlObj_NewUnmanaged(ControlHandle itself)
{
ControlObject *it;
if (itself == NULL) return PyMac_Error(resNotFound);
it = PyObject_NEW(ControlObject, &Control_Type);
if (it == NULL) return NULL;
it->ob_itself = itself;
it->ob_callbackdict = NULL;
return (PyObject *)it;
}
static PyObject *
CtlObj_WhichControl(ControlHandle c)
{
PyObject *it;
if (c == NULL)
it = Py_None;
else {
it = (PyObject *) GetControlReference(c);
/*
** If the refcon is zero or doesn't point back to the Python object
** the control is not ours. Return a temporary object.
*/
if (it == NULL || ((ControlObject *)it)->ob_itself != c)
return CtlObj_NewUnmanaged(c);
}
Py_INCREF(it);
return it;
}
static int
settrackfunc(PyObject *obj)
{
if (tracker) {
PyErr_SetString(Ctl_Error, "Tracker function in use");
return 0;
}
tracker = obj;
Py_INCREF(tracker);
return 1;
}
static void
clrtrackfunc(void)
{
Py_XDECREF(tracker);
tracker = 0;
}
static pascal void
mytracker(ControlHandle ctl, short part)
{
PyObject *args, *rv=0;
args = Py_BuildValue("(O&i)", CtlObj_WhichControl, ctl, (int)part);
if (args && tracker) {
rv = PyEval_CallObject(tracker, args);
Py_DECREF(args);
}
if (rv)
Py_DECREF(rv);
else
PySys_WriteStderr("TrackControl or HandleControlClick: exception in tracker function\n");
}
static int
setcallback(PyObject *myself, OSType which, PyObject *callback, UniversalProcPtr *uppp)
{
ControlObject *self = (ControlObject *)myself;
char keybuf[9];
if ( which == kControlUserPaneDrawProcTag )
*uppp = (UniversalProcPtr)mydrawproc_upp;
else if ( which == kControlUserPaneIdleProcTag )
*uppp = (UniversalProcPtr)myidleproc_upp;
else if ( which == kControlUserPaneHitTestProcTag )
*uppp = (UniversalProcPtr)myhittestproc_upp;
else if ( which == kControlUserPaneTrackingProcTag )
*uppp = (UniversalProcPtr)mytrackingproc_upp;
else
return -1;
/* Only now do we test for clearing of the callback: */
if ( callback == Py_None )
*uppp = NULL;
/* Create the dict if it doesn't exist yet (so we don't get such a dict for every control) */
if ( self->ob_callbackdict == NULL )
if ( (self->ob_callbackdict = PyDict_New()) == NULL )
return -1;
/* And store the Python callback */
sprintf(keybuf, "%x", (unsigned)which);
if (PyDict_SetItemString(self->ob_callbackdict, keybuf, callback) < 0)
return -1;
return 0;
}
static PyObject *
callcallback(ControlObject *self, OSType which, PyObject *arglist)
{
char keybuf[9];
PyObject *func, *rv;
sprintf(keybuf, "%x", (unsigned)which);
if ( self->ob_callbackdict == NULL ||
(func = PyDict_GetItemString(self->ob_callbackdict, keybuf)) == NULL ) {
PySys_WriteStderr("Control callback %x without callback object\n", which);
return NULL;
}
rv = PyEval_CallObject(func, arglist);
if ( rv == NULL )
PySys_WriteStderr("Exception in control callback %x handler\n", which);
return rv;
}
static pascal void
mydrawproc(ControlHandle control, SInt16 part)
{
ControlObject *ctl_obj;
PyObject *arglist, *rv;
ctl_obj = (ControlObject *)CtlObj_WhichControl(control);
arglist = Py_BuildValue("Oh", ctl_obj, part);
rv = callcallback(ctl_obj, kControlUserPaneDrawProcTag, arglist);
Py_XDECREF(arglist);
Py_XDECREF(rv);
}
static pascal void
myidleproc(ControlHandle control)
{
ControlObject *ctl_obj;
PyObject *arglist, *rv;
ctl_obj = (ControlObject *)CtlObj_WhichControl(control);
arglist = Py_BuildValue("O", ctl_obj);
rv = callcallback(ctl_obj, kControlUserPaneIdleProcTag, arglist);
Py_XDECREF(arglist);
Py_XDECREF(rv);
}
static pascal ControlPartCode
myhittestproc(ControlHandle control, Point where)
{
ControlObject *ctl_obj;
PyObject *arglist, *rv;
short c_rv = -1;
ctl_obj = (ControlObject *)CtlObj_WhichControl(control);
arglist = Py_BuildValue("OO&", ctl_obj, PyMac_BuildPoint, where);
rv = callcallback(ctl_obj, kControlUserPaneHitTestProcTag, arglist);
Py_XDECREF(arglist);
/* Ignore errors, nothing we can do about them */
if ( rv )
PyArg_Parse(rv, "h", &c_rv);
Py_XDECREF(rv);
return (ControlPartCode)c_rv;
}
static pascal ControlPartCode
mytrackingproc(ControlHandle control, Point startPt, ControlActionUPP actionProc)
{
ControlObject *ctl_obj;
PyObject *arglist, *rv;
short c_rv = -1;
ctl_obj = (ControlObject *)CtlObj_WhichControl(control);
/* We cannot pass the actionProc without lots of work */
arglist = Py_BuildValue("OO&", ctl_obj, PyMac_BuildPoint, startPt);
rv = callcallback(ctl_obj, kControlUserPaneTrackingProcTag, arglist);
Py_XDECREF(arglist);
if ( rv )
PyArg_Parse(rv, "h", &c_rv);
Py_XDECREF(rv);
return (ControlPartCode)c_rv;
}
void init_Ctl(void)
{
PyObject *m;
PyObject *d;
mytracker_upp = NewControlActionUPP(mytracker);
mydrawproc_upp = NewControlUserPaneDrawUPP(mydrawproc);
myidleproc_upp = NewControlUserPaneIdleUPP(myidleproc);
myhittestproc_upp = NewControlUserPaneHitTestUPP(myhittestproc);
mytrackingproc_upp = NewControlUserPaneTrackingUPP(mytrackingproc);
PyMac_INIT_TOOLBOX_OBJECT_NEW(ControlHandle, CtlObj_New);
PyMac_INIT_TOOLBOX_OBJECT_CONVERT(ControlHandle, CtlObj_Convert);
m = Py_InitModule("_Ctl", Ctl_methods);
d = PyModule_GetDict(m);
Ctl_Error = PyMac_GetOSErrException();
if (Ctl_Error == NULL ||
PyDict_SetItemString(d, "Error", Ctl_Error) != 0)
return;
Control_Type.ob_type = &PyType_Type;
Py_INCREF(&Control_Type);
if (PyDict_SetItemString(d, "ControlType", (PyObject *)&Control_Type) != 0)
Py_FatalError("can't initialize ControlType");
}
/* ======================== End module _Ctl ========================= */