annotate Lib/idlelib/WindowList.py @ 27998:e27f58a50737 legacy-trunk

SF bug #690377: Dud footnote reference in distutils docs
author Raymond Hettinger <python@rcn.com>
date Fri, 21 Feb 2003 02:47:09 +0000
parents c85d7cdd983f
children ca20c3cbc956
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1 from Tkinter import *
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
2
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
3 class WindowList:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
4
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
5 def __init__(self):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
6 self.dict = {}
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
7 self.callbacks = []
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
8
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
9 def add(self, window):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
10 window.after_idle(self.call_callbacks)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
11 self.dict[str(window)] = window
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
12
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
13 def delete(self, window):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
14 try:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
15 del self.dict[str(window)]
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
16 except KeyError:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
17 # Sometimes, destroy() is called twice
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
18 pass
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
19 self.call_callbacks()
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
20
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
21 def add_windows_to_menu(self, menu):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
22 list = []
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
23 for key in self.dict.keys():
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
24 window = self.dict[key]
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
25 try:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
26 title = window.get_title()
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
27 except TclError:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
28 continue
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
29 list.append((title, window))
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
30 list.sort()
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
31 for title, window in list:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
32 if title == "Python Shell":
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
33 # Hack -- until we have a better way to this
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
34 continue
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
35 menu.add_command(label=title, command=window.wakeup)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
36
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
37 def register_callback(self, callback):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
38 self.callbacks.append(callback)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
39
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
40 def unregister_callback(self, callback):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
41 try:
18495
c4f75857502a py-cvs merge, correct indentation
Steven M. Gava <elguavas@python.net>
parents: 13975
diff changeset
42 self.callbacks.remove(callback)
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
43 except ValueError:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
44 pass
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
45
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
46 def call_callbacks(self):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
47 for callback in self.callbacks:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
48 try:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
49 callback()
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
50 except:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
51 print "warning: callback failed in WindowList", \
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
52 sys.exc_type, ":", sys.exc_value
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
53
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
54 registry = WindowList()
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
55
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
56 add_windows_to_menu = registry.add_windows_to_menu
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
57 register_callback = registry.register_callback
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
58 unregister_callback = registry.unregister_callback
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
59
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
60
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
61 class ListedToplevel(Toplevel):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
62
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
63 def __init__(self, master, **kw):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
64 Toplevel.__init__(self, master, kw)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
65 registry.add(self)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
66
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
67 def destroy(self):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
68 registry.delete(self)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
69 Toplevel.destroy(self)
25571
c85d7cdd983f Josh Robb's Patch
Kurt B. Kaiser <kbk@shore.net>
parents: 18495
diff changeset
70 # If this is Idle's last window then quit the mainloop
c85d7cdd983f Josh Robb's Patch
Kurt B. Kaiser <kbk@shore.net>
parents: 18495
diff changeset
71 # (Needed for clean exit on Windows 98)
c85d7cdd983f Josh Robb's Patch
Kurt B. Kaiser <kbk@shore.net>
parents: 18495
diff changeset
72 if not registry.dict:
c85d7cdd983f Josh Robb's Patch
Kurt B. Kaiser <kbk@shore.net>
parents: 18495
diff changeset
73 self.quit()
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
74
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
75 def get_title(self):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
76 # Subclass can override
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
77 return self.wm_title()
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
78
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
79 def wakeup(self):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
80 try:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
81 if self.wm_state() == "iconic":
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
82 self.wm_deiconify()
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
83 else:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
84 self.tkraise()
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
85 self.focus_set()
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
86 except TclError:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
87 # This can happen when the window menu was torn off.
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
88 # Simply ignore it.
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
89 pass