Skip to content

Commit

Permalink
Emit event from points data setter (#6117)
Browse files Browse the repository at this point in the history
Closes #6116

# Description

Adds back an event emission from the Points layer data setter. Commits
summary:

- Add failing test for layer data setter event
- Emit event on points data setter

## Type of change
<!-- Please delete options that are not relevant. -->
- [x] Bug-fix (non-breaking change which fixes an issue)

---------

Co-authored-by: Grzegorz Bokota <bokota+github@gmail.com>
  • Loading branch information
jni and Czaki committed Aug 8, 2023
1 parent 48ed8e3 commit 3cbd0d0
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 2 deletions.
21 changes: 21 additions & 0 deletions napari/layers/points/_tests/test_points.py
Expand Up @@ -2486,3 +2486,24 @@ def test_point_selection_remains_evented_after_update():
assert isinstance(layer.selected_data, Selection)
layer.selected_data = {0, 1}
assert isinstance(layer.selected_data, Selection)


def test_points_data_setter_emits_event():
data = np.random.random((5, 2))
emitted_events = Mock()
layer = Points(data)
layer.events.data.connect(emitted_events)
layer.data = np.random.random((5, 2))
emitted_events.assert_called_once()


def test_points_add_delete_only_emit_one_event():
data = np.random.random((5, 2))
emitted_events = Mock()
layer = Points(data)
layer.events.data.connect(emitted_events)
layer.add(np.random.random(2))
assert emitted_events.call_count == 1
layer.selected_data = {3}
layer.remove_selected()
assert emitted_events.call_count == 2
15 changes: 13 additions & 2 deletions napari/layers/points/points.py
Expand Up @@ -535,6 +535,17 @@ def data(self) -> np.ndarray:

@data.setter
def data(self, data: Optional[np.ndarray]):
"""Set the data array and emit a corresponding event."""
self._set_data(data)
self.events.data(
value=self.data,
action=ActionType.CHANGE.value,
data_indices=slice(None),
vertex_indices=((),),
)

def _set_data(self, data: Optional[np.ndarray]):
"""Set the .data array attribute, without emitting an event."""
data, _ = fix_data_points(data, self.ndim)
cur_npoints = len(self._data)
self._data = data
Expand Down Expand Up @@ -1924,7 +1935,7 @@ def add(self, coords):
Point or points to add to the layer data.
"""
cur_points = len(self.data)
self.data = np.append(self.data, np.atleast_2d(coords), axis=0)
self._set_data(np.append(self.data, np.atleast_2d(coords), axis=0))
self.events.data(
value=self.data,
action=ActionType.ADD.value,
Expand Down Expand Up @@ -1959,7 +1970,7 @@ def remove_selected(self):
self._value -= offset
self._value_stored -= offset

self.data = np.delete(self.data, index, axis=0)
self._set_data(np.delete(self.data, index, axis=0))
self.events.data(
value=self.data,
action=ActionType.REMOVE.value,
Expand Down

0 comments on commit 3cbd0d0

Please sign in to comment.