eric6/UI/BrowserModel.py

changeset 7677
d4d33990b355
parent 7635
0cdead130a81
child 7678
285c786c4a9c
--- a/eric6/UI/BrowserModel.py	Tue Aug 25 14:53:43 2020 +0200
+++ b/eric6/UI/BrowserModel.py	Tue Aug 25 16:26:11 2020 +0200
@@ -57,8 +57,10 @@
         
         if not nopopulate:
             self.watchedItems = {}
+            self.watchedFileItems = {}
             self.watcher = QFileSystemWatcher(self)
             self.watcher.directoryChanged.connect(self.directoryChanged)
+            self.watcher.fileChanged.connect(self.fileChanged)
             
             rootData = QCoreApplication.translate("BrowserModel", "Name")
             self.rootItem = BrowserItem(None, rootData)
@@ -691,6 +693,44 @@
             if repopulate:
                 self.endInsertRows()
         parentItem._populated = True
+        if fileName not in self.watchedFileItems:
+            self.watcher.addPath(fileName)
+            self.watchedFileItems[fileName] = parentItem
+
+    def repopulateFileItem(self, itm):
+        """
+        Public method to repopulate a file item.
+        
+        @param itm reference to the item to be repopulated
+        @type BrowserFileItem
+        """
+        if isinstance(itm, BrowserFileItem) and itm.isLazyPopulated():
+            if not itm.isPopulated():
+                # item is not populated yet, nothing to do
+                return
+            
+            if itm.childCount():
+                index = self.createIndex(itm.row(), 0, itm)
+                self.beginRemoveRows(index, 0, itm.childCount() - 1)
+                itm.removeChildren()
+                self.endRemoveRows()
+            
+            self.populateFileItem(itm, True)
+
+    def fileChanged(self, fileName):
+        """
+        Public method to react upon file changes.
+        
+        @param fileName path of the changed file
+        @type str
+        """
+        if fileName in self.watchedFileItems:
+            if os.path.exists(fileName):
+                # the file was changed
+                self.repopulateFileItem(self.watchedFileItems[fileName])
+            else:
+                # the file does not exist anymore
+                del self.watchedFileItems[fileName]
 
     def populateClassItem(self, parentItem, repopulate=False):
         """

eric ide

mercurial