Source code for quicknxs.views.widgets.active_radio_button

"""Miscellaneous custom Qt widgets for QuickNXS."""

from typing import TYPE_CHECKING

from qtpy.QtCore import Qt
from qtpy.QtWidgets import QHBoxLayout, QRadioButton, QTableWidget, QWidget

if TYPE_CHECKING:
    from quicknxs.presenters.main_handler import MainHandler


[docs] class ActiveDataRadioButton(QWidget): """A QWidget that represents the active data selection.""" def __init__( self, parent: "MainHandler | None" = None, is_active: bool = False, idx: int | None = None, is_direct_beam: bool = False, ): super().__init__() self.parent_handler = parent # Renamed to avoid conflict with QWidget.parent() self.is_active = is_active self.idx = idx self.is_direct_beam = is_direct_beam self.initUI()
[docs] def initUI(self): """Initialize the UI components.""" self.radio_button = QRadioButton() self.radio_button.setChecked(self.is_active) # Connect to the appropriate method based on whether this is a direct beam or reduction table if self.is_direct_beam: self.radio_button.toggled.connect( lambda checked: self.parent_handler.main_window.set_active_direct_beam(checked, self._get_current_row()) ) else: self.radio_button.toggled.connect( lambda checked: self.parent_handler.main_window.set_active_reduction_data( checked, self._get_current_row() ) ) layout = QHBoxLayout() layout.setContentsMargins(0, 0, 0, 0) layout.setAlignment(Qt.AlignmentFlag.AlignCenter) layout.addWidget(self.radio_button) self.setLayout(layout)
[docs] def set_checked_block_signals(self, checked: bool) -> None: """Set radio button state without emitting signals.""" self.radio_button.blockSignals(True) self.radio_button.setChecked(checked) self.radio_button.blockSignals(False)
def _get_current_row(self): """Find the current row index of this widget in the table.""" if self.parent_handler is None: return -1 table: QTableWidget = ( self.parent_handler.direct_beam_table if self.is_direct_beam else self.parent_handler.reduction_table ) for row in range(table.rowCount()): if table.cellWidget(row, 0) == self: return row return -1