Artemis 4 RC1
This commit is contained in:
124
artemis/ui/signaleditor.py
Normal file
124
artemis/ui/signaleditor.py
Normal 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)
|
||||
Reference in New Issue
Block a user