--- 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): """