diff options
Diffstat (limited to 'Mac/Lib/test/echo.py')
-rw-r--r-- | Mac/Lib/test/echo.py | 155 |
1 files changed, 0 insertions, 155 deletions
diff --git a/Mac/Lib/test/echo.py b/Mac/Lib/test/echo.py deleted file mode 100644 index f84e13b..0000000 --- a/Mac/Lib/test/echo.py +++ /dev/null @@ -1,155 +0,0 @@ -"""'echo' -- an AppleEvent handler which handles all events the same. - -It replies to each event by echoing the parameter back to the client. -This is a good way to find out how the Script Editor formats AppleEvents, -especially to figure out all the different forms an object specifier -can have (without having to rely on Apple's implementation). -""" - -import sys -sys.stdout = sys.stderr -import traceback -import MacOS -from Carbon import AE -from Carbon.AppleEvents import * -from Carbon import Evt -from Carbon.Events import * -from Carbon import Menu -from Carbon import Dlg -from Carbon import Win -from Carbon.Windows import * -from Carbon import Qd - -import aetools -import EasyDialogs - -kHighLevelEvent = 23 # Not defined anywhere for Python yet? - -def mymessage(str): - err = AE.AEInteractWithUser(kAEDefaultTimeout) - if err: - print str - EasyDialogs.Message(str) - -def main(): - echo = EchoServer() - saveparams = MacOS.SchedParams(0, 0) # Disable Python's own "event handling" - try: - echo.mainloop(everyEvent, 0) - finally: - apply(MacOS.SchedParams, saveparams) # Let Python have a go at events - echo.close() - - -class EchoServer: - - #suites = ['aevt', 'core', 'reqd'] - suites = ['****'] - - def __init__(self): - self.active = 0 - for suite in self.suites: - AE.AEInstallEventHandler(suite, typeWildCard, self.aehandler) - print (suite, typeWildCard, self.aehandler) - self.active = 1 - self.appleid = 1 - Menu.ClearMenuBar() - self.applemenu = applemenu = Menu.NewMenu(self.appleid, "\024") - applemenu.AppendMenu("All about echo...;(-") - applemenu.InsertMenu(0) - Menu.DrawMenuBar() - - 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))`) - try: - AE.AEProcessAppleEvent(event) - except AE.Error, err: - mymessage(msg + "\015AEProcessAppleEvent error: %s" % str(err)) - traceback.print_exc() - else: - mymessage(msg + "\015OK!") - elif what == keyDown: - c = chr(message & charCodeMask) - if c == '.' and modifiers & cmdKey: - raise KeyboardInterrupt, "Command-period" - MacOS.HandleEvent(event) - elif what == mouseDown: - partcode, window = Win.FindWindow(where) - if partcode == inMenuBar: - result = Menu.MenuSelect(where) - id = (result>>16) & 0xffff # Hi word - item = result & 0xffff # Lo word - if id == self.appleid: - if item == 1: - mymessage("Echo -- echo AppleEvents") - elif what <> autoKey: - print "Event:", (eventname(what), message, when, (h, v), modifiers) -## MacOS.HandleEvent(event) - - def aehandler(self, request, reply): - print "Apple Event!" - 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]`) - aetools.packevent(reply, parameters) - - -_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() |