summaryrefslogtreecommitdiffstats
path: root/Mac/Lib/test/AEservertest.py
diff options
context:
space:
mode:
authorJack Jansen <jack.jansen@cwi.nl>1996-03-18 14:21:15 (GMT)
committerJack Jansen <jack.jansen@cwi.nl>1996-03-18 14:21:15 (GMT)
commitbb653772f5a74b18ac34f005b6b5bb8295e81eb3 (patch)
tree168575a910fcd3b71cfb9b52a4a0f56ee540e2a6 /Mac/Lib/test/AEservertest.py
parent0f7af3f79544a5859bfd4aa3ed4e31eb6d439952 (diff)
downloadcpython-bb653772f5a74b18ac34f005b6b5bb8295e81eb3.zip
cpython-bb653772f5a74b18ac34f005b6b5bb8295e81eb3.tar.gz
cpython-bb653772f5a74b18ac34f005b6b5bb8295e81eb3.tar.bz2
Oops... I Inadvertently lost their cvs files...
Diffstat (limited to 'Mac/Lib/test/AEservertest.py')
-rw-r--r--Mac/Lib/test/AEservertest.py219
1 files changed, 219 insertions, 0 deletions
diff --git a/Mac/Lib/test/AEservertest.py b/Mac/Lib/test/AEservertest.py
new file mode 100644
index 0000000..a372bee
--- /dev/null
+++ b/Mac/Lib/test/AEservertest.py
@@ -0,0 +1,219 @@
+"""AEservertest - Test AppleEvent server interface
+
+(adapted from Guido's 'echo' program).
+
+Build an applet from this source, and include the aete resource that you
+want to test. Use the AEservertest script to try things.
+"""
+
+import addpack
+addpack.addpack('Tools')
+addpack.addpack('bgen')
+addpack.addpack('ae')
+addpack.addpack('evt')
+#addpack.addpack('menu')
+addpack.addpack('win')
+
+import sys
+sys.stdout = sys.stderr
+import traceback
+import MacOS
+import AE
+from AppleEvents import *
+import Evt
+from Events import *
+import Menu
+import Dlg
+import Win
+from Windows import *
+import Qd
+import macfs
+
+import aetools
+import EasyDialogs
+
+kHighLevelEvent = 23 # Not defined anywhere for Python yet?
+
+Quit='Quit'
+
+def mymessage(str):
+ err = AE.AEInteractWithUser(kAEDefaultTimeout)
+ if err:
+ print str
+ EasyDialogs.Message(str)
+
+def myaskstring(str, default=''):
+ err = AE.AEInteractWithUser(kAEDefaultTimeout)
+ if err:
+ return default
+ return EasyDialogs.AskString(str, default)
+
+def main():
+ echo = EchoServer()
+ yield = MacOS.EnableAppswitch(-1) # Disable Python's own "event handling"
+ try:
+ try:
+ echo.mainloop(everyEvent, 0)
+ except Quit:
+ pass
+ finally:
+ MacOS.EnableAppswitch(yield) # Let Python have a go at events
+ echo.close()
+
+
+class EchoServer:
+
+ suites = ['aevt', 'core', 'reqd']
+
+ def __init__(self):
+ self.active = 0
+ #
+ # Install the handlers
+ #
+ for suite in self.suites:
+ AE.AEInstallEventHandler(suite, typeWildCard, self.aehandler)
+ print (suite, typeWildCard, self.aehandler)
+ self.active = 1
+ #
+ # Setup the apple menu and file/quit
+ #
+ self.appleid = 1
+ self.fileid = 2
+
+ Menu.ClearMenuBar()
+ self.applemenu = applemenu = Menu.NewMenu(self.appleid, "\024")
+ applemenu.AppendMenu("All about echo...;(-")
+ applemenu.AppendResMenu('DRVR')
+ applemenu.InsertMenu(0)
+
+ self.filemenu = Menu.NewMenu(self.fileid, 'File')
+ self.filemenu.AppendMenu("Quit/Q")
+ self.filemenu.InsertMenu(0)
+
+ Menu.DrawMenuBar()
+ #
+ # Set interaction allowed (for the return values)
+ #
+ AE.AESetInteractionAllowed(kAEInteractWithAll)
+
+ def __del__(self):
+ self.close()
+
+ def close(self):
+ if self.active:
+ self.active = 0
+ for suite in self.suites:
+ AE.AERemoveEventHandler(suite, typeWildCard)
+
+ def mainloop(self, mask = everyEvent, timeout = 60*60):
+ while 1:
+ self.dooneevent(mask, timeout)
+
+ def dooneevent(self, mask = everyEvent, timeout = 60*60):
+ got, event = Evt.WaitNextEvent(mask, timeout)
+ if got:
+ self.lowlevelhandler(event)
+
+ def lowlevelhandler(self, event):
+ what, message, when, where, modifiers = event
+ h, v = where
+ if what == kHighLevelEvent:
+ msg = "High Level Event: %s %s" % \
+ (`code(message)`, `code(h | (v<<16))`)
+ self.handled_by_us = 0
+ try:
+ AE.AEProcessAppleEvent(event)
+ except AE.Error, err:
+ mymessage(msg + "\015AEProcessAppleEvent error: %s" % str(err))
+ traceback.print_exc()
+ else:
+ if self.handled_by_us == 0:
+ print msg, "Handled by AE, somehow"
+ else:
+ print msg, 'Handled by us.'
+ elif what == keyDown:
+ c = chr(message & charCodeMask)
+ if modifiers & cmdKey:
+ if c == '.':
+ raise KeyboardInterrupt, "Command-period"
+ else:
+ self.menuhit(Menu.MenuKey(message&charCodeMask))
+ ##MacOS.HandleEvent(event)
+ elif what == mouseDown:
+ partcode, window = Win.FindWindow(where)
+ if partcode == inMenuBar:
+ result = Menu.MenuSelect(where)
+ self.menuhit(result)
+ elif what <> autoKey:
+ print "Event:", (eventname(what), message, when, (h, v), modifiers)
+## MacOS.HandleEvent(event)
+
+ def menuhit(self, result):
+ id = (result>>16) & 0xffff # Hi word
+ item = result & 0xffff # Lo word
+ if id == self.appleid:
+ if item == 1:
+ mymessage("Echo -- echo AppleEvents")
+ elif item > 1:
+ name = self.applemenu.GetItem(item)
+ Qd.OpenDeskAcc(name)
+ elif id == self.fileid:
+ if item == 1:
+ raise Quit
+
+ def aehandler(self, request, reply):
+ print "Apple Event!"
+ self.handled_by_us = 1
+ parameters, attributes = aetools.unpackevent(request)
+ print "class =", `attributes['evcl'].type`,
+ print "id =", `attributes['evid'].type`
+ print "Parameters:"
+ keys = parameters.keys()
+ keys.sort()
+ for key in keys:
+ print "%s: %.150s" % (`key`, `parameters[key]`)
+ print " :", str(parameters[key])
+ print "Attributes:"
+ keys = attributes.keys()
+ keys.sort()
+ for key in keys:
+ print "%s: %.150s" % (`key`, `attributes[key]`)
+ parameters['----'] = self.askreplyvalue()
+ aetools.packevent(reply, parameters)
+
+ def askreplyvalue(self):
+ while 1:
+ str = myaskstring('Reply value to send (python-style)', 'None')
+ try:
+ rv = eval(str)
+ break
+ except:
+ pass
+ return rv
+
+_eventnames = {
+ keyDown: 'keyDown',
+ autoKey: 'autoKey',
+ mouseDown: 'mouseDown',
+ mouseUp: 'mouseUp',
+ updateEvt: 'updateEvt',
+ diskEvt: 'diskEvt',
+ activateEvt: 'activateEvt',
+ osEvt: 'osEvt',
+}
+
+def eventname(what):
+ if _eventnames.has_key(what): return _eventnames[what]
+ else: return `what`
+
+def code(x):
+ "Convert a long int to the 4-character code it really is"
+ s = ''
+ for i in range(4):
+ x, c = divmod(x, 256)
+ s = chr(c) + s
+ return s
+
+
+if __name__ == '__main__':
+ main()