GUI: fixed bug where reference_tools_panel.py would infinite loop due to refactoring of self._rows to self._samples
This commit is contained in:
@@ -13,9 +13,13 @@ from PySide6.QtWidgets import (
|
||||
QMenu,
|
||||
QAbstractItemView,
|
||||
)
|
||||
|
||||
from aaredaqlib.logger_config import setup_logger
|
||||
from aaredaqlib.models import SampleShortInfoList, SampleShortInfo, BeamlineStateEnum, DAQStatusModel
|
||||
from aaregui.widgets.title_label import TitleLabel
|
||||
|
||||
logger = setup_logger("aareGUI")
|
||||
|
||||
def get_entry(sample: SampleShortInfo, column: int):
|
||||
if column == 0:
|
||||
return sample.loc_str()
|
||||
@@ -23,22 +27,25 @@ def get_entry(sample: SampleShortInfo, column: int):
|
||||
return sample.sample_name
|
||||
elif column == 2:
|
||||
return sample.mount_count
|
||||
return None
|
||||
return ""
|
||||
|
||||
class ReferenceToolsModel(QAbstractTableModel):
|
||||
def __init__(self, rows: Optional[list[SampleShortInfo]] | None = None, parent=None, current_reference: int | None = None,):
|
||||
super().__init__(parent)
|
||||
|
||||
self._rows: list[SampleShortInfo] = rows or []
|
||||
self.samples: list[SampleShortInfo] = rows or []
|
||||
self.current_reference = current_reference
|
||||
self.header = ["Position", "Sample name", "Mount count"]
|
||||
self.__sort_col = 0
|
||||
self.__sort_order = Qt.SortOrder.AscendingOrder
|
||||
self.__sorted_samples: list[SampleShortInfo] = []
|
||||
self._sort()
|
||||
if self.samples:
|
||||
self._sort()
|
||||
else:
|
||||
self.__sorted_samples = []
|
||||
|
||||
def rowCount(self, parent: QModelIndex = QModelIndex()) -> int:
|
||||
return len(self._rows)
|
||||
return len(self.__sorted_samples)
|
||||
|
||||
def columnCount(self, parent: QModelIndex = QModelIndex()) -> int:
|
||||
return len(self.header)
|
||||
@@ -47,6 +54,9 @@ class ReferenceToolsModel(QAbstractTableModel):
|
||||
if not index.isValid():
|
||||
return None
|
||||
|
||||
if index.row() >= len(self.__sorted_samples):
|
||||
return None
|
||||
|
||||
if role == Qt.ItemDataRole.DisplayRole:
|
||||
return get_entry(self.__sorted_samples[index.row()], index.column())
|
||||
elif role == Qt.ItemDataRole.TextAlignmentRole:
|
||||
@@ -69,9 +79,13 @@ class ReferenceToolsModel(QAbstractTableModel):
|
||||
def update_rows(self, rows: list[SampleShortInfo]):
|
||||
self.beginResetModel()
|
||||
self.samples = rows
|
||||
self._sort()
|
||||
if self.samples: # Only sort if we have samples
|
||||
self._sort()
|
||||
else:
|
||||
self.__sorted_samples = [] # Clear sorted samples if no data
|
||||
self.endResetModel()
|
||||
|
||||
|
||||
def sort(self, column, order):
|
||||
self.layoutAboutToBeChanged.emit()
|
||||
self.__sort_order = order
|
||||
@@ -81,6 +95,10 @@ class ReferenceToolsModel(QAbstractTableModel):
|
||||
|
||||
def _sort(self):
|
||||
"""Sort samples, using special handling for location column."""
|
||||
if not self.samples:
|
||||
self.__sorted_samples = []
|
||||
return
|
||||
|
||||
if self.__sort_col == 0:
|
||||
# Special sorting for location (Position column)
|
||||
self.__sorted_samples = sorted(
|
||||
@@ -158,12 +176,16 @@ class ReferenceToolsPanel(QFrame):
|
||||
)
|
||||
|
||||
self.table_view.setEditTriggers(QTableView.EditTrigger.NoEditTriggers)
|
||||
logger.debug("Setting up table header")
|
||||
header = self.table_view.horizontalHeader()
|
||||
logger.debug("Setting up table header")
|
||||
header.setSectionResizeMode(QHeaderView.ResizeMode.Interactive)
|
||||
logger.debug("Setting up table header")
|
||||
header.setStretchLastSection(True)
|
||||
self.table_view.verticalHeader().setVisible(True)
|
||||
|
||||
logger.debug("Setting up table view sorting")
|
||||
self.table_view.setSortingEnabled(True)
|
||||
logger.debug("Setting up table view context menu")
|
||||
self.table_view.setContextMenuPolicy(Qt.ContextMenuPolicy.CustomContextMenu)
|
||||
self.table_view.customContextMenuRequested.connect(self._context_menu)
|
||||
self.table_view.setSelectionBehavior(
|
||||
|
||||
Reference in New Issue
Block a user