diff --git a/sloth/annotations/model.py b/sloth/annotations/model.py index e8f8488..29f6f2b 100644 --- a/sloth/annotations/model.py +++ b/sloth/annotations/model.py @@ -387,6 +387,9 @@ class AnnotationModel(QAbstractItemModel): self._root.appendFileItems(annotations) diff = time.time() - start LOG.info("Created AnnotationModel in %.2fs" % (diff, )) + self.dataChanged.connect(self.onDataChanged) + self.rowsInserted.connect(self.onDataChanged) + self.rowsRemoved.connect(self.onDataChanged) # QAbstractItemModel overloads def columnCount(self, index=QModelIndex()): @@ -460,12 +463,15 @@ class AnnotationModel(QAbstractItemModel): def dirty(self): return self._dirty - # TODO: This might need to be updated from within the ModelItems when they change def setDirty(self, dirty=True): if dirty != self._dirty: + LOG.debug("Setting model state to dirty") self._dirty = dirty self.dirtyChanged.emit(self._dirty) + def onDataChanged(self, *args): + self.setDirty() + def itemFromIndex(self, index): index = QModelIndex(index) # explicitly convert from QPersistentModelIndex if index.isValid(): diff --git a/sloth/gui/labeltool.py b/sloth/gui/labeltool.py index 2f5ada4..87a7360 100755 --- a/sloth/gui/labeltool.py +++ b/sloth/gui/labeltool.py @@ -25,11 +25,8 @@ class MainWindow(QMainWindow): QMainWindow.__init__(self, parent) self.labeltool = labeltool - self.setupGui() - self.loadApplicationSettings() - self.onAnnotationsLoaded() # Slots @@ -39,12 +36,17 @@ class MainWindow(QMainWindow): def onStatusMessage(self, message=''): self.statusBar().showMessage(message, 5000) - def onAnnotationsLoaded(self): + def onModelDirtyChanged(self, dirty): + postfix = "[+]" if dirty else "" if self.labeltool.getCurrentFilename() is not None: - self.setWindowTitle("%s - %s[*]" % \ - (APP_NAME, QFileInfo(self.labeltool.getCurrentFilename()).fileName())) + self.setWindowTitle("%s - %s %s" % \ + (APP_NAME, QFileInfo(self.labeltool.getCurrentFilename()).fileName(), postfix)) else: - self.setWindowTitle("%s - Unnamed[*]" % APP_NAME) + self.setWindowTitle("%s - Unnamed %s" % (APP_NAME, postfix)) + + def onAnnotationsLoaded(self): + self.labeltool.model().dirtyChanged.connect(self.onModelDirtyChanged) + self.onModelDirtyChanged(self.labeltool.model().dirty()) self.treeview.setModel(self.labeltool.model()) self.scene.setModel(self.labeltool.model()) self.selectionmodel = QItemSelectionModel(self.labeltool.model())