Auto limitation of lower limit of upper frequency filter

This commit is contained in:
alessandro90
2018-10-25 19:45:56 +02:00
parent 59f7e56663
commit 97cead84be
3 changed files with 371 additions and 318 deletions

View File

@@ -4,22 +4,39 @@ from PyQt5.QtCore import pyqtSlot
class DoubleTextButton(QPushButton): class DoubleTextButton(QPushButton):
def __init__(self, parent = None): def __init__(self, parent = None):
super().__init__(parent) super().__init__(parent)
self.clicked.connect(self.manage_click) self.clicked.connect(self.__manage_click)
def set_texts(self, text_a, text_b): def set_texts(self, text_a, text_b):
self.text_a = text_a self.__text_a = text_a
self.text_b = text_b self.__text_b = text_b
def set_slave_filters(self, *filters): def set_slave_filters(self, simple_ones,
self.filters = filters 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() @pyqtSlot()
def manage_click(self): def __manage_click(self):
if self.isChecked(): if self.isChecked():
self.setText(self.text_b) self.setText(self.__text_b)
enable = False enable = False
else: else:
self.setText(self.text_a) self.setText(self.__text_a)
enable = True enable = True
for f in self.filters: for f in self.__simple_ones:
f.setEnabled(enable) 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)

70
main.py
View File

@@ -51,6 +51,7 @@ class MyApp(QMainWindow, Ui_MainWindow):
self.db = None self.db = None
self.current_signal_name = '' self.current_signal_name = ''
self.signal_names = [] self.signal_names = []
self.total_signals = 0
self.frequency_filters_btns = ( self.frequency_filters_btns = (
self.elf_filter_btn, self.elf_filter_btn,
self.slf_filter_btn, self.slf_filter_btn,
@@ -90,16 +91,40 @@ class MyApp(QMainWindow, Ui_MainWindow):
self.upper_freq_spinbox) 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_texts("Apply", "Remove")
self.apply_remove_freq_filter_btn.set_slave_filters( self.apply_remove_freq_filter_btn.set_slave_filters(
[
*self.frequency_filters_btns, *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.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.apply_remove_freq_filter_btn.clicked.connect(self.display_signals)
self.reset_frequency_filters_btn.clicked.connect(self.reset_frequency_filters) self.reset_frequency_filters_btn.clicked.connect(self.reset_frequency_filters)
@@ -231,6 +256,7 @@ class MyApp(QMainWindow, Ui_MainWindow):
box.show() box.show()
else: else:
self.signal_names = self.db.index self.signal_names = self.db.index
self.total_signals = len(self.signal_names)
self.db.fillna("N/A", inplace = True) self.db.fillna("N/A", inplace = True)
self.db["url_clicked"] = False self.db["url_clicked"] = False
try: try:
@@ -243,9 +269,9 @@ class MyApp(QMainWindow, Ui_MainWindow):
"Possible data curruption.\n" "Possible data curruption.\n"
"Go to Updates->Force Download.") "Go to Updates->Force Download.")
box.show() box.show()
self.setStatusTip("Database version: undefined.") self.statusbar.showMessage("Database version: undefined.")
else: else:
self.setStatusTip(f"Database version: {self.db_version}") self.statusbar.showMessage(f"Database version: {self.db_version}")
@pyqtSlot() @pyqtSlot()
def set_min_value_upper_limit(self, lower_combo_box, def set_min_value_upper_limit(self, lower_combo_box,
@@ -280,13 +306,25 @@ class MyApp(QMainWindow, Ui_MainWindow):
if upper_spin_box.minimum() != inf_limit: if upper_spin_box.minimum() != inf_limit:
upper_spin_box.setMinimum(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() @pyqtSlot()
def display_signals(self): def display_signals(self):
self.result_list.clear() self.result_list.clear()
text = self.search_bar.text() text = self.search_bar.text()
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): if text.lower() in signal.lower() and self.frequency_filters_ok(signal):
self.result_list.addItem(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() @pyqtSlot()
def reset_frequency_filters(self): def reset_frequency_filters(self):
@@ -298,12 +336,18 @@ class MyApp(QMainWindow, Ui_MainWindow):
f.setChecked(False) f.setChecked(False)
if self.include_undef_freqs.isChecked(): if self.include_undef_freqs.isChecked():
self.include_undef_freqs.setChecked(False) 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.lower_freq_spinbox.setValue(0)
self.upper_freq_spinbox.setValue(0) self.upper_freq_spinbox.setValue(0)
self.lower_freq_filter_unit.setCurrentText("MHz") self.lower_freq_filter_unit.setCurrentText("MHz")
self.upper_freq_filter_unit.setCurrentText("MHz") self.upper_freq_filter_unit.setCurrentText("MHz")
self.lower_freq_confidence.setValue(5) self.lower_freq_confidence.setValue(0)
self.upper_freq_confidence.setValue(5) self.upper_freq_confidence.setValue(0)
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():
@@ -329,16 +373,16 @@ class MyApp(QMainWindow, Ui_MainWindow):
upper_freq_filter = self.upper_freq_spinbox.value() upper_freq_filter = self.upper_freq_spinbox.value()
lower_limit_ok = True lower_limit_ok = True
upper_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_tol = self.lower_freq_confidence.value()
lower_limit = lower_freq_filter - lower_tol / 100 * lower_freq_filter lower_limit = lower_freq_filter - lower_tol / 100 * lower_freq_filter
lower_units = self.lower_freq_filter_unit.currentText() lower_units = self.lower_freq_filter_unit.currentText()
lower_limit *= self.conversion_factors[lower_units] lower_limit *= self.conversion_factors[lower_units]
if not signal_freqs[1] >= lower_limit: if not signal_freqs[1] >= lower_limit:
lower_limit_ok = False 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_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_units = self.upper_freq_filter_unit.currentText()
upper_limit *= self.conversion_factors[upper_units] upper_limit *= self.conversion_factors[upper_units]
if not signal_freqs[0] < upper_limit: if not signal_freqs[0] < upper_limit:

View File

@@ -130,6 +130,10 @@ QTextBrowser {
background-color: #464646; background-color: #464646;
color: #ffffff; color: #ffffff;
border: 0px; border: 0px;
}
QRadioButton {
color: #ffffff;
}</string> }</string>
</property> </property>
<widget class="QWidget" name="centralwidget"> <widget class="QWidget" name="centralwidget">
@@ -1979,23 +1983,6 @@ QPushButton:checked {
<string notr="true"/> <string notr="true"/>
</property> </property>
<layout class="QGridLayout" name="gridLayout_5"> <layout class="QGridLayout" name="gridLayout_5">
<item row="0" column="0" colspan="3">
<widget class="QPushButton" name="include_undef_freqs">
<property name="font">
<font>
<pointsize>10</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 row="1" column="0"> <item row="1" column="0">
<widget class="QPushButton" name="elf_filter_btn"> <widget class="QPushButton" name="elf_filter_btn">
<property name="enabled"> <property name="enabled">
@@ -2237,6 +2224,23 @@ 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>10</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>
@@ -2258,257 +2262,10 @@ QPushButton:checked {
</sizepolicy> </sizepolicy>
</property> </property>
<layout class="QGridLayout" name="gridLayout_6"> <layout class="QGridLayout" name="gridLayout_6">
<item row="2" column="0">
<widget class="QLabel" name="label_10">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" 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>Upper frequency</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QSpinBox" name="lower_freq_spinbox">
<property name="enabled">
<bool>true</bool>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>100</width>
<height>0</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>100</width>
<height>16777215</height>
</size>
</property>
<property name="font">
<font>
<pointsize>12</pointsize>
</font>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
<property name="maximum">
<number>1000000000</number>
</property>
</widget>
</item>
<item row="2" column="2">
<widget class="QComboBox" name="upper_freq_filter_unit">
<property name="enabled">
<bool>true</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="currentText">
<string>MHz</string>
</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="2" column="4">
<widget class="QSpinBox" name="upper_freq_confidence">
<property name="enabled">
<bool>true</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>50</width>
<height>16777215</height>
</size>
</property>
<property name="font">
<font>
<pointsize>12</pointsize>
</font>
</property>
<property name="frame">
<bool>false</bool>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
<property name="buttonSymbols">
<enum>QAbstractSpinBox::UpDownArrows</enum>
</property>
<property name="specialValueText">
<string/>
</property>
<property name="maximum">
<number>100</number>
</property>
<property name="value">
<number>5</number>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_2">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" 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>Lower frequency</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="1" column="3">
<widget class="QLabel" name="label_12">
<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="2" column="1">
<widget class="QSpinBox" name="upper_freq_spinbox">
<property name="enabled">
<bool>true</bool>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>100</width>
<height>0</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>100</width>
<height>16777215</height>
</size>
</property>
<property name="font">
<font>
<pointsize>12</pointsize>
</font>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
<property name="maximum">
<number>1000000000</number>
</property>
<property name="value">
<number>0</number>
</property>
</widget>
</item>
<item row="1" column="2"> <item row="1" column="2">
<widget class="QComboBox" name="lower_freq_filter_unit"> <widget class="QComboBox" name="lower_freq_filter_unit">
<property name="enabled"> <property name="enabled">
<bool>true</bool> <bool>false</bool>
</property> </property>
<property name="sizePolicy"> <property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed"> <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
@@ -2569,33 +2326,10 @@ QPushButton:checked {
</item> </item>
</widget> </widget>
</item> </item>
<item row="2" column="3">
<widget class="QLabel" name="label_13">
<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="lower_freq_confidence"> <widget class="QSpinBox" name="lower_freq_confidence">
<property name="enabled"> <property name="enabled">
<bool>true</bool> <bool>false</bool>
</property> </property>
<property name="sizePolicy"> <property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed"> <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
@@ -2636,7 +2370,265 @@ QPushButton:checked {
<number>100</number> <number>100</number>
</property> </property>
<property name="value"> <property name="value">
<number>5</number> <number>0</number>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QSpinBox" name="lower_freq_spinbox">
<property name="enabled">
<bool>false</bool>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>100</width>
<height>0</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>100</width>
<height>16777215</height>
</size>
</property>
<property name="font">
<font>
<pointsize>12</pointsize>
</font>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
<property name="maximum">
<number>1000000000</number>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QSpinBox" name="upper_freq_spinbox">
<property name="enabled">
<bool>false</bool>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>100</width>
<height>0</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>100</width>
<height>16777215</height>
</size>
</property>
<property name="font">
<font>
<pointsize>12</pointsize>
</font>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
<property name="maximum">
<number>1000000000</number>
</property>
<property name="value">
<number>0</number>
</property>
</widget>
</item>
<item row="2" column="2">
<widget class="QComboBox" name="upper_freq_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="currentText">
<string>MHz</string>
</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="2" column="4">
<widget class="QSpinBox" name="upper_freq_confidence">
<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>50</width>
<height>16777215</height>
</size>
</property>
<property name="font">
<font>
<pointsize>12</pointsize>
</font>
</property>
<property name="frame">
<bool>false</bool>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
<property name="buttonSymbols">
<enum>QAbstractSpinBox::UpDownArrows</enum>
</property>
<property name="specialValueText">
<string/>
</property>
<property name="maximum">
<number>100</number>
</property>
<property name="value">
<number>0</number>
</property>
</widget>
</item>
<item row="1" column="3">
<widget class="QLabel" name="label_12">
<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="2" column="3">
<widget class="QLabel" name="label_13">
<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="0">
<widget class="QRadioButton" name="activate_low_freq_filter_btn">
<property name="font">
<font>
<pointsize>12</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Lower frequency</string>
</property>
<property name="autoExclusive">
<bool>false</bool>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QRadioButton" name="activate_up_freq_filter_btn">
<property name="font">
<font>
<pointsize>12</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Upper frequency</string>
</property>
<property name="autoExclusive">
<bool>false</bool>
</property> </property>
</widget> </widget>
</item> </item>