diff --git a/double_text_button.py b/double_text_button.py index 050b110..45eb6a1 100644 --- a/double_text_button.py +++ b/double_text_button.py @@ -10,7 +10,7 @@ class DoubleTextButton(QPushButton): self.__text_a = text_a self.__text_b = text_b - def set_slave_filters(self, simple_ones, + def set_slave_filters(self, simple_ones = None, radio_1 = None, ruled_by_radio_1 = None, radio_2 = None, diff --git a/main.py b/main.py index 0ced69f..fee30cb 100644 --- a/main.py +++ b/main.py @@ -13,7 +13,7 @@ from PyQt5.QtWidgets import (QMainWindow, QListWidgetItem, QTreeView, QTreeWidgetItem) -from PyQt5.QtGui import QPixmap, QStandardItemModel, QStandardItem +from PyQt5.QtGui import QPixmap from PyQt5 import uic from PyQt5.QtCore import (QFileInfo, QSize, @@ -108,7 +108,7 @@ class MyApp(QMainWindow, Ui_MainWindow): self.upper_freq_confidence) ) - self.apply_remove_freq_filter_btn.set_texts("Apply", "Remove") + self.apply_remove_freq_filter_btn.set_texts(Constants.APPLY, Constants.REMOVE) self.apply_remove_freq_filter_btn.set_slave_filters( [ *self.frequency_filters_btns, @@ -184,7 +184,7 @@ class MyApp(QMainWindow, Ui_MainWindow): self.upper_band_confidence) ) - self.apply_remove_band_filter_btn.set_texts("Apply", "Remove") + self.apply_remove_band_filter_btn.set_texts(Constants.APPLY, Constants.REMOVE) self.apply_remove_band_filter_btn.set_slave_filters( [ self.include_undef_bands, @@ -228,7 +228,7 @@ class MyApp(QMainWindow, Ui_MainWindow): self.number_stations_btn, self.time_signal_btn,] - self.apply_remove_cat_filter_btn.set_texts('Apply', 'Remove') + self.apply_remove_cat_filter_btn.set_texts(Constants.APPLY, Constants.REMOVE) self.apply_remove_cat_filter_btn.set_slave_filters([*self.cat_filter_btns, self.cat_at_least_one, self.cat_all]) @@ -274,7 +274,7 @@ class MyApp(QMainWindow, Ui_MainWindow): self.set_mode_tree_widget() self.mode_tree_widget.itemSelectionChanged.connect(self.manage_mode_selections) self.reset_mode_filters_btn.clicked.connect(self.reset_mode_filters) - self.apply_remove_mode_filter_btn.set_texts("Apply", "Remove") + self.apply_remove_mode_filter_btn.set_texts(Constants.APPLY, Constants.REMOVE) self.apply_remove_mode_filter_btn.set_slave_filters([self.mode_tree_widget, self.include_unknown_modes_btn]) self.apply_remove_mode_filter_btn.clicked.connect(self.display_signals) @@ -283,10 +283,17 @@ class MyApp(QMainWindow, Ui_MainWindow): self.modulation_list.addItems(Constants.MODULATIONS) self.search_bar_modulation.textEdited.connect(self.show_matching_modulations) + self.apply_remove_modulation_filter_btn.set_texts(Constants.APPLY, Constants.REMOVE) + self.apply_remove_modulation_filter_btn.set_slave_filters([self.search_bar_modulation, + self.modulation_list]) + self.apply_remove_modulation_filter_btn.clicked.connect(self.display_signals) + self.reset_modulation_filters_btn.clicked.connect(self.reset_modulation_filters) # ########################################################################################## self.load_db() + + # Left list widget and search bar. self.search_bar.textChanged.connect(self.display_signals) self.result_list.addItems(self.signal_names) self.result_list.currentItemChanged.connect(self.display_specs) @@ -319,8 +326,12 @@ class MyApp(QMainWindow, Ui_MainWindow): @pyqtSlot(str) def show_matching_modulations(self, text): - pass - # for modulation in + for index in range(self.modulation_list.count()): + item = self.modulation_list.item(index) + if self.search_bar_modulation.text().upper() in item.text() or item.isSelected(): + item.setHidden(False) + else: + item.setHidden(True) def set_mode_tree_widget(self): for parent, children in Constants.MODES.items(): @@ -434,7 +445,7 @@ class MyApp(QMainWindow, Ui_MainWindow): else: self.signal_names = self.db.index self.total_signals = len(self.signal_names) - self.db.fillna("N/A", inplace = True) + self.db.fillna(Constants.UNKNOWN, inplace = True) self.db["url_clicked"] = False self.update_status_tip(self.total_signals) @@ -536,11 +547,12 @@ class MyApp(QMainWindow, Ui_MainWindow): text = self.search_bar.text() available_signals = 0 for index, signal in enumerate(self.signal_names): - if text.lower() in signal.lower() and \ - self.frequency_filters_ok(signal) and \ - self.band_filters_ok(signal) and \ - self.category_filters_ok(signal) and \ - self.mode_filters_ok(signal): + if all([text.lower() in signal.lower() , + self.frequency_filters_ok(signal) , + self.band_filters_ok(signal) , + self.category_filters_ok(signal) , + self.mode_filters_ok(signal) , + self.modulation_filters_ok(signal)]): self.result_list.item(index).setHidden(False) available_signals += 1 self.update_status_tip(available_signals) @@ -599,6 +611,14 @@ class MyApp(QMainWindow, Ui_MainWindow): if self.include_unknown_modes_btn.isChecked(): self.include_unknown_modes_btn.setChecked(False) + @pyqtSlot() + def reset_modulation_filters(self): + reset_apply_remove_btn(self.apply_remove_modulation_filter_btn) + self.search_bar_modulation.setText('') + for i in range(self.modulation_list.count()): + if self.modulation_list.item(i).isSelected(): + self.modulation_list.item(i).setSelected(False) + def frequency_filters_ok(self, signal_name): if not self.apply_remove_freq_filter_btn.isChecked(): return True @@ -700,6 +720,15 @@ class MyApp(QMainWindow, Ui_MainWindow): ok.append(item.text(0) == signal_mode) return any(ok) + def modulation_filters_ok(self, signal_name): + if not self.apply_remove_modulation_filter_btn.isChecked(): + return True + signal_modulation = self.db.at[signal_name, "modulation"] + for item in self.modulation_list.selectedItems(): + if item.text() == signal_modulation: + return True + return False + @staticmethod def filters_ok(spinbox, filter_unit, confidence, sign = 1): band_filter = spinbox.value() * Constants.CONVERSION_FACTORS[filter_unit.currentText()] @@ -755,7 +784,7 @@ class MyApp(QMainWindow, Ui_MainWindow): self.name_lab.setText("No signal") self.name_lab.setAlignment(Qt.AlignHCenter) for lab in self.property_labels: - lab.setText("N/A") + lab.setText(Constants.UNKNOWN) for lab in self.category_labels: lab.setStyleSheet(f"color: {Constants.INACTIVE_COLOR};") self.set_band_range() @@ -765,13 +794,13 @@ class MyApp(QMainWindow, Ui_MainWindow): def is_undef_freq(current_signal): lower_freq = current_signal.at["inf_freq"] upper_freq = current_signal.at["sup_freq"] - return lower_freq == 'N/A' or upper_freq == 'N/A' + return lower_freq == Constants.UNKNOWN or upper_freq == Constants.UNKNOWN @staticmethod def is_undef_band(current_signal): lower_band = current_signal.at["inf_band"] upper_band = current_signal.at["sup_band"] - return lower_band == 'N/A' or upper_band == 'N/A' + return lower_band == Constants.UNKNOWN or upper_band == Constants.UNKNOWN @classmethod def format_numbers(cls, lower, upper): @@ -848,6 +877,7 @@ class MyApp(QMainWindow, Ui_MainWindow): self.reset_band_filters_btn.clicked.emit() self.reset_cat_filters_btn.clicked.emit() self.reset_mode_filters_btn.clicked.emit() + self.reset_modulation_filters_btn.clicked.emit() @pyqtSlot() def go_to_web_page_signal(self): diff --git a/main_window.ui b/main_window.ui index 98cd6e8..c95046d 100644 --- a/main_window.ui +++ b/main_window.ui @@ -7,7 +7,7 @@ 0 0 1206 - 638 + 634 @@ -3938,7 +3938,10 @@ QWidget#xFM_container, QWidget#xSK_container, QWidget#xSB_container{ - + + + true + 12 @@ -3949,6 +3952,9 @@ QWidget#xFM_container, QWidget#xSK_container, QWidget#xSB_container{ Apply + + true + diff --git a/utilities.py b/utilities.py index 94436f5..d36d054 100644 --- a/utilities.py +++ b/utilities.py @@ -46,32 +46,34 @@ class Constants(object): "RAW": [], "SC-FDMA": [],} ) - UNKNOWN = "Unknown" - MODULATIONS = ["8VSB", - "AFSK", - "AM", - "BFSK", - "C4FM", - "CDMA", - "COFDM", - "CW", - "FFSK", - "FM", - "FMCW", - "FMOP", - "FSK", - "GFSK", - "GMSK", - "IFK", - "MFSK", - "MSK", - "OFDM", - "OOK", - "PAM", - "PPM", - "PSK", - "QAM", - "TDMA",] + APPLY = _ReadOnlyProperty("Apply") + REMOVE = _ReadOnlyProperty("Remove") + UNKNOWN = _ReadOnlyProperty("N/A") + MODULATIONS = _ReadOnlyProperty(["8VSB", + "AFSK", + "AM", + "BFSK", + "C4FM", + "CDMA", + "COFDM", + "CW", + "FFSK", + "FM", + "FMCW", + "FMOP", + "FSK", + "GFSK", + "GMSK", + "IFK", + "MFSK", + "MSK", + "OFDM", + "OOK", + "PAM", + "PPM", + "PSK", + "QAM", + "TDMA",]) def reset_apply_remove_btn(button): @@ -79,7 +81,6 @@ def reset_apply_remove_btn(button): button.setChecked(False) button.clicked.emit() - def checksum_ok(data, what): code = hashlib.sha256() code.update(data)