annotate Lib/idlelib/WindowList.py @ 58925:eecf1bef052d 2.6

Merged revisions 78207 via svnmerge from svn+ssh://pythondev@svn.python.org/python/trunk ........ r78207 | ezio.melotti | 2010-02-17 01:26:09 +0200 (Wed, 17 Feb 2010) | 1 line #7930: fix stripid ........
author Ezio Melotti <ezio.melotti@gmail.com>
date Tue, 16 Feb 2010 23:29:44 +0000
parents b53604fad54b
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
47183
b53604fad54b Tkinter rename reversal: remove tkinter package, adapt imports and docs.
Georg Brandl <georg@python.org>
parents: 47101
diff changeset
1 from Tkinter import *
13975
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 menu.add_command(label=title, command=window.wakeup)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
33
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
34 def register_callback(self, callback):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
35 self.callbacks.append(callback)
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 unregister_callback(self, callback):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
38 try:
18495
c4f75857502a py-cvs merge, correct indentation
Steven M. Gava <elguavas@python.net>
parents: 13975
diff changeset
39 self.callbacks.remove(callback)
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
40 except ValueError:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
41 pass
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
42
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
43 def call_callbacks(self):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
44 for callback in self.callbacks:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
45 try:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
46 callback()
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
47 except:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
48 print "warning: callback failed in WindowList", \
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
49 sys.exc_type, ":", sys.exc_value
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
50
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
51 registry = WindowList()
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
52
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
53 add_windows_to_menu = registry.add_windows_to_menu
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
54 register_callback = registry.register_callback
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
55 unregister_callback = registry.unregister_callback
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
56
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
57
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
58 class ListedToplevel(Toplevel):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
59
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
60 def __init__(self, master, **kw):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
61 Toplevel.__init__(self, master, kw)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
62 registry.add(self)
33218
066c7890cd61 1. If user passes a non-existant filename on the commandline, just open
Kurt B. Kaiser <kbk@shore.net>
parents: 29367
diff changeset
63 self.focused_widget = self
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
64
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
65 def destroy(self):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
66 registry.delete(self)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
67 Toplevel.destroy(self)
25571
c85d7cdd983f Josh Robb's Patch
Kurt B. Kaiser <kbk@shore.net>
parents: 18495
diff changeset
68 # 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
69 # (Needed for clean exit on Windows 98)
c85d7cdd983f Josh Robb's Patch
Kurt B. Kaiser <kbk@shore.net>
parents: 18495
diff changeset
70 if not registry.dict:
c85d7cdd983f Josh Robb's Patch
Kurt B. Kaiser <kbk@shore.net>
parents: 18495
diff changeset
71 self.quit()
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
72
29367
ca20c3cbc956 1. Update WindowList registry when filename changes so that
Kurt B. Kaiser <kbk@shore.net>
parents: 25571
diff changeset
73 def update_windowlist_registry(self, window):
ca20c3cbc956 1. Update WindowList registry when filename changes so that
Kurt B. Kaiser <kbk@shore.net>
parents: 25571
diff changeset
74 registry.call_callbacks()
ca20c3cbc956 1. Update WindowList registry when filename changes so that
Kurt B. Kaiser <kbk@shore.net>
parents: 25571
diff changeset
75
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
76 def get_title(self):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
77 # Subclass can override
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
78 return self.wm_title()
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
79
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
80 def wakeup(self):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
81 try:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
82 if self.wm_state() == "iconic":
33218
066c7890cd61 1. If user passes a non-existant filename on the commandline, just open
Kurt B. Kaiser <kbk@shore.net>
parents: 29367
diff changeset
83 self.wm_withdraw()
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
84 self.wm_deiconify()
33218
066c7890cd61 1. If user passes a non-existant filename on the commandline, just open
Kurt B. Kaiser <kbk@shore.net>
parents: 29367
diff changeset
85 self.tkraise()
066c7890cd61 1. If user passes a non-existant filename on the commandline, just open
Kurt B. Kaiser <kbk@shore.net>
parents: 29367
diff changeset
86 self.focused_widget.focus_set()
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
87 except TclError:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
88 # This can happen when the window menu was torn off.
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
89 # Simply ignore it.
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
90 pass