|
1 # Scan <Controls.h>, generating ctlgen.py. |
|
2 import sys |
|
3 from bgenlocations import TOOLBOXDIR, BGENDIR |
|
4 sys.path.append(BGENDIR) |
|
5 |
|
6 from scantools import Scanner |
|
7 |
|
8 def 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 |
|
22 class 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 |
|
170 if __name__ == "__main__": |
|
171 main() |