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
.InsertMenu(0)
80 self
.filemenu
= Menu
.NewMenu(self
.fileid
, 'File')
81 self
.filemenu
.AppendMenu("Quit/Q")
82 self
.filemenu
.InsertMenu(0)
86 # Set interaction allowed (for the return values)
88 AE
.AESetInteractionAllowed(kAEInteractWithAll
)
96 for suite
in self
.suites
:
97 AE
.AERemoveEventHandler(suite
, typeWildCard
)
99 def mainloop(self
, mask
= everyEvent
, timeout
= 60*60):
101 self
.dooneevent(mask
, timeout
)
103 def dooneevent(self
, mask
= everyEvent
, timeout
= 60*60):
104 got
, event
= Evt
.WaitNextEvent(mask
, timeout
)
106 self
.lowlevelhandler(event
)
108 def lowlevelhandler(self
, event
):
109 what
, message
, when
, where
, modifiers
= event
111 if what
== kHighLevelEvent
:
112 msg
= "High Level Event: %s %s" % \
113 (`
code(message
)`
, `
code(h |
(v
<<16))`
)
114 self
.handled_by_us
= 0
116 AE
.AEProcessAppleEvent(event
)
117 except AE
.Error
, err
:
118 mymessage(msg
+ "\015AEProcessAppleEvent error: %s" % str(err
))
119 traceback
.print_exc()
121 if self
.handled_by_us
== 0:
122 print msg
, "Handled by AE, somehow"
124 print msg
, 'Handled by us.'
125 elif what
== keyDown
:
126 c
= chr(message
& charCodeMask
)
127 if modifiers
& cmdKey
:
129 raise KeyboardInterrupt, "Command-period"
131 self
.menuhit(Menu
.MenuKey(message
&charCodeMask
))
132 ##MacOS.HandleEvent(event)
133 elif what
== mouseDown
:
134 partcode
, window
= Win
.FindWindow(where
)
135 if partcode
== inMenuBar
:
136 result
= Menu
.MenuSelect(where
)
138 elif what
<> autoKey
:
139 print "Event:", (eventname(what
), message
, when
, (h
, v
), modifiers
)
140 ## MacOS.HandleEvent(event)
142 def menuhit(self
, result
):
143 id = (result
>>16) & 0xffff # Hi word
144 item
= result
& 0xffff # Lo word
145 if id == self
.appleid
:
147 mymessage("Echo -- echo AppleEvents")
148 elif id == self
.fileid
:
152 def aehandler(self
, request
, reply
):
154 self
.handled_by_us
= 1
155 parameters
, attributes
= aetools
.unpackevent(request
)
156 print "class =", `attributes
['evcl'].type`
,
157 print "id =", `attributes
['evid'].type`
159 keys
= parameters
.keys()
162 print "%s: %.150s" % (`key`
, `parameters
[key
]`
)
163 print " :", str(parameters
[key
])
165 keys
= attributes
.keys()
168 print "%s: %.150s" % (`key`
, `attributes
[key
]`
)
169 parameters
['----'] = self
.askreplyvalue()
170 aetools
.packevent(reply
, parameters
)
172 def askreplyvalue(self
):
174 str = myaskstring('Reply value to send (python-style)', 'None')
185 mouseDown
: 'mouseDown',
187 updateEvt
: 'updateEvt',
189 activateEvt
: 'activateEvt',
194 if _eventnames
.has_key(what
): return _eventnames
[what
]
198 "Convert a long int to the 4-character code it really is"
201 x
, c
= divmod(x
, 256)
206 if __name__
== '__main__':