Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 18 additions & 20 deletions spikeinterface_gui/unitlistview.py
Original file line number Diff line number Diff line change
Expand Up @@ -734,6 +734,8 @@ def _panel_on_edit(self, event):
new_label = None
self.controller.set_label_to_unit(unit_id, column, new_label)
self.notify_manual_curation_updated()
# like in Qt, move to the next unit and make it visible alone
self.table.select_next_row(only=True, from_row=row)
self.notifier.notify_active_view_updated()

def _panel_update_labels(self):
Expand Down Expand Up @@ -801,6 +803,18 @@ def _panel_remove_from_merge(self):
self.notify_manual_curation_updated()
self.refresh()

def _panel_set_default_label(self, label):
selected_unit_ids = self._panel_get_selected_unit_ids()
if len(selected_unit_ids) == 0:
return
for unit_id in selected_unit_ids:
self.controller.set_label_to_unit(unit_id, "quality", label)
self.table.value.loc[selected_unit_ids, "quality"] = label if label is not None else ""
self.notify_manual_curation_updated()
self.refresh()
# like in Qt, move to the next unit and make it visible alone
self.table.select_next_row(only=True)

def _panel_handle_shortcut(self, event):
if self.is_view_active():
selected_unit_ids = self._panel_get_selected_unit_ids()
Expand All @@ -820,29 +834,13 @@ def _panel_handle_shortcut(self, event):
self.notify_unit_and_channel_visibility_changed()
self.refresh()
elif event.data == "clear":
for unit_id in selected_unit_ids:
self.controller.set_label_to_unit(unit_id, "quality", None)
self.table.value.loc[selected_unit_ids, "quality"] = ""
self.notify_manual_curation_updated()
self.refresh()
self._panel_set_default_label(None)
elif event.data == "good":
for unit_id in selected_unit_ids:
self.controller.set_label_to_unit(unit_id, "quality", "good")
self.table.value.loc[selected_unit_ids, "quality"] = "good"
self.notify_manual_curation_updated()
self.refresh()
self._panel_set_default_label("good")
elif event.data == "mua":
for unit_id in selected_unit_ids:
self.controller.set_label_to_unit(unit_id, "quality", "MUA")
self.table.value.loc[selected_unit_ids, "quality"] = "MUA"
self.notify_manual_curation_updated()
self.refresh()
self._panel_set_default_label("MUA")
elif event.data == "noise":
for unit_id in selected_unit_ids:
self.controller.set_label_to_unit(unit_id, "quality", "noise")
self.table.value.loc[selected_unit_ids, "quality"] = "noise"
self.notify_manual_curation_updated()
self.refresh()
self._panel_set_default_label("noise")


UnitListView._gui_help_txt = """
Expand Down
33 changes: 23 additions & 10 deletions spikeinterface_gui/utils_panel.py
Original file line number Diff line number Diff line change
Expand Up @@ -556,6 +556,27 @@ def _get_previous_row(self):
previous_row = max(0, previous_row)
return previous_row

def select_next_row(self, only=False, from_row=None):
"""
Move the selection to the next row.

Parameters
----------
only: bool
If True, the "only" callback is triggered (make the new row the only visible one).
from_row: int | None
The row to move from. By default the current selection is used.
"""
if from_row is None:
next_row = self._get_next_row()
else:
next_row = min(from_row + 1, len(self.value) - 1)
self.selection = [next_row]
if only and self._on_only_function is not None:
self._on_only_function()
self._last_selected_row = next_row
return next_row

def _handle_shortcut(self, event):
if self._conditional_shortcut():
if event.data == "first":
Expand All @@ -567,21 +588,13 @@ def _handle_shortcut(self, event):
self.selection = [last_row]
self._last_selected_row = last_row
elif event.data == "next":
next_row = self._get_next_row()
self.selection = [next_row]
self._last_selected_row = next_row
self.select_next_row()
elif event.data == "previous":
previous_row = self._get_previous_row()
self.selection = [previous_row]
self._last_selected_row = previous_row
elif event.data == "next_only":
next_row = self._get_next_row()
# this should go in self._on_only_function()
self.selection = [next_row]
# self.notify_unit_visibility_changed()
if self._on_only_function is not None:
self._on_only_function()
self._last_selected_row = next_row
self.select_next_row(only=True)
elif event.data == "previous_only":
previous_row = self._get_previous_row()
self.selection = [previous_row]
Expand Down
Loading