125 lines
5.0 KiB
Python
125 lines
5.0 KiB
Python
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)
|