Fix an amazing number of typos & malformed sentences reported by Detlef
[python/dscho.git] / Tools / idle / FileList.py
blob079115768450730a488ec808b5ecbb1d7ad37d47
1 import os
2 from Tkinter import *
3 import tkMessageBox
5 import WindowList
7 #$ event <<open-new-window>>
8 #$ win <Control-n>
9 #$ unix <Control-x><Control-n>
11 # (This is labeled as 'Exit'in the File menu)
12 #$ event <<close-all-windows>>
13 #$ win <Control-q>
14 #$ unix <Control-x><Control-c>
16 class FileList:
18 from EditorWindow import EditorWindow
19 EditorWindow.Toplevel = WindowList.ListedToplevel # XXX Patch it!
21 def __init__(self, root):
22 self.root = root
23 self.dict = {}
24 self.inversedict = {}
25 self.vars = {} # For EditorWindow.getrawvar (shared Tcl variables)
28 def goodname(self, filename):
29 filename = self.canonize(filename)
30 key = os.path.normcase(filename)
31 if self.dict.has_key(key):
32 edit = self.dict[key]
33 filename = edit.io.filename or filename
34 return filename
36 def open(self, filename):
37 assert filename
38 filename = self.canonize(filename)
39 if os.path.isdir(filename):
40 tkMessageBox.showerror(
41 "Is A Directory",
42 "The path %s is a directory." % `filename`,
43 master=self.root)
44 return None
45 key = os.path.normcase(filename)
46 if self.dict.has_key(key):
47 edit = self.dict[key]
48 edit.wakeup()
49 return edit
50 if not os.path.exists(filename):
51 tkMessageBox.showinfo(
52 "New File",
53 "Opening non-existent file %s" % `filename`,
54 master=self.root)
55 return self.EditorWindow(self, filename, key)
57 def new(self):
58 return self.EditorWindow(self)
60 def new_callback(self, event):
61 self.new()
62 return "break"
64 def close_all_callback(self, event):
65 for edit in self.inversedict.keys():
66 reply = edit.close()
67 if reply == "cancel":
68 break
69 return "break"
71 def close_edit(self, edit):
72 try:
73 key = self.inversedict[edit]
74 except KeyError:
75 print "Don't know this EditorWindow object. (close)"
76 return
77 if key:
78 del self.dict[key]
79 del self.inversedict[edit]
80 if not self.inversedict:
81 self.root.quit()
83 def filename_changed_edit(self, edit):
84 edit.saved_change_hook()
85 try:
86 key = self.inversedict[edit]
87 except KeyError:
88 print "Don't know this EditorWindow object. (rename)"
89 return
90 filename = edit.io.filename
91 if not filename:
92 if key:
93 del self.dict[key]
94 self.inversedict[edit] = None
95 return
96 filename = self.canonize(filename)
97 newkey = os.path.normcase(filename)
98 if newkey == key:
99 return
100 if self.dict.has_key(newkey):
101 conflict = self.dict[newkey]
102 self.inversedict[conflict] = None
103 tkMessageBox.showerror(
104 "Name Conflict",
105 "You now have multiple edit windows open for %s" % `filename`,
106 master=self.root)
107 self.dict[newkey] = edit
108 self.inversedict[edit] = newkey
109 if key:
110 try:
111 del self.dict[key]
112 except KeyError:
113 pass
115 def canonize(self, filename):
116 if not os.path.isabs(filename):
117 try:
118 pwd = os.getcwd()
119 except os.error:
120 pass
121 else:
122 filename = os.path.join(pwd, filename)
123 return os.path.normpath(filename)
126 def test():
127 from EditorWindow import fixwordbreaks
128 import sys
129 root = Tk()
130 fixwordbreaks(root)
131 root.withdraw()
132 flist = FileList(root)
133 if sys.argv[1:]:
134 for filename in sys.argv[1:]:
135 flist.open(filename)
136 else:
137 flist.new()
138 if flist.inversedict:
139 root.mainloop()
141 if __name__ == '__main__':
142 test()