mirror of
https://github.com/nqrduck/nqrduck-pulseprogrammer.git
synced 2024-11-09 11:20:01 +00:00
Refactored FileDialog. Error handling for incompatible pulse sequence.
This commit is contained in:
parent
668681cdf3
commit
06a2edc640
4 changed files with 34 additions and 58 deletions
|
@ -1,4 +1,5 @@
|
||||||
"""Controller of the pulse programmer module."""
|
"""Controller of the pulse programmer module."""
|
||||||
|
|
||||||
import logging
|
import logging
|
||||||
import json
|
import json
|
||||||
import decimal
|
import decimal
|
||||||
|
@ -15,6 +16,7 @@ class PulseProgrammerController(ModuleController):
|
||||||
|
|
||||||
This class is responsible for handling the logic of the pulse programmer module.
|
This class is responsible for handling the logic of the pulse programmer module.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def on_loading(self, pulse_parameter_options: dict) -> None:
|
def on_loading(self, pulse_parameter_options: dict) -> None:
|
||||||
"""This method is called when the module is loaded. It sets the pulse parameter options in the model.
|
"""This method is called when the module is loaded. It sets the pulse parameter options in the model.
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
"""Model for the pulse programmer module."""
|
"""Model for the pulse programmer module."""
|
||||||
|
|
||||||
import logging
|
import logging
|
||||||
from collections import OrderedDict
|
from collections import OrderedDict
|
||||||
from PyQt6.QtCore import pyqtSignal
|
from PyQt6.QtCore import pyqtSignal
|
||||||
|
@ -13,11 +14,17 @@ class PulseProgrammerModel(ModuleModel):
|
||||||
|
|
||||||
This class is responsible for storing the data of the pulse programmer module.
|
This class is responsible for storing the data of the pulse programmer module.
|
||||||
|
|
||||||
|
Attributes:
|
||||||
|
FILE_EXTENSION (str): The file extension for pulse programmer files.
|
||||||
|
|
||||||
Signals:
|
Signals:
|
||||||
pulse_parameter_options_changed: Emitted when the pulse parameter options change.
|
pulse_parameter_options_changed: Emitted when the pulse parameter options change.
|
||||||
events_changed: Emitted when the events in the pulse sequence change.
|
events_changed: Emitted when the events in the pulse sequence change.
|
||||||
pulse_sequence_changed: Emitted when the pulse sequence changes.
|
pulse_sequence_changed: Emitted when the pulse sequence changes.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
FILE_EXTENSION = "quack"
|
||||||
|
|
||||||
pulse_parameter_options_changed = pyqtSignal()
|
pulse_parameter_options_changed = pyqtSignal()
|
||||||
events_changed = pyqtSignal()
|
events_changed = pyqtSignal()
|
||||||
pulse_sequence_changed = pyqtSignal()
|
pulse_sequence_changed = pyqtSignal()
|
||||||
|
|
|
@ -1,11 +1,14 @@
|
||||||
"""Initialize the PulseProgrammer module."""
|
"""Initialize the PulseProgrammer module."""
|
||||||
|
|
||||||
from nqrduck.module.module import Module
|
from nqrduck.module.module import Module
|
||||||
from .model import PulseProgrammerModel
|
from .model import PulseProgrammerModel
|
||||||
from .controller import PulseProgrammerController
|
from .controller import PulseProgrammerController
|
||||||
from .view import PulseProgrammerView
|
from .view import PulseProgrammerView
|
||||||
|
|
||||||
|
|
||||||
class PulseProgrammer(Module):
|
class PulseProgrammer(Module):
|
||||||
"""The pulse programmer module."""
|
"""The pulse programmer module."""
|
||||||
|
|
||||||
def __init__(self, model, view, controller):
|
def __init__(self, model, view, controller):
|
||||||
"""Initializes the pulse programmer module.
|
"""Initializes the pulse programmer module.
|
||||||
|
|
||||||
|
@ -18,4 +21,7 @@ class PulseProgrammer(Module):
|
||||||
self.view = None
|
self.view = None
|
||||||
self.pulse_programmer_view = view(self)
|
self.pulse_programmer_view = view(self)
|
||||||
|
|
||||||
pulse_programmer = PulseProgrammer(PulseProgrammerModel, PulseProgrammerView, PulseProgrammerController)
|
|
||||||
|
pulse_programmer = PulseProgrammer(
|
||||||
|
PulseProgrammerModel, PulseProgrammerView, PulseProgrammerController
|
||||||
|
)
|
||||||
|
|
|
@ -338,7 +338,7 @@ class PulseProgrammerView(ModuleView):
|
||||||
def on_save_button_clicked(self) -> None:
|
def on_save_button_clicked(self) -> None:
|
||||||
"""This method is called whenever the save button is clicked. It opens a dialog to select a file to save the pulse sequence to."""
|
"""This method is called whenever the save button is clicked. It opens a dialog to select a file to save the pulse sequence to."""
|
||||||
logger.debug("Save button clicked")
|
logger.debug("Save button clicked")
|
||||||
file_manager = QFileManager(self)
|
file_manager = self.QFileManager(self.module.model.FILE_EXTENSION, parent=self)
|
||||||
file_name = file_manager.saveFileDialog()
|
file_name = file_manager.saveFileDialog()
|
||||||
if file_name:
|
if file_name:
|
||||||
self.module.controller.save_pulse_sequence(file_name)
|
self.module.controller.save_pulse_sequence(file_name)
|
||||||
|
@ -347,10 +347,19 @@ class PulseProgrammerView(ModuleView):
|
||||||
def on_load_button_clicked(self) -> None:
|
def on_load_button_clicked(self) -> None:
|
||||||
"""This method is called whenever the load button is clicked. It opens a dialog to select a file to load the pulse sequence from."""
|
"""This method is called whenever the load button is clicked. It opens a dialog to select a file to load the pulse sequence from."""
|
||||||
logger.debug("Load button clicked")
|
logger.debug("Load button clicked")
|
||||||
file_manager = QFileManager(self)
|
file_manager = self.QFileManager(self.module.model.FILE_EXTENSION, parent=self)
|
||||||
file_name = file_manager.loadFileDialog()
|
file_name = file_manager.loadFileDialog()
|
||||||
if file_name:
|
if file_name:
|
||||||
self.module.controller.load_pulse_sequence(file_name)
|
try:
|
||||||
|
self.module.controller.load_pulse_sequence(file_name)
|
||||||
|
except KeyError:
|
||||||
|
self.module.nqrduck_signal.emit(
|
||||||
|
"notification",
|
||||||
|
[
|
||||||
|
"Error",
|
||||||
|
"Error loading pulse sequence - maybe the version of the pulse sequence is not compatible?",
|
||||||
|
],
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
class EventOptionsWidget(QWidget):
|
class EventOptionsWidget(QWidget):
|
||||||
|
@ -615,51 +624,3 @@ class AddEventDialog(QDialog):
|
||||||
return (QValidator.State.Invalid, value, position)
|
return (QValidator.State.Invalid, value, position)
|
||||||
|
|
||||||
return (QValidator.State.Acceptable, value, position)
|
return (QValidator.State.Acceptable, value, position)
|
||||||
|
|
||||||
|
|
||||||
# This class should be refactored in the module view so it can be used by all modules
|
|
||||||
class QFileManager:
|
|
||||||
"""This class provides methods for opening and saving files."""
|
|
||||||
|
|
||||||
def __init__(self, parent=None):
|
|
||||||
"""Initializes the QFileManager."""
|
|
||||||
self.parent = parent
|
|
||||||
|
|
||||||
def loadFileDialog(self) -> str:
|
|
||||||
"""Opens a file dialog for the user to select a file to open.
|
|
||||||
|
|
||||||
Returns:
|
|
||||||
str: The path of the file selected by the user.
|
|
||||||
"""
|
|
||||||
fileName, _ = QFileDialog.getOpenFileName(
|
|
||||||
self.parent,
|
|
||||||
"QFileManager - Open File",
|
|
||||||
"",
|
|
||||||
"Quack Files (*.quack);;All Files (*)",
|
|
||||||
options=QFileDialog.Option.ReadOnly,
|
|
||||||
)
|
|
||||||
if fileName:
|
|
||||||
return fileName
|
|
||||||
else:
|
|
||||||
return None
|
|
||||||
|
|
||||||
def saveFileDialog(self) -> str:
|
|
||||||
"""Opens a file dialog for the user to select a file to save.
|
|
||||||
|
|
||||||
Returns:
|
|
||||||
str: The path of the file selected by the user.
|
|
||||||
"""
|
|
||||||
fileName, _ = QFileDialog.getSaveFileName(
|
|
||||||
self.parent,
|
|
||||||
"QFileManager - Save File",
|
|
||||||
"",
|
|
||||||
"Quack Files (*.quack);;All Files (*)",
|
|
||||||
options=QFileDialog.Option.DontUseNativeDialog,
|
|
||||||
)
|
|
||||||
if fileName:
|
|
||||||
# Append the .quack extension if not present
|
|
||||||
if not fileName.endswith(".quack"):
|
|
||||||
fileName += ".quack"
|
|
||||||
return fileName
|
|
||||||
else:
|
|
||||||
return None
|
|
||||||
|
|
Loading…
Reference in a new issue