Files
HackRF-Treasure-Chest/Software/Universal Radio Hacker/src/urh/controller/widgets/ModulationSettingsWidget.py
RocketGod e7667c1d93 Add urh
2022-09-22 13:46:47 -07:00

88 lines
3.6 KiB
Python

from PyQt5.QtCore import pyqtSlot
from PyQt5.QtWidgets import QWidget
from urh import settings
from urh.controller.dialogs.ModulatorDialog import ModulatorDialog
from urh.signalprocessing.Modulator import Modulator
from urh.ui.ui_modulation_settings_widget import Ui_ModulationSettings
class ModulationSettingsWidget(QWidget):
def __init__(self, modulators, selected_index=0, signal_tree_model=None, parent=None):
"""
:type modulators: list of Modulator
:param parent:
"""
super().__init__(parent)
self.ui = Ui_ModulationSettings()
self.ui.setupUi(self)
self.ui.labelModulationProfile.setVisible(settings.read("multiple_modulations", False, bool))
self.ui.comboBoxModulationProfiles.setVisible(settings.read("multiple_modulations", False, bool))
self.signal_tree_model = signal_tree_model
self.modulators = modulators # type: list[Modulator]
for modulator in self.modulators:
self.ui.comboBoxModulationProfiles.addItem(modulator.name)
self.ui.comboBoxModulationProfiles.setCurrentIndex(selected_index)
self.show_selected_modulation_infos()
self.create_connects()
@property
def selected_modulator(self) -> Modulator:
return self.modulators[self.ui.comboBoxModulationProfiles.currentIndex()]
@selected_modulator.setter
def selected_modulator(self, value: Modulator):
if value in self.modulators:
self.ui.comboBoxModulationProfiles.setCurrentIndex(self.modulators.index(value))
def create_connects(self):
self.ui.comboBoxModulationProfiles.currentIndexChanged.connect(self.on_cb_modulation_type_current_index_changed)
self.ui.btnConfigurationDialog.clicked.connect(self.on_btn_configuration_dialog_clicked)
def show_selected_modulation_infos(self):
modulator = self.selected_modulator
self.ui.labelCarrierFrequencyValue.setText(modulator.carrier_frequency_str)
self.ui.labelSamplesPerSymbolValue.setText(modulator.samples_per_symbol_str)
self.ui.labelSampleRateValue.setText(modulator.sample_rate_str)
self.ui.labelModulationTypeValue.setText(modulator.modulation_type_verbose)
self.ui.labelParameters.setText(modulator.parameter_type_str)
self.ui.labelParameterValues.setText(modulator.parameters_string)
self.ui.labelBitsPerSymbol.setText(str(modulator.bits_per_symbol))
@pyqtSlot()
def on_cb_modulation_type_current_index_changed(self):
self.show_selected_modulation_infos()
@pyqtSlot()
def on_btn_configuration_dialog_clicked(self):
dialog = ModulatorDialog(self.modulators, tree_model=self.signal_tree_model, parent=self)
dialog.ui.comboBoxCustomModulations.setCurrentIndex(self.ui.comboBoxModulationProfiles.currentIndex())
dialog.finished.connect(self.refresh_modulators_from_dialog)
dialog.show()
dialog.initialize("10101011010010")
@pyqtSlot()
def refresh_modulators_from_dialog(self):
current_index = 0
if type(self.sender()) == ModulatorDialog:
current_index = self.sender().ui.comboBoxCustomModulations.currentIndex()
self.ui.comboBoxModulationProfiles.clear()
for modulator in self.modulators:
self.ui.comboBoxModulationProfiles.addItem(modulator.name)
self.ui.comboBoxModulationProfiles.setCurrentIndex(current_index)
self.show_selected_modulation_infos()
if __name__ == '__main__':
from PyQt5.QtWidgets import QApplication
app = QApplication([""])
w = ModulationSettingsWidget([Modulator("test")])
w.show()
app.exec()