Artemis 4 RC1

This commit is contained in:
Marco Dalla Tiezza
2024-05-28 22:40:45 +02:00
parent acc44c93b3
commit 528c816508
254 changed files with 14757 additions and 30137 deletions

124
artemis/ui/signaleditor.py Normal file
View File

@@ -0,0 +1,124 @@
from PySide6.QtQml import QQmlApplicationEngine
from PySide6.QtCore import QObject, Signal, Slot
from artemis.utils.path_utils import *
from artemis.utils.generic_utils import *
from artemis.utils.sql_utils import ArtemisSignal
class UIsignaleditor(QObject):
# Python > QML Signals
show_ui = Signal()
load = Signal(str, list, bool)
def __init__(self, parent):
super().__init__()
self._parent = parent
self._engine = QQmlApplicationEngine()
self._engine.load('qrc:/ui/SignalEditor.qml')
self._window = self._engine.rootObjects()[0]
self._connect()
def _connect(self):
# QML > Python connections
self._window.saveParam.connect(self.save)
self._window.deleteParam.connect(self.delete)
# Python > QML connections
self.show_ui.connect(self._window.show)
self.load.connect(self._window.load)
def load_signaleditor_ui(self, param_type, sig_param, is_new):
""" Load all the details of the selected signal
Args:
param_type (str): Signal, Frequency, Bandwidth, Modulation, Mode,
ACF, Location
sig_param (list): a list formed as [id, value, description]
is_new (bool): If true, the windows open in an empty state ready to
be compiled by the user. If false, the windows will open all the
current parameter for the loaded signal, for editing or deleting purposes.
"""
if param_type == 'Signal' and not is_new:
sig_param = [
self._parent.loaded_sig.sig_id,
self._parent.loaded_sig.name,
self._parent.loaded_sig.description
]
self.load.emit(param_type, sig_param, is_new)
self.show_ui.emit()
@Slot(str, list, bool)
def save(self, param_type, data, is_new):
""" Save new signal parameters or update the existing ones.
"""
data = data.toVariant()
if is_new:
if param_type == 'Signal':
self._parent.loaded_sig = ArtemisSignal(self._parent.loaded_db)
self._parent.loaded_sig.insert_signal(data[1], data[2])
elif param_type == 'Frequency':
self._parent.loaded_sig.insert_frequency(int(data[1]), data[2])
elif param_type == 'Bandwidth':
self._parent.loaded_sig.insert_bandwidth(int(data[1]), data[2])
elif param_type == 'Modulation':
self._parent.loaded_sig.insert_modulation(data[1], data[2])
elif param_type == 'Mode':
self._parent.loaded_sig.insert_mode(data[1], data[2])
elif param_type == 'ACF':
self._parent.loaded_sig.insert_acf(data[1], data[2])
elif param_type == 'Location':
self._parent.loaded_sig.insert_location(data[1], data[2])
else:
if param_type == 'Signal':
self._parent.loaded_sig.update_signal(data[0], data[1], data[2])
elif param_type == 'Frequency':
self._parent.loaded_sig.update_frequency(data[0], int(data[1]), data[2])
elif param_type == 'Bandwidth':
self._parent.loaded_sig.update_bandwidth(data[0], int(data[1]), data[2])
elif param_type == 'Modulation':
self._parent.loaded_sig.update_modulation(data[0], data[1], data[2])
elif param_type == 'Mode':
self._parent.loaded_sig.update_mode(data[0], data[1], data[2])
elif param_type == 'ACF':
self._parent.loaded_sig.update_acf(data[0], data[1], data[2])
elif param_type == 'Location':
self._parent.loaded_sig.update_location(data[0], data[1], data[2])
self._parent.load_db(self._parent.loaded_db.db_dir_name)
@Slot(str, int)
def delete(self, param_type, id):
""" Delete a signal parameter or the signal itself (with all the parameters and documents).
All the entries in the documents table are automatically beign deleted due to
foreign-key cascade propagation
"""
if param_type == 'Signal':
self._parent.loaded_sig.delete_signal()
for doc in self._parent.loaded_sig.documents:
doc_file_name = '{}.{}'.format(str(doc[0]), doc[1])
doc_file_path = self._parent.loaded_db.media_dir / doc_file_name
delete_file(doc_file_path)
elif param_type == 'Frequency':
self._parent.loaded_sig.delete_frequency(id)
elif param_type == 'Bandwidth':
self._parent.loaded_sig.delete_bandwidth(id)
elif param_type == 'Modulation':
self._parent.loaded_sig.delete_modulation(id)
elif param_type == 'Mode':
self._parent.loaded_sig.delete_mode(id)
elif param_type == 'ACF':
self._parent.loaded_sig.delete_acf(id)
elif param_type == 'Location':
self._parent.loaded_sig.delete_location(id)
self._parent.load_db(self._parent.loaded_db.db_dir_name)