home *** CD-ROM | disk | FTP | other *** search
/ PC World 2001 April / PCWorld_2001-04_cd.bin / Software / TemaCD / webclean / !!!python!!! / BeOpen-Python-2.0.exe / FILELIST.PY < prev    next >
Encoding:
Python Source  |  2000-09-28  |  4.0 KB  |  143 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.  
  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
  35.  
  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)
  56.  
  57.     def new(self):
  58.         return self.EditorWindow(self)
  59.  
  60.     def new_callback(self, event):
  61.         self.new()
  62.         return "break"
  63.  
  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"
  70.  
  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()
  82.  
  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
  114.  
  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)
  124.  
  125.  
  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()
  140.  
  141. if __name__ == '__main__':
  142.     test()
  143.