summaryrefslogtreecommitdiffstats
path: root/Mac/Modules/carbonevt/CarbonEvtscan.py
blob: 0cc048a3268334d2545b92eedb61efbad137646a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
# IBCarbonscan.py

import sys
import os
import string
import MacOS
import sys

BGENDIR= os.path.join(sys.prefix, ':Tools:bgen:bgen:')
sys.path.append(BGENDIR)

from bgenlocations import TOOLBOXDIR

from scantools import Scanner, Scanner_OSX

def main():
	print "---Scanning CarbonEvents.h---"
	input = ["CarbonEvents.h"]
	output = "CarbonEventsgen.py"
	defsoutput = TOOLBOXDIR + "CarbonEvents.py"
	scanner = CarbonEvents_Scanner(input, output, defsoutput)
	scanner.scan()
	scanner.close()
	print "--done scanning, importing--"
	import CarbonEvtsupport
	print "done"

RefObjectTypes = ["EventRef", 
				"EventQueueRef", 
				"EventLoopRef",
				"EventLoopTimerRef",
				"EventHandlerRef",
				"EventHandlerCallRef",
				"EventTargetRef",
				"EventHotKeyRef",
				]

class CarbonEvents_Scanner(Scanner_OSX):
	def destination(self, type, name, arglist):
		classname = "CarbonEventsFunction"
		listname = "functions"
		if arglist:
			t, n, m = arglist[0]
			if t in RefObjectTypes and m == "InMode":
				if t == "EventHandlerRef":
					classname = "EventHandlerRefMethod"
				else:
					classname = "CarbonEventsMethod"
				listname = t + "methods"
			#else:
			#	print "not method"
		return classname, listname

	def writeinitialdefs(self):
		self.defsfile.write("def FOUR_CHAR_CODE(x): return x\n")
		self.defsfile.write("def FOUR_CHAR_CODE(x): return x\n")
		self.defsfile.write("false = 0\n")
		self.defsfile.write("true = 1\n")
		self.defsfile.write("keyAEEventClass = FOUR_CHAR_CODE('evcl')\n")
		self.defsfile.write("keyAEEventID = FOUR_CHAR_CODE('evti')\n")
	
	def makeblacklistnames(self):
		return [
			"sHandler",
			"MacCreateEvent",
#			"TrackMouseLocationWithOptions",
#			"TrackMouseLocation",
#			"TrackMouseRegion",
			"RegisterToolboxObjectClass",
			"UnregisterToolboxObjectClass",
			"ProcessHICommand",
			"GetCFRunLoopFromEventLoop",
			
			"InvokeEventHandlerUPP",
			"InvokeEventComparatorUPP",
			"InvokeEventLoopTimerUPP",
			"NewEventComparatorUPP",
			"NewEventLoopTimerUPP",
			"NewEventHandlerUPP",
			"DisposeEventComparatorUPP",
			"DisposeEventLoopTimerUPP",
			"DisposeEventHandlerUPP",

			# Wrote by hand
			"InstallEventHandler",
			"RemoveEventHandler",
			"RunApplicationEventLoop",
						
			# Write by hand?
			"GetEventParameter",
			"FlushSpecificEventsFromQueue",
			"FindSpecificEventInQueue",
			"InstallEventLoopTimer",

			# Don't do these because they require a CFRelease
			"CreateTypeStringWithOSType",
			"CopyEvent",
			]

#	def makeblacklisttypes(self):
#		return ["EventComparatorUPP",
#				"EventLoopTimerUPP",
#				#"EventHandlerUPP",
#				"EventComparatorProcPtr",
#				"EventLoopTimerProcPtr",
#				"EventHandlerProcPtr",
#				]

	def makerepairinstructions(self):
		return [
			([("UInt32", 'inSize', "InMode"), ("void_ptr", 'inDataPtr', "InMode")],
			 [("MyInBuffer", 'inDataPtr', "InMode")]),
			([("Boolean", 'ioWasInRgn', "OutMode")],
			 [("Boolean", 'ioWasInRgn', "InOutMode")]),
		]

if __name__ == "__main__":
	main()