From 97cead84bed4665adef066d73fd622de39d9ba72 Mon Sep 17 00:00:00 2001 From: alessandro90 Date: Thu, 25 Oct 2018 19:45:56 +0200 Subject: [PATCH] Auto limitation of lower limit of upper frequency filter --- double_text_button.py | 35 ++- main.py | 82 ++++-- main_window.ui | 572 +++++++++++++++++++++--------------------- 3 files changed, 371 insertions(+), 318 deletions(-) diff --git a/double_text_button.py b/double_text_button.py index d92ae0f..050b110 100644 --- a/double_text_button.py +++ b/double_text_button.py @@ -4,22 +4,39 @@ from PyQt5.QtCore import pyqtSlot class DoubleTextButton(QPushButton): def __init__(self, parent = None): super().__init__(parent) - self.clicked.connect(self.manage_click) + self.clicked.connect(self.__manage_click) def set_texts(self, text_a, text_b): - self.text_a = text_a - self.text_b = text_b + self.__text_a = text_a + self.__text_b = text_b - def set_slave_filters(self, *filters): - self.filters = filters + def set_slave_filters(self, simple_ones, + radio_1 = None, + ruled_by_radio_1 = None, + radio_2 = None, + ruled_by_radio_2 = None): + self.__simple_ones = simple_ones + self.__ruled_by_radio_1 = ruled_by_radio_1 + self.__radio_1 = radio_1 + self.__ruled_by_radio_2 = ruled_by_radio_2 + self.__radio_2 = radio_2 @pyqtSlot() - def manage_click(self): + def __manage_click(self): if self.isChecked(): - self.setText(self.text_b) + self.setText(self.__text_b) enable = False else: - self.setText(self.text_a) + self.setText(self.__text_a) enable = True - for f in self.filters: + for f in self.__simple_ones: f.setEnabled(enable) + radio_btns = self.__radio_1, self.__radio_2 + ruled_widgets = self.__ruled_by_radio_1, self.__ruled_by_radio_2 + for radio_btn, ruled_by in zip(radio_btns, ruled_widgets): + if ruled_by: + for f in ruled_by: + if radio_btn.isChecked(): + f.setEnabled(enable) + else: + f.setEnabled(False) diff --git a/main.py b/main.py index acc4ab0..310dd57 100644 --- a/main.py +++ b/main.py @@ -51,6 +51,7 @@ class MyApp(QMainWindow, Ui_MainWindow): self.db = None self.current_signal_name = '' self.signal_names = [] + self.total_signals = 0 self.frequency_filters_btns = ( self.elf_filter_btn, self.slf_filter_btn, @@ -74,32 +75,56 @@ class MyApp(QMainWindow, Ui_MainWindow): self.lower_freq_spinbox, self.upper_freq_filter_unit, self.upper_freq_spinbox) - ) + ) self.lower_freq_filter_unit.currentTextChanged.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_filter_unit.currentTextChanged.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.toggled.connect( + partial(self.activate_if_toggled, + self.activate_low_freq_filter_btn, + self.lower_freq_spinbox, + self.lower_freq_filter_unit, + self.lower_freq_confidence) + ) + + self.activate_up_freq_filter_btn.toggled.connect( + partial(self.activate_if_toggled, + self.activate_up_freq_filter_btn, + self.upper_freq_spinbox, + self.upper_freq_filter_unit, + self.upper_freq_confidence) + ) self.apply_remove_freq_filter_btn.set_texts("Apply", "Remove") self.apply_remove_freq_filter_btn.set_slave_filters( - *self.frequency_filters_btns, - self.lower_freq_spinbox, - self.upper_freq_spinbox, - self.lower_freq_filter_unit, - self.upper_freq_filter_unit, - self.lower_freq_confidence, - self.upper_freq_confidence, - self.include_undef_freqs, + [ + *self.frequency_filters_btns, + self.include_undef_freqs, + ], + self.activate_low_freq_filter_btn, + [ + self.lower_freq_spinbox, + self.lower_freq_filter_unit, + self.lower_freq_confidence, + ], + self.activate_up_freq_filter_btn, + [ + self.upper_freq_spinbox, + self.upper_freq_filter_unit, + self.upper_freq_confidence, + ], ) self.apply_remove_freq_filter_btn.clicked.connect(self.display_signals) self.reset_frequency_filters_btn.clicked.connect(self.reset_frequency_filters) @@ -231,6 +256,7 @@ class MyApp(QMainWindow, Ui_MainWindow): box.show() else: self.signal_names = self.db.index + self.total_signals = len(self.signal_names) self.db.fillna("N/A", inplace = True) self.db["url_clicked"] = False try: @@ -243,9 +269,9 @@ class MyApp(QMainWindow, Ui_MainWindow): "Possible data curruption.\n" "Go to Updates->Force Download.") box.show() - self.setStatusTip("Database version: undefined.") + self.statusbar.showMessage("Database version: undefined.") else: - self.setStatusTip(f"Database version: {self.db_version}") + self.statusbar.showMessage(f"Database version: {self.db_version}") @pyqtSlot() def set_min_value_upper_limit(self, lower_combo_box, @@ -274,19 +300,31 @@ class MyApp(QMainWindow, Ui_MainWindow): self.lower_spin_box, self.upper_combo_box, self.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 activate_if_toggled(self, radio_btn, *widgets): + toggled = True if radio_btn.isChecked() else False + for w in widgets[:-1]: # Neglect the bool coming from the emitted signal. + w.setEnabled(toggled) + @pyqtSlot() def display_signals(self): self.result_list.clear() 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): self.result_list.addItem(signal) + available_signals += 1 + self.upadte_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.") @pyqtSlot() def reset_frequency_filters(self): @@ -298,12 +336,18 @@ class MyApp(QMainWindow, Ui_MainWindow): f.setChecked(False) if self.include_undef_freqs.isChecked(): self.include_undef_freqs.setChecked(False) + if self.activate_low_freq_filter_btn.isChecked(): + self.activate_low_freq_filter_btn.setChecked(False) + self.activate_low_freq_filter_btn.clicked.emit() + if self.activate_up_freq_filter_btn.isChecked(): + self.activate_up_freq_filter_btn.setChecked(False) + self.activate_up_freq_filter_btn.clicked.emit() self.lower_freq_spinbox.setValue(0) self.upper_freq_spinbox.setValue(0) self.lower_freq_filter_unit.setCurrentText("MHz") self.upper_freq_filter_unit.setCurrentText("MHz") - self.lower_freq_confidence.setValue(5) - self.upper_freq_confidence.setValue(5) + self.lower_freq_confidence.setValue(0) + self.upper_freq_confidence.setValue(0) def frequency_filters_ok(self, signal_name): if not self.apply_remove_freq_filter_btn.isChecked(): @@ -329,16 +373,16 @@ class MyApp(QMainWindow, Ui_MainWindow): upper_freq_filter = self.upper_freq_spinbox.value() lower_limit_ok = True upper_limit_ok = True - if lower_freq_filter > 0: + 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_units = self.lower_freq_filter_unit.currentText() lower_limit *= self.conversion_factors[lower_units] if not signal_freqs[1] >= lower_limit: lower_limit_ok = False - if upper_freq_filter > 0: + if self.activate_up_freq_filter_btn.isChecked(): upper_tol = self.upper_freq_confidence.value() - upper_limit = upper_freq_filter + lower_tol / 100 * lower_freq_filter + upper_limit = upper_freq_filter + upper_tol / 100 * lower_freq_filter upper_units = self.upper_freq_filter_unit.currentText() upper_limit *= self.conversion_factors[upper_units] if not signal_freqs[0] < upper_limit: diff --git a/main_window.ui b/main_window.ui index fc93f79..16ed255 100644 --- a/main_window.ui +++ b/main_window.ui @@ -130,6 +130,10 @@ QTextBrowser { background-color: #464646; color: #ffffff; border: 0px; +} + +QRadioButton { + color: #ffffff; } @@ -1979,23 +1983,6 @@ QPushButton:checked { - - - - - 10 - 75 - true - - - - Include undefined frequencies - - - true - - - @@ -2237,6 +2224,23 @@ QPushButton:checked { + + + + + 10 + 75 + true + + + + Include undefined frequencies + + + true + + + @@ -2258,257 +2262,10 @@ QPushButton:checked { - - - - - 0 - 0 - - - - - 12 - 75 - true - - - - Upper frequency - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - true - - - - 0 - 0 - - - - - 100 - 0 - - - - - 100 - 16777215 - - - - - 12 - - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - 1000000000 - - - - - - - true - - - - 0 - 0 - - - - - 60 - 0 - - - - - 16777215 - 16777215 - - - - - 12 - 75 - true - - - - MHz - - - - MHz - - - - - Hz - - - - - kHz - - - - - GHz - - - - - - - - true - - - - 0 - 0 - - - - - 60 - 0 - - - - - 50 - 16777215 - - - - - 12 - - - - false - - - Qt::AlignCenter - - - QAbstractSpinBox::UpDownArrows - - - - - - 100 - - - 5 - - - - - - - - 0 - 0 - - - - - 12 - 75 - true - - - - Lower frequency - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - - 0 - 0 - - - - - 12 - 75 - true - - - - Confidence % - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - true - - - - 0 - 0 - - - - - 100 - 0 - - - - - 100 - 16777215 - - - - - 12 - - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - 1000000000 - - - 0 - - - - true + false @@ -2569,33 +2326,10 @@ QPushButton:checked { - - - - - 0 - 0 - - - - - 12 - 75 - true - - - - Confidence % - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - true + false @@ -2636,7 +2370,265 @@ QPushButton:checked { 100 - 5 + 0 + + + + + + + false + + + + 0 + 0 + + + + + 100 + 0 + + + + + 100 + 16777215 + + + + + 12 + + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 1000000000 + + + + + + + false + + + + 0 + 0 + + + + + 100 + 0 + + + + + 100 + 16777215 + + + + + 12 + + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 1000000000 + + + 0 + + + + + + + false + + + + 0 + 0 + + + + + 60 + 0 + + + + + 16777215 + 16777215 + + + + + 12 + 75 + true + + + + MHz + + + + MHz + + + + + Hz + + + + + kHz + + + + + GHz + + + + + + + + false + + + + 0 + 0 + + + + + 60 + 0 + + + + + 50 + 16777215 + + + + + 12 + + + + false + + + Qt::AlignCenter + + + QAbstractSpinBox::UpDownArrows + + + + + + 100 + + + 0 + + + + + + + + 0 + 0 + + + + + 12 + 75 + true + + + + Confidence % + + + 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