[Idle-dev] CVS: idle EditorWindow.py,1.21,1.22 IOBinding.py,1.3,1.4 configDialog.py,1.45,1.46

Stephen M. Gava elguavas@users.sourceforge.net
Wed, 27 Mar 2002 00:40:48 -0800


Update of /cvsroot/idlefork/idle
In directory usw-pr-cvs1:/tmp/cvs-serv11862

Modified Files:
	EditorWindow.py IOBinding.py configDialog.py 
Log Message:
further work on new config system;
recent files menu


Index: EditorWindow.py
===================================================================
RCS file: /cvsroot/idlefork/idle/EditorWindow.py,v
retrieving revision 1.21
retrieving revision 1.22
diff -C2 -r1.21 -r1.22
*** EditorWindow.py	27 Mar 2002 02:24:54 -0000	1.21
--- EditorWindow.py	27 Mar 2002 08:40:46 -0000	1.22
***************
*** 106,109 ****
--- 106,111 ----
              #configDialog.py so it can access all EditorWindow instaces
              self.top.instanceDict=flist.inversedict
+         self.recentFilesPath=os.path.join(idleConf.GetUserCfgDir(),
+                 'recent-files.lst')
          self.vbar = vbar = Scrollbar(top, name='vbar')
          self.text_frame = text_frame = Frame(top)
***************
*** 179,182 ****
--- 181,189 ----
          self.undo = undo = self.UndoDelegator(); per.insertfilter(undo)
          self.io = io = self.IOBinding(self)
+         #create the Recent Files submenu
+         self.menuRecentFiles=Menu(self.menubar)
+         self.menudict['file'].insert_cascade(3,label='Recent Files',
+                 underline=0,menu=self.menuRecentFiles)
+         self.UpdateRecentFilesList()
  
          text.undo_block_start = undo.undo_block_start
***************
*** 254,257 ****
--- 261,265 ----
              mbar.add_cascade(label=label, menu=menu, underline=underline)
          self.fill_menus()
+         #create the ExtraHelp menu, if required
          self.ResetExtraHelpMenu()
  
***************
*** 543,552 ****
              for menuItem in menuList:
                  self.menuExtraHelp.add_command(label=menuItem[0],
!                         command=lambda:self.display_docs(menuItem[1]))
          else: #no extra help items
              if hasattr(self,'menuExtraHelp'): 
                  helpMenu.delete(cascadeIndex-1)                    
                  del(self.menuExtraHelp)
                      
      def saved_change_hook(self):
          short = self.short_title()
--- 551,617 ----
              for menuItem in menuList:
                  self.menuExtraHelp.add_command(label=menuItem[0],
!                         command=self.__DisplayExtraHelpCallback(menuItem[1]))
          else: #no extra help items
              if hasattr(self,'menuExtraHelp'): 
                  helpMenu.delete(cascadeIndex-1)                    
                  del(self.menuExtraHelp)
+     
+     def __DisplayExtraHelpCallback(self,helpFile):
+         def DisplayExtraHelp(helpFile=helpFile):
+             self.display_docs(helpFile)
+         return DisplayExtraHelp
                      
