92 lines
3.4 KiB
Python
92 lines
3.4 KiB
Python
from PySide6.QtCore import Signal, Slot
|
|
from PySide6.QtWidgets import QFrame, QVBoxLayout, QHBoxLayout, QPushButton, QHeaderView, QSizePolicy, \
|
|
QTableView
|
|
from aaredaqlib.models import SampleShortInfoList, SampleShortInfo
|
|
|
|
from aaregui.models.sample_queue_model import SampleQueueSpreadsheet
|
|
from aaregui.widgets.title_label import TitleLabel
|
|
|
|
|
|
class SampleQueuePanel(QFrame):
|
|
auto_scan = Signal(SampleShortInfo)
|
|
unmount = Signal()
|
|
viewer_track_online = Signal()
|
|
|
|
def __init__(self, parent=None, samples: SampleShortInfoList | None = None):
|
|
super().__init__(parent)
|
|
self.__pause = True
|
|
self.__set_to_pause = False
|
|
self.setFrameShape(QFrame.Shape.StyledPanel)
|
|
self.setFrameShadow(QFrame.Shadow.Raised)
|
|
|
|
layout = QVBoxLayout(self)
|
|
self.setLayout(layout)
|
|
|
|
layout.addWidget(TitleLabel("Sample queue", self))
|
|
# Create the table
|
|
self.table_view = QTableView(self)
|
|
|
|
# Create the custom table model
|
|
self.table_model = SampleQueueSpreadsheet()
|
|
# Create the QTableView and set the model
|
|
self.table_view.setModel(self.table_model)
|
|
# Enable automatic column resizing
|
|
header = self.table_view.horizontalHeader()
|
|
header.setSectionResizeMode(QHeaderView.ResizeMode.Stretch) # Columns stretch to fill the table
|
|
|
|
# Set the table's size policy to expand
|
|
self.table_view.setSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Expanding)
|
|
self.table_view.setAcceptDrops(True)
|
|
self.table_view.setDropIndicatorShown(True)
|
|
|
|
layout.addWidget(self.table_view) # Add table to the layout
|
|
|
|
# Create a horizontal layout for the buttons
|
|
button_layout = QHBoxLayout()
|
|
self.play_button = QPushButton("▶ Run", self)
|
|
self.play_button.clicked.connect(self.run)
|
|
self.clear_button = QPushButton("✖ Clear list", self)
|
|
self.clear_button.clicked.connect(self.clear)
|
|
|
|
self.clear_button.clicked.connect(self.table_model.clearSamples)
|
|
|
|
button_layout.addWidget(self.play_button)
|
|
button_layout.addWidget(self.clear_button)
|
|
|
|
# Add the button layout to the main layout
|
|
layout.addLayout(button_layout)
|
|
|
|
|
|
def run(self):
|
|
if self.__pause:
|
|
if len(self.table_model.samples) > 0:
|
|
self.table_model.set_running(True)
|
|
self.__set_to_pause = False
|
|
self.__pause = False
|
|
self.play_button.setText("⏸ Pause")
|
|
self.auto_scan.emit(self.table_model.samples[0])
|
|
self.viewer_track_online.emit()
|
|
else:
|
|
self.__set_to_pause = True
|
|
self.__pause = True
|
|
self.play_button.setText("▶ Run")
|
|
|
|
def clear(self):
|
|
self.table_model.clearSamples()
|
|
|
|
@Slot(int, bool)
|
|
def automated_scan_done(self, db_id: int, success: bool):
|
|
if success:
|
|
self.table_model.remove_sample(db_id)
|
|
if not self.__pause and len(self.table_model.samples) > 0:
|
|
self.auto_scan.emit(self.table_model.samples[0])
|
|
else:
|
|
self.table_model.set_running(False)
|
|
self.__pause = True
|
|
self.play_button.setText("▶ Run")
|
|
self.unmount.emit()
|
|
else:
|
|
self.table_model.set_running(False)
|
|
self.__pause = True
|
|
self.play_button.setText("▶ Run")
|