PageRenderTime 52ms CodeModel.GetById 20ms app.highlight 12ms RepoModel.GetById 18ms app.codeStats 0ms

/Mac/Modules/ctl/ctlscan.py

http://unladen-swallow.googlecode.com/
Python | 171 lines | 110 code | 19 blank | 42 comment | 5 complexity | e048d485baec9ae175cca9098dd402dd MD5 | raw file
  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()