From 49b5ae3d4c534cf68b713271dd27d41a09929f0c Mon Sep 17 00:00:00 2001 From: Alessio Buccino Date: Wed, 25 Feb 2026 15:34:40 +0100 Subject: [PATCH] Fix order of units in mergeview --- spikeinterface_gui/mergeview.py | 4 ++-- spikeinterface_gui/utils_qt.py | 12 ++++++++++++ 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/spikeinterface_gui/mergeview.py b/spikeinterface_gui/mergeview.py index 18fc7b13..4b687f01 100644 --- a/spikeinterface_gui/mergeview.py +++ b/spikeinterface_gui/mergeview.py @@ -270,7 +270,7 @@ def _qt_make_layout(self): def _qt_refresh(self): from .myqt import QT - from .utils_qt import CustomItem + from .utils_qt import CustomItem, CustomItemMergeUnitID self.table.clear() self.table.setSortingEnabled(False) @@ -298,7 +298,7 @@ def _qt_refresh(self): pix = QT.QPixmap(16, 16) pix.fill(color) icon = QT.QIcon(pix) - item = QT.QTableWidgetItem(name) + item = CustomItemMergeUnitID(name) item.setData(QT.Qt.ItemDataRole.UserRole, unit_id) item.setFlags(QT.Qt.ItemIsEnabled | QT.Qt.ItemIsSelectable) self.table.setItem(r, c, item) diff --git a/spikeinterface_gui/utils_qt.py b/spikeinterface_gui/utils_qt.py index 4f18dd3f..c0fdb06f 100644 --- a/spikeinterface_gui/utils_qt.py +++ b/spikeinterface_gui/utils_qt.py @@ -474,6 +474,18 @@ def __lt__(self, other): other_ind = self.unit_ids.index(other.text()) return ind < other_ind +class CustomItemMergeUnitID(QT.QTableWidgetItem): + # special case for merge view unit_id columns: sort numerically by the unit_id stored in UserRole + def __lt__(self, other): + self_data = self.data(QT.Qt.ItemDataRole.UserRole) + other_data = other.data(QT.Qt.ItemDataRole.UserRole) + if self_data is not None and other_data is not None: + try: + return float(self_data) < float(other_data) + except (TypeError, ValueError): + pass + return self.text() < other.text() + class OrderableCheckItem(QT.QTableWidgetItem): # special case for checkbox def is_checked(self):