mirror of
https://github.com/nqrduck/nqrduck-measurement.git
synced 2025-01-03 13:18:11 +00:00
Added saving and loading of measurements.
This commit is contained in:
parent
bfdbe796fb
commit
12b72fe263
3 changed files with 70 additions and 0 deletions
|
@ -1,4 +1,5 @@
|
||||||
import logging
|
import logging
|
||||||
|
import json
|
||||||
from PyQt6.QtCore import pyqtSlot, pyqtSignal
|
from PyQt6.QtCore import pyqtSlot, pyqtSignal
|
||||||
from PyQt6.QtWidgets import QWidget
|
from PyQt6.QtWidgets import QWidget
|
||||||
from nqrduck.module.module_controller import ModuleController
|
from nqrduck.module.module_controller import ModuleController
|
||||||
|
@ -100,3 +101,43 @@ class MeasurementController(ModuleController):
|
||||||
):
|
):
|
||||||
logger.debug("Received set averages failure.")
|
logger.debug("Received set averages failure.")
|
||||||
self.set_averages_failure.emit()
|
self.set_averages_failure.emit()
|
||||||
|
|
||||||
|
def save_measurement(self, file_name : str) -> None:
|
||||||
|
"""Save measurement to file.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
file_name (str): Path to file.
|
||||||
|
"""
|
||||||
|
logger.debug("Saving measurement.")
|
||||||
|
if not self.module.model.measurements:
|
||||||
|
logger.debug("No measurement to save.")
|
||||||
|
return
|
||||||
|
|
||||||
|
measurement = self.module.model.measurements[-1].to_json()
|
||||||
|
|
||||||
|
with open(file_name, "w") as f:
|
||||||
|
json.dump(measurement, f)
|
||||||
|
|
||||||
|
def load_measurement(self, file_name: str) -> None:
|
||||||
|
"""Load measurement from file.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
file_name (str): Path to file.
|
||||||
|
"""
|
||||||
|
logger.debug("Loading measurement.")
|
||||||
|
|
||||||
|
try:
|
||||||
|
with open(file_name, "r") as f:
|
||||||
|
measurement = Measurement.from_json(json.load(f))
|
||||||
|
self.module.model.add_measurement(measurement)
|
||||||
|
self.module.model.displayed_measurement = measurement
|
||||||
|
except FileNotFoundError:
|
||||||
|
logger.debug("File not found.")
|
||||||
|
self.module.nqrduck_signal.emit(
|
||||||
|
"notification", ["Error", "File not found."]
|
||||||
|
)
|
||||||
|
except (json.JSONDecodeError, KeyError):
|
||||||
|
logger.debug("File is not a valid measurement file.")
|
||||||
|
self.module.nqrduck_signal.emit(
|
||||||
|
"notification", ["Error", "File is not a valid measurement file."]
|
||||||
|
)
|
||||||
|
|
|
@ -7,6 +7,7 @@ logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
class MeasurementModel(ModuleModel):
|
class MeasurementModel(ModuleModel):
|
||||||
|
|
||||||
|
FILE_EXTENSION = ".meas"
|
||||||
# This constants are used to determine which view is currently displayed.
|
# This constants are used to determine which view is currently displayed.
|
||||||
FFT_VIEW = "fft"
|
FFT_VIEW = "fft"
|
||||||
TIME_VIEW = "time"
|
TIME_VIEW = "time"
|
||||||
|
|
|
@ -72,6 +72,11 @@ class MeasurementView(ModuleView):
|
||||||
self._ui_form.importButton.setIcon(Logos.Load16x16())
|
self._ui_form.importButton.setIcon(Logos.Load16x16())
|
||||||
self._ui_form.importButton.setIconSize(self._ui_form.importButton.size())
|
self._ui_form.importButton.setIconSize(self._ui_form.importButton.size())
|
||||||
|
|
||||||
|
# Connect measurement save and load buttons
|
||||||
|
self._ui_form.exportButton.clicked.connect(self.on_measurement_save_button_clicked)
|
||||||
|
self._ui_form.importButton.clicked.connect(self.on_measurement_load_button_clicked)
|
||||||
|
|
||||||
|
|
||||||
def init_plotter(self) -> None:
|
def init_plotter(self) -> None:
|
||||||
"""Initialize plotter with the according units for time domain."""
|
"""Initialize plotter with the according units for time domain."""
|
||||||
plotter = self._ui_form.plotter
|
plotter = self._ui_form.plotter
|
||||||
|
@ -164,6 +169,27 @@ class MeasurementView(ModuleView):
|
||||||
logger.debug("Set averages failure.")
|
logger.debug("Set averages failure.")
|
||||||
self._ui_form.averagesEdit.setStyleSheet("border: 1px solid red;")
|
self._ui_form.averagesEdit.setStyleSheet("border: 1px solid red;")
|
||||||
|
|
||||||
|
@pyqtSlot()
|
||||||
|
def on_measurement_save_button_clicked(self) -> None:
|
||||||
|
"""Slot for when the measurement save button is clicked."""
|
||||||
|
logger.debug("Measurement save button clicked.")
|
||||||
|
|
||||||
|
file_manager = self.QFileManager(self.module.model.FILE_EXTENSION, parent=self.widget)
|
||||||
|
file_name = file_manager.saveFileDialog()
|
||||||
|
if file_name:
|
||||||
|
self.module.controller.save_measurement(file_name)
|
||||||
|
|
||||||
|
@pyqtSlot()
|
||||||
|
def on_measurement_load_button_clicked(self) -> None:
|
||||||
|
"""Slot for when the measurement load button is clicked."""
|
||||||
|
logger.debug("Measurement load button clicked.")
|
||||||
|
|
||||||
|
file_manager = self.QFileManager(self.module.model.FILE_EXTENSION, parent=self.widget)
|
||||||
|
file_name = file_manager.loadFileDialog()
|
||||||
|
if file_name:
|
||||||
|
self.module.controller.load_measurement(file_name)
|
||||||
|
|
||||||
|
|
||||||
class MeasurementDialog(QDialog):
|
class MeasurementDialog(QDialog):
|
||||||
""" This Dialog is shown when the measurement is started and therefore blocks the main window.
|
""" This Dialog is shown when the measurement is started and therefore blocks the main window.
|
||||||
It shows the duck animation and a message."""
|
It shows the duck animation and a message."""
|
||||||
|
@ -195,3 +221,5 @@ class MeasurementView(ModuleView):
|
||||||
continue
|
continue
|
||||||
self.spinner_movie.stop()
|
self.spinner_movie.stop()
|
||||||
super().hide()
|
super().hide()
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue