def set_network_sdr_send_button_visibility(self): is_plugin_enabled = PluginManager().is_plugin_enabled("NetworkSDRInterface") self.ui.btnNetworkSDRSend.setVisible(is_plugin_enabled)
def set_rfcat_button_visibility(self): is_plugin_enabled = PluginManager().is_plugin_enabled("RfCat") self.ui.btnRfCatSend.setVisible(is_plugin_enabled)
def create_context_menu(self): self.paste_position = int( self.mapToScene(self.context_menu_position).x()) menu = QMenu(self) if self.save_enabled: menu.addAction(self.save_action) menu.addAction(self.save_as_action) menu.addSeparator() menu.addAction(self.copy_action) self.copy_action.setEnabled(self.something_is_selected) menu.addAction(self.paste_action) self.paste_action.setEnabled(self.stored_item is not None) menu.addSeparator() if PluginManager().is_plugin_enabled("InsertSine"): menu.addAction(self.insert_sine_action) self._add_zoom_actions_to_menu(menu) if self.something_is_selected: menu.addAction(self.delete_action) crop_action = menu.addAction(self.tr("Crop to selection")) crop_action.triggered.connect(self.on_crop_action_triggered) mute_action = menu.addAction(self.tr("Mute selection")) mute_action.triggered.connect(self.on_mute_action_triggered) if self.create_new_signal_enabled: create_action = menu.addAction( self.tr("Create signal from selection")) create_action.setIcon(QIcon.fromTheme("document-new")) create_action.triggered.connect( self.on_create_action_triggered) menu.addSeparator() if hasattr(self, "selected_messages"): selected_messages = self.selected_messages else: selected_messages = [] if len(selected_messages) == 1: selected_msg = selected_messages[0] else: selected_msg = None self.participant_actions = {} if len(selected_messages) > 0 and self.participants_assign_enabled: participant_group = QActionGroup(self) participant_menu = menu.addMenu("Participant") none_participant_action = participant_menu.addAction("None") none_participant_action.setCheckable(True) none_participant_action.setActionGroup(participant_group) none_participant_action.triggered.connect( self.on_none_participant_action_triggered) if selected_msg and selected_msg.participant is None: none_participant_action.setChecked(True) for participant in self.participants: pa = participant_menu.addAction(participant.name + " (" + participant.shortname + ")") pa.setCheckable(True) pa.setActionGroup(participant_group) if selected_msg and selected_msg.participant == participant: pa.setChecked(True) self.participant_actions[pa] = participant pa.triggered.connect(self.on_participant_action_triggered) if self.scene_type == 0 and self.something_is_selected: menu.addSeparator() noise_action = menu.addAction( self.tr("Set noise level from Selection")) noise_action.triggered.connect(self.on_noise_action_triggered) menu.addSeparator() menu.addAction(self.undo_action) menu.addAction(self.redo_action) return menu
def __init__(self, *args): super().__init__(*args) self.ui = Ui_MainWindow() self.ui.setupUi(self) self.project_save_timer = QTimer() self.project_manager = ProjectManager(self) self.plugin_manager = PluginManager() self.signal_tab_controller = SignalTabController(self.project_manager, parent=self.ui.tab_interpretation) self.ui.tab_interpretation.layout().addWidget(self.signal_tab_controller) self.compare_frame_controller = CompareFrameController(parent=self.ui.tab_protocol, plugin_manager=self.plugin_manager, project_manager=self.project_manager) self.ui.tab_protocol.layout().addWidget(self.compare_frame_controller) self.generator_tab_controller = GeneratorTabController(self.compare_frame_controller, self.project_manager, self.compare_frame_controller.decodings, parent=self.ui.tab_generator) self.simulator_tab_controller = SimulatorTabController(parent=self.ui.tab_simulator, compare_frame_controller=self.compare_frame_controller, generator_tab_controller=self.generator_tab_controller, project_manager=self.project_manager) self.ui.tab_simulator.layout().addWidget(self.simulator_tab_controller) self.undo_group = QUndoGroup() self.undo_group.addStack(self.signal_tab_controller.signal_undo_stack) self.undo_group.addStack(self.compare_frame_controller.protocol_undo_stack) self.undo_group.addStack(self.generator_tab_controller.generator_undo_stack) self.undo_group.setActiveStack(self.signal_tab_controller.signal_undo_stack) self.ui.progressBar.hide() gtc = self.generator_tab_controller gtc.ui.splitter.setSizes([gtc.width() / 0.7, gtc.width() / 0.3]) self.ui.tab_generator.layout().addWidget(self.generator_tab_controller) self.signal_protocol_dict = {} """:type: dict[SignalFrameController,ProtocolAnalyzer]""" self.signal_tab_controller.ui.lLoadingFile.setText("") self.ui.lnEdtTreeFilter.setClearButtonEnabled(True) group = QActionGroup(self) self.ui.actionFSK.setActionGroup(group) self.ui.actionOOK.setActionGroup(group) self.ui.actionNone.setActionGroup(group) self.ui.actionPSK.setActionGroup(group) self.update_confirm_dialogs_checkbox() self.set_hold_shift_checkbox() self.signal_tab_controller.ui.lCtrlStatus.clear() self.signal_tab_controller.ui.lShiftStatus.clear() self.recentFileActionList = [] self.create_connects() self.updateRecentActionList() OptionsController.write_default_options() self.filemodel = FileSystemModel(self) path = QDir.homePath() self.filemodel.setIconProvider(FileIconProvider()) self.filemodel.setRootPath(path) self.file_proxy_model = FileFilterProxyModel(self) self.file_proxy_model.setSourceModel(self.filemodel) self.ui.fileTree.setModel(self.file_proxy_model) self.ui.fileTree.setRootIndex(self.file_proxy_model.mapFromSource(self.filemodel.index(path))) self.ui.fileTree.setToolTip(path) self.ui.fileTree.header().setSectionResizeMode(0, QHeaderView.Stretch) self.ui.fileTree.header().setSectionResizeMode(1, QHeaderView.Interactive) self.ui.fileTree.setFocus() self.generator_tab_controller.table_model.cfc = self.compare_frame_controller self.ui.actionConvert_Folder_to_Project.setEnabled(False) undo_action = self.undo_group.createUndoAction(self) undo_action.setIcon(QIcon.fromTheme("edit-undo")) undo_action.setShortcut(QKeySequence.Undo) self.ui.menuEdit.insertAction(self.ui.actionMinimize_all, undo_action) redo_action = self.undo_group.createRedoAction(self) redo_action.setIcon(QIcon.fromTheme("edit-redo")) redo_action.setShortcut(QKeySequence.Redo) self.ui.splitter.setSizes([0, 1]) self.ui.menuEdit.insertAction(self.ui.actionMinimize_all, redo_action) self.refresh_main_menu() self.apply_default_view() self.project_save_timer.start(ProjectManager.AUTOSAVE_INTERVAL_MINUTES * 60 * 1000)
def __init__(self, freq, samp_rate, bw, gain, device, noise, center, bit_length, tolerance, modulation_type_index, parent=None): super().__init__(parent) self.ui = Ui_SniffProtocol() self.ui.setupUi(self) self.setAttribute(Qt.WA_DeleteOnClose) self.ui.spinBoxFreq.setValue(freq) self.ui.spinBoxSampleRate.setValue(samp_rate) self.ui.spinBoxBandwidth.setValue(bw) self.ui.spinBoxGain.setValue(gain) self.ui.spinboxNoise.setValue(noise) self.ui.spinboxCenter.setValue(center) self.ui.spinboxBitLen.setValue(bit_length) self.ui.spinboxErrorTolerance.setValue(tolerance) self.ui.comboxModulation.setCurrentIndex(modulation_type_index) self.ui.btnStop.setEnabled(False) self.ui.btnClear.setEnabled(False) self.ui.cbDevice.clear() items = [] bh = BackendHandler() for device_name in bh.DEVICE_NAMES: dev = bh.device_backends[device_name.lower()] if dev.is_enabled and dev.supports_rx: items.append(device_name) pm = PluginManager() if pm.is_plugin_enabled("NetworkSDRInterface"): items.append(NetworkSDRInterfacePlugin.NETWORK_SDR_NAME) self.ui.cbDevice.addItems(items) del bh if device in items: self.ui.cbDevice.setCurrentIndex(items.index(device)) if self.ui.cbDevice.count() == 0: Errors.no_device() self.close() return device = self.ui.cbDevice.currentText() self.sniffer = ProtocolSniffer(bit_length, center, noise, tolerance, modulation_type_index, samp_rate, freq, gain, bw, device) self.set_object_visibility() self.sniffer.usrp_ip = self.ui.lineEditIP.text() self.bw_sr_are_locked = self.ui.btnLockBWSR.isChecked() ipRange = "(?:[0-1]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])" ipRegex = QRegExp("^" + ipRange + "\\." + ipRange + "\\." + ipRange + "\\." + ipRange + "$") self.ui.lineEditIP.setValidator(QRegExpValidator(ipRegex)) # Auto Complete like a Boss completer = QCompleter() completer.setModel(QDirModel(completer)) self.ui.lineEditOutputFile.setCompleter(completer) self.create_connects()
def __init__(self, *args): super().__init__(*args) self.ui = Ui_MainWindow() self.ui.setupUi(self) util.set_splitter_stylesheet(self.ui.splitter) OptionsDialog.write_default_options() self.project_save_timer = QTimer() self.project_manager = ProjectManager(self) self.plugin_manager = PluginManager() self.signal_tab_controller = SignalTabController(self.project_manager, parent=self.ui.tab_interpretation) self.ui.tab_interpretation.layout().addWidget(self.signal_tab_controller) self.compare_frame_controller = CompareFrameController(parent=self.ui.tab_protocol, plugin_manager=self.plugin_manager, project_manager=self.project_manager) self.compare_frame_controller.ui.splitter.setSizes([1, 1000000]) self.ui.tab_protocol.layout().addWidget(self.compare_frame_controller) self.generator_tab_controller = GeneratorTabController(self.compare_frame_controller, self.project_manager, parent=self.ui.tab_generator) self.simulator_tab_controller = SimulatorTabController(parent=self.ui.tab_simulator, compare_frame_controller=self.compare_frame_controller, generator_tab_controller=self.generator_tab_controller, project_manager=self.project_manager) self.ui.tab_simulator.layout().addWidget(self.simulator_tab_controller) self.undo_group = QUndoGroup() self.undo_group.addStack(self.signal_tab_controller.signal_undo_stack) self.undo_group.addStack(self.compare_frame_controller.protocol_undo_stack) self.undo_group.addStack(self.generator_tab_controller.generator_undo_stack) self.undo_group.setActiveStack(self.signal_tab_controller.signal_undo_stack) self.cancel_action = QAction(self.tr("Cancel"), self) self.cancel_action.setShortcut(QKeySequence.Cancel if hasattr(QKeySequence, "Cancel") else "Esc") self.cancel_action.triggered.connect(self.on_cancel_triggered) self.cancel_action.setShortcutContext(Qt.WidgetWithChildrenShortcut) self.cancel_action.setIcon(QIcon.fromTheme("dialog-cancel")) self.addAction(self.cancel_action) self.participant_legend_model = ParticipantLegendListModel(self.project_manager.participants) self.ui.listViewParticipants.setModel(self.participant_legend_model) gtc = self.generator_tab_controller gtc.ui.splitter.setSizes([gtc.width() / 0.7, gtc.width() / 0.3]) self.ui.tab_generator.layout().addWidget(self.generator_tab_controller) self.signal_protocol_dict = {} # type: dict[SignalFrame, ProtocolAnalyzer] self.ui.lnEdtTreeFilter.setClearButtonEnabled(True) group = QActionGroup(self) self.ui.actionFSK.setActionGroup(group) self.ui.actionOOK.setActionGroup(group) self.ui.actionNone.setActionGroup(group) self.ui.actionPSK.setActionGroup(group) self.recentFileActionList = [] self.create_connects() self.init_recent_file_action_list(constants.SETTINGS.value("recentFiles", [])) self.filemodel = FileSystemModel(self) path = QDir.homePath() self.filemodel.setIconProvider(FileIconProvider()) self.filemodel.setRootPath(path) self.file_proxy_model = FileFilterProxyModel(self) self.file_proxy_model.setSourceModel(self.filemodel) self.ui.fileTree.setModel(self.file_proxy_model) self.ui.fileTree.setRootIndex(self.file_proxy_model.mapFromSource(self.filemodel.index(path))) self.ui.fileTree.setToolTip(path) self.ui.fileTree.header().setSectionResizeMode(0, QHeaderView.ResizeToContents) self.ui.fileTree.header().setSectionResizeMode(1, QHeaderView.Stretch) self.ui.fileTree.setFocus() self.generator_tab_controller.table_model.cfc = self.compare_frame_controller self.ui.actionConvert_Folder_to_Project.setEnabled(False) undo_action = self.undo_group.createUndoAction(self) undo_action.setIcon(QIcon.fromTheme("edit-undo")) undo_action.setShortcut(QKeySequence.Undo) self.ui.menuEdit.insertAction(self.ui.actionDecoding, undo_action) redo_action = self.undo_group.createRedoAction(self) redo_action.setIcon(QIcon.fromTheme("edit-redo")) redo_action.setShortcut(QKeySequence.Redo) self.ui.menuEdit.insertAction(self.ui.actionDecoding, redo_action) self.ui.menuEdit.insertSeparator(self.ui.actionDecoding) self.ui.actionAbout_Qt.setIcon(QIcon(":/qt-project.org/qmessagebox/images/qtlogo-64.png")) self.__set_non_project_warning_visibility() self.ui.splitter.setSizes([0, 1]) self.refresh_main_menu() self.apply_default_view(constants.SETTINGS.value('default_view', type=int)) self.project_save_timer.start(ProjectManager.AUTOSAVE_INTERVAL_MINUTES * 60 * 1000) self.ui.actionProject_settings.setVisible(False) self.ui.actionSave_project.setVisible(False)