1# Scan <Controls.h>, generating ctlgen.py. 2import sys 3from bgenlocations import TOOLBOXDIR, BGENDIR 4sys.path.append(BGENDIR) 5 6from scantools import Scanner 7 8def main(): 9# input = "Controls.h" # Universal Headers < 3.3 10 input = ["Controls.h", "ControlDefinitions.h"] # Universal Headers >= 3.3 11 output = "ctlgen.py" 12 defsoutput = TOOLBOXDIR + "Controls.py" 13 scanner = MyScanner(input, output, defsoutput) 14 scanner.scan() 15 scanner.close() 16 print "=== Testing definitions output code ===" 17 execfile(defsoutput, {}, {}) 18 print "=== Done scanning and generating, now doing 'import ctlsupport' ===" 19 import ctlsupport 20 print "=== Done. It's up to you to compile Ctlmodule.c ===" 21 22class MyScanner(Scanner): 23 24 def destination(self, type, name, arglist): 25 classname = "Function" 26 listname = "functions" 27 if arglist: 28 t, n, m = arglist[0] 29 if t in ("ControlHandle", "ControlRef") and m == "InMode": 30 classname = "Method" 31 listname = "methods" 32 return classname, listname 33 34 def writeinitialdefs(self): 35 self.defsfile.write("def FOUR_CHAR_CODE(x): return x\n") 36 self.defsfile.write("from Carbon.TextEdit import *\n") 37 self.defsfile.write("from Carbon.QuickDraw import *\n") 38 self.defsfile.write("from Carbon.Dragconst import *\n") 39 self.defsfile.write("from Carbon.CarbonEvents import *\n") 40 self.defsfile.write("from Carbon.Appearance import *\n") 41 self.defsfile.write("kDataBrowserItemAnyState = -1\n") 42 self.defsfile.write("kControlBevelButtonCenterPopupGlyphTag = -1\n") 43 self.defsfile.write("kDataBrowserClientPropertyFlagsMask = 0xFF000000\n") 44 self.defsfile.write("\n") 45 46 def makeblacklistnames(self): 47 return [ 48 'FindControlUnderMouse', # Generated manually, returns an existing control, not a new one. 49 'DisposeControl', # Generated manually 50 'KillControls', # Implied by close of dialog 51 'SetCtlAction', 52 'TrackControl', # Generated manually 53 'HandleControlClick', # Generated manually 54 'SetControlData', # Generated manually 55 'GetControlData', # Generated manually 56 'kControlBevelButtonCenterPopupGlyphTag', # Constant with funny definition 57 'kDataBrowserClientPropertyFlagsMask', # ditto 58 'kDataBrowserItemAnyState', # and ditto 59 # The following are unavailable for static 68k (appearance manager) 60## 'GetBevelButtonMenuValue', 61## 'SetBevelButtonMenuValue', 62## 'GetBevelButtonMenuHandle', 63## 'SetBevelButtonTransform', 64 'SetBevelButtonGraphicAlignment', 65 'SetBevelButtonTextAlignment', 66 'SetBevelButtonTextPlacement', 67## 'SetImageWellTransform', 68## 'GetTabContentRect', 69## 'SetTabEnabled', 70## 'SetDisclosureTriangleLastValue', 71## # Unavailable in CW Pro 3 libraries 72## 'SetUpControlTextColor', 73## # Unavailable in Jack's CW Pro 5.1 libraries 74## 'GetControlRegion', 75## 'RemoveControlProperty', 76## 'IsValidControlHandle', 77## 'SetControl32BitMinimum', 78## 'GetControl32BitMinimum', 79## 'SetControl32BitMaximum', 80## 'GetControl32BitMaximum', 81## 'SetControl32BitValue', 82## 'GetControl32BitValue', 83## 'SetControlViewSize', 84## 'GetControlViewSize', 85 # Generally Bad News 86 'GetControlProperty', 87 'SetControlProperty', 88 'GetControlPropertySize', 89 'SendControlMessage', # Parameter changed from long to void* from UH3.3 to UH3.4 90 'CreateTabsControl', # wrote manually 91 'GetControlAction', # too much effort for too little usefulness 92 93 # too lazy for now 94 'GetImageWellContentInfo', 95 'GetBevelButtonContentInfo', 96 # OS8 only 97 'GetAuxiliaryControlRecord', 98 'SetControlColor', 99 ] 100 101 def makeblacklisttypes(self): 102 return [ 103 'ProcPtr', 104# 'ControlActionUPP', 105 'Ptr', 106 'ControlDefSpec', # Don't know how to do this yet 107 'ControlDefSpec_ptr', # ditto 108 'Collection', # Ditto 109 # not-yet-supported stuff in Universal Headers 3.4: 110 'ControlColorUPP', 111 'ControlKind', # XXX easy: 2-tuple containing 2 OSType's 112# 'ControlTabEntry_ptr', # XXX needed for tabs 113# 'ControlButtonContentInfoPtr', 114# 'ControlButtonContentInfo', # XXX ugh: a union 115# 'ControlButtonContentInfo_ptr', # XXX ugh: a union 116 'ListDefSpec_ptr', # XXX see _Listmodule.c, tricky but possible 117 'DataBrowserItemID_ptr', # XXX array of UInt32, for BrowserView 118 'DataBrowserItemUPP', 119 'DataBrowserItemDataRef', # XXX void * 120 'DataBrowserCallbacks', # difficult struct 121 'DataBrowserCallbacks_ptr', 122 'DataBrowserCustomCallbacks', 123 'DataBrowserCustomCallbacks_ptr', 124## 'DataBrowserTableViewColumnDesc', 125## 'DataBrowserListViewColumnDesc', 126 'CFDataRef', 127 'DataBrowserListViewHeaderDesc', # difficult struct 128 ] 129 130 def makerepairinstructions(self): 131 return [ 132 ([("void_ptr", "*", "InMode"), ("long", "*", "InMode")], 133 [("InBuffer", "*", "*")]), 134 135 ([("void", "*", "OutMode"), ("long", "*", "InMode"), 136 ("long", "*", "OutMode")], 137 [("VarVarOutBuffer", "*", "InOutMode")]), 138 139## # For TrackControl 140## ([("ProcPtr", "actionProc", "InMode")], 141## [("FakeType('(ControlActionUPP)0')", "*", "*")]), 142## ([("ControlActionUPP", "actionProc", "InMode")], 143## [("FakeType('(ControlActionUPP)0')", "*", "*")]), 144 145 # For GetControlTitle 146 ([('Str255', 'title', 'InMode')], 147 [('Str255', 'title', 'OutMode')]), 148 149 ([("ControlHandle", "*", "OutMode")], 150 [("ExistingControlHandle", "*", "*")]), 151 ([("ControlRef", "*", "OutMode")], # Ditto, for Universal Headers 152 [("ExistingControlHandle", "*", "*")]), 153 154 ([("Rect_ptr", "*", "ReturnMode")], # GetControlBounds 155 [("void", "*", "ReturnMode")]), 156 157 ([("DataBrowserListViewColumnDesc", "*", "OutMode")], 158 [("DataBrowserListViewColumnDesc", "*", "InMode")]), 159 160 ([("ControlButtonContentInfoPtr", 'outContent', "InMode")], 161 [("ControlButtonContentInfoPtr", '*', "OutMode")]), 162 163 ([("ControlButtonContentInfo", '*', "OutMode")], 164 [("ControlButtonContentInfo", '*', "InMode")]), 165 166 ([("ControlActionUPP", 'liveTrackingProc', "InMode")], 167 [("ControlActionUPPNewControl", 'liveTrackingProc', "InMode")]), 168 ] 169 170if __name__ == "__main__": 171 main() 172