blob: cfe3eb3c33ac6a7d75380bff72635b04e4568db9 [file] [log] [blame]
Guido van Rossum17448e21995-01-30 11:53:55 +00001# Scan an Apple header file, generating a Python file of generator calls.
Jack Jansen0c4d9471998-04-17 14:07:56 +00002import sys
3import os
4BGENDIR=os.path.join(sys.prefix, ':Tools:bgen:bgen')
5sys.path.append(BGENDIR)
Jack Jansen46d9e791996-04-12 16:29:23 +00006from bgenlocations import TOOLBOXDIR
Guido van Rossum17448e21995-01-30 11:53:55 +00007
8from scantools import Scanner
9
10def main():
Jack Jansen21f96871998-02-20 16:02:09 +000011 input = "MacWindows.h"
Guido van Rossum17448e21995-01-30 11:53:55 +000012 output = "wingen.py"
Jack Jansen46d9e791996-04-12 16:29:23 +000013 defsoutput = TOOLBOXDIR + "Windows.py"
Guido van Rossum17448e21995-01-30 11:53:55 +000014 scanner = MyScanner(input, output, defsoutput)
15 scanner.scan()
16 scanner.close()
17 print "=== Done scanning and generating, now importing the generated code... ==="
18 import winsupport
19 print "=== Done. It's up to you to compile it now! ==="
20
21class MyScanner(Scanner):
22
23 def destination(self, type, name, arglist):
24 classname = "Function"
25 listname = "functions"
26 if arglist:
27 t, n, m = arglist[0]
Jack Jansenb81cf9d1995-06-06 13:08:40 +000028 if t in ("WindowPtr", "WindowPeek", "WindowRef") and m == "InMode":
Guido van Rossum17448e21995-01-30 11:53:55 +000029 classname = "Method"
30 listname = "methods"
31 return classname, listname
32
Jack Jansen21f96871998-02-20 16:02:09 +000033 def writeinitialdefs(self):
34 self.defsfile.write("def FOUR_CHAR_CODE(x): return x\n")
Jack Jansen9d799902002-03-24 23:04:18 +000035 self.defsfile.write("false = 0\n")
36 self.defsfile.write("true = 1\n")
Jack Jansen21f96871998-02-20 16:02:09 +000037
Guido van Rossum17448e21995-01-30 11:53:55 +000038 def makeblacklistnames(self):
39 return [
40 'DisposeWindow', # Implied when the object is deleted
41 'CloseWindow',
Jack Jansena05ac601999-12-12 21:41:51 +000042 'SetWindowProperty', # For the moment
43 'GetWindowProperty',
44 'GetWindowPropertySize',
45 'RemoveWindowProperty',
Jack Jansene79dc762000-06-02 21:35:07 +000046 'MacCloseWindow',
Jack Jansen723ad8a2000-12-12 22:10:21 +000047 'GetWindowList', # Don't know whether this is safe...
Jack Jansenb1b78d81999-12-14 15:47:01 +000048 # Constants with funny definitions
49 'kMouseUpOutOfSlop',
Jack Jansen723ad8a2000-12-12 22:10:21 +000050 'kAllWindowClasses',
Guido van Rossum17448e21995-01-30 11:53:55 +000051 ]
Jack Jansene79dc762000-06-02 21:35:07 +000052
53 def makegreylist(self):
54 return [
Jack Jansen74a1e632000-07-14 22:37:27 +000055 ('#if !TARGET_API_MAC_CARBON', [
Jack Jansene79dc762000-06-02 21:35:07 +000056 'GetAuxWin',
57 'GetWindowDataHandle',
58 'SaveOld',
59 'DrawNew',
60 'SetWinColor',
61 'SetDeskCPat',
62 'InitWindows',
63 'InitFloatingWindows',
64 'GetWMgrPort',
65 'GetCWMgrPort',
66 'ValidRgn', # Use versions with Window in their name
67 'ValidRect',
68 'InvalRgn',
69 'InvalRect',
Jack Jansen8d929ae2000-06-21 22:07:06 +000070 'IsValidWindowPtr', # I think this is useless for Python, but not sure...
Jack Jansen0d202b72001-01-09 22:09:31 +000071 'GetWindowZoomFlag', # Not available in Carbon
72 'GetWindowTitleWidth', # Ditto
Jack Jansenf1d7b412001-02-28 23:32:42 +000073 'GetWindowGoAwayFlag',
74 'GetWindowSpareFlag',
Jack Jansen723ad8a2000-12-12 22:10:21 +000075 ]),
Jack Jansen620a7662001-12-18 15:39:38 +000076 ('#if !TARGET_API_MAC_OS8', [
Jack Jansen723ad8a2000-12-12 22:10:21 +000077 'IsWindowUpdatePending',
78 'FindWindowOfClass',
79 'GetFrontWindowOfClass',
80 'ChangeWindowPropertyAttributes',
81 'GetWindowPropertyAttributes',
82 'GetNextWindowOfClass',
83 'ScrollWindowRegion',
84 'ScrollWindowRect',
85 'ChangeWindowAttributes',
86 'ReshapeCustomWindow',
Jack Jansen620a7662001-12-18 15:39:38 +000087 'EnableScreenUpdates',
88 'DisableScreenUpdates',
89 'GetAvailableWindowPositioningBounds',
90 'CreateStandardWindowMenu',
91 'GetSheetWindowParent',
92 'HideSheetWindow',
93 'ShowSheetWindow',
94 'ConstrainWindowToScreen',
95 'GetWindowGreatestAreaDevice',
96 'CopyWindowTitleAsCFString',
97 'SetWindowTitleWithCFString',
98 'CopyWindowAlternateTitle',
99 'SetWindowAlternateTitle',
100 'GetWindowModality',
101 'SetWindowModality',
102 'SetWindowClass',
103 'ReleaseWindow',
104 'RetainWindow',
105 'GetWindowRetainCount',
106 ]),
107 ('#if TARGET_API_MAC_OSX', [
108 'TransitionWindowAndParent',
Jack Jansene79dc762000-06-02 21:35:07 +0000109 ])]
110
Guido van Rossum17448e21995-01-30 11:53:55 +0000111 def makeblacklisttypes(self):
112 return [
113 'ProcPtr',
Jack Jansenb7abb181995-11-15 15:18:47 +0000114 'DragGrayRgnUPP',
Jack Jansen723ad8a2000-12-12 22:10:21 +0000115 'WindowPaintUPP',
Jack Jansena05ac601999-12-12 21:41:51 +0000116 'Collection', # For now, to be done later
Jack Jansen723ad8a2000-12-12 22:10:21 +0000117 'WindowDefSpec', # Too difficult for now
118 'WindowDefSpec_ptr',
Jack Jansen620a7662001-12-18 15:39:38 +0000119 'EventRef', #TBD
Guido van Rossum17448e21995-01-30 11:53:55 +0000120 ]
121
122 def makerepairinstructions(self):
123 return [
124
125 # GetWTitle
126 ([("Str255", "*", "InMode")],
127 [("*", "*", "OutMode")]),
128
129 ([("void_ptr", "*", "InMode"), ("long", "*", "InMode")],
130 [("InBuffer", "*", "*")]),
131
132 ([("void", "*", "OutMode"), ("long", "*", "InMode"),
133 ("long", "*", "OutMode")],
134 [("VarVarOutBuffer", "*", "InOutMode")]),
135
136 ([("void", "wStorage", "OutMode")],
137 [("NullStorage", "*", "InMode")]),
138
Just van Rossum84fca942002-06-05 17:41:03 +0000139 # match FindWindowOfClass
140 ([("WindowRef", "outWindow", "OutMode"), ("WindowPartCode", "outWindowPart", "OutMode")],
141 [("ExistingWindowPtr", "*", "OutMode"), ("WindowPartCode", "outWindowPart", "OutMode")]),
142 # then match CreateNewWindow and CreateWindowFromResource
143 ([("WindowRef", "outWindow", "OutMode")],
144 [("WindowRef", "*", "*")]),
145
Guido van Rossum17448e21995-01-30 11:53:55 +0000146 ([("WindowPtr", "*", "OutMode")],
147 [("ExistingWindowPtr", "*", "*")]),
Jack Jansenb81cf9d1995-06-06 13:08:40 +0000148 ([("WindowRef", "*", "OutMode")], # Same, but other style headerfiles
149 [("ExistingWindowPtr", "*", "*")]),
Guido van Rossumea39abd1995-02-28 09:49:02 +0000150
151 ([("WindowPtr", "FrontWindow", "ReturnMode")],
152 [("ExistingWindowPtr", "*", "*")]),
Jack Jansenb81cf9d1995-06-06 13:08:40 +0000153 ([("WindowRef", "FrontWindow", "ReturnMode")], # Ditto
154 [("ExistingWindowPtr", "*", "*")]),
Jack Jansen0aee0e62000-08-25 22:17:51 +0000155 ([("WindowPtr", "FrontNonFloatingWindow", "ReturnMode")],
156 [("ExistingWindowPtr", "*", "*")]),
157 ([("WindowRef", "FrontNonFloatingWindow", "ReturnMode")], # Ditto
158 [("ExistingWindowPtr", "*", "*")]),
Jack Jansen723ad8a2000-12-12 22:10:21 +0000159
160 ([("Rect_ptr", "*", "ReturnMode")], # GetWindowXXXState accessors
161 [("void", "*", "ReturnMode")]),
Guido van Rossum17448e21995-01-30 11:53:55 +0000162 ]
163
164if __name__ == "__main__":
165 main()
Guido van Rossumea39abd1995-02-28 09:49:02 +0000166