+     def UpdateRecentFilesList(self,newFile=None):
+         #load or update the recent files list, and menu if required
+         rfList=[]
+         if os.path.exists(self.recentFilesPath):
+             RFfile=open(self.recentFilesPath,'r')
+             try:
+                 rfList=RFfile.readlines()
+             finally:
+                 RFfile.close()
+         if newFile: 
+             newFile=os.path.abspath(newFile)+'\n'
+             if newFile in rfList:
+                 rfList.remove(newFile)
+             rfList.insert(0,newFile)
+         rfList=self.__CleanRecentFiles(rfList)
+         print self.top.instanceDict
+         print self
+         if rfList:
+             for instance in self.top.instanceDict.keys():
+                 instance.menuRecentFiles.delete(1,END)
+                 for file in rfList:
+                     fileName=file[0:-1]
+                     instance.menuRecentFiles.add_command(label=fileName,
+                             command=instance.__RecentFileCallback(fileName))
+                     
+     def __CleanRecentFiles(self,rfList):
+         origRfList=rfList[:]
+         count=0
+         nonFiles=[]
+         for path in rfList:
+             if not os.path.exists(path[0:-1]): 
+                 nonFiles.append(count)
+             count=count+1
+         if nonFiles:
+             nonFiles.reverse()
+             for index in nonFiles:
+                 del(rfList[index])
+         if len(rfList)>19:
+             rfList=rfList[0:19]
+         #if rfList != origRfList:
+         RFfile=open(self.recentFilesPath,'w')
+         try:
+             RFfile.writelines(rfList)
+         finally:
+             RFfile.close()
+         return rfList
+     
+     def __RecentFileCallback(self,fileName):
+         def OpenRecentFile(fileName=fileName):
+             self.io.open(editFile=fileName)
+         return OpenRecentFile
+     
      def saved_change_hook(self):
          short = self.short_title()
***************
*** 629,632 ****
--- 694,701 ----
  
      def _close(self):
+         print self.io.filename
+         if self.io.filename:
+             self.UpdateRecentFilesList(newFile=self.io.filename)
+             
          WindowList.unregister_callback(self.postwindowsmenu)
          if self.close_hook:

Index: IOBinding.py
===================================================================
RCS file: /cvsroot/idlefork/idle/IOBinding.py,v
retrieving revision 1.3
retrieving revision 1.4
diff -C2 -r1.3 -r1.4
*** IOBinding.py	13 Jul 2001 04:18:32 -0000	1.3
--- IOBinding.py	27 Mar 2002 08:40:46 -0000	1.4
***************
*** 73,79 ****
              self.filename_change_hook()
  
!     def open(self, event):
          if self.editwin.flist:
!             filename = self.askopenfile()
              if filename:
                  # if the current window has no filename and hasn't been
--- 73,82 ----
              self.filename_change_hook()
  
!     def open(self, event=None, editFile=None):
          if self.editwin.flist:
!             if not editFile:
!                 filename = self.askopenfile()
!             else:
!                 filename=editFile
              if filename:
                  # if the current window has no filename and hasn't been
***************
*** 94,98 ****
                  self.text.focus_set()
                  return "break"
!         filename = self.askopenfile()
          if filename:
              self.loadfile(filename)
--- 97,104 ----
                  self.text.focus_set()
                  return "break"
!         if not editFile:
!             filename = self.askopenfile()
!         else:
!             filename=editFile
          if filename:
              self.loadfile(filename)

Index: configDialog.py
===================================================================
RCS file: /cvsroot/idlefork/idle/configDialog.py,v
retrieving revision 1.45
retrieving revision 1.46
diff -C2 -r1.45 -r1.46
*** configDialog.py	27 Mar 2002 02:25:44 -0000	1.45
--- configDialog.py	27 Mar 2002 08:40:46 -0000	1.46
***************
*** 1073,1082 ****
          save all configuration changes to user config files.
          """
-         #if self.changedItems['main'].has_key('HelpFiles'):
          #this section gets completely replaced
-         print idleConf.GetAllExtraHelpSourcesList()
          idleConf.userCfg['main'].remove_section('HelpFiles')
          idleConf.userCfg['main'].Save()
-         print idleConf.GetAllExtraHelpSourcesList()
          for configType in self.changedItems.keys():
              cfgTypeHasChanges=0
--- 1073,1079 ----
***************
*** 1087,1091 ****
                          cfgTypeHasChanges=1
              if cfgTypeHasChanges: 
-                 print configType,'- changed'
                  idleConf.userCfg[configType].Save()                
          self.ResetChangedItems() #clear the changed items dict
--- 1084,1087 ----