From 10893b2937f0f1c2819ff9960c452f21f09e72a2 Mon Sep 17 00:00:00 2001 From: alessandro90 Date: Thu, 1 Nov 2018 12:29:31 +0100 Subject: [PATCH] Add category filters --- main.py | 168 ++- main_window.ui | 2718 ++++++++++++++++++++++++++++-------------------- 2 files changed, 1690 insertions(+), 1196 deletions(-) diff --git a/main.py b/main.py index 29db8cf..7695cbe 100644 --- a/main.py +++ b/main.py @@ -155,6 +155,14 @@ class MyApp(QMainWindow, Ui_MainWindow): self.lower_freq_filter_unit, self.lower_freq_confidence) ) + self.activate_low_freq_filter_btn.toggled.connect( + partial(self.set_min_value_upper_limit, + self.lower_freq_filter_unit, + self.lower_freq_spinbox, + self.upper_freq_filter_unit, + self.upper_freq_spinbox) + ) + self.activate_low_freq_filter_btn.clicked.connect( partial(self.set_band_filter_label, self.activate_low_freq_filter_btn, @@ -326,6 +334,13 @@ class MyApp(QMainWindow, Ui_MainWindow): self.lower_band_filter_unit, self.lower_band_confidence) ) + self.activate_low_band_filter_btn.toggled.connect( + partial(self.set_min_value_upper_limit, + self.lower_band_filter_unit, + self.lower_band_spinbox, + self.upper_band_filter_unit, + self.upper_band_spinbox) + ) self.activate_low_band_filter_btn.clicked.connect( partial(self.set_band_filter_label, self.activate_low_band_filter_btn, @@ -407,7 +422,36 @@ class MyApp(QMainWindow, Ui_MainWindow): self.apply_remove_band_filter_btn.clicked.connect(self.display_signals) self.reset_band_filters_btn.clicked.connect(partial(self.reset_fb_filters, 'band')) +# Manage category filters + + # Order matters! + self.cat_filter_btns = [self.military_btn, + self.radar_btn, + self.active_btn, + self.inactive_btn, + self.ham_btn, + self.commercial_btn, + self.aviation_btn, + self.marine_btn, + self.analogue_btn, + self.digital_btn, + self.trunked_btn, + self.utility_btn, + self.sat_btn, + self.navigation_btn, + self.interfering_btn, + 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_slave_filters([*self.cat_filter_btns, + self.cat_at_least_one, + self.cat_all]) + self.apply_remove_cat_filter_btn.clicked.connect(self.display_signals) + self.reset_cat_filters_btn.clicked.connect(self.reset_cat_filters) + # ####################################################################################### + self.reset_filters_btn.clicked.connect(self.reset_all_filters) UrlColors = namedtuple("UrlColors", ["inactive", "active", "clicked"]) @@ -559,33 +603,34 @@ class MyApp(QMainWindow, Ui_MainWindow): lower_spin_box, upper_combo_box, upper_spin_box): - unit_conversion = {'Hz' : ['kHz', 'MHz', 'GHz'], - 'kHz': ['MHz', 'GHz'], - 'MHz': ['GHz'] - } - lower_units = lower_combo_box.currentText() - upper_units = upper_combo_box.currentText() - lower_value = lower_spin_box.value() - upper_value = upper_spin_box.value() - inf_limit = (lower_value * self.conversion_factors[lower_units]) \ - // self.conversion_factors[upper_units] - counter = 0 - while inf_limit > upper_spin_box.maximum(): - counter += 1 - inf_limit //= 1000 - if upper_spin_box.minimum() != inf_limit: - upper_spin_box.setMinimum(inf_limit) - if counter > 0: - new_unit = unit_conversion[upper_units][counter - 1] - upper_combo_box.disconnect() - upper_combo_box.setCurrentText(new_unit) - upper_combo_box.currentTextChanged.connect( - partial(self.set_min_value_upper_limit, - lower_combo_box, - lower_spin_box, - upper_combo_box, - upper_spin_box) - ) + if lower_spin_box.isEnabled(): + unit_conversion = {'Hz' : ['kHz', 'MHz', 'GHz'], + 'kHz': ['MHz', 'GHz'], + 'MHz': ['GHz'] + } + lower_units = lower_combo_box.currentText() + upper_units = upper_combo_box.currentText() + lower_value = lower_spin_box.value() + upper_value = upper_spin_box.value() + inf_limit = (lower_value * self.conversion_factors[lower_units]) \ + // self.conversion_factors[upper_units] + counter = 0 + while inf_limit > upper_spin_box.maximum(): + counter += 1 + inf_limit //= 1000 + if upper_spin_box.minimum() != inf_limit: + upper_spin_box.setMinimum(inf_limit) + if counter > 0: + new_unit = unit_conversion[upper_units][counter - 1] + upper_combo_box.disconnect() + upper_combo_box.setCurrentText(new_unit) + upper_combo_box.currentTextChanged.connect( + partial(self.set_min_value_upper_limit, + lower_combo_box, + lower_spin_box, + upper_combo_box, + upper_spin_box) + ) @pyqtSlot() def set_band_filter_label(self, @@ -627,7 +672,7 @@ class MyApp(QMainWindow, Ui_MainWindow): elif not activate_low and activate_high: title = 'High-pass\n\n' else: - title = "Frequency range:\n\n" + title = "Selected range:\n\n" to_display = "Inactive" to_display = title + to_display range_lbl.setText(to_display) @@ -645,7 +690,10 @@ class MyApp(QMainWindow, Ui_MainWindow): text = self.search_bar.text() available_signals = 0 for signal in self.signal_names: - if text.lower() in signal.lower() and self.frequency_filters_ok(signal) and self.band_filters_ok(signal): + if text.lower() in signal.lower() and \ + self.frequency_filters_ok(signal) and \ + self.band_filters_ok(signal) and \ + self.category_filters_ok(signal): self.result_list.addItem(signal) available_signals += 1 self.update_status_tip(available_signals) @@ -661,17 +709,21 @@ class MyApp(QMainWindow, Ui_MainWindow): def reset_fb_filters(self, ftype): if ftype != 'freq' and ftype != 'band': raise ValueError("Wrong ftype in function 'reset_fb_filters'") - apply_remove_btn = getattr(self, 'apply_remove_' + ftype + '_filter_btn') + apply_remove_btn = getattr(self, 'apply_remove_' + ftype + '_filter_btn') include_undef_btn = getattr(self, 'include_undef_' + ftype + 's') - activate_low = getattr(self, 'activate_low_' + ftype + '_filter_btn') - activate_up = getattr(self, 'activate_up_' + ftype + '_filter_btn') - lower_unit = getattr(self, 'lower_' + ftype + '_filter_unit') - upper_unit = getattr(self, 'upper_' + ftype + '_filter_unit') - lower_spinbox = getattr(self, 'lower_' + ftype + '_spinbox') - upper_spinbox = getattr(self, 'upper_' + ftype + '_spinbox') - lower_confidence = getattr(self, 'lower_' + ftype + '_confidence') - upper_confidence = getattr(self, 'lower_' + ftype + '_confidence') + activate_low = getattr(self, 'activate_low_' + ftype + '_filter_btn') + activate_up = getattr(self, 'activate_up_' + ftype + '_filter_btn') + lower_unit = getattr(self, 'lower_' + ftype + '_filter_unit') + upper_unit = getattr(self, 'upper_' + ftype + '_filter_unit') + lower_spinbox = getattr(self, 'lower_' + ftype + '_spinbox') + upper_spinbox = getattr(self, 'upper_' + ftype + '_spinbox') + lower_confidence = getattr(self, 'lower_' + ftype + '_confidence') + upper_confidence = getattr(self, 'lower_' + ftype + '_confidence') default_val = 1 if ftype == 'freq' else 5000 + if ftype == 'freq': + for f in self.frequency_filters_btns: + if f.isChecked(): + f.setChecked(False) if apply_remove_btn.isChecked(): apply_remove_btn.setChecked(False) apply_remove_btn.clicked.emit() @@ -685,11 +737,20 @@ class MyApp(QMainWindow, Ui_MainWindow): activate_up.clicked.emit() lower_unit.setCurrentText("MHz") upper_unit.setCurrentText("MHz") - upper_spinbox.setValue(default_val) + lower_spinbox.setValue(default_val) + upper_spinbox.setMinimum(1) upper_spinbox.setValue(default_val) lower_confidence.setValue(0) upper_confidence.setValue(0) + def reset_cat_filters(self): + if self.apply_remove_cat_filter_btn.isChecked(): + self.apply_remove_cat_filter_btn.setChecked(False) + self.apply_remove_cat_filter_btn.clicked.emit() + for f in self.cat_filter_btns: + f.setChecked(False) if f.isChecked() else None + self.cat_at_least_one.setChecked(True) + def frequency_filters_ok(self, signal_name): if not self.apply_remove_freq_filter_btn.isChecked(): return True @@ -754,6 +815,22 @@ class MyApp(QMainWindow, Ui_MainWindow): upper_limit_ok = False return lower_limit_ok and upper_limit_ok + def category_filters_ok(self, signal_name): + if not self.apply_remove_cat_filter_btn.isChecked(): + return True + cat_code = self.db.at[signal_name, 'category_code'] + cat_checked = 0 + positive_cases = 0 + for index, cat in enumerate(self.cat_filter_btns): + if cat.isChecked(): + cat_checked += 1 + if cat_code[index] == '1': + positive_cases += 1 + if self.cat_at_least_one.isChecked(): + return positive_cases > 0 + else: + return cat_checked == positive_cases and cat_checked > 0 + @classmethod def filters_ok(cls, spinbox, filter_unit, confidence, sign = 1): band_filter = spinbox.value() * cls.conversion_factors[filter_unit.currentText()] @@ -776,16 +853,16 @@ class MyApp(QMainWindow, Ui_MainWindow): undef_freq, undef_band = self.find_if_undefined(current_signal) if not undef_freq: self.freq_lab.setText(self.format_numbers( - current_signal.at["inf_freq"], - current_signal.at["sup_freq"]) - ) + current_signal.at["inf_freq"], + current_signal.at["sup_freq"]) + ) else: self.freq_lab.setText("Undefined") if not undef_band: self.band_lab.setText(self.format_numbers( - current_signal.at["inf_band"], - current_signal.at["sup_band"]) - ) + current_signal.at["inf_band"], + current_signal.at["sup_band"]) + ) else: self.band_lab.setText("Undefined") @@ -903,6 +980,7 @@ class MyApp(QMainWindow, Ui_MainWindow): def reset_all_filters(self): self.reset_frequency_filters_btn.clicked.emit() self.reset_band_filters_btn.clicked.emit() + self.reset_cat_filters_btn.clicked.emit() @pyqtSlot() def go_to_web_page_signal(self): diff --git a/main_window.ui b/main_window.ui index ecdbe2f..bd14a26 100644 --- a/main_window.ui +++ b/main_window.ui @@ -323,7 +323,7 @@ QPushButton:!enabled { QTabWidget::Rounded - 0 + 1 true @@ -1272,7 +1272,7 @@ p, li { white-space: pre-wrap; } - Frequency bands + <html><head/><body><p><span style=" color:#000000;">Frequency bands</span></p></body></html> color: #9f9f9f; @@ -1971,261 +1971,17 @@ QPushButton:checked { Frequency - + - - - - 0 - 0 - - + - + QWidget#freq_wid_container { + border: 1px solid gray; + border-radius: 15px; +} - - - - - true - - - - 0 - 0 - - - - - 12 - 75 - true - - - - ELF - - - true - - - - - - - true - - - - 12 - 75 - true - - - - SLF - - - true - - - - - - - true - - - - 12 - 75 - true - - - - ULF - - - true - - - - - - - true - - - - 12 - 75 - true - - - - VLF - - - true - - - - - - - true - - - - 12 - 75 - true - - - - LF - - - true - - - - - - - true - - - - 0 - 0 - - - - - 12 - 75 - true - - - - MF - - - true - - - - - - - true - - - - 0 - 0 - - - - - 12 - 75 - true - - - - HF - - - true - - - - - - - true - - - - 12 - 75 - true - - - - VHF - - - true - - - - - - - true - - - - 12 - 75 - true - - - - UHF - - - true - - - - - - - true - - - - 12 - 75 - true - - - - SHF - - - true - - - - - - - true - - - - 12 - 75 - true - - - - EHF - - - true - - - false - - - - + + @@ -2242,28 +1998,281 @@ QPushButton:checked { - - - - - - - - 0 - 0 - - - - + - + 0 0 - QWidget#freq_filter_container { + + + + + + + true + + + + 0 + 0 + + + + + 12 + 75 + true + + + + ELF + + + true + + + + + + + true + + + + 12 + 75 + true + + + + SLF + + + true + + + + + + + true + + + + 12 + 75 + true + + + + ULF + + + true + + + + + + + true + + + + 12 + 75 + true + + + + VLF + + + true + + + + + + + true + + + + 12 + 75 + true + + + + LF + + + true + + + + + + + true + + + + 0 + 0 + + + + + 12 + 75 + true + + + + MF + + + true + + + + + + + true + + + + 0 + 0 + + + + + 12 + 75 + true + + + + HF + + + true + + + + + + + true + + + + 12 + 75 + true + + + + VHF + + + true + + + + + + + true + + + + 12 + 75 + true + + + + UHF + + + true + + + + + + + true + + + + 12 + 75 + true + + + + SHF + + + true + + + + + + + true + + + + 12 + 75 + true + + + + EHF + + + true + + + false + + + + + + + + + + + 0 + 0 + + + + + + + + 0 + 0 + + + + QWidget#freq_filter_container { border: 1px solid gray; background-color: rgb(52,52,52); border-radius: 12px; @@ -2272,433 +2281,436 @@ QPushButton:checked { QRadioButton, QLabel { background-color: rgb(52,52,52); } - - - - - - - 12 - 75 - true - - - Lower frequency - - - false - - - - - - - false - - - - 0 - 0 - - - - - 100 - 0 - - - - - 100 - 16777215 - - - - - 12 - - - - background-color: #464646; - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - 1 - - - 100000000 - - - - - - - false - - - - 0 - 0 - - - - - 60 - 0 - - - - - 16777215 - 16777215 - - - - - 12 - 75 - true - - - - background-color: #464646; - - - MHz - - - 4 - - - false - - - 0 - - - - MHz - - - - - Hz - - - - - kHz - - - - - GHz - - - - - - - - - 0 - 0 - - - - - 12 - 75 - true - - - - Confidence % - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - false - - - - 0 - 0 - - - - - 60 - 0 - - - - - 50 - 16777215 - - - - - 12 - - - - background-color: #464646; - - - false - - - Qt::AlignCenter - - - QAbstractSpinBox::UpDownArrows - - - - - - 100 - - - 0 - - - - - - - - 12 - 75 - true - - - - Upper frequency - - - false - - - - - - - false - - - - 0 - 0 - - - - - 100 - 0 - - - - - 100 - 16777215 - - - - - 12 - - - - background-color: #464646; - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - 1 - - - 100000000 - - - 1 - - - - - - - false - - - - 0 - 0 - - - - - 60 - 0 - - - - - 16777215 - 16777215 - - - - - 12 - 75 - true - - - - background-color: #464646; - - - MHz - - - - MHz - - - - - Hz - - - - - kHz - - - - - GHz - - - - - - - - - 0 - 0 - - - - - 12 - 75 - true - - - - Confidence % - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - false - - - - 0 - 0 - - - - - 60 - 0 - - - - - 50 - 16777215 - - - - - 12 - - - - background-color: #464646; - - - false - - - Qt::AlignCenter - - - QAbstractSpinBox::UpDownArrows - - - - - - 100 - - - 0 - - - - - - - false - - - - 0 - 0 - - - - - 12 - 75 - false - true - false - - - - color: #9f9f9f; - - - Frequency range: + + + + + + 12 + 75 + true + + + + Lower frequency + + + false + + + + + + + false + + + + 0 + 0 + + + + + 100 + 0 + + + + + 100 + 16777215 + + + + + 12 + + + + background-color: #464646; + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 1 + + + 100000000 + + + + + + + false + + + + 0 + 0 + + + + + 60 + 0 + + + + + 16777215 + 16777215 + + + + + 12 + 75 + true + + + + background-color: #464646; + + + MHz + + + 4 + + + false + + + 0 + + + + MHz + + + + + Hz + + + + + kHz + + + + + GHz + + + + + + + + + 0 + 0 + + + + + 12 + 75 + true + + + + Confidence % + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + false + + + + 0 + 0 + + + + + 60 + 0 + + + + + 50 + 16777215 + + + + + 12 + + + + background-color: #464646; + + + false + + + Qt::AlignCenter + + + QAbstractSpinBox::UpDownArrows + + + + + + 100 + + + 0 + + + + + + + + 12 + 75 + true + + + + Upper frequency + + + false + + + + + + + false + + + + 0 + 0 + + + + + 100 + 0 + + + + + 100 + 16777215 + + + + + 12 + + + + background-color: #464646; + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 1 + + + 100000000 + + + 1 + + + + + + + false + + + + 0 + 0 + + + + + 60 + 0 + + + + + 16777215 + 16777215 + + + + + 12 + 75 + true + + + + background-color: #464646; + + + MHz + + + + MHz + + + + + Hz + + + + + kHz + + + + + GHz + + + + + + + + + 0 + 0 + + + + + 12 + 75 + true + + + + Confidence % + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + false + + + + 0 + 0 + + + + + 60 + 0 + + + + + 50 + 16777215 + + + + + 12 + + + + background-color: #464646; + + + false + + + Qt::AlignCenter + + + QAbstractSpinBox::UpDownArrows + + + + + + 100 + + + 0 + + + + + + + false + + + + 0 + 0 + + + + + 12 + 75 + false + true + false + + + + color: #9f9f9f; + + + Selected range: Inactive - - - Qt::AlignCenter - + + + Qt::AlignCenter + + + + @@ -2720,7 +2732,7 @@ Inactive - Applay + Apply true @@ -2747,43 +2759,52 @@ Inactive Bandwidth - + - - - - 12 - 75 - true - + + + QWidget#band_filter_container_2 { + border: 1px solid gray; + border-radius: 15px; +} - - Include undefined bandwidths - - - true - - - - - - - - 0 - 0 - - - + - + + + + 12 + 75 + true + + + + Include undefined bandwidths + + + true + + + + + - + 0 0 - - QWidget#band_filter_container { + + + + + + 0 + 0 + + + + QWidget#band_filter_container { border: 1px solid gray; background-color: rgb(52,52,52); border-radius: 12px; @@ -2792,436 +2813,439 @@ Inactive QRadioButton, QLabel { background-color: rgb(52,52,52); } - - - - - - - 12 - 75 - true - - - Lower band - - - false - - - - - - - false - - - - 0 - 0 - - - - - 100 - 0 - - - - - 100 - 16777215 - - - - - 12 - - - - background-color: #464646; - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - 1 - - - 100000000 - - - 5000 - - - - - - - false - - - - 0 - 0 - - - - - 60 - 0 - - - - - 16777215 - 16777215 - - - - - 12 - 75 - true - - - - background-color: #464646; - - - MHz - - - 4 - - - false - - - 0 - - - - MHz - - - - - Hz - - - - - kHz - - - - - GHz - - - - - - - - - 0 - 0 - - - - - 12 - 75 - true - - - - Confidence % - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - false - - - - 0 - 0 - - - - - 60 - 0 - - - - - 50 - 16777215 - - - - - 12 - - - - background-color: #464646; - - - false - - - Qt::AlignCenter - - - QAbstractSpinBox::UpDownArrows - - - - - - 100 - - - 0 - - - - - - - - 12 - 75 - true - - - - Upper band - - - false - - - - - - - false - - - - 0 - 0 - - - - - 100 - 0 - - - - - 100 - 16777215 - - - - - 12 - - - - background-color: #464646; - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - 1 - - - 100000000 - - - 5000 - - - - - - - false - - - - 0 - 0 - - - - - 60 - 0 - - - - - 16777215 - 16777215 - - - - - 12 - 75 - true - - - - background-color: #464646; - - - MHz - - - - MHz - - - - - Hz - - - - - kHz - - - - - GHz - - - - - - - - - 0 - 0 - - - - - 12 - 75 - true - - - - Confidence % - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - false - - - - 0 - 0 - - - - - 60 - 0 - - - - - 50 - 16777215 - - - - - 12 - - - - background-color: #464646; - - - false - - - Qt::AlignCenter - - - QAbstractSpinBox::UpDownArrows - - - - - - 100 - - - 0 - - - - - - - false - - - - 0 - 0 - - - - - 12 - 75 - false - true - false - - - - color: #9f9f9f; - - - Band range: + + + + + false + + + + 0 + 0 + + + + + 100 + 0 + + + + + 100 + 16777215 + + + + + 12 + + + + background-color: #464646; + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 1 + + + 100000000 + + + 5000 + + + + + + + false + + + + 0 + 0 + + + + + 60 + 0 + + + + + 50 + 16777215 + + + + + 12 + + + + background-color: #464646; + + + false + + + Qt::AlignCenter + + + QAbstractSpinBox::UpDownArrows + + + + + + 100 + + + 0 + + + + + + + + 12 + 75 + true + + + + Upper band + + + false + + + + + + + false + + + + 0 + 0 + + + + + 100 + 0 + + + + + 100 + 16777215 + + + + + 12 + + + + background-color: #464646; + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 1 + + + 100000000 + + + 5000 + + + + + + + false + + + + 0 + 0 + + + + + 60 + 0 + + + + + 16777215 + 16777215 + + + + + 12 + 75 + true + + + + background-color: #464646; + + + MHz + + + + MHz + + + + + Hz + + + + + kHz + + + + + GHz + + + + + + + + false + + + + 0 + 0 + + + + + 60 + 0 + + + + + 50 + 16777215 + + + + + 12 + + + + background-color: #464646; + + + false + + + Qt::AlignCenter + + + QAbstractSpinBox::UpDownArrows + + + + + + 100 + + + 0 + + + + + + + false + + + + 0 + 0 + + + + + 12 + 75 + false + true + false + + + + color: #9f9f9f; + + + Selected range: Inactive - - - Qt::AlignCenter - + + + Qt::AlignCenter + + + + + + + + 0 + 0 + + + + + 12 + 75 + true + + + + Confidence % + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + false + + + + 0 + 0 + + + + + 60 + 0 + + + + + 16777215 + 16777215 + + + + + 12 + 75 + true + + + + background-color: #464646; + + + MHz + + + 4 + + + false + + + 0 + + + + MHz + + + + + Hz + + + + + kHz + + + + + GHz + + + + + + + + + 0 + 0 + + + + + 12 + 75 + true + + + + Confidence % + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 12 + 75 + true + + + + Lower band + + + false + + + + @@ -3243,7 +3267,7 @@ Inactive - Applay + Apply true @@ -3270,6 +3294,398 @@ Inactive Category + + + + + + 0 + 0 + + + + QWidget#cat_wid_container { + border: 1px solid gray; + border-radius: 15px; +} + + + + 9 + + + 9 + + + + + + 12 + 75 + true + + + + Aviation + + + true + + + + + + + + 12 + 75 + true + + + + <html><head/><body><p>Keep all the signals which belong to <span style=" font-style:italic;">all </span>the selected categories.</p></body></html> + + + All selected + + + false + + + + + + + + 12 + 75 + true + + + + Digital + + + true + + + + + + + + 12 + 75 + true + + + + Number Stations + + + true + + + + + + + + 12 + 75 + true + + + + Commercial + + + true + + + + + + + + 12 + 75 + true + + + + Utility + + + true + + + + + + + + 12 + 75 + true + + + + Time Signal + + + true + + + + + + + + 12 + 75 + true + + + + Marine + + + true + + + + + + + + 12 + 75 + true + + + + Navigation + + + true + + + + + + + + 12 + 75 + true + + + + HAM + + + true + + + + + + + + 12 + 75 + true + + + + Interfering + + + true + + + + + + + + 12 + 75 + true + + + + Active + + + true + + + + + + + + 12 + 75 + true + + + + Military + + + true + + + + + + + + 12 + 75 + true + + + + Trunked + + + true + + + + + + + + 12 + 75 + true + + + + Analogue + + + true + + + + + + + + 12 + 75 + true + + + + Satellite + + + true + + + + + + + + 12 + 75 + true + + + + Radar + + + true + + + + + + + + 12 + 75 + true + + + + Inactive + + + true + + + + + + + + 12 + 75 + true + + + + <html><head/><body><p>Keep all the signals which belong to <span style=" font-style:italic;">at least</span> one of the selected categories.</p></body></html> + + + + + + At least one selected + + + true + + + + + + + + + + true + + + + 12 + 75 + true + + + + Apply + + + true + + + + + + + + 12 + 75 + true + + + + Reset + + + +