Add category filters

This commit is contained in:
alessandro90
2018-11-01 12:29:31 +01:00
parent db6d6a7914
commit 10893b2937
2 changed files with 1690 additions and 1196 deletions

84
main.py
View File

@@ -155,6 +155,14 @@ class MyApp(QMainWindow, Ui_MainWindow):
self.lower_freq_filter_unit, self.lower_freq_filter_unit,
self.lower_freq_confidence) 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( self.activate_low_freq_filter_btn.clicked.connect(
partial(self.set_band_filter_label, partial(self.set_band_filter_label,
self.activate_low_freq_filter_btn, self.activate_low_freq_filter_btn,
@@ -326,6 +334,13 @@ class MyApp(QMainWindow, Ui_MainWindow):
self.lower_band_filter_unit, self.lower_band_filter_unit,
self.lower_band_confidence) 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( self.activate_low_band_filter_btn.clicked.connect(
partial(self.set_band_filter_label, partial(self.set_band_filter_label,
self.activate_low_band_filter_btn, 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.apply_remove_band_filter_btn.clicked.connect(self.display_signals)
self.reset_band_filters_btn.clicked.connect(partial(self.reset_fb_filters, 'band')) 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) self.reset_filters_btn.clicked.connect(self.reset_all_filters)
UrlColors = namedtuple("UrlColors", ["inactive", "active", "clicked"]) UrlColors = namedtuple("UrlColors", ["inactive", "active", "clicked"])
@@ -559,6 +603,7 @@ class MyApp(QMainWindow, Ui_MainWindow):
lower_spin_box, lower_spin_box,
upper_combo_box, upper_combo_box,
upper_spin_box): upper_spin_box):
if lower_spin_box.isEnabled():
unit_conversion = {'Hz' : ['kHz', 'MHz', 'GHz'], unit_conversion = {'Hz' : ['kHz', 'MHz', 'GHz'],
'kHz': ['MHz', 'GHz'], 'kHz': ['MHz', 'GHz'],
'MHz': ['GHz'] 'MHz': ['GHz']
@@ -627,7 +672,7 @@ class MyApp(QMainWindow, Ui_MainWindow):
elif not activate_low and activate_high: elif not activate_low and activate_high:
title = 'High-pass\n\n' title = 'High-pass\n\n'
else: else:
title = "Frequency range:\n\n" title = "Selected range:\n\n"
to_display = "Inactive" to_display = "Inactive"
to_display = title + to_display to_display = title + to_display
range_lbl.setText(to_display) range_lbl.setText(to_display)
@@ -645,7 +690,10 @@ class MyApp(QMainWindow, Ui_MainWindow):
text = self.search_bar.text() text = self.search_bar.text()
available_signals = 0 available_signals = 0
for signal in self.signal_names: 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) self.result_list.addItem(signal)
available_signals += 1 available_signals += 1
self.update_status_tip(available_signals) self.update_status_tip(available_signals)
@@ -672,6 +720,10 @@ class MyApp(QMainWindow, Ui_MainWindow):
lower_confidence = getattr(self, 'lower_' + ftype + '_confidence') lower_confidence = getattr(self, 'lower_' + ftype + '_confidence')
upper_confidence = getattr(self, 'lower_' + ftype + '_confidence') upper_confidence = getattr(self, 'lower_' + ftype + '_confidence')
default_val = 1 if ftype == 'freq' else 5000 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(): if apply_remove_btn.isChecked():
apply_remove_btn.setChecked(False) apply_remove_btn.setChecked(False)
apply_remove_btn.clicked.emit() apply_remove_btn.clicked.emit()
@@ -685,11 +737,20 @@ class MyApp(QMainWindow, Ui_MainWindow):
activate_up.clicked.emit() activate_up.clicked.emit()
lower_unit.setCurrentText("MHz") lower_unit.setCurrentText("MHz")
upper_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) upper_spinbox.setValue(default_val)
lower_confidence.setValue(0) lower_confidence.setValue(0)
upper_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): def frequency_filters_ok(self, signal_name):
if not self.apply_remove_freq_filter_btn.isChecked(): if not self.apply_remove_freq_filter_btn.isChecked():
return True return True
@@ -754,6 +815,22 @@ class MyApp(QMainWindow, Ui_MainWindow):
upper_limit_ok = False upper_limit_ok = False
return lower_limit_ok and upper_limit_ok 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 @classmethod
def filters_ok(cls, spinbox, filter_unit, confidence, sign = 1): def filters_ok(cls, spinbox, filter_unit, confidence, sign = 1):
band_filter = spinbox.value() * cls.conversion_factors[filter_unit.currentText()] band_filter = spinbox.value() * cls.conversion_factors[filter_unit.currentText()]
@@ -903,6 +980,7 @@ class MyApp(QMainWindow, Ui_MainWindow):
def reset_all_filters(self): def reset_all_filters(self):
self.reset_frequency_filters_btn.clicked.emit() self.reset_frequency_filters_btn.clicked.emit()
self.reset_band_filters_btn.clicked.emit() self.reset_band_filters_btn.clicked.emit()
self.reset_cat_filters_btn.clicked.emit()
@pyqtSlot() @pyqtSlot()
def go_to_web_page_signal(self): def go_to_web_page_signal(self):

View File

@@ -323,7 +323,7 @@ QPushButton:!enabled {
<enum>QTabWidget::Rounded</enum> <enum>QTabWidget::Rounded</enum>
</property> </property>
<property name="currentIndex"> <property name="currentIndex">
<number>0</number> <number>1</number>
</property> </property>
<property name="movable"> <property name="movable">
<bool>true</bool> <bool>true</bool>
@@ -1272,7 +1272,7 @@ p, li { white-space: pre-wrap; }
<item> <item>
<widget class="QWidget" name="widget_6" native="true"> <widget class="QWidget" name="widget_6" native="true">
<property name="toolTip"> <property name="toolTip">
<string>Frequency bands</string> <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;span style=&quot; color:#000000;&quot;&gt;Frequency bands&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property> </property>
<property name="styleSheet"> <property name="styleSheet">
<string notr="true">color: #9f9f9f;</string> <string notr="true">color: #9f9f9f;</string>
@@ -1971,7 +1971,33 @@ QPushButton:checked {
<attribute name="title"> <attribute name="title">
<string>Frequency</string> <string>Frequency</string>
</attribute> </attribute>
<layout class="QVBoxLayout" name="verticalLayout_9">
<item>
<widget class="QWidget" name="freq_wid_container" native="true">
<property name="styleSheet">
<string notr="true">QWidget#freq_wid_container {
border: 1px solid gray;
border-radius: 15px;
}</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_5"> <layout class="QVBoxLayout" name="verticalLayout_5">
<item>
<widget class="QPushButton" name="include_undef_freqs">
<property name="font">
<font>
<pointsize>12</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Include undefined frequencies</string>
</property>
<property name="checkable">
<bool>true</bool>
</property>
</widget>
</item>
<item> <item>
<widget class="QWidget" name="widget_7" native="true"> <widget class="QWidget" name="widget_7" native="true">
<property name="sizePolicy"> <property name="sizePolicy">
@@ -2225,23 +2251,6 @@ QPushButton:checked {
</property> </property>
</widget> </widget>
</item> </item>
<item row="0" column="0" colspan="3">
<widget class="QPushButton" name="include_undef_freqs">
<property name="font">
<font>
<pointsize>12</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Include undefined frequencies</string>
</property>
<property name="checkable">
<bool>true</bool>
</property>
</widget>
</item>
</layout> </layout>
</widget> </widget>
</item> </item>
@@ -2692,7 +2701,7 @@ QRadioButton, QLabel {
<string notr="true">color: #9f9f9f;</string> <string notr="true">color: #9f9f9f;</string>
</property> </property>
<property name="text"> <property name="text">
<string>Frequency range: <string>Selected range:
Inactive</string> Inactive</string>
</property> </property>
@@ -2707,6 +2716,9 @@ Inactive</string>
</layout> </layout>
</widget> </widget>
</item> </item>
</layout>
</widget>
</item>
<item> <item>
<widget class="DoubleTextButton" name="apply_remove_freq_filter_btn"> <widget class="DoubleTextButton" name="apply_remove_freq_filter_btn">
<property name="enabled"> <property name="enabled">
@@ -2720,7 +2732,7 @@ Inactive</string>
</font> </font>
</property> </property>
<property name="text"> <property name="text">
<string>Applay</string> <string>Apply</string>
</property> </property>
<property name="checkable"> <property name="checkable">
<bool>true</bool> <bool>true</bool>
@@ -2747,7 +2759,16 @@ Inactive</string>
<attribute name="title"> <attribute name="title">
<string>Bandwidth</string> <string>Bandwidth</string>
</attribute> </attribute>
<layout class="QVBoxLayout" name="verticalLayout_6" stretch="0,0,0,0"> <layout class="QVBoxLayout" name="verticalLayout_8">
<item>
<widget class="QWidget" name="band_filter_container_2" native="true">
<property name="styleSheet">
<string notr="true">QWidget#band_filter_container_2 {
border: 1px solid gray;
border-radius: 15px;
}</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_6">
<item> <item>
<widget class="QPushButton" name="include_undef_bands"> <widget class="QPushButton" name="include_undef_bands">
<property name="font"> <property name="font">
@@ -2794,23 +2815,6 @@ QRadioButton, QLabel {
}</string> }</string>
</property> </property>
<layout class="QGridLayout" name="gridLayout_7"> <layout class="QGridLayout" name="gridLayout_7">
<item row="0" column="0">
<widget class="QRadioButton" name="activate_low_band_filter_btn">
<property name="font">
<font>
<pointsize>12</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Lower band</string>
</property>
<property name="autoExclusive">
<bool>false</bool>
</property>
</widget>
</item>
<item row="0" column="1"> <item row="0" column="1">
<widget class="QSpinBox" name="lower_band_spinbox"> <widget class="QSpinBox" name="lower_band_spinbox">
<property name="enabled"> <property name="enabled">
@@ -2856,96 +2860,6 @@ QRadioButton, QLabel {
</property> </property>
</widget> </widget>
</item> </item>
<item row="0" column="2">
<widget class="QComboBox" name="lower_band_filter_unit">
<property name="enabled">
<bool>false</bool>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>60</width>
<height>0</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>16777215</height>
</size>
</property>
<property name="font">
<font>
<pointsize>12</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="styleSheet">
<string notr="true">background-color: #464646;</string>
</property>
<property name="currentText">
<string>MHz</string>
</property>
<property name="maxCount">
<number>4</number>
</property>
<property name="duplicatesEnabled">
<bool>false</bool>
</property>
<property name="modelColumn">
<number>0</number>
</property>
<item>
<property name="text">
<string>MHz</string>
</property>
</item>
<item>
<property name="text">
<string>Hz</string>
</property>
</item>
<item>
<property name="text">
<string>kHz</string>
</property>
</item>
<item>
<property name="text">
<string>GHz</string>
</property>
</item>
</widget>
</item>
<item row="0" column="3">
<widget class="QLabel" name="label_14">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="font">
<font>
<pointsize>12</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string> Confidence %</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="0" column="4"> <item row="0" column="4">
<widget class="QSpinBox" name="lower_band_confidence"> <widget class="QSpinBox" name="lower_band_confidence">
<property name="enabled"> <property name="enabled">
@@ -3117,29 +3031,6 @@ QRadioButton, QLabel {
</item> </item>
</widget> </widget>
</item> </item>
<item row="1" column="3">
<widget class="QLabel" name="label_15">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="font">
<font>
<pointsize>12</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string> Confidence %</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="1" column="4"> <item row="1" column="4">
<widget class="QSpinBox" name="upper_band_confidence"> <widget class="QSpinBox" name="upper_band_confidence">
<property name="enabled"> <property name="enabled">
@@ -3215,7 +3106,7 @@ QRadioButton, QLabel {
<string notr="true">color: #9f9f9f;</string> <string notr="true">color: #9f9f9f;</string>
</property> </property>
<property name="text"> <property name="text">
<string>Band range: <string>Selected range:
Inactive</string> Inactive</string>
</property> </property>
@@ -3224,6 +3115,139 @@ Inactive</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="1" column="3">
<widget class="QLabel" name="label_15">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="font">
<font>
<pointsize>12</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string> Confidence %</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="0" column="2">
<widget class="QComboBox" name="lower_band_filter_unit">
<property name="enabled">
<bool>false</bool>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>60</width>
<height>0</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>16777215</height>
</size>
</property>
<property name="font">
<font>
<pointsize>12</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="styleSheet">
<string notr="true">background-color: #464646;</string>
</property>
<property name="currentText">
<string>MHz</string>
</property>
<property name="maxCount">
<number>4</number>
</property>
<property name="duplicatesEnabled">
<bool>false</bool>
</property>
<property name="modelColumn">
<number>0</number>
</property>
<item>
<property name="text">
<string>MHz</string>
</property>
</item>
<item>
<property name="text">
<string>Hz</string>
</property>
</item>
<item>
<property name="text">
<string>kHz</string>
</property>
</item>
<item>
<property name="text">
<string>GHz</string>
</property>
</item>
</widget>
</item>
<item row="0" column="3">
<widget class="QLabel" name="label_14">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="font">
<font>
<pointsize>12</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string> Confidence %</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QRadioButton" name="activate_low_band_filter_btn">
<property name="font">
<font>
<pointsize>12</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Lower band</string>
</property>
<property name="autoExclusive">
<bool>false</bool>
</property>
</widget>
</item>
</layout>
</widget>
</item>
</layout> </layout>
</widget> </widget>
</item> </item>
@@ -3243,7 +3267,7 @@ Inactive</string>
</font> </font>
</property> </property>
<property name="text"> <property name="text">
<string>Applay</string> <string>Apply</string>
</property> </property>
<property name="checkable"> <property name="checkable">
<bool>true</bool> <bool>true</bool>
@@ -3270,6 +3294,398 @@ Inactive</string>
<attribute name="title"> <attribute name="title">
<string>Category</string> <string>Category</string>
</attribute> </attribute>
<layout class="QVBoxLayout" name="verticalLayout_7">
<item>
<widget class="QWidget" name="cat_wid_container" native="true">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="styleSheet">
<string notr="true">QWidget#cat_wid_container {
border: 1px solid gray;
border-radius: 15px;
}</string>
</property>
<layout class="QGridLayout" name="gridLayout_8">
<property name="topMargin">
<number>9</number>
</property>
<property name="bottomMargin">
<number>9</number>
</property>
<item row="4" column="0" colspan="2">
<widget class="QPushButton" name="aviation_btn">
<property name="font">
<font>
<pointsize>12</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Aviation</string>
</property>
<property name="checkable">
<bool>true</bool>
</property>
</widget>
</item>
<item row="0" column="2" colspan="2">
<widget class="QRadioButton" name="cat_all">
<property name="font">
<font>
<pointsize>12</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Keep all the signals which belong to &lt;span style=&quot; font-style:italic;&quot;&gt;all &lt;/span&gt;the selected categories.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="text">
<string>All selected</string>
</property>
<property name="checked">
<bool>false</bool>
</property>
</widget>
</item>
<item row="5" column="2" colspan="2">
<widget class="QPushButton" name="digital_btn">
<property name="font">
<font>
<pointsize>12</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Digital</string>
</property>
<property name="checkable">
<bool>true</bool>
</property>
</widget>
</item>
<item row="9" column="1" colspan="2">
<widget class="QPushButton" name="number_stations_btn">
<property name="font">
<font>
<pointsize>12</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Number Stations</string>
</property>
<property name="checkable">
<bool>true</bool>
</property>
</widget>
</item>
<item row="3" column="2" colspan="2">
<widget class="QPushButton" name="commercial_btn">
<property name="font">
<font>
<pointsize>12</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Commercial</string>
</property>
<property name="checkable">
<bool>true</bool>
</property>
</widget>
</item>
<item row="6" column="2" colspan="2">
<widget class="QPushButton" name="utility_btn">
<property name="font">
<font>
<pointsize>12</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Utility</string>
</property>
<property name="checkable">
<bool>true</bool>
</property>
</widget>
</item>
<item row="8" column="2" colspan="2">
<widget class="QPushButton" name="time_signal_btn">
<property name="font">
<font>
<pointsize>12</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Time Signal</string>
</property>
<property name="checkable">
<bool>true</bool>
</property>
</widget>
</item>
<item row="4" column="2" colspan="2">
<widget class="QPushButton" name="marine_btn">
<property name="font">
<font>
<pointsize>12</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Marine</string>
</property>
<property name="checkable">
<bool>true</bool>
</property>
</widget>
</item>
<item row="7" column="2" colspan="2">
<widget class="QPushButton" name="navigation_btn">
<property name="font">
<font>
<pointsize>12</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Navigation</string>
</property>
<property name="checkable">
<bool>true</bool>
</property>
</widget>
</item>
<item row="3" column="0" colspan="2">
<widget class="QPushButton" name="ham_btn">
<property name="font">
<font>
<pointsize>12</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>HAM</string>
</property>
<property name="checkable">
<bool>true</bool>
</property>
</widget>
</item>
<item row="8" column="0" colspan="2">
<widget class="QPushButton" name="interfering_btn">
<property name="font">
<font>
<pointsize>12</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Interfering</string>
</property>
<property name="checkable">
<bool>true</bool>
</property>
</widget>
</item>
<item row="2" column="0" colspan="2">
<widget class="QPushButton" name="active_btn">
<property name="font">
<font>
<pointsize>12</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Active</string>
</property>
<property name="checkable">
<bool>true</bool>
</property>
</widget>
</item>
<item row="1" column="0" colspan="2">
<widget class="QPushButton" name="military_btn">
<property name="font">
<font>
<pointsize>12</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Military</string>
</property>
<property name="checkable">
<bool>true</bool>
</property>
</widget>
</item>
<item row="6" column="0" colspan="2">
<widget class="QPushButton" name="trunked_btn">
<property name="font">
<font>
<pointsize>12</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Trunked</string>
</property>
<property name="checkable">
<bool>true</bool>
</property>
</widget>
</item>
<item row="5" column="0" colspan="2">
<widget class="QPushButton" name="analogue_btn">
<property name="font">
<font>
<pointsize>12</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Analogue</string>
</property>
<property name="checkable">
<bool>true</bool>
</property>
</widget>
</item>
<item row="7" column="0" colspan="2">
<widget class="QPushButton" name="sat_btn">
<property name="font">
<font>
<pointsize>12</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Satellite</string>
</property>
<property name="checkable">
<bool>true</bool>
</property>
</widget>
</item>
<item row="1" column="2" colspan="2">
<widget class="QPushButton" name="radar_btn">
<property name="font">
<font>
<pointsize>12</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Radar</string>
</property>
<property name="checkable">
<bool>true</bool>
</property>
</widget>
</item>
<item row="2" column="2" colspan="2">
<widget class="QPushButton" name="inactive_btn">
<property name="font">
<font>
<pointsize>12</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Inactive</string>
</property>
<property name="checkable">
<bool>true</bool>
</property>
</widget>
</item>
<item row="0" column="0" colspan="2">
<widget class="QRadioButton" name="cat_at_least_one">
<property name="font">
<font>
<pointsize>12</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Keep all the signals which belong to &lt;span style=&quot; font-style:italic;&quot;&gt;at least&lt;/span&gt; one of the selected categories.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="styleSheet">
<string notr="true"/>
</property>
<property name="text">
<string>At least one selected</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="DoubleTextButton" name="apply_remove_cat_filter_btn">
<property name="enabled">
<bool>true</bool>
</property>
<property name="font">
<font>
<pointsize>12</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Apply</string>
</property>
<property name="checkable">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="reset_cat_filters_btn">
<property name="font">
<font>
<pointsize>12</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Reset</string>
</property>
</widget>
</item>
</layout>
</widget> </widget>
<widget class="QWidget" name="tab_6"> <widget class="QWidget" name="tab_6">
<attribute name="title"> <attribute name="title">