From 6275583dee6eb7855d4a8316e8407c02742aa7c8 Mon Sep 17 00:00:00 2001 From: Ian Hunt-Isaak Date: Tue, 11 Jan 2022 13:10:50 -0500 Subject: [PATCH 1/2] add save progress button mark as complete button didn't actually do anything so remove --- src/napari_labeller/_dock_widget.py | 9 +++++++-- src/napari_labeller/_ui/labeller_gui.ui | 4 ++-- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/src/napari_labeller/_dock_widget.py b/src/napari_labeller/_dock_widget.py index 471336f..b869bb0 100644 --- a/src/napari_labeller/_dock_widget.py +++ b/src/napari_labeller/_dock_widget.py @@ -29,7 +29,7 @@ class LabellerWidget(QWidget): _folder_line_edit: QtW.QLineEdit _next_batch_btn: QtW.QPushButton _prev_batch_btn: QtW.QPushButton - _mark_complete_btn: QtW.QPushButton + _save_progress_btn: QtW.QPushButton def __init__(self, napari_viewer: "napari.viewer.Viewer"): super().__init__() @@ -46,6 +46,8 @@ def __init__(self, napari_viewer: "napari.viewer.Viewer"): self._next_batch_btn.clicked.connect(self._on_next) self._prev_batch_btn.clicked.connect(self._on_prev) + self._save_progress_btn.clicked.connect(self._save_progress) + @property def data_folder(self) -> Union[Path, None]: return self._data_folder @@ -66,12 +68,15 @@ def _browse_folders(self): QtW.QFileDialog.getExistingDirectory(self, "Select Data Folder") ) + def _save_progress(self): + self._working_ds.to_netcdf(self._file_list[self._file_idx]) + def _on_next(self): if self._file_idx == -1: self._initialize_viewer() else: - self._working_ds.to_netcdf(self._file_list[self._file_idx]) + self._save_progress() self._file_idx = ( self._file_idx + 1 if self._file_idx + 1 < self._num_files diff --git a/src/napari_labeller/_ui/labeller_gui.ui b/src/napari_labeller/_ui/labeller_gui.ui index 73d8a57..4dcd02b 100644 --- a/src/napari_labeller/_ui/labeller_gui.ui +++ b/src/napari_labeller/_ui/labeller_gui.ui @@ -154,7 +154,7 @@ - + true @@ -177,7 +177,7 @@ - Mark as Complete + Save Progress From 5c35b967058276d96322daf6b4354afacf4df46f Mon Sep 17 00:00:00 2001 From: Ian Hunt-Isaak Date: Tue, 11 Jan 2022 13:50:17 -0500 Subject: [PATCH 2/2] allow for recovering data if plugin is closed accidently but the layers are still there. --- setup.cfg | 1 + src/napari_labeller/_dock_widget.py | 33 ++++++++++++++++++++++++++--- 2 files changed, 31 insertions(+), 3 deletions(-) diff --git a/setup.cfg b/setup.cfg index bc62cad..ebaab15 100644 --- a/setup.cfg +++ b/setup.cfg @@ -49,3 +49,4 @@ napari.plugin = exclude = docs, _version.py, .eggs, example max-line-length = 88 docstring-convention = "numpy" +ignore = E741 diff --git a/src/napari_labeller/_dock_widget.py b/src/napari_labeller/_dock_widget.py index b869bb0..741a68f 100644 --- a/src/napari_labeller/_dock_widget.py +++ b/src/napari_labeller/_dock_widget.py @@ -48,6 +48,11 @@ def __init__(self, napari_viewer: "napari.viewer.Viewer"): self._save_progress_btn.clicked.connect(self._save_progress) + # recover if our plugin was closed but our layers are still hanging around + for l in self.viewer.layers: + if hasattr(l, "_labeller_images"): + self._recover_information() + @property def data_folder(self) -> Union[Path, None]: return self._data_folder @@ -55,13 +60,16 @@ def data_folder(self) -> Union[Path, None]: @data_folder.setter def data_folder(self, value: Union[str, Path]): self._data_folder = Path(value) + self._set_up_folder_variables() + self._on_next() + + def _set_up_folder_variables(self): self._folder_line_edit.setText(str(self._data_folder)) - self._next_batch_btn.setEnabled(True) self._file_list = list_datasets(self._data_folder) self._num_files = len(self._file_list) - self._file_idx = -1 - self._on_next() + self._next_batch_btn.setEnabled(True) self._prev_batch_btn.setEnabled(True) + self._file_idx = -1 def _browse_folders(self): self.data_folder = Path( @@ -100,6 +108,20 @@ def _get_next_image_batch(self): self._img.data = images self._labels.data = self._working_ds.labels + def _recover_information(self): + # for i in range(len(self.viewer.layers)): + for layer in self.viewer.layers: + if hasattr(layer, "_labeller_images"): + self._img = layer + elif hasattr(layer, "_labeller_labels"): + self._labels = layer + self._file_list = list + self._data_folder = self._labels._data_folder + self._set_up_folder_variables() + self._file_idx = self._labels._file_idx + self._working_ds = get_dataset(self._data_folder, self._file_idx) + self._working_ds.labels.data = self._labels.data + def _initialize_viewer(self): self._file_idx = 0 self._working_ds = get_dataset(self._data_folder, self._file_idx) @@ -109,7 +131,12 @@ def _initialize_viewer(self): images = self._working_ds.images self._img = self.viewer.add_image(images) + self._img._labeller_images = True self._labels = self.viewer.add_labels(self._working_ds.labels.data) + self._labels._labeller_labels = True + self._labels._data_folder = self._data_folder + self._labels._file_idx = self._file_idx + scroll_time(self.viewer) apply_label_keybinds(self._labels)