Commit 023dcfe2 authored by Just van Rossum's avatar Just van Rossum

Added support for tab controls and initial (incomplete) support

for DataBrowser controls.
parent 3aedee1e
This diff is collapsed.
......@@ -87,7 +87,9 @@ class MyScanner(Scanner):
'SetControlProperty',
'GetControlPropertySize',
'SendControlMessage', # Parameter changed from long to void* from UH3.3 to UH3.4
# unavailable in Just's CW6 + UH 3.4 libs
'CreateTabsControl', # wrote manually
# these are part of Carbon, yet not in CarbonLib; OSX-only
'CreateRoundButtonControl',
'CreateDisclosureButtonControl',
'CreateRelevanceBarControl',
'DisableControl',
......@@ -95,6 +97,10 @@ class MyScanner(Scanner):
'IsControlEnabled',
'CreateEditUnicodeTextControl',
'CopyDataBrowserEditText',
# too lazy for now
'GetImageWellContentInfo',
'GetBevelButtonContentInfo',
]
def makegreylist(self):
......@@ -127,6 +133,16 @@ class MyScanner(Scanner):
'HandleControlSetCursor',
'GetControlClickActivation',
'HandleControlContextualMenuClick',
"CreateBevelButtonControl",
"CreateImageWellControl",
"CreatePictureControl",
"CreateIconControl",
"CreatePushButtonWithIconControl",
"SetBevelButtonContentInfo",
"SetImageWellContentInfo",
"AddDataBrowserListViewColumn",
"CreateDataBrowserControl",
"CreateScrollingTextBoxControl",
"CreateRadioGroupControl",
......@@ -242,7 +258,6 @@ class MyScanner(Scanner):
return [
'ProcPtr',
'ControlActionUPP',
'ControlButtonContentInfoPtr',
'Ptr',
'ControlDefSpec', # Don't know how to do this yet
'ControlDefSpec_ptr', # ditto
......@@ -250,9 +265,10 @@ class MyScanner(Scanner):
# not-yet-supported stuff in Universal Headers 3.4:
'ControlColorUPP',
'ControlKind', # XXX easy: 2-tuple containing 2 OSType's
'ControlTabEntry_ptr', # XXX needed for tabs
'ControlButtonContentInfo', # XXX ugh: a union
'ControlButtonContentInfo_ptr', # XXX ugh: a union
# 'ControlTabEntry_ptr', # XXX needed for tabs
# 'ControlButtonContentInfoPtr',
# 'ControlButtonContentInfo', # XXX ugh: a union
# 'ControlButtonContentInfo_ptr', # XXX ugh: a union
'ListDefSpec_ptr', # XXX see _Listmodule.c, tricky but possible
'DataBrowserItemID_ptr', # XXX array of UInt32, for BrowserView
'DataBrowserItemUPP',
......@@ -261,8 +277,8 @@ class MyScanner(Scanner):
'DataBrowserCallbacks_ptr',
'DataBrowserCustomCallbacks',
'DataBrowserCustomCallbacks_ptr',
'DataBrowserTableViewColumnDesc',
'DataBrowserListViewColumnDesc',
## 'DataBrowserTableViewColumnDesc',
## 'DataBrowserListViewColumnDesc',
'CFDataRef',
]
......@@ -292,6 +308,15 @@ class MyScanner(Scanner):
([("Rect_ptr", "*", "ReturnMode")], # GetControlBounds
[("void", "*", "ReturnMode")]),
([("DataBrowserListViewColumnDesc", "*", "OutMode")],
[("DataBrowserListViewColumnDesc", "*", "InMode")]),
([("ControlButtonContentInfoPtr", 'outContent', "InMode")],
[("ControlButtonContentInfoPtr", '*', "OutMode")]),
([("ControlButtonContentInfo", '*', "OutMode")],
[("ControlButtonContentInfo", '*', "InMode")]),
]
if __name__ == "__main__":
......
......@@ -78,7 +78,21 @@ DataBrowserTableViewColumnIndex = UInt32
DataBrowserPropertyType = OSType
ControlDisclosureTriangleOrientation = UInt16
DataBrowserTableViewColumnDesc = OpaqueType("DataBrowserTableViewColumnDesc",
"DataBrowserTableViewColumnDesc")
DataBrowserListViewColumnDesc = OpaqueType("DataBrowserListViewColumnDesc",
"DataBrowserListViewColumnDesc")
ControlButtonContentInfo = OpaqueType("ControlButtonContentInfo",
"ControlButtonContentInfo")
ControlButtonContentInfoPtr = ControlButtonContentInfo_ptr = ControlButtonContentInfo
ControlTabEntry_ptr = OpaqueType("ControlTabEntry", "ControlTabEntry")
ControlBevelThickness = UInt16
ControlBevelButtonBehavior = UInt16
ControlBevelButtonMenuBehavior = UInt16
ControlBevelButtonMenuPlacement = UInt16
ControlPushButtonIconAlignment = UInt16
includestuff = includestuff + """
#ifdef WITHOUT_FRAMEWORKS
......@@ -106,6 +120,7 @@ staticforward PyObject *CtlObj_WhichControl(ControlHandle);
#define GetControlRect(ctl, rectp) (*(rectp) = ((*(ctl))->contrlRect))
#endif
#define MAXTABS 32 /* maximum number of tabs that we support in a tabs control */
/*
** Parse/generate ControlFontStyleRec records
*/
......@@ -123,7 +138,7 @@ ControlFontStyle_New(ControlFontStyleRec *itself)
static int
ControlFontStyle_Convert(PyObject *v, ControlFontStyleRec *itself)
{
return PyArg_ParseTuple(v, "hhhhhhO&O&", &itself->flags,
return PyArg_Parse(v, "(hhhhhhO&O&)", &itself->flags,
&itself->font, &itself->size, &itself->style, &itself->mode,
&itself->just, QdRGB_Convert, &itself->foreColor,
QdRGB_Convert, &itself->backColor);
......@@ -142,9 +157,50 @@ PyControlID_New(ControlID *itself)
static int
PyControlID_Convert(PyObject *v, ControlID *itself)
{
return PyArg_ParseTuple(v, "O&l", PyMac_GetOSType, &itself->signature, &itself->id);
return PyArg_Parse(v, "(O&l)", PyMac_GetOSType, &itself->signature, &itself->id);
}
/*
** generate DataBrowserListViewColumnDesc records
*/
static int
DataBrowserTableViewColumnDesc_Convert(PyObject *v, DataBrowserTableViewColumnDesc *itself)
{
return PyArg_Parse(v, "(lO&l)",
&itself->propertyID,
PyMac_GetOSType, &itself->propertyType,
&itself->propertyFlags);
}
static int
ControlButtonContentInfo_Convert(PyObject *v, ControlButtonContentInfo *itself)
{
return PyArg_Parse(v, "(hO&)",
&itself->contentType,
OptResObj_Convert, &itself->u.iconSuite);
}
static int
DataBrowserListViewHeaderDesc_Convert(PyObject *v, DataBrowserListViewHeaderDesc *itself)
{
itself->version = kDataBrowserListViewLatestHeaderDesc;
return PyArg_Parse(v, "(HHhO&HO&O&)",
&itself->minimumWidth,
&itself->maximumWidth,
&itself->titleOffset,
CFStringRefObj_Convert, &itself->titleString,
&itself->initialOrder,
ControlFontStyle_Convert, &itself->btnFontStyle,
ControlButtonContentInfo_Convert, &itself->btnContentInfo);
}
static int
DataBrowserListViewColumnDesc_Convert(PyObject *v, DataBrowserListViewColumnDesc *itself)
{
return PyArg_Parse(v, "(O&O&)",
DataBrowserTableViewColumnDesc_Convert, &itself->propertyDesc,
DataBrowserListViewHeaderDesc_Convert, &itself->headerBtnDesc);
}
/* TrackControl and HandleControlClick callback support */
static PyObject *tracker;
......@@ -665,6 +721,64 @@ f = ManualGenerator("SetPopupData", setpopupdata_body, condition="#if !TARGET_AP
object.add(f)
createtabscontrol_body = """\
OSStatus _err;
WindowPtr window;
Rect boundsRect;
UInt16 size;
UInt16 direction;
int i;
UInt16 numTabs;
ControlTabEntry tabArray[MAXTABS];
ControlHandle outControl;
PyObject *tabArrayObj, *tabEntry;
#ifndef CreateTabsControl
PyMac_PRECHECK(CreateTabsControl);
#endif
if (!PyArg_ParseTuple(_args, "O&O&HHO",
WinObj_Convert, &window,
PyMac_GetRect, &boundsRect,
&size,
&direction,
&tabArrayObj))
return NULL;
i = PySequence_Length(tabArrayObj);
if (i == -1)
return NULL;
if (i > MAXTABS) {
PyErr_SetString(Ctl_Error, "Too many tabs");
return NULL;
}
numTabs = i;
for (i=0; i<numTabs; i++) {
tabEntry = PySequence_GetItem(tabArrayObj, i);
if (tabEntry == NULL)
return NULL;
if (!PyArg_Parse(tabEntry, "(O&O&B)",
ControlButtonContentInfo_Convert, &tabArray[i].icon,
CFStringRefObj_Convert, &tabArray[i].name,
&tabArray[i].enabled
))
return NULL;
}
_err = CreateTabsControl(window,
&boundsRect,
size,
direction,
numTabs,
tabArray,
&outControl);
if (_err != noErr) return PyMac_Error(_err);
_res = Py_BuildValue("O&",
CtlObj_New, outControl);
return _res;"""
f = ManualGenerator("CreateTabsControl", createtabscontrol_body, condition="#if TARGET_API_MAC_CARBON")
module.add(f)
# generate output (open the output file as late as possible)
SetOutputFileName(OUTPUTFILE)
module.generate()
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment