Skip to content

Commit 0c6abf2

Browse files
Sort elements in widgets (#285)
* Sort elements and coordinate systems in widgets * Sort table names * fix test, update changelog --------- Co-authored-by: Luca Marconato <[email protected]>
1 parent e19e94c commit 0c6abf2

File tree

4 files changed

+17
-5
lines changed

4 files changed

+17
-5
lines changed

CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,11 @@ and this project adheres to [Semantic Versioning][].
88
[keep a changelog]: https://keepachangelog.com/en/1.0.0/
99
[semantic versioning]: https://semver.org/spec/v2.0.0.html
1010

11+
## incoming release
12+
13+
- Global setting variables for showing circles as points and point size for scatter widget #309 #334
14+
- Sorting the element names and coordinate system names alphabetically #285
15+
1116
## [0.5.4] - 2024-11-26
1217

1318
### Changed

src/napari_spatialdata/_sdata_widgets.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import platform
44
from collections.abc import Iterable
55
from importlib.metadata import version
6+
from operator import itemgetter
67
from pathlib import Path
78
from typing import TYPE_CHECKING, cast
89

@@ -16,6 +17,7 @@
1617
from qtpy.QtGui import QIcon
1718
from qtpy.QtWidgets import QLabel, QListWidget, QListWidgetItem, QProgressBar, QVBoxLayout, QWidget
1819
from spatialdata import SpatialData
20+
from spatialdata.models._utils import DEFAULT_COORDINATE_SYSTEM
1921

2022
from napari_spatialdata._viewer import SpatialDataViewer
2123
from napari_spatialdata.constants.config import N_CIRCLES_WARNING_THRESHOLD, N_SHAPES_WARNING_THRESHOLD
@@ -59,7 +61,7 @@ def _onItemChange(self, selected_coordinate_system: QListWidgetItem | int | Iter
5961
self._elements = elements
6062

6163
def _set_element_widget_items(self, elements: dict[str, dict[str, str | int]]) -> None:
62-
for key, dict_val in elements.items():
64+
for key, dict_val in sorted(elements.items(), key=itemgetter(0)):
6365
sdata = self._sdata[dict_val["sdata_index"]]
6466
element_type = dict_val["element_type"]
6567
element_name = dict_val["original_name"]
@@ -95,7 +97,11 @@ def __init__(self, sdata: EventedList):
9597
self._sdata = sdata
9698
self._system: None | str = None
9799

98-
coordinate_systems = {cs for sdata in self._sdata for cs in sdata.coordinate_systems}
100+
# Sort alphabetically, but keep default "global" at the top.
101+
coordinate_systems = sorted(cs for sdata in self._sdata for cs in sdata.coordinate_systems)
102+
if DEFAULT_COORDINATE_SYSTEM in coordinate_systems:
103+
coordinate_systems.remove(DEFAULT_COORDINATE_SYSTEM)
104+
coordinate_systems.insert(0, DEFAULT_COORDINATE_SYSTEM)
99105
self.addItems(coordinate_systems)
100106

101107
def _select_coord_sys(self, selected_coordinate_system: QListWidgetItem | int | Iterable[str]) -> None:

src/napari_spatialdata/_viewer.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -422,7 +422,7 @@ def inherit_metadata(self, layers: list[Layer], ref_layer: Layer) -> None:
422422
def _get_table_data(
423423
self, sdata: SpatialData, element_name: str
424424
) -> tuple[AnnData | None, str | None, list[str] | None]:
425-
table_names: list[str] = list(get_element_annotators(sdata, element_name))
425+
table_names: list[str] = sorted(get_element_annotators(sdata, element_name))
426426
table_name = table_names[0] if len(table_names) > 0 else None
427427
adata = _get_init_metadata_adata(sdata, table_name, element_name)
428428
return adata, table_name, table_names

tests/test_viewer.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -172,8 +172,9 @@ def test_save_layer(qtbot, tmp_path: str, make_napari_viewer: any):
172172
n = len(widget.elements_widget)
173173
# I would have expected Shapes to be in position -2 and Points in position -1, but we have the following order
174174
# because elements of the same type are grouped together
175-
assert widget.elements_widget.item(n - 1).text() == "Shapes"
176-
assert widget.elements_widget.item(n - 5).text() == "Points"
175+
all_elements = [widget.elements_widget.item(i).text() for i in range(n)]
176+
assert "Shapes" in all_elements
177+
assert "Points" in all_elements
177178

178179
# add a new layer to the viewer with the newly saved shapes element
179180
widget._onClick("Shapes")

0 commit comments

Comments
 (0)