Mercurial > cpython-lru_cache-weakref
annotate Lib/idlelib/FileList.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 | 61e50d0aa59a |
| children | f82b6d2b73f1 |
| rev | line source |
|---|---|
| 13975 | 1 # changes by dscherer@cmu.edu |
| 2 # - FileList.open() takes an optional 3rd parameter action, which is | |
| 3 # called instead of creating a new EditorWindow. This enables | |
| 4 # things like 'open in same window'. | |
| 5 | |
| 6 import os | |
| 7 from Tkinter import * | |
| 8 import tkMessageBox | |
| 9 | |
| 10 import WindowList | |
| 11 | |
| 12 #$ event <<open-new-window>> | |
| 13 #$ win <Control-n> | |
| 14 #$ unix <Control-x><Control-n> | |
| 15 | |
| 16 # (This is labeled as 'Exit'in the File menu) | |
| 17 #$ event <<close-all-windows>> | |
| 18 #$ win <Control-q> | |
| 19 #$ unix <Control-x><Control-c> | |
| 20 | |
| 21 class FileList: | |
| 22 | |
| 23 from EditorWindow import EditorWindow | |
| 24 EditorWindow.Toplevel = WindowList.ListedToplevel # XXX Patch it! | |
| 25 | |
| 26 def __init__(self, root): | |
| 27 self.root = root | |
| 28 self.dict = {} | |
| 29 self.inversedict = {} | |
| 30 self.vars = {} # For EditorWindow.getrawvar (shared Tcl variables) | |
| 31 | |
| 32 def open(self, filename, action=None): | |
| 33 assert filename | |
| 34 filename = self.canonize(filename) | |
| 35 if os.path.isdir(filename): | |
| 36 tkMessageBox.showerror( | |
| 37 "Is A Directory", | |
| 38 "The path %s is a directory." % `filename`, | |
| 39 master=self.root) | |
| 40 return None | |
| 41 key = os.path.normcase(filename) | |
| 42 if self.dict.has_key(key): | |
| 43 edit = self.dict[key] | |
| 44 edit.wakeup() | |
| 45 return edit | |
| 46 if not os.path.exists(filename): | |
| 47 tkMessageBox.showinfo( | |
| 48 "New File", | |
| 49 "Opening non-existent file %s" % `filename`, | |
| 50 master=self.root) | |
| 51 if action is None: | |
| 52 return self.EditorWindow(self, filename, key) | |
| 53 else: | |
| 54 return action(filename) | |
| 55 | |
|
18583
61e50d0aa59a
py-cvs-2000_07_13 (Rev 1.9) merge
Kurt B. Kaiser <kbk@shore.net>
parents:
18538
diff
changeset
|
56 def gotofileline(self, filename, lineno=None): |
|
61e50d0aa59a
py-cvs-2000_07_13 (Rev 1.9) merge
Kurt B. Kaiser <kbk@shore.net>
parents:
18538
diff
changeset
|
57 edit = self.open(filename) |
|
61e50d0aa59a
py-cvs-2000_07_13 (Rev 1.9) merge
Kurt B. Kaiser <kbk@shore.net>
parents:
18538
diff
changeset
|
58 if edit is not None and lineno is not None: |
|
61e50d0aa59a
py-cvs-2000_07_13 (Rev 1.9) merge
Kurt B. Kaiser <kbk@shore.net>
parents:
18538
diff
changeset
|
59 edit.gotoline(lineno) |
|
61e50d0aa59a
py-cvs-2000_07_13 (Rev 1.9) merge
Kurt B. Kaiser <kbk@shore.net>
parents:
18538
diff
changeset
|
60 |
| 13975 | 61 def new(self): |
| 62 return self.EditorWindow(self) | |
| 63 | |
| 64 def new_callback(self, event): | |
| 65 self.new() | |
| 66 return "break" | |
| 67 | |
| 68 def close_all_callback(self, event): | |
| 69 for edit in self.inversedict.keys(): | |
| 70 reply = edit.close() | |
| 71 if reply == "cancel": | |
| 72 break | |
| 73 return "break" | |
| 74 | |
| 75 def close_edit(self, edit): | |
| 76 try: | |
| 77 key = self.inversedict[edit] | |
| 78 except KeyError: | |
| 79 print "Don't know this EditorWindow object. (close)" | |
| 80 return | |
| 81 if key: | |
| 82 del self.dict[key] | |
| 83 del self.inversedict[edit] | |
| 84 if not self.inversedict: | |
| 85 self.root.quit() | |
| 86 | |
| 87 def filename_changed_edit(self, edit): | |
| 88 edit.saved_change_hook() | |
| 89 try: | |
| 90 key = self.inversedict[edit] | |
| 91 except KeyError: | |
| 92 print "Don't know this EditorWindow object. (rename)" | |
| 93 return | |
| 94 filename = edit.io.filename | |
| 95 if not filename: | |
| 96 if key: | |
| 97 del self.dict[key] | |
| 98 self.inversedict[edit] = None | |
| 99 return | |
| 100 filename = self.canonize(filename) | |
| 101 newkey = os.path.normcase(filename) | |
| 102 if newkey == key: | |
| 103 return | |
| 104 if self.dict.has_key(newkey): | |
| 105 conflict = self.dict[newkey] | |
| 106 self.inversedict[conflict] = None | |
| 107 tkMessageBox.showerror( | |
| 108 "Name Conflict", | |
| 109 "You now have multiple edit windows open for %s" % `filename`, | |
| 110 master=self.root) | |
| 111 self.dict[newkey] = edit | |
| 112 self.inversedict[edit] = newkey | |
| 113 if key: | |
| 114 try: | |
| 115 del self.dict[key] | |
| 116 except KeyError: | |
| 117 pass | |
| 118 | |
| 119 def canonize(self, filename): | |
| 120 if not os.path.isabs(filename): | |
| 121 try: | |
| 122 pwd = os.getcwd() | |
| 123 except os.error: | |
| 124 pass | |
| 125 else: | |
| 126 filename = os.path.join(pwd, filename) | |
| 127 return os.path.normpath(filename) | |
| 128 | |
| 129 | |
|
18583
61e50d0aa59a
py-cvs-2000_07_13 (Rev 1.9) merge
Kurt B. Kaiser <kbk@shore.net>
parents:
18538
diff
changeset
|
130 def _test(): |
| 13975 | 131 from EditorWindow import fixwordbreaks |
| 132 import sys | |
| 133 root = Tk() | |
| 134 fixwordbreaks(root) | |
| 135 root.withdraw() | |
| 136 flist = FileList(root) | |
| 137 if sys.argv[1:]: | |
| 138 for filename in sys.argv[1:]: | |
| 139 flist.open(filename) | |
| 140 else: | |
| 141 flist.new() | |
| 142 if flist.inversedict: | |
| 143 root.mainloop() | |
| 144 | |
| 145 if __name__ == '__main__': | |
|
18583
61e50d0aa59a
py-cvs-2000_07_13 (Rev 1.9) merge
Kurt B. Kaiser <kbk@shore.net>
parents:
18538
diff
changeset
|
146 _test() |
