| 
									
										
										
										
											2000-08-15 01:13:23 +00:00
										 |  |  | import os | 
					
						
							| 
									
										
										
										
											2008-05-20 07:13:37 +00:00
										 |  |  | from Tkinter import * | 
					
						
							|  |  |  | import tkMessageBox | 
					
						
							| 
									
										
										
										
											2000-08-15 01:13:23 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class FileList: | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-08-22 05:14:32 +00:00
										 |  |  |     from EditorWindow import EditorWindow  # class variable, may be overridden | 
					
						
							|  |  |  |                                            # e.g. by PyShellFileList | 
					
						
							| 
									
										
										
										
											2000-08-15 01:13:23 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def __init__(self, root): | 
					
						
							|  |  |  |         self.root = root | 
					
						
							|  |  |  |         self.dict = {} | 
					
						
							|  |  |  |         self.inversedict = {} | 
					
						
							|  |  |  |         self.vars = {} # For EditorWindow.getrawvar (shared Tcl variables) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def open(self, filename, action=None): | 
					
						
							|  |  |  |         assert filename | 
					
						
							|  |  |  |         filename = self.canonize(filename) | 
					
						
							|  |  |  |         if os.path.isdir(filename): | 
					
						
							| 
									
										
										
										
											2004-08-22 05:14:32 +00:00
										 |  |  |             # This can happen when bad filename is passed on command line: | 
					
						
							| 
									
										
										
										
											2000-08-15 01:13:23 +00:00
										 |  |  |             tkMessageBox.showerror( | 
					
						
							| 
									
										
										
										
											2004-08-22 05:14:32 +00:00
										 |  |  |                 "File Error", | 
					
						
							|  |  |  |                 "%r is a directory." % (filename,), | 
					
						
							| 
									
										
										
										
											2000-08-15 01:13:23 +00:00
										 |  |  |                 master=self.root) | 
					
						
							|  |  |  |             return None | 
					
						
							|  |  |  |         key = os.path.normcase(filename) | 
					
						
							|  |  |  |         if self.dict.has_key(key): | 
					
						
							|  |  |  |             edit = self.dict[key] | 
					
						
							| 
									
										
										
										
											2004-08-22 05:14:32 +00:00
										 |  |  |             edit.top.wakeup() | 
					
						
							| 
									
										
										
										
											2000-08-15 01:13:23 +00:00
										 |  |  |             return edit | 
					
						
							| 
									
										
										
										
											2004-08-22 05:14:32 +00:00
										 |  |  |         if action: | 
					
						
							|  |  |  |             # Don't create window, perform 'action', e.g. open in same window | 
					
						
							| 
									
										
										
										
											2000-08-15 01:13:23 +00:00
										 |  |  |             return action(filename) | 
					
						
							| 
									
										
										
										
											2004-08-22 05:14:32 +00:00
										 |  |  |         else: | 
					
						
							|  |  |  |             return self.EditorWindow(self, filename, key) | 
					
						
							| 
									
										
										
										
											2000-08-15 01:13:23 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2001-07-14 04:45:32 +00:00
										 |  |  |     def gotofileline(self, filename, lineno=None): | 
					
						
							|  |  |  |         edit = self.open(filename) | 
					
						
							|  |  |  |         if edit is not None and lineno is not None: | 
					
						
							|  |  |  |             edit.gotoline(lineno) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2003-06-05 02:34:04 +00:00
										 |  |  |     def new(self, filename=None): | 
					
						
							|  |  |  |         return self.EditorWindow(self, filename) | 
					
						
							| 
									
										
										
										
											2000-08-15 01:13:23 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def close_all_callback(self, event): | 
					
						
							|  |  |  |         for edit in self.inversedict.keys(): | 
					
						
							|  |  |  |             reply = edit.close() | 
					
						
							|  |  |  |             if reply == "cancel": | 
					
						
							|  |  |  |                 break | 
					
						
							|  |  |  |         return "break" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-10-04 02:09:17 +00:00
										 |  |  |     def unregister_maybe_terminate(self, edit): | 
					
						
							| 
									
										
										
										
											2000-08-15 01:13:23 +00:00
										 |  |  |         try: | 
					
						
							|  |  |  |             key = self.inversedict[edit] | 
					
						
							|  |  |  |         except KeyError: | 
					
						
							|  |  |  |             print "Don't know this EditorWindow object.  (close)" | 
					
						
							|  |  |  |             return | 
					
						
							|  |  |  |         if key: | 
					
						
							|  |  |  |             del self.dict[key] | 
					
						
							|  |  |  |         del self.inversedict[edit] | 
					
						
							|  |  |  |         if not self.inversedict: | 
					
						
							|  |  |  |             self.root.quit() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def filename_changed_edit(self, edit): | 
					
						
							|  |  |  |         edit.saved_change_hook() | 
					
						
							|  |  |  |         try: | 
					
						
							|  |  |  |             key = self.inversedict[edit] | 
					
						
							|  |  |  |         except KeyError: | 
					
						
							|  |  |  |             print "Don't know this EditorWindow object.  (rename)" | 
					
						
							|  |  |  |             return | 
					
						
							|  |  |  |         filename = edit.io.filename | 
					
						
							|  |  |  |         if not filename: | 
					
						
							|  |  |  |             if key: | 
					
						
							|  |  |  |                 del self.dict[key] | 
					
						
							|  |  |  |             self.inversedict[edit] = None | 
					
						
							|  |  |  |             return | 
					
						
							|  |  |  |         filename = self.canonize(filename) | 
					
						
							|  |  |  |         newkey = os.path.normcase(filename) | 
					
						
							|  |  |  |         if newkey == key: | 
					
						
							|  |  |  |             return | 
					
						
							|  |  |  |         if self.dict.has_key(newkey): | 
					
						
							|  |  |  |             conflict = self.dict[newkey] | 
					
						
							|  |  |  |             self.inversedict[conflict] = None | 
					
						
							|  |  |  |             tkMessageBox.showerror( | 
					
						
							|  |  |  |                 "Name Conflict", | 
					
						
							| 
									
										
										
										
											2004-02-12 17:35:32 +00:00
										 |  |  |                 "You now have multiple edit windows open for %r" % (filename,), | 
					
						
							| 
									
										
										
										
											2000-08-15 01:13:23 +00:00
										 |  |  |                 master=self.root) | 
					
						
							|  |  |  |         self.dict[newkey] = edit | 
					
						
							|  |  |  |         self.inversedict[edit] = newkey | 
					
						
							|  |  |  |         if key: | 
					
						
							|  |  |  |             try: | 
					
						
							|  |  |  |                 del self.dict[key] | 
					
						
							|  |  |  |             except KeyError: | 
					
						
							|  |  |  |                 pass | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def canonize(self, filename): | 
					
						
							|  |  |  |         if not os.path.isabs(filename): | 
					
						
							|  |  |  |             try: | 
					
						
							|  |  |  |                 pwd = os.getcwd() | 
					
						
							|  |  |  |             except os.error: | 
					
						
							|  |  |  |                 pass | 
					
						
							|  |  |  |             else: | 
					
						
							|  |  |  |                 filename = os.path.join(pwd, filename) | 
					
						
							|  |  |  |         return os.path.normpath(filename) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2001-07-14 04:45:32 +00:00
										 |  |  | def _test(): | 
					
						
							| 
									
										
										
										
											2000-08-15 01:13:23 +00:00
										 |  |  |     from EditorWindow import fixwordbreaks | 
					
						
							|  |  |  |     import sys | 
					
						
							|  |  |  |     root = Tk() | 
					
						
							|  |  |  |     fixwordbreaks(root) | 
					
						
							|  |  |  |     root.withdraw() | 
					
						
							|  |  |  |     flist = FileList(root) | 
					
						
							|  |  |  |     if sys.argv[1:]: | 
					
						
							|  |  |  |         for filename in sys.argv[1:]: | 
					
						
							|  |  |  |             flist.open(filename) | 
					
						
							|  |  |  |     else: | 
					
						
							|  |  |  |         flist.new() | 
					
						
							|  |  |  |     if flist.inversedict: | 
					
						
							|  |  |  |         root.mainloop() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | if __name__ == '__main__': | 
					
						
							| 
									
										
										
										
											2001-07-14 04:45:32 +00:00
										 |  |  |     _test() |