mirror of
https://github.com/nqrduck/nqrduck-pulseprogrammer.git
synced 2024-11-09 11:20:01 +00:00
Added event creation.
This commit is contained in:
parent
7ddb7a6cc7
commit
9e032b1fe3
2 changed files with 103 additions and 5 deletions
|
@ -7,13 +7,17 @@ logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
class PulseProgrammerModel(ModuleModel):
|
class PulseProgrammerModel(ModuleModel):
|
||||||
pulse_parameter_options_changed = pyqtSignal()
|
pulse_parameter_options_changed = pyqtSignal()
|
||||||
events_changed = pyqtSignal(list)
|
events_changed = pyqtSignal()
|
||||||
|
|
||||||
def __init__(self, module):
|
def __init__(self, module):
|
||||||
super().__init__(module)
|
super().__init__(module)
|
||||||
self.pulse_parameter_options = OrderedDict()
|
self.pulse_parameter_options = OrderedDict()
|
||||||
self.events = []
|
self.events = []
|
||||||
|
|
||||||
|
def add_event(self, event_name):
|
||||||
|
self.events.append(event_name)
|
||||||
|
self.events_changed.emit()
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def events(self):
|
def events(self):
|
||||||
return self._events
|
return self._events
|
||||||
|
@ -21,7 +25,7 @@ class PulseProgrammerModel(ModuleModel):
|
||||||
@events.setter
|
@events.setter
|
||||||
def events(self, value):
|
def events(self, value):
|
||||||
self._events = value
|
self._events = value
|
||||||
self.events_changed.emit(value)
|
self.events_changed.emit()
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def pulse_parameter_options(self):
|
def pulse_parameter_options(self):
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
import logging
|
import logging
|
||||||
from collections import OrderedDict
|
from collections import OrderedDict
|
||||||
from PyQt6.QtWidgets import QTableWidget, QVBoxLayout
|
from PyQt6.QtWidgets import QTableWidget, QVBoxLayout, QPushButton, QHBoxLayout, QLabel, QDialog, QLineEdit, QDialogButtonBox
|
||||||
from PyQt6.QtCore import pyqtSlot
|
from PyQt6.QtCore import pyqtSlot
|
||||||
from nqrduck.module.module_view import ModuleView
|
from nqrduck.module.module_view import ModuleView
|
||||||
|
|
||||||
|
@ -15,19 +15,113 @@ class PulseProgrammerView(ModuleView):
|
||||||
self.setup_ui()
|
self.setup_ui()
|
||||||
|
|
||||||
logger.debug("Connecting pulse parameter options changed signal to on_pulse_parameter_options_changed")
|
logger.debug("Connecting pulse parameter options changed signal to on_pulse_parameter_options_changed")
|
||||||
module.model.pulse_parameter_options_changed.connect(self.on_pulse_parameter_options_changed)
|
self.module.model.pulse_parameter_options_changed.connect(self.on_pulse_parameter_options_changed)
|
||||||
|
|
||||||
def setup_ui(self):
|
def setup_ui(self):
|
||||||
|
# Create pulse table
|
||||||
|
title = QLabel("Pulse Sequence:")
|
||||||
|
# Make title bold
|
||||||
|
font = title.font()
|
||||||
|
font.setBold(True)
|
||||||
|
title.setFont(font)
|
||||||
|
|
||||||
self.pulse_table = QTableWidget(self)
|
self.pulse_table = QTableWidget(self)
|
||||||
|
self.pulse_table.setSizeAdjustPolicy(QTableWidget.SizeAdjustPolicy.AdjustToContents)
|
||||||
layout = QVBoxLayout()
|
layout = QVBoxLayout()
|
||||||
layout.addWidget(self.pulse_table)
|
button_layout = QHBoxLayout()
|
||||||
|
table_layout = QHBoxLayout()
|
||||||
|
table_layout.addWidget(self.pulse_table)
|
||||||
|
table_layout.addStretch(1)
|
||||||
|
# Add button for new event
|
||||||
|
self.new_event_button = QPushButton("New event")
|
||||||
|
|
||||||
|
# Connect signals
|
||||||
|
self.new_event_button.clicked.connect(self.on_new_event_button_clicked)
|
||||||
|
self.module.model.events_changed.connect(self.on_events_changed)
|
||||||
|
|
||||||
|
button_layout.addWidget(self.new_event_button)
|
||||||
|
button_layout.addStretch(1)
|
||||||
|
layout.addWidget(title)
|
||||||
|
layout.addLayout(button_layout)
|
||||||
|
layout.addLayout(table_layout)
|
||||||
|
|
||||||
|
# Add label for the event lengths
|
||||||
|
event_parameters_label = QLabel("Event lengths:")
|
||||||
|
event_parameters_label.setFont(font)
|
||||||
|
layout.addStretch(1)
|
||||||
|
layout.addWidget(event_parameters_label)
|
||||||
|
|
||||||
self.setLayout(layout)
|
self.setLayout(layout)
|
||||||
|
|
||||||
|
|
||||||
@pyqtSlot()
|
@pyqtSlot()
|
||||||
def on_pulse_parameter_options_changed(self):
|
def on_pulse_parameter_options_changed(self):
|
||||||
logger.debug("Updating pulse parameter options to %s", self.module.model.pulse_parameter_options.keys())
|
logger.debug("Updating pulse parameter options to %s", self.module.model.pulse_parameter_options.keys())
|
||||||
self.pulse_table.setRowCount(len(self.module.model.pulse_parameter_options))
|
self.pulse_table.setRowCount(len(self.module.model.pulse_parameter_options))
|
||||||
self.pulse_table.setVerticalHeaderLabels(self.module.model.pulse_parameter_options.keys())
|
self.pulse_table.setVerticalHeaderLabels(self.module.model.pulse_parameter_options.keys())
|
||||||
|
|
||||||
|
@pyqtSlot()
|
||||||
|
def on_new_event_button_clicked(self):
|
||||||
|
# Create a QDialog for the new event
|
||||||
|
logger.debug("New event button clicked")
|
||||||
|
dialog = AddEventDialog(self)
|
||||||
|
result = dialog.exec()
|
||||||
|
if result:
|
||||||
|
event_name = dialog.get_length()
|
||||||
|
logger.debug("Adding new event with name %s", event_name)
|
||||||
|
self.module.model.add_event(event_name)
|
||||||
|
|
||||||
|
@pyqtSlot()
|
||||||
|
def on_events_changed(self):
|
||||||
|
logger.debug("Updating events to %s", self.module.model.events)
|
||||||
|
layout = self.layout()
|
||||||
|
|
||||||
|
event = self.module.model.events[-1]
|
||||||
|
logger.debug("Adding event to pulseprogrammer view: %s", event)
|
||||||
|
# Create a label for the setting
|
||||||
|
label = QLabel(event)
|
||||||
|
label.setMinimumWidth(70)
|
||||||
|
# Add an QLineEdit for the setting
|
||||||
|
line_edit = QLineEdit(str(0))
|
||||||
|
line_edit.setMinimumWidth(100)
|
||||||
|
# Connect the editingFinished signal to the on_value_changed slot of the setting
|
||||||
|
# line_edit.editingFinished.connect(lambda: setting.on_value_changed(line_edit.text()))
|
||||||
|
# Add the label and the line edit to the layout
|
||||||
|
event_layout = QHBoxLayout()
|
||||||
|
event_layout.addWidget(label)
|
||||||
|
event_layout.addWidget(line_edit)
|
||||||
|
event_layout.addStretch(1)
|
||||||
|
layout.addLayout(event_layout)
|
||||||
|
|
||||||
|
self.pulse_table.setColumnCount(len(self.module.model.events))
|
||||||
|
self.pulse_table.setHorizontalHeaderLabels(self.module.model.events)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
class AddEventDialog(QDialog):
|
||||||
|
def __init__(self, parent=None):
|
||||||
|
super().__init__(parent)
|
||||||
|
|
||||||
|
self.setWindowTitle("Add Event")
|
||||||
|
|
||||||
|
self.layout = QVBoxLayout(self)
|
||||||
|
|
||||||
|
self.label = QLabel("Enter event name:")
|
||||||
|
self.length_input = QLineEdit()
|
||||||
|
|
||||||
|
self.buttons = QDialogButtonBox(
|
||||||
|
QDialogButtonBox.StandardButton.Ok | QDialogButtonBox.StandardButton.Cancel,
|
||||||
|
self,
|
||||||
|
)
|
||||||
|
self.buttons.accepted.connect(self.accept)
|
||||||
|
self.buttons.rejected.connect(self.reject)
|
||||||
|
|
||||||
|
self.layout.addWidget(self.label)
|
||||||
|
self.layout.addWidget(self.length_input)
|
||||||
|
self.layout.addWidget(self.buttons)
|
||||||
|
|
||||||
|
def get_length(self):
|
||||||
|
return self.length_input.text()
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue