1 """AEservertest - Test AppleEvent server interface
3 (adapted from Guido's 'echo' program).
5 Build an applet from this source, and include the aete resource that you
6 want to test. Use the AEservertest script to try things.
10 sys
.stdout
= sys
.stderr
14 from AppleEvents
import *
27 kHighLevelEvent
= 23 # Not defined anywhere for Python yet?
32 err
= AE
.AEInteractWithUser(kAEDefaultTimeout
)
35 EasyDialogs
.Message(str)
37 def myaskstring(str, default
=''):
38 err
= AE
.AEInteractWithUser(kAEDefaultTimeout
)
41 return EasyDialogs
.AskString(str, default
)
45 savepars
= MacOS
.SchedParams(0, 0) # Disable Python's own "event handling"
48 echo
.mainloop(everyEvent
, 0)
52 apply(MacOS
.SchedParams
, savepars
) # Let Python have a go at events
58 suites
= ['aevt', 'core', 'reqd']
63 # Install the handlers
65 for suite
in self
.suites
:
66 AE
.AEInstallEventHandler(suite
, typeWildCard
, self
.aehandler
)
67 print (suite
, typeWildCard
, self
.aehandler
)
70 # Setup the apple menu and file/quit
76 self
.applemenu
= applemenu
= Menu
.NewMenu(self
.appleid
, "\024")
77 applemenu
.AppendMenu("All about echo...;(-")
78 applemenu
.AppendResMenu('DRVR')
79 applemenu
.InsertMenu(0)
81 self
.filemenu
= Menu
.NewMenu(self
.fileid
, 'File')
82 self
.filemenu
.AppendMenu("Quit/Q")
83 self
.filemenu
.InsertMenu(0)
87 # Set interaction allowed (for the return values)
89 AE
.AESetInteractionAllowed(kAEInteractWithAll
)
97 for suite
in self
.suites
:
98 AE
.AERemoveEventHandler(suite
, typeWildCard
)
100 def mainloop(self
, mask
= everyEvent
, timeout
= 60*60):
102 self
.dooneevent(mask
, timeout
)
104 def dooneevent(self
, mask
= everyEvent
, timeout
= 60*60):
105 got
, event
= Evt
.WaitNextEvent(mask
, timeout
)
107 self
.lowlevelhandler(event
)
109 def lowlevelhandler(self
, event
):
110 what
, message
, when
, where
, modifiers
= event
112 if what
== kHighLevelEvent
:
113 msg
= "High Level Event: %s %s" % \
114 (`
code(message
)`
, `
code(h |
(v
<<16))`
)
115 self
.handled_by_us
= 0
117 AE
.AEProcessAppleEvent(event
)
118 except AE
.Error
, err
:
119 mymessage(msg
+ "\015AEProcessAppleEvent error: %s" % str(err
))
120 traceback
.print_exc()
122 if self
.handled_by_us
== 0:
123 print msg
, "Handled by AE, somehow"
125 print msg
, 'Handled by us.'
126 elif what
== keyDown
:
127 c
= chr(message
& charCodeMask
)
128 if modifiers
& cmdKey
:
130 raise KeyboardInterrupt, "Command-period"
132 self
.menuhit(Menu
.MenuKey(message
&charCodeMask
))
133 ##MacOS.HandleEvent(event)
134 elif what
== mouseDown
:
135 partcode
, window
= Win
.FindWindow(where
)
136 if partcode
== inMenuBar
:
137 result
= Menu
.MenuSelect(where
)
139 elif what
<> autoKey
:
140 print "Event:", (eventname(what
), message
, when
, (h
, v
), modifiers
)
141 ## MacOS.HandleEvent(event)
143 def menuhit(self
, result
):
144 id = (result
>>16) & 0xffff # Hi word
145 item
= result
& 0xffff # Lo word
146 if id == self
.appleid
:
148 mymessage("Echo -- echo AppleEvents")
150 name
= self
.applemenu
.GetItem(item
)
152 elif id == self
.fileid
:
156 def aehandler(self
, request
, reply
):
158 self
.handled_by_us
= 1
159 parameters
, attributes
= aetools
.unpackevent(request
)
160 print "class =", `attributes
['evcl'].type`
,
161 print "id =", `attributes
['evid'].type`
163 keys
= parameters
.keys()
166 print "%s: %.150s" % (`key`
, `parameters
[key
]`
)
167 print " :", str(parameters
[key
])
169 keys
= attributes
.keys()
172 print "%s: %.150s" % (`key`
, `attributes
[key
]`
)
173 parameters
['----'] = self
.askreplyvalue()
174 aetools
.packevent(reply
, parameters
)
176 def askreplyvalue(self
):
178 str = myaskstring('Reply value to send (python-style)', 'None')
189 mouseDown
: 'mouseDown',
191 updateEvt
: 'updateEvt',
193 activateEvt
: 'activateEvt',
198 if _eventnames
.has_key(what
): return _eventnames
[what
]
202 "Convert a long int to the 4-character code it really is"
205 x
, c
= divmod(x
, 256)
210 if __name__
== '__main__':