Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix annotation #261

Merged
merged 12 commits into from
Jun 27, 2024
19 changes: 16 additions & 3 deletions src/napari_spatialdata/_view.py
Original file line number Diff line number Diff line change
Expand Up @@ -718,14 +718,18 @@ def _set_current_annotator(self) -> None:
"""Update current annotator when the text of the annotator dropdown has changed."""
self._current_annotator = self.annotation_widget.annotators.currentText()

def _update_table_name_widget(self, sdata: SpatialData, element_name: str) -> None:
def _update_table_name_widget(self, sdata: SpatialData, element_name: str, table_name: str = "") -> None:
table_names = list(get_element_annotators(sdata, element_name))

table_names_to_add = []
for name in table_names:
if any("color" in key for key in sdata[name].uns):
table_names_to_add.append(name)
self.annotation_widget.table_name_widget.addItems(table_names_to_add)
with block_signals(self.annotation_widget.table_name_widget):
self.annotation_widget.table_name_widget.clear()
self.annotation_widget.table_name_widget.addItems(table_names_to_add)
if table_name != "":
self.annotation_widget.table_name_widget.setCurrentText(table_name)

def _import_table_information(self) -> None:
table_name = self.annotation_widget.table_name_widget.currentText()
Expand Down Expand Up @@ -776,6 +780,7 @@ def _import_table_information(self) -> None:

def _open_save_dialog(self) -> None:
layer = self.viewer.layers.selection.active
previous_shape_name = layer.metadata["name"]
save_dialog = SaveDialog(layer)
save_dialog.exec_()
table_name = save_dialog.get_save_table_name()
Expand All @@ -788,7 +793,15 @@ def _open_save_dialog(self) -> None:
table_columns=[self._current_class_column, self._current_class_column + "_color"],
overwrite=True,
)
self._update_table_name_widget(layer.metadata["sdata"], layer.metadata["name"])
if (
(previous_table := self.annotation_widget.table_name_widget.currentText()) != table_name
and previous_table != ""
and shape_name == previous_shape_name
):
del layer.metadata["sdata"].tables[previous_table]
layer.metadata["sdata"].delete_element_from_disk(previous_table)
show_info(f"Table name has changed and table with name {previous_table} has been deleted.")
self._update_table_name_widget(layer.metadata["sdata"], layer.metadata["name"], table_name)
else:
show_info("Saving canceled.")

Expand Down
4 changes: 3 additions & 1 deletion src/napari_spatialdata/_widgets.py
Original file line number Diff line number Diff line change
Expand Up @@ -589,7 +589,9 @@ def __init__(self, layer: Layer) -> None:
def save_clicked(self) -> None:
self.table_name = self.table_line_edit.text()
self.shape_name = self.spatial_element_line_edit.text()
if overwrite_table := (self.table_name in self.sdata.tables) or self.shape_name in self.sdata.shapes:
if (overwrite_table := self.table_name in self.sdata.tables) or (
overwrite_shape := self.shape_name in self.sdata.shapes
):
overwrite_shape = self.shape_name in self.sdata.shapes

if overwrite_table and overwrite_shape:
Expand Down
Loading