annotate Mac/Lib/test/echo.py @ 5817:48b94de85bf3 legacy-trunk

Extensive changes by AMK.
author Guido van Rossum <guido@python.org>
date Thu, 17 Jul 1997 16:29:42 +0000
parents 8f6cc717d817
children 90ede5165d1f
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2287
540f8444ef8a more support for different kinds of objects
Guido van Rossum <guido@python.org>
parents:
diff changeset
1 """'echo' -- an AppleEvent handler which handles all events the same.
540f8444ef8a more support for different kinds of objects
Guido van Rossum <guido@python.org>
parents:
diff changeset
2
540f8444ef8a more support for different kinds of objects
Guido van Rossum <guido@python.org>
parents:
diff changeset
3 It replies to each event by echoing the parameter back to the client.
540f8444ef8a more support for different kinds of objects
Guido van Rossum <guido@python.org>
parents:
diff changeset
4 This is a good way to find out how the Script Editor formats AppleEvents,
540f8444ef8a more support for different kinds of objects
Guido van Rossum <guido@python.org>
parents:
diff changeset
5 especially to figure out all the different forms an object specifier
540f8444ef8a more support for different kinds of objects
Guido van Rossum <guido@python.org>
parents:
diff changeset
6 can have (without having to rely on Apple's implementation).
540f8444ef8a more support for different kinds of objects
Guido van Rossum <guido@python.org>
parents:
diff changeset
7 """
540f8444ef8a more support for different kinds of objects
Guido van Rossum <guido@python.org>
parents:
diff changeset
8
2398
cabb7c5732ef another round... ported to __SC__
Guido van Rossum <guido@python.org>
parents: 2287
diff changeset
9 import sys
cabb7c5732ef another round... ported to __SC__
Guido van Rossum <guido@python.org>
parents: 2287
diff changeset
10 sys.stdout = sys.stderr
cabb7c5732ef another round... ported to __SC__
Guido van Rossum <guido@python.org>
parents: 2287
diff changeset
11 import traceback
cabb7c5732ef another round... ported to __SC__
Guido van Rossum <guido@python.org>
parents: 2287
diff changeset
12 import MacOS
2287
540f8444ef8a more support for different kinds of objects
Guido van Rossum <guido@python.org>
parents:
diff changeset
13 import AE
540f8444ef8a more support for different kinds of objects
Guido van Rossum <guido@python.org>
parents:
diff changeset
14 from AppleEvents import *
540f8444ef8a more support for different kinds of objects
Guido van Rossum <guido@python.org>
parents:
diff changeset
15 import Evt
540f8444ef8a more support for different kinds of objects
Guido van Rossum <guido@python.org>
parents:
diff changeset
16 from Events import *
2514
f4dc51f78a56 the usual
Guido van Rossum <guido@python.org>
parents: 2398
diff changeset
17 import Menu
f4dc51f78a56 the usual
Guido van Rossum <guido@python.org>
parents: 2398
diff changeset
18 import Dlg
f4dc51f78a56 the usual
Guido van Rossum <guido@python.org>
parents: 2398
diff changeset
19 import Win
f4dc51f78a56 the usual
Guido van Rossum <guido@python.org>
parents: 2398
diff changeset
20 from Windows import *
f4dc51f78a56 the usual
Guido van Rossum <guido@python.org>
parents: 2398
diff changeset
21 import Qd
f4dc51f78a56 the usual
Guido van Rossum <guido@python.org>
parents: 2398
diff changeset
22
2287
540f8444ef8a more support for different kinds of objects
Guido van Rossum <guido@python.org>
parents:
diff changeset
23 import aetools
2514
f4dc51f78a56 the usual
Guido van Rossum <guido@python.org>
parents: 2398
diff changeset
24 import EasyDialogs
2287
540f8444ef8a more support for different kinds of objects
Guido van Rossum <guido@python.org>
parents:
diff changeset
25
540f8444ef8a more support for different kinds of objects
Guido van Rossum <guido@python.org>
parents:
diff changeset
26 kHighLevelEvent = 23 # Not defined anywhere for Python yet?
540f8444ef8a more support for different kinds of objects
Guido van Rossum <guido@python.org>
parents:
diff changeset
27
2882
f88bccb548ef - Use new names
Jack Jansen <jack.jansen@cwi.nl>
parents: 2719
diff changeset
28 def mymessage(str):
f88bccb548ef - Use new names
Jack Jansen <jack.jansen@cwi.nl>
parents: 2719
diff changeset
29 err = AE.AEInteractWithUser(kAEDefaultTimeout)
f88bccb548ef - Use new names
Jack Jansen <jack.jansen@cwi.nl>
parents: 2719
diff changeset
30 if err:
f88bccb548ef - Use new names
Jack Jansen <jack.jansen@cwi.nl>
parents: 2719
diff changeset
31 print str
f88bccb548ef - Use new names
Jack Jansen <jack.jansen@cwi.nl>
parents: 2719
diff changeset
32 EasyDialogs.Message(str)
2287
540f8444ef8a more support for different kinds of objects
Guido van Rossum <guido@python.org>
parents:
diff changeset
33
540f8444ef8a more support for different kinds of objects
Guido van Rossum <guido@python.org>
parents:
diff changeset
34 def main():
540f8444ef8a more support for different kinds of objects
Guido van Rossum <guido@python.org>
parents:
diff changeset
35 echo = EchoServer()
5733
8f6cc717d817 Replaced MacOS.EnableAppswitch by MacOS.SchedParams
Jack Jansen <jack.jansen@cwi.nl>
parents: 3467
diff changeset
36 saveparams = MacOS.SchedParams(0, 0) # Disable Python's own "event handling"
2287
540f8444ef8a more support for different kinds of objects
Guido van Rossum <guido@python.org>
parents:
diff changeset
37 try:
2514
f4dc51f78a56 the usual
Guido van Rossum <guido@python.org>
parents: 2398
diff changeset
38 echo.mainloop(everyEvent, 0)
2287
540f8444ef8a more support for different kinds of objects
Guido van Rossum <guido@python.org>
parents:
diff changeset
39 finally:
5733
8f6cc717d817 Replaced MacOS.EnableAppswitch by MacOS.SchedParams
Jack Jansen <jack.jansen@cwi.nl>
parents: 3467
diff changeset
40 apply(MacOS.SchedParams, saveparams) # Let Python have a go at events
2287
540f8444ef8a more support for different kinds of objects
Guido van Rossum <guido@python.org>
parents:
diff changeset
41 echo.close()
540f8444ef8a more support for different kinds of objects
Guido van Rossum <guido@python.org>
parents:
diff changeset
42
540f8444ef8a more support for different kinds of objects
Guido van Rossum <guido@python.org>
parents:
diff changeset
43
540f8444ef8a more support for different kinds of objects
Guido van Rossum <guido@python.org>
parents:
diff changeset
44 class EchoServer:
540f8444ef8a more support for different kinds of objects
Guido van Rossum <guido@python.org>
parents:
diff changeset
45
2882
f88bccb548ef - Use new names
Jack Jansen <jack.jansen@cwi.nl>
parents: 2719
diff changeset
46 #suites = ['aevt', 'core', 'reqd']
f88bccb548ef - Use new names
Jack Jansen <jack.jansen@cwi.nl>
parents: 2719
diff changeset
47 suites = ['****']
2287
540f8444ef8a more support for different kinds of objects
Guido van Rossum <guido@python.org>
parents:
diff changeset
48
540f8444ef8a more support for different kinds of objects
Guido van Rossum <guido@python.org>
parents:
diff changeset
49 def __init__(self):
540f8444ef8a more support for different kinds of objects
Guido van Rossum <guido@python.org>
parents:
diff changeset
50 self.active = 0
540f8444ef8a more support for different kinds of objects
Guido van Rossum <guido@python.org>
parents:
diff changeset
51 for suite in self.suites:
540f8444ef8a more support for different kinds of objects
Guido van Rossum <guido@python.org>
parents:
diff changeset
52 AE.AEInstallEventHandler(suite, typeWildCard, self.aehandler)
2882
f88bccb548ef - Use new names
Jack Jansen <jack.jansen@cwi.nl>
parents: 2719
diff changeset
53 print (suite, typeWildCard, self.aehandler)
2287
540f8444ef8a more support for different kinds of objects
Guido van Rossum <guido@python.org>
parents:
diff changeset
54 self.active = 1
2514
f4dc51f78a56 the usual
Guido van Rossum <guido@python.org>
parents: 2398
diff changeset
55 self.appleid = 1
f4dc51f78a56 the usual
Guido van Rossum <guido@python.org>
parents: 2398
diff changeset
56 Menu.ClearMenuBar()
f4dc51f78a56 the usual
Guido van Rossum <guido@python.org>
parents: 2398
diff changeset
57 self.applemenu = applemenu = Menu.NewMenu(self.appleid, "\024")
f4dc51f78a56 the usual
Guido van Rossum <guido@python.org>
parents: 2398
diff changeset
58 applemenu.AppendMenu("All about echo...;(-")
2882
f88bccb548ef - Use new names
Jack Jansen <jack.jansen@cwi.nl>
parents: 2719
diff changeset
59 applemenu.AppendResMenu('DRVR')
2514
f4dc51f78a56 the usual
Guido van Rossum <guido@python.org>
parents: 2398
diff changeset
60 applemenu.InsertMenu(0)
f4dc51f78a56 the usual
Guido van Rossum <guido@python.org>
parents: 2398
diff changeset
61 Menu.DrawMenuBar()
2287
540f8444ef8a more support for different kinds of objects
Guido van Rossum <guido@python.org>
parents:
diff changeset
62
540f8444ef8a more support for different kinds of objects
Guido van Rossum <guido@python.org>
parents:
diff changeset
63 def __del__(self):
540f8444ef8a more support for different kinds of objects
Guido van Rossum <guido@python.org>
parents:
diff changeset
64 self.close()
540f8444ef8a more support for different kinds of objects
Guido van Rossum <guido@python.org>
parents:
diff changeset
65
540f8444ef8a more support for different kinds of objects
Guido van Rossum <guido@python.org>
parents:
diff changeset
66 def close(self):
540f8444ef8a more support for different kinds of objects
Guido van Rossum <guido@python.org>
parents:
diff changeset
67 if self.active:
540f8444ef8a more support for different kinds of objects
Guido van Rossum <guido@python.org>
parents:
diff changeset
68 self.active = 0
540f8444ef8a more support for different kinds of objects
Guido van Rossum <guido@python.org>
parents:
diff changeset
69 for suite in self.suites:
540f8444ef8a more support for different kinds of objects
Guido van Rossum <guido@python.org>
parents:
diff changeset
70 AE.AERemoveEventHandler(suite, typeWildCard)
540f8444ef8a more support for different kinds of objects
Guido van Rossum <guido@python.org>
parents:
diff changeset
71
540f8444ef8a more support for different kinds of objects
Guido van Rossum <guido@python.org>
parents:
diff changeset
72 def mainloop(self, mask = everyEvent, timeout = 60*60):
540f8444ef8a more support for different kinds of objects
Guido van Rossum <guido@python.org>
parents:
diff changeset
73 while 1:
2398
cabb7c5732ef another round... ported to __SC__
Guido van Rossum <guido@python.org>
parents: 2287
diff changeset
74 self.dooneevent(mask, timeout)
cabb7c5732ef another round... ported to __SC__
Guido van Rossum <guido@python.org>
parents: 2287
diff changeset
75
cabb7c5732ef another round... ported to __SC__
Guido van Rossum <guido@python.org>
parents: 2287
diff changeset
76 def dooneevent(self, mask = everyEvent, timeout = 60*60):
2287
540f8444ef8a more support for different kinds of objects
Guido van Rossum <guido@python.org>
parents:
diff changeset
77 got, event = Evt.WaitNextEvent(mask, timeout)
540f8444ef8a more support for different kinds of objects
Guido van Rossum <guido@python.org>
parents:
diff changeset
78 if got:
540f8444ef8a more support for different kinds of objects
Guido van Rossum <guido@python.org>
parents:
diff changeset
79 self.lowlevelhandler(event)
540f8444ef8a more support for different kinds of objects
Guido van Rossum <guido@python.org>
parents:
diff changeset
80
540f8444ef8a more support for different kinds of objects
Guido van Rossum <guido@python.org>
parents:
diff changeset
81 def lowlevelhandler(self, event):
2514
f4dc51f78a56 the usual
Guido van Rossum <guido@python.org>
parents: 2398
diff changeset
82 what, message, when, where, modifiers = event
f4dc51f78a56 the usual
Guido van Rossum <guido@python.org>
parents: 2398
diff changeset
83 h, v = where
2287
540f8444ef8a more support for different kinds of objects
Guido van Rossum <guido@python.org>
parents:
diff changeset
84 if what == kHighLevelEvent:
2514
f4dc51f78a56 the usual
Guido van Rossum <guido@python.org>
parents: 2398
diff changeset
85 msg = "High Level Event: %s %s" % \
f4dc51f78a56 the usual
Guido van Rossum <guido@python.org>
parents: 2398
diff changeset
86 (`code(message)`, `code(h | (v<<16))`)
2287
540f8444ef8a more support for different kinds of objects
Guido van Rossum <guido@python.org>
parents:
diff changeset
87 try:
540f8444ef8a more support for different kinds of objects
Guido van Rossum <guido@python.org>
parents:
diff changeset
88 AE.AEProcessAppleEvent(event)
2514
f4dc51f78a56 the usual
Guido van Rossum <guido@python.org>
parents: 2398
diff changeset
89 except AE.Error, err:
2882
f88bccb548ef - Use new names
Jack Jansen <jack.jansen@cwi.nl>
parents: 2719
diff changeset
90 mymessage(msg + "\015AEProcessAppleEvent error: %s" % str(err))
2287
540f8444ef8a more support for different kinds of objects
Guido van Rossum <guido@python.org>
parents:
diff changeset
91 traceback.print_exc()
2514
f4dc51f78a56 the usual
Guido van Rossum <guido@python.org>
parents: 2398
diff changeset
92 else:
2882
f88bccb548ef - Use new names
Jack Jansen <jack.jansen@cwi.nl>
parents: 2719
diff changeset
93 mymessage(msg + "\015OK!")
2287
540f8444ef8a more support for different kinds of objects
Guido van Rossum <guido@python.org>
parents:
diff changeset
94 elif what == keyDown:
540f8444ef8a more support for different kinds of objects
Guido van Rossum <guido@python.org>
parents:
diff changeset
95 c = chr(message & charCodeMask)
540f8444ef8a more support for different kinds of objects
Guido van Rossum <guido@python.org>
parents:
diff changeset
96 if c == '.' and modifiers & cmdKey:
540f8444ef8a more support for different kinds of objects
Guido van Rossum <guido@python.org>
parents:
diff changeset
97 raise KeyboardInterrupt, "Command-period"
540f8444ef8a more support for different kinds of objects
Guido van Rossum <guido@python.org>
parents:
diff changeset
98 MacOS.HandleEvent(event)
2514
f4dc51f78a56 the usual
Guido van Rossum <guido@python.org>
parents: 2398
diff changeset
99 elif what == mouseDown:
f4dc51f78a56 the usual
Guido van Rossum <guido@python.org>
parents: 2398
diff changeset
100 partcode, window = Win.FindWindow(where)
f4dc51f78a56 the usual
Guido van Rossum <guido@python.org>
parents: 2398
diff changeset
101 if partcode == inMenuBar:
f4dc51f78a56 the usual
Guido van Rossum <guido@python.org>
parents: 2398
diff changeset
102 result = Menu.MenuSelect(where)
f4dc51f78a56 the usual
Guido van Rossum <guido@python.org>
parents: 2398
diff changeset
103 id = (result>>16) & 0xffff # Hi word
f4dc51f78a56 the usual
Guido van Rossum <guido@python.org>
parents: 2398
diff changeset
104 item = result & 0xffff # Lo word
f4dc51f78a56 the usual
Guido van Rossum <guido@python.org>
parents: 2398
diff changeset
105 if id == self.appleid:
f4dc51f78a56 the usual
Guido van Rossum <guido@python.org>
parents: 2398
diff changeset
106 if item == 1:
2882
f88bccb548ef - Use new names
Jack Jansen <jack.jansen@cwi.nl>
parents: 2719
diff changeset
107 mymessage("Echo -- echo AppleEvents")
2514
f4dc51f78a56 the usual
Guido van Rossum <guido@python.org>
parents: 2398
diff changeset
108 elif item > 1:
f4dc51f78a56 the usual
Guido van Rossum <guido@python.org>
parents: 2398
diff changeset
109 name = self.applemenu.GetItem(item)
f4dc51f78a56 the usual
Guido van Rossum <guido@python.org>
parents: 2398
diff changeset
110 Qd.OpenDeskAcc(name)
2287
540f8444ef8a more support for different kinds of objects
Guido van Rossum <guido@python.org>
parents:
diff changeset
111 elif what <> autoKey:
540f8444ef8a more support for different kinds of objects
Guido van Rossum <guido@python.org>
parents:
diff changeset
112 print "Event:", (eventname(what), message, when, (h, v), modifiers)
2514
f4dc51f78a56 the usual
Guido van Rossum <guido@python.org>
parents: 2398
diff changeset
113 ## MacOS.HandleEvent(event)
2287
540f8444ef8a more support for different kinds of objects
Guido van Rossum <guido@python.org>
parents:
diff changeset
114
540f8444ef8a more support for different kinds of objects
Guido van Rossum <guido@python.org>
parents:
diff changeset
115 def aehandler(self, request, reply):
2882
f88bccb548ef - Use new names
Jack Jansen <jack.jansen@cwi.nl>
parents: 2719
diff changeset
116 print "Apple Event!"
2287
540f8444ef8a more support for different kinds of objects
Guido van Rossum <guido@python.org>
parents:
diff changeset
117 parameters, attributes = aetools.unpackevent(request)
540f8444ef8a more support for different kinds of objects
Guido van Rossum <guido@python.org>
parents:
diff changeset
118 print "class =", `attributes['evcl'].type`,
540f8444ef8a more support for different kinds of objects
Guido van Rossum <guido@python.org>
parents:
diff changeset
119 print "id =", `attributes['evid'].type`
540f8444ef8a more support for different kinds of objects
Guido van Rossum <guido@python.org>
parents:
diff changeset
120 print "Parameters:"
540f8444ef8a more support for different kinds of objects
Guido van Rossum <guido@python.org>
parents:
diff changeset
121 keys = parameters.keys()
540f8444ef8a more support for different kinds of objects
Guido van Rossum <guido@python.org>
parents:
diff changeset
122 keys.sort()
540f8444ef8a more support for different kinds of objects
Guido van Rossum <guido@python.org>
parents:
diff changeset
123 for key in keys:
540f8444ef8a more support for different kinds of objects
Guido van Rossum <guido@python.org>
parents:
diff changeset
124 print "%s: %.150s" % (`key`, `parameters[key]`)
540f8444ef8a more support for different kinds of objects
Guido van Rossum <guido@python.org>
parents:
diff changeset
125 print " :", str(parameters[key])
540f8444ef8a more support for different kinds of objects
Guido van Rossum <guido@python.org>
parents:
diff changeset
126 print "Attributes:"
540f8444ef8a more support for different kinds of objects
Guido van Rossum <guido@python.org>
parents:
diff changeset
127 keys = attributes.keys()
540f8444ef8a more support for different kinds of objects
Guido van Rossum <guido@python.org>
parents:
diff changeset
128 keys.sort()
540f8444ef8a more support for different kinds of objects
Guido van Rossum <guido@python.org>
parents:
diff changeset
129 for key in keys:
540f8444ef8a more support for different kinds of objects
Guido van Rossum <guido@python.org>
parents:
diff changeset
130 print "%s: %.150s" % (`key`, `attributes[key]`)
540f8444ef8a more support for different kinds of objects
Guido van Rossum <guido@python.org>
parents:
diff changeset
131 aetools.packevent(reply, parameters)
540f8444ef8a more support for different kinds of objects
Guido van Rossum <guido@python.org>
parents:
diff changeset
132
540f8444ef8a more support for different kinds of objects
Guido van Rossum <guido@python.org>
parents:
diff changeset
133
540f8444ef8a more support for different kinds of objects
Guido van Rossum <guido@python.org>
parents:
diff changeset
134 _eventnames = {
540f8444ef8a more support for different kinds of objects
Guido van Rossum <guido@python.org>
parents:
diff changeset
135 keyDown: 'keyDown',
540f8444ef8a more support for different kinds of objects
Guido van Rossum <guido@python.org>
parents:
diff changeset
136 autoKey: 'autoKey',
540f8444ef8a more support for different kinds of objects
Guido van Rossum <guido@python.org>
parents:
diff changeset
137 mouseDown: 'mouseDown',
540f8444ef8a more support for different kinds of objects
Guido van Rossum <guido@python.org>
parents:
diff changeset
138 mouseUp: 'mouseUp',
540f8444ef8a more support for different kinds of objects
Guido van Rossum <guido@python.org>
parents:
diff changeset
139 updateEvt: 'updateEvt',
540f8444ef8a more support for different kinds of objects
Guido van Rossum <guido@python.org>
parents:
diff changeset
140 diskEvt: 'diskEvt',
540f8444ef8a more support for different kinds of objects
Guido van Rossum <guido@python.org>
parents:
diff changeset
141 activateEvt: 'activateEvt',
540f8444ef8a more support for different kinds of objects
Guido van Rossum <guido@python.org>
parents:
diff changeset
142 osEvt: 'osEvt',
540f8444ef8a more support for different kinds of objects
Guido van Rossum <guido@python.org>
parents:
diff changeset
143 }
540f8444ef8a more support for different kinds of objects
Guido van Rossum <guido@python.org>
parents:
diff changeset
144
540f8444ef8a more support for different kinds of objects
Guido van Rossum <guido@python.org>
parents:
diff changeset
145 def eventname(what):
540f8444ef8a more support for different kinds of objects
Guido van Rossum <guido@python.org>
parents:
diff changeset
146 if _eventnames.has_key(what): return _eventnames[what]
540f8444ef8a more support for different kinds of objects
Guido van Rossum <guido@python.org>
parents:
diff changeset
147 else: return `what`
540f8444ef8a more support for different kinds of objects
Guido van Rossum <guido@python.org>
parents:
diff changeset
148
540f8444ef8a more support for different kinds of objects
Guido van Rossum <guido@python.org>
parents:
diff changeset
149 def code(x):
540f8444ef8a more support for different kinds of objects
Guido van Rossum <guido@python.org>
parents:
diff changeset
150 "Convert a long int to the 4-character code it really is"
540f8444ef8a more support for different kinds of objects
Guido van Rossum <guido@python.org>
parents:
diff changeset
151 s = ''
540f8444ef8a more support for different kinds of objects
Guido van Rossum <guido@python.org>
parents:
diff changeset
152 for i in range(4):
540f8444ef8a more support for different kinds of objects
Guido van Rossum <guido@python.org>
parents:
diff changeset
153 x, c = divmod(x, 256)
540f8444ef8a more support for different kinds of objects
Guido van Rossum <guido@python.org>
parents:
diff changeset
154 s = chr(c) + s
540f8444ef8a more support for different kinds of objects
Guido van Rossum <guido@python.org>
parents:
diff changeset
155 return s
540f8444ef8a more support for different kinds of objects
Guido van Rossum <guido@python.org>
parents:
diff changeset
156
540f8444ef8a more support for different kinds of objects
Guido van Rossum <guido@python.org>
parents:
diff changeset
157
540f8444ef8a more support for different kinds of objects
Guido van Rossum <guido@python.org>
parents:
diff changeset
158 if __name__ == '__main__':
540f8444ef8a more support for different kinds of objects
Guido van Rossum <guido@python.org>
parents:
diff changeset
159 main()