diff --git a/filters.py b/filters.py
deleted file mode 100644
index 6e3f994..0000000
--- a/filters.py
+++ /dev/null
@@ -1,13 +0,0 @@
-from collections import namedtuple
-
-class Filters(object):
- def __init__(self, *all_filters):
- self.filter_widgets = all_filters
-
- def activate(self):
- for f in self.filter_widgets:
- f.setEnabled(True)
-
- def deactivate(self):
- for f in self.filter_widgets:
- f.setEnabled(False)
diff --git a/main.py b/main.py
index 310dd57..c6de0c3 100644
--- a/main.py
+++ b/main.py
@@ -65,9 +65,6 @@ class MyApp(QMainWindow, Ui_MainWindow):
self.shf_filter_btn,
self.ehf_filter_btn,
)
- self.lower_freq_confidence.valueChanged.connect(
- lambda value: self.upper_freq_confidence.setValue(value)
- )
self.lower_freq_spinbox.valueChanged.connect(
partial(self.set_min_value_upper_limit,
@@ -76,6 +73,17 @@ class MyApp(QMainWindow, Ui_MainWindow):
self.upper_freq_filter_unit,
self.upper_freq_spinbox)
)
+ self.lower_freq_spinbox.valueChanged.connect(self.set_band_filter_label)
+
+ self.upper_freq_spinbox.valueChanged.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.upper_freq_spinbox.valueChanged.connect(self.set_band_filter_label)
+
self.lower_freq_filter_unit.currentTextChanged.connect(
partial(self.set_min_value_upper_limit,
self.lower_freq_filter_unit,
@@ -83,6 +91,8 @@ class MyApp(QMainWindow, Ui_MainWindow):
self.upper_freq_filter_unit,
self.upper_freq_spinbox)
)
+ self.lower_freq_filter_unit.currentTextChanged.connect(self.set_band_filter_label)
+
self.upper_freq_filter_unit.currentTextChanged.connect(
partial(self.set_min_value_upper_limit,
self.lower_freq_filter_unit,
@@ -90,6 +100,7 @@ class MyApp(QMainWindow, Ui_MainWindow):
self.upper_freq_filter_unit,
self.upper_freq_spinbox)
)
+ self.upper_freq_filter_unit.currentTextChanged.connect(self.set_band_filter_label)
self.activate_low_freq_filter_btn.toggled.connect(
partial(self.activate_if_toggled,
@@ -98,6 +109,7 @@ class MyApp(QMainWindow, Ui_MainWindow):
self.lower_freq_filter_unit,
self.lower_freq_confidence)
)
+ self.activate_low_freq_filter_btn.clicked.connect(self.set_band_filter_label)
self.activate_up_freq_filter_btn.toggled.connect(
partial(self.activate_if_toggled,
@@ -106,12 +118,18 @@ class MyApp(QMainWindow, Ui_MainWindow):
self.upper_freq_filter_unit,
self.upper_freq_confidence)
)
+ self.activate_up_freq_filter_btn.clicked.connect(self.set_band_filter_label)
+
+ self.lower_freq_confidence.valueChanged.connect(self.set_band_filter_label)
+ self.upper_freq_confidence.valueChanged.connect(self.set_band_filter_label)
self.apply_remove_freq_filter_btn.set_texts("Apply", "Remove")
self.apply_remove_freq_filter_btn.set_slave_filters(
[
*self.frequency_filters_btns,
self.include_undef_freqs,
+ self.activate_low_freq_filter_btn,
+ self.activate_up_freq_filter_btn,
],
self.activate_low_freq_filter_btn,
[
@@ -129,6 +147,8 @@ class MyApp(QMainWindow, Ui_MainWindow):
self.apply_remove_freq_filter_btn.clicked.connect(self.display_signals)
self.reset_frequency_filters_btn.clicked.connect(self.reset_frequency_filters)
+ self.reset_filters_btn.clicked.connect(self.reset_all_filters)
+
UrlColors = namedtuple("UrlColors", ["inactive", "active", "clicked"])
self.url_button.colors = UrlColors("#9f9f9f", "#4c75ff", "#942ccc")
self.category_labels = [self.cat_mil,
@@ -245,8 +265,7 @@ class MyApp(QMainWindow, Ui_MainWindow):
'inf_band': str,
'sup_band': str,
'category_code': str,},
- names = names,
- )
+ names = names,)
except FileNotFoundError:
self.search_bar.setDisabled(True)
box = QMessageBox(self)
@@ -271,40 +290,77 @@ class MyApp(QMainWindow, Ui_MainWindow):
box.show()
self.statusbar.showMessage("Database version: undefined.")
else:
- self.statusbar.showMessage(f"Database version: {self.db_version}")
+ self.update_status_tip(self.total_signals)
@pyqtSlot()
def set_min_value_upper_limit(self, lower_combo_box,
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:
- if counter == 1 and upper_units == 'kHz':
- new_unit = 'MHz'
- else:
- new_unit = 'GHz'
+ 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,
- self.lower_combo_box,
- self.lower_spin_box,
- self.upper_combo_box,
- self.upper_spin_box
- )
+ lower_combo_box,
+ lower_spin_box,
+ upper_combo_box,
+ upper_spin_box)
)
- upper_spin_box.setValue(upper_spin_box.value() // (1000**counter))
- if upper_spin_box.minimum() != inf_limit:
- upper_spin_box.setMinimum(inf_limit)
+
+ @pyqtSlot()
+ def set_band_filter_label(self):
+ activate_low = False
+ activate_high = False
+ color = self.inactive_color
+ title = ''
+ to_display = ''
+ if self.activate_low_freq_filter_btn.isChecked():
+ to_display += str(self.lower_freq_spinbox.value()) + ' ' + self.lower_freq_filter_unit.currentText()
+ activate_low = True
+ color = self.active_color
+ if self.lower_freq_confidence.value() != 0:
+ to_display += ' - ' + str(self.lower_freq_confidence.value()) + ' %'
+ else:
+ to_display += 'DC'
+ to_display += ' รท '
+ if self.activate_up_freq_filter_btn.isChecked():
+ to_display += str(self.upper_freq_spinbox.value()) + ' ' + self.upper_freq_filter_unit.currentText()
+ activate_high = True
+ color = self.active_color
+ if self.upper_freq_confidence.value() != 0:
+ to_display += ' + ' + str(self.upper_freq_confidence.value()) + ' %'
+ else:
+ to_display += 'INF'
+ if activate_low and activate_high:
+ title = 'Band-pass\n\n'
+ elif activate_low and not activate_high:
+ title = 'Low-pass\n\n'
+ elif not activate_low and activate_high:
+ title = 'High-pass\n\n'
+ else:
+ title = "Frequency range:\n\n"
+ to_display = "Inactive"
+ to_display = title + to_display
+ self.freq_range_lbl.setText(to_display)
+ self.freq_range_lbl.setStyleSheet(f'color: {color};')
@pyqtSlot()
def activate_if_toggled(self, radio_btn, *widgets):
@@ -321,10 +377,10 @@ class MyApp(QMainWindow, Ui_MainWindow):
if text.lower() in signal.lower() and self.frequency_filters_ok(signal):
self.result_list.addItem(signal)
available_signals += 1
- self.upadte_status_tip(available_signals)
+ self.update_status_tip(available_signals)
- def upadte_status_tip(self, available_signals):
- self.statusbar.showMessage(f"Database version: {self.db_version}. {available_signals} out of {self.total_signals} signals displayed.")
+ def update_status_tip(self, available_signals):
+ self.statusbar.showMessage(f"{available_signals} out of {self.total_signals} signals displayed.")
@pyqtSlot()
def reset_frequency_filters(self):
@@ -369,22 +425,22 @@ class MyApp(QMainWindow, Ui_MainWindow):
any_checked = True
if signal_freqs[0] < band_limits.upper and signal_freqs[1] >= band_limits.lower:
band_filter_ok = True
- lower_freq_filter = self.lower_freq_spinbox.value()
- upper_freq_filter = self.upper_freq_spinbox.value()
lower_limit_ok = True
upper_limit_ok = True
if self.activate_low_freq_filter_btn.isChecked():
- lower_tol = self.lower_freq_confidence.value()
- lower_limit = lower_freq_filter - lower_tol / 100 * lower_freq_filter
+ lower_freq_filter = self.lower_freq_spinbox.value()
lower_units = self.lower_freq_filter_unit.currentText()
- lower_limit *= self.conversion_factors[lower_units]
+ lower_freq_filter *= self.conversion_factors[lower_units]
+ lower_tol = self.lower_freq_confidence.value()
+ lower_limit = lower_freq_filter - (lower_tol * lower_freq_filter) // 100
if not signal_freqs[1] >= lower_limit:
lower_limit_ok = False
if self.activate_up_freq_filter_btn.isChecked():
- upper_tol = self.upper_freq_confidence.value()
- upper_limit = upper_freq_filter + upper_tol / 100 * lower_freq_filter
+ upper_freq_filter = self.upper_freq_spinbox.value()
upper_units = self.upper_freq_filter_unit.currentText()
- upper_limit *= self.conversion_factors[upper_units]
+ upper_freq_filter *= self.conversion_factors[upper_units]
+ upper_tol = self.upper_freq_confidence.value()
+ upper_limit = upper_freq_filter + (upper_tol * upper_freq_filter) // 100
if not signal_freqs[0] < upper_limit:
upper_limit_ok = False
if any_checked:
@@ -397,13 +453,6 @@ class MyApp(QMainWindow, Ui_MainWindow):
self.display_spectrogram()
if item:
self.current_signal_name = item.text()
- words = self.current_signal_name.split(' ')
- if len(words) > 3:
- words_per_row = len(words) // 2
- words = ' '.join(words[:words_per_row]) \
- + "\n" + ' '.join(words[words_per_row:])
- else:
- words = self.current_signal_name
self.name_lab.setText(self.current_signal_name)
self.name_lab.setAlignment(Qt.AlignHCenter)
current_signal = self.db.loc[self.current_signal_name]
@@ -479,6 +528,10 @@ class MyApp(QMainWindow, Ui_MainWindow):
pre_upper = upper
lower = int(lower) / lower_factor
upper = int(upper) / upper_factor
+ if lower.is_integer():
+ lower = int(lower)
+ if upper.is_integer():
+ upper = int(upper)
if pre_lower != pre_upper:
return f"{lower:,} {units[lower_factor]} - {upper:,} {units[upper_factor]}"
else:
@@ -535,6 +588,10 @@ class MyApp(QMainWindow, Ui_MainWindow):
for band_label in self.band_labels:
self.activate_band_category(band_label, False)
+ @pyqtSlot()
+ def reset_all_filters(self):
+ self.reset_frequency_filters_btn.clicked.emit()
+
@pyqtSlot()
def go_to_web_page_signal(self):
if self.current_signal_name:
diff --git a/main_window.ui b/main_window.ui
index 16ed255..ea52169 100644
--- a/main_window.ui
+++ b/main_window.ui
@@ -70,7 +70,7 @@ QScrollBar::handle:vertical, QScrollBar::handle:horizontal{
border-radius: 5px;
border-color: none;
border-width: 1px;
- background-color: #959595;
+ background-color: #999999;
}
QScrollBar::add-line:vertical, QScrollBar::add-line:horizontal{
@@ -1958,7 +1958,8 @@ QPushButton:!enabled {
QPushButton:checked {
color: #39eaff;
-}
+}
+
0
@@ -2228,7 +2229,7 @@ QPushButton:checked {
- 10
+ 12
75
true
@@ -2254,15 +2255,85 @@ QPushButton:checked {
-
-
+
0
0
+
+ QWidget#freq_filter_container {
+ border: 1px solid gray;
+ background-color: rgb(52,52,52);
+ border-radius: 12px;
+}
+
+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
@@ -2292,6 +2363,9 @@ QPushButton:checked {
true
+
+ background-color: #464646;
+
MHz
@@ -2326,7 +2400,30 @@ QPushButton:checked {
- -
+
-
+
+
+
+ 0
+ 0
+
+
+
+
+ 12
+ 75
+ true
+
+
+
+ Confidence %
+
+
+ Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
+
+
+
+ -
false
@@ -2354,6 +2451,9 @@ QPushButton:checked {
12
+
+ background-color: #464646;
+
false
@@ -2374,43 +2474,24 @@ QPushButton:checked {
- -
-
-
- false
-
-
-
- 0
- 0
-
-
-
-
- 100
- 0
-
-
-
-
- 100
- 16777215
-
-
+
-
+
12
+ 75
+ true
-
- Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
+
+ Upper frequency
-
- 1000000000
+
+ false
- -
+
-
false
@@ -2438,18 +2519,24 @@ QPushButton:checked {
12
+
+ background-color: #464646;
+
Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
+
+ 1
+
- 1000000000
+ 100000000
- 0
+ 1
- -
+
-
false
@@ -2479,6 +2566,9 @@ QPushButton:checked {
true
+
+ background-color: #464646;
+
MHz
@@ -2504,7 +2594,30 @@ QPushButton:checked {
- -
+
-
+
+
+
+ 0
+ 0
+
+
+
+
+ 12
+ 75
+ true
+
+
+
+ Confidence %
+
+
+ Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
+
+
+
+ -
false
@@ -2532,6 +2645,9 @@ QPushButton:checked {
12
+
+ background-color: #464646;
+
false
@@ -2552,10 +2668,13 @@ QPushButton:checked {
- -
-
+
-
+
+
+ false
+
-
+
0
0
@@ -2564,71 +2683,21 @@ QPushButton:checked {
12
75
+ false
true
+ false
+
+ color: #9f9f9f;
+
- Confidence %
+ Frequency range:
+
+Inactive
- Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
-
- 12
- 75
- true
-
-
-
- Confidence %
-
-
- Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
-
-
-
- -
-
-
-
- 12
- 75
- true
-
-
-
- Lower frequency
-
-
- false
-
-
-
- -
-
-
-
- 12
- 75
- true
-
-
-
- Upper frequency
-
-
- false
+ Qt::AlignCenter