Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit bb65377

Browse files
committed
Oops... I Inadvertently lost their cvs files...
1 parent 0f7af3f commit bb65377

4 files changed

Lines changed: 908 additions & 0 deletions

File tree

Mac/Lib/test/AEservertest.py

Lines changed: 219 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,219 @@
1+
"""AEservertest - Test AppleEvent server interface
2+
3+
(adapted from Guido's 'echo' program).
4+
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.
7+
"""
8+
9+
import addpack
10+
addpack.addpack('Tools')
11+
addpack.addpack('bgen')
12+
addpack.addpack('ae')
13+
addpack.addpack('evt')
14+
#addpack.addpack('menu')
15+
addpack.addpack('win')
16+
17+
import sys
18+
sys.stdout = sys.stderr
19+
import traceback
20+
import MacOS
21+
import AE
22+
from AppleEvents import *
23+
import Evt
24+
from Events import *
25+
import Menu
26+
import Dlg
27+
import Win
28+
from Windows import *
29+
import Qd
30+
import macfs
31+
32+
import aetools
33+
import EasyDialogs
34+
35+
kHighLevelEvent = 23 # Not defined anywhere for Python yet?
36+
37+
Quit='Quit'
38+
39+
def mymessage(str):
40+
err = AE.AEInteractWithUser(kAEDefaultTimeout)
41+
if err:
42+
print str
43+
EasyDialogs.Message(str)
44+
45+
def myaskstring(str, default=''):
46+
err = AE.AEInteractWithUser(kAEDefaultTimeout)
47+
if err:
48+
return default
49+
return EasyDialogs.AskString(str, default)
50+
51+
def main():
52+
echo = EchoServer()
53+
yield = MacOS.EnableAppswitch(-1) # Disable Python's own "event handling"
54+
try:
55+
try:
56+
echo.mainloop(everyEvent, 0)
57+
except Quit:
58+
pass
59+
finally:
60+
MacOS.EnableAppswitch(yield) # Let Python have a go at events
61+
echo.close()
62+
63+
64+
class EchoServer:
65+
66+
suites = ['aevt', 'core', 'reqd']
67+
68+
def __init__(self):
69+
self.active = 0
70+
#
71+
# Install the handlers
72+
#
73+
for suite in self.suites:
74+
AE.AEInstallEventHandler(suite, typeWildCard, self.aehandler)
75+
print (suite, typeWildCard, self.aehandler)
76+
self.active = 1
77+
#
78+
# Setup the apple menu and file/quit
79+
#
80+
self.appleid = 1
81+
self.fileid = 2
82+
83+
Menu.ClearMenuBar()
84+
self.applemenu = applemenu = Menu.NewMenu(self.appleid, "\024")
85+
applemenu.AppendMenu("All about echo...;(-")
86+
applemenu.AppendResMenu('DRVR')
87+
applemenu.InsertMenu(0)
88+
89+
self.filemenu = Menu.NewMenu(self.fileid, 'File')
90+
self.filemenu.AppendMenu("Quit/Q")
91+
self.filemenu.InsertMenu(0)
92+
93+
Menu.DrawMenuBar()
94+
#
95+
# Set interaction allowed (for the return values)
96+
#
97+
AE.AESetInteractionAllowed(kAEInteractWithAll)
98+
99+
def __del__(self):
100+
self.close()
101+
102+
def close(self):
103+
if self.active:
104+
self.active = 0
105+
for suite in self.suites:
106+
AE.AERemoveEventHandler(suite, typeWildCard)
107+
108+
def mainloop(self, mask = everyEvent, timeout = 60*60):
109+
while 1:
110+
self.dooneevent(mask, timeout)
111+
112+
def dooneevent(self, mask = everyEvent, timeout = 60*60):
113+
got, event = Evt.WaitNextEvent(mask, timeout)
114+
if got:
115+
self.lowlevelhandler(event)
116+
117+
def lowlevelhandler(self, event):
118+
what, message, when, where, modifiers = event
119+
h, v = where
120+
if what == kHighLevelEvent:
121+
msg = "High Level Event: %s %s" % \
122+
(`code(message)`, `code(h | (v<<16))`)
123+
self.handled_by_us = 0
124+
try:
125+
AE.AEProcessAppleEvent(event)
126+
except AE.Error, err:
127+
mymessage(msg + "\015AEProcessAppleEvent error: %s" % str(err))
128+
traceback.print_exc()
129+
else:
130+
if self.handled_by_us == 0:
131+
print msg, "Handled by AE, somehow"
132+
else:
133+
print msg, 'Handled by us.'
134+
elif what == keyDown:
135+
c = chr(message & charCodeMask)
136+
if modifiers & cmdKey:
137+
if c == '.':
138+
raise KeyboardInterrupt, "Command-period"
139+
else:
140+
self.menuhit(Menu.MenuKey(message&charCodeMask))
141+
##MacOS.HandleEvent(event)
142+
elif what == mouseDown:
143+
partcode, window = Win.FindWindow(where)
144+
if partcode == inMenuBar:
145+
result = Menu.MenuSelect(where)
146+
self.menuhit(result)
147+
elif what <> autoKey:
148+
print "Event:", (eventname(what), message, when, (h, v), modifiers)
149+
## MacOS.HandleEvent(event)
150+
151+
def menuhit(self, result):
152+
id = (result>>16) & 0xffff # Hi word
153+
item = result & 0xffff # Lo word
154+
if id == self.appleid:
155+
if item == 1:
156+
mymessage("Echo -- echo AppleEvents")
157+
elif item > 1:
158+
name = self.applemenu.GetItem(item)
159+
Qd.OpenDeskAcc(name)
160+
elif id == self.fileid:
161+
if item == 1:
162+
raise Quit
163+
164+
def aehandler(self, request, reply):
165+
print "Apple Event!"
166+
self.handled_by_us = 1
167+
parameters, attributes = aetools.unpackevent(request)
168+
print "class =", `attributes['evcl'].type`,
169+
print "id =", `attributes['evid'].type`
170+
print "Parameters:"
171+
keys = parameters.keys()
172+
keys.sort()
173+
for key in keys:
174+
print "%s: %.150s" % (`key`, `parameters[key]`)
175+
print " :", str(parameters[key])
176+
print "Attributes:"
177+
keys = attributes.keys()
178+
keys.sort()
179+
for key in keys:
180+
print "%s: %.150s" % (`key`, `attributes[key]`)
181+
parameters['----'] = self.askreplyvalue()
182+
aetools.packevent(reply, parameters)
183+
184+
def askreplyvalue(self):
185+
while 1:
186+
str = myaskstring('Reply value to send (python-style)', 'None')
187+
try:
188+
rv = eval(str)
189+
break
190+
except:
191+
pass
192+
return rv
193+
194+
_eventnames = {
195+
keyDown: 'keyDown',
196+
autoKey: 'autoKey',
197+
mouseDown: 'mouseDown',
198+
mouseUp: 'mouseUp',
199+
updateEvt: 'updateEvt',
200+
diskEvt: 'diskEvt',
201+
activateEvt: 'activateEvt',
202+
osEvt: 'osEvt',
203+
}
204+
205+
def eventname(what):
206+
if _eventnames.has_key(what): return _eventnames[what]
207+
else: return `what`
208+
209+
def code(x):
210+
"Convert a long int to the 4-character code it really is"
211+
s = ''
212+
for i in range(4):
213+
x, c = divmod(x, 256)
214+
s = chr(c) + s
215+
return s
216+
217+
218+
if __name__ == '__main__':
219+
main()

0 commit comments

Comments
 (0)