Mercurial > cpython-lru_cache-weakref
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 |
| 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 | 17 import Menu |
| 18 import Dlg | |
| 19 import Win | |
| 20 from Windows import * | |
| 21 import Qd | |
| 22 | |
|
2287
540f8444ef8a
more support for different kinds of objects
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
23 import aetools |
| 2514 | 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 | 28 def mymessage(str): |
| 29 err = AE.AEInteractWithUser(kAEDefaultTimeout) | |
| 30 if err: | |
| 31 print str | |
| 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 | 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 | 46 #suites = ['aevt', 'core', 'reqd'] |
| 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 | 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 | 55 self.appleid = 1 |
| 56 Menu.ClearMenuBar() | |
| 57 self.applemenu = applemenu = Menu.NewMenu(self.appleid, "\024") | |
| 58 applemenu.AppendMenu("All about echo...;(-") | |
| 2882 | 59 applemenu.AppendResMenu('DRVR') |
| 2514 | 60 applemenu.InsertMenu(0) |
| 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 | 82 what, message, when, where, modifiers = event |
| 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 | 85 msg = "High Level Event: %s %s" % \ |
| 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 | 89 except AE.Error, err: |
| 2882 | 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 | 92 else: |
| 2882 | 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 | 99 elif what == mouseDown: |
| 100 partcode, window = Win.FindWindow(where) | |
| 101 if partcode == inMenuBar: | |
| 102 result = Menu.MenuSelect(where) | |
| 103 id = (result>>16) & 0xffff # Hi word | |
| 104 item = result & 0xffff # Lo word | |
| 105 if id == self.appleid: | |
| 106 if item == 1: | |
| 2882 | 107 mymessage("Echo -- echo AppleEvents") |
| 2514 | 108 elif item > 1: |
| 109 name = self.applemenu.GetItem(item) | |
| 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 | 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 | 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() |
