Mercurial > cpython-lru_cache-weakref
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 |
| rev | line source |
|---|---|
| 13975 | 1 from Tkinter import * |
| 2 | |
| 3 class WindowList: | |
| 4 | |
| 5 def __init__(self): | |
| 6 self.dict = {} | |
| 7 self.callbacks = [] | |
| 8 | |
| 9 def add(self, window): | |
| 10 window.after_idle(self.call_callbacks) | |
| 11 self.dict[str(window)] = window | |
| 12 | |
| 13 def delete(self, window): | |
| 14 try: | |
| 15 del self.dict[str(window)] | |
| 16 except KeyError: | |
| 17 # Sometimes, destroy() is called twice | |
| 18 pass | |
| 19 self.call_callbacks() | |
| 20 | |
| 21 def add_windows_to_menu(self, menu): | |
| 22 list = [] | |
| 23 for key in self.dict.keys(): | |
| 24 window = self.dict[key] | |
| 25 try: | |
| 26 title = window.get_title() | |
| 27 except TclError: | |
| 28 continue | |
| 29 list.append((title, window)) | |
| 30 list.sort() | |
| 31 for title, window in list: | |
| 32 if title == "Python Shell": | |
| 33 # Hack -- until we have a better way to this | |
| 34 continue | |
| 35 menu.add_command(label=title, command=window.wakeup) | |
| 36 | |
| 37 def register_callback(self, callback): | |
| 38 self.callbacks.append(callback) | |
| 39 | |
| 40 def unregister_callback(self, callback): | |
| 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 | 43 except ValueError: |
| 44 pass | |
| 45 | |
| 46 def call_callbacks(self): | |
| 47 for callback in self.callbacks: | |
| 48 try: | |
| 49 callback() | |
| 50 except: | |
| 51 print "warning: callback failed in WindowList", \ | |
| 52 sys.exc_type, ":", sys.exc_value | |
| 53 | |
| 54 registry = WindowList() | |
| 55 | |
| 56 add_windows_to_menu = registry.add_windows_to_menu | |
| 57 register_callback = registry.register_callback | |
| 58 unregister_callback = registry.unregister_callback | |
| 59 | |
| 60 | |
| 61 class ListedToplevel(Toplevel): | |
| 62 | |
| 63 def __init__(self, master, **kw): | |
| 64 Toplevel.__init__(self, master, kw) | |
| 65 registry.add(self) | |
| 66 | |
| 67 def destroy(self): | |
| 68 registry.delete(self) | |
| 69 Toplevel.destroy(self) | |
| 25571 | 70 # If this is Idle's last window then quit the mainloop |
| 71 # (Needed for clean exit on Windows 98) | |
| 72 if not registry.dict: | |
| 73 self.quit() | |
| 13975 | 74 |
| 75 def get_title(self): | |
| 76 # Subclass can override | |
| 77 return self.wm_title() | |
| 78 | |
| 79 def wakeup(self): | |
| 80 try: | |
| 81 if self.wm_state() == "iconic": | |
| 82 self.wm_deiconify() | |
| 83 else: | |
| 84 self.tkraise() | |
| 85 self.focus_set() | |
| 86 except TclError: | |
| 87 # This can happen when the window menu was torn off. | |
| 88 # Simply ignore it. | |
| 89 pass |
