"""Builder for snapshot and storage actions section.""" from __future__ import annotations from PyQt6.QtWidgets import ( QGridLayout, QGroupBox, QHBoxLayout, QLabel, QLineEdit, QPushButton, QSizePolicy, QSpinBox, QVBoxLayout, ) def build_data_actions_group(owner) -> QGroupBox: """Create snapshot save controls section.""" group = QGroupBox("Data Actions") layout = QVBoxLayout(group) layout.setSpacing(8) data_defaults = owner._gui_defaults.data_actions save_button = QPushButton("Save Dataset") save_button.clicked.connect(owner._save_snapshot) save_button.setSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Fixed) save_vna_json_button = QPushButton("Save S21 JSON") save_vna_json_button.setToolTip( "Export one S21 VNA-history JSON per combo from the preprocessed stage (S11 is not included)." ) save_vna_json_button.clicked.connect(owner._save_vna_history_json) save_vna_json_button.setSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Fixed) remove_last_button = QPushButton("Remove Last Measurement") remove_last_button.clicked.connect(owner._remove_last_runtime_history) remove_last_button.setSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Fixed) capture_tmp_reference_button = QPushButton("Capture Tmp Reference") capture_tmp_reference_button.clicked.connect(owner._capture_tmp_reference) capture_tmp_reference_button.setSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Fixed) record_button = QPushButton("Start + Record to Disk") record_button.setToolTip( "Start the run (if stopped) and save the next N measurements to the path/name below." ) record_button.clicked.connect(owner._start_run_with_recording) record_button.setSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Fixed) owner._save_count = QSpinBox() owner._save_count.setMinimum(1) owner._save_count.setMaximum(10_000) owner._save_count.setValue(int(data_defaults.save_count)) owner._record_count = QSpinBox() owner._record_count.setMinimum(1) owner._record_count.setMaximum(1_000_000) owner._record_count.setValue(int(data_defaults.record_count)) button_grid = QGridLayout() button_grid.setHorizontalSpacing(8) button_grid.setVerticalSpacing(8) button_grid.addWidget(save_button, 0, 0) button_grid.addWidget(save_vna_json_button, 0, 1) button_grid.addWidget(remove_last_button, 1, 0) button_grid.addWidget(capture_tmp_reference_button, 1, 1) button_grid.addWidget(record_button, 2, 0, 1, 2) button_grid.setColumnStretch(0, 1) button_grid.setColumnStretch(1, 1) layout.addLayout(button_grid) count_row = QHBoxLayout() count_row.setSpacing(8) count_row.addWidget(QLabel("Number of Measurements to Save")) count_row.addWidget(owner._save_count) count_row.addStretch(1) layout.addLayout(count_row) record_count_row = QHBoxLayout() record_count_row.setSpacing(8) record_count_row.addWidget(QLabel("Number of Sweeps to Record")) record_count_row.addWidget(owner._record_count) record_count_row.addStretch(1) layout.addLayout(record_count_row) path_row = QHBoxLayout() path_row.setSpacing(8) owner._save_path_input = QLineEdit(str(data_defaults.save_path)) browse_button = QPushButton("Browse") browse_button.clicked.connect(owner._browse_save_path) path_row.addWidget(QLabel("Path")) path_row.addWidget(owner._save_path_input, stretch=1) path_row.addWidget(browse_button) layout.addLayout(path_row) name_row = QHBoxLayout() name_row.setSpacing(8) owner._save_name_input = QLineEdit(str(data_defaults.save_name)) name_row.addWidget(QLabel("Name")) name_row.addWidget(owner._save_name_input, stretch=1) layout.addLayout(name_row) return group