home *** CD-ROM | disk | FTP | other *** search
/ Freelog 33 / Freelog033.iso / Progr / Python-2.2.1.exe / FILELIST.PY < prev    next >
Encoding:
Python Source  |  2001-05-12  |  3.9 KB  |  139 lines

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