""" nueScan - Oscilloscope Dialog Controller Handles all UI interactions for the oscilloscope dialog Copyright (C) 2025 Thomas Ales Licensed under GNU General Public License v2.0 """ import os from PyQt6 import uic from PyQt6.QtWidgets import QDialog, QMessageBox class OscopeDialog(QDialog): """Oscope dialog for nueScan application""" def __init__(self, parent, microscope): super().__init__(parent) # Store hardware controllers self.microscope = microscope # Load UI file ui_path = os.path.join(os.path.dirname(__file__), '..', 'nuescan_oscope_dialog.ui') uic.loadUi(ui_path, self) # Set window title self.setWindowTitle("nueScan - Oscilloscope Settings") # Connect all UI signals self._connect_signals() # Initialize UI state self._initialize_ui() def _connect_signals(self): """Connect all UI signals to handler methods""" # ===== ComboBox Value Changed Handlers ===== self.cb_set_trig_channel.currentIndexChanged.connect(self.on_trigger_channel_changed) self.cb_set_saw_channel.currentIndexChanged.connect(self.on_saw_channel_changed) self.cb_set_bias_a_ch.currentIndexChanged.connect(self.on_bias_a_channel_changed) self.cb_set_bias_b_ch.currentIndexChanged.connect(self.on_bias_b_channel_changed) # ===== LineEdit Text Changed Handlers ===== self.le_set_trigger_voltage.textChanged.connect(self.on_trigger_voltage_changed) self.le_set_sample_thresh_voltage.textChanged.connect(self.on_sample_thresh_voltage_changed) self.le_set_pd_trig_voltage.textChanged.connect(self.on_pd_trig_voltage_changed) self.le_oscope_visa_address.textChanged.connect(self.on_oscope_visa_address_changed) # ===== Button Click Handlers ===== self.btn_test_scope_connection.clicked.connect(self.on_test_scope_connection_clicked) self.btn_save_scope_settings.clicked.connect(self.on_save_scope_settings_clicked) self.btn_cancel_scope_settings.clicked.connect(self.on_cancel_scope_settings_clicked) def _initialize_ui(self): """Initialize UI with default values""" # Populate combo boxes with dummy data self._populate_combo_boxes() def _populate_combo_boxes(self): """Populate all combo boxes with initial values""" # Oscilloscope channels channels = ["CH1", "CH2", "CH3", "CH4"] self.cb_set_trig_channel.addItems(channels) self.cb_set_saw_channel.addItems(channels) self.cb_set_bias_a_ch.addItems(channels) self.cb_set_bias_b_ch.addItems(channels) # ==================== ComboBox Change Handlers ==================== def on_trigger_channel_changed(self, index): """Handle Phototrigger channel change""" channel = self.cb_set_trig_channel.currentText() print(f"DEBUG: Phototrigger channel changed to: {channel}") def on_bias_a_channel_changed(self, index): """Handle Bias A channel change""" channel = self.cb_set_bias_a_ch.currentText() print(f"DEBUG: Bias A channel changed to: {channel}") def on_bias_b_channel_changed(self, index): """Handle Bias B channel change""" channel = self.cb_set_bias_b_ch.currentText() print(f"DEBUG: Bias B channel changed to: {channel}") def on_saw_channel_changed(self, index): """Handle RF/SAW channel change""" channel = self.cb_set_saw_channel.currentText() print(f"DEBUG: RF/SAW channel changed to: {channel}") # ==================== LineEdit Text Change Handlers ==================== def on_pd_trig_voltage_changed(self, text): """Handle PD Trigger voltage change""" print(f"DEBUG: PD Trigger voltage changed to: {text}") def on_trigger_voltage_changed(self, text): """Handle Sample Min Bias voltage change""" print(f"DEBUG: Sample Min Bias voltage changed to: {text}") def on_sample_thresh_voltage_changed(self, text): """Handle Sample Min Bias voltage change (placeholder)""" print(f"DEBUG: Sample threshold voltage changed to: {text}") def on_oscope_visa_address_changed(self, text): """Handle oscilloscope VISA address change""" print(f"DEBUG: Oscilloscope VISA address changed to: {text}") # ==================== Button Click Handlers ==================== def on_test_scope_connection_clicked(self): """Test the oscilloscope connection""" print("DEBUG: Test oscope connection clicked") def on_save_scope_settings_clicked(self): """Save the oscilloscope settings""" print("DEBUG: Save oscope settings clicked") self.accept() def on_cancel_scope_settings_clicked(self): """Cancel the oscilloscope settings changes""" print("DEBUG: Cancel oscope settings clicked") self.reject()