import QtQuick import QtQuick.Controls import QtQuick.Controls.Material import QtQuick.Layouts Page { id: filterPage anchors.fill: parent objectName: "filterPageObj" signal applyFilter(var filterDict) signal sendBottomAlert(string message, string messagType) property var filterDict: {} function updateFilterDict() { filterDict = {} if (switchFreq.checked) { var unitFreqValue = comboBoxFreq.currentValue.value var lower_band = parseFloat(textFieldFreq.text) * unitFreqValue * (1 - tolFreq.value) var upper_band = parseFloat(textFieldFreq.text) * unitFreqValue * (1 + tolFreq.value) filterDict['frequency'] = { 'lower_band': lower_band, 'upper_band': upper_band } } if (switchBand.checked) { var unitBandValue = comboBoxBand.currentValue.value var lower_band = parseFloat(textFieldBand.text) * unitBandValue * (1 - tolBand.value) var upper_band = parseFloat(textFieldBand.text) * unitBandValue * (1 + tolBand.value) filterDict['bandwidth'] = { 'lower_band': lower_band, 'upper_band': upper_band } } if (switchACF.checked) { var lower_band = parseFloat(textFieldACF.text) * (1 - tolACF.value) var upper_band = parseFloat(textFieldACF.text) * (1 + tolACF.value) filterDict['acf'] = { 'lower_band': lower_band, 'upper_band': upper_band } } if (switchModulation.checked) { var modulationList = [] for (var i = 0; i < modelModulation.count; i++) { if (modelModulation.get(i).checked) { modulationList.push( modelModulation.get(i).value ) } } filterDict['modulation'] = modulationList } if (switchLocation.checked) { var locationList = [] for (var i = 0; i < modelLocation.count; i++) { if (modelLocation.get(i).checked) { locationList.push( modelLocation.get(i).value ) } } filterDict['location'] = locationList } if (switchCategory.checked) { var categoryList = [] for (var i = 0; i < modelCategory.count; i++) { if (modelCategory.get(i).checked) { categoryList.push( modelCategory.get(i).clb_id ) } } filterDict['category'] = categoryList } applyFilter(filterDict) } function resetAll() { switchFreq.checked = false switchBand.checked = false switchACF.checked = false switchModulation.checked = false switchLocation.checked = false switchCategory.checked = false lockFreq(true) lockBand(true) lockACF(true) } function lockFreq(toggle) { if(toggle) { textFieldFreq.enabled = false comboBoxFreq.enabled = false tolFreq.enabled = false summaryFreq.text = '' } else { textFieldFreq.enabled = true comboBoxFreq.enabled = true tolFreq.enabled = true if (textFieldFreq.text !== '') { updateSummaryFreq() updateFilterDict() } } } function lockBand(toggle) { if(toggle) { textFieldBand.enabled = false comboBoxBand.enabled = false tolBand.enabled = false summaryBand.text = '' } else { textFieldBand.enabled = true comboBoxBand.enabled = true tolBand.enabled = true if (textFieldBand.text !== '') { updateSummaryBand() updateFilterDict() } } } function lockACF(toggle) { if(toggle) { textFieldACF.enabled = false tolACF.enabled = false summaryACF.text = '' } else { textFieldACF.enabled = true tolACF.enabled = true if (textFieldACF.text !== '') { updateSummaryACF() updateFilterDict() } } } function updateSummaryFreq() { if (textFieldFreq.text !== "") { var unitFreqText = comboBoxFreq.currentValue.text var lowFreq = (parseFloat(textFieldFreq.text) * (1 - tolFreq.value)).toFixed(1) var uppFreq = (parseFloat(textFieldFreq.text) * (1 + tolFreq.value)).toFixed(1) if (tolFreq.value === 0) { summaryFreq.text = lowFreq + " " + unitFreqText } else { summaryFreq.text = lowFreq + " " + unitFreqText + " - " + uppFreq + " " + unitFreqText } } } function updateSummaryBand() { if (textFieldBand.text !== "") { var unitBandText = comboBoxBand.currentValue.text var lowBand = (parseFloat(textFieldBand.text) * (1 - tolBand.value)).toFixed(1) var uppBand = (parseFloat(textFieldBand.text) * (1 + tolBand.value)).toFixed(1) if (tolBand.value === 0) { summaryBand.text = lowBand + " " + unitBandText } else { summaryBand.text = lowBand + " " + unitBandText + " - " + uppBand + " " + unitBandText } } } function updateSummaryACF() { if (textFieldACF.text !== "") { var lowBand = (parseFloat(textFieldACF.text) * (1 - tolACF.value)).toFixed(1) var uppBand = (parseFloat(textFieldACF.text) * (1 + tolACF.value)).toFixed(1) if (tolACF.value === 0) { summaryACF.text = lowBand + " ms" } else { summaryACF.text = lowBand + " ms" + " - " + uppBand + " ms" } } } function loadLists(filterList) { modelModulation.clear() var modulationDict = filterList[0].modulation for (var i = 0; i < modulationDict.length; i++) { modelModulation.append(modulationDict[i]) } modelLocation.clear() var locationDict = filterList[0].location for (var i = 0; i < locationDict.length; i++) { modelLocation.append(locationDict[i]) } modelCategory.clear() var categoryDict = filterList[0].category for (var i = 0; i < categoryDict.length; i++) { modelCategory.append(categoryDict[i]) } } ColumnLayout { anchors.fill: parent anchors.rightMargin: 10 anchors.topMargin: 10 GridLayout { rows: 2 columns: 3 rowSpacing: 10 columnSpacing: 10 GroupBox { Layout.fillHeight: true Layout.fillWidth: true ColumnLayout { anchors.fill: parent RowLayout { Label { text: qsTr("Frequency") Layout.fillWidth: true font.bold: true font.pointSize: 12 font.capitalization: Font.SmallCaps } Switch { id: switchFreq onToggled: { if(switchFreq.checked) { lockFreq(false) } else { lockFreq(true) updateFilterDict() } } } } RowLayout { TextField { id: textFieldFreq Layout.fillWidth: true placeholderText: qsTr("Frequency") validator: DoubleValidator{bottom: 0} enabled: false onTextChanged: { if(switchFreq.checked && textFieldFreq.text !== '') { updateSummaryFreq() updateFilterDict() } } } ComboBox { id: comboBoxFreq enabled: false textRole: 'text' model: ListModel { ListElement { text: "Hz"; value: 1 } ListElement { text: "kHz"; value: 1e3 } ListElement { text: "MHz"; value: 1e6 } ListElement { text: "GHz"; value: 1e9 } } onActivated: { if(switchFreq.checked && textFieldFreq.text !== '') { updateSummaryFreq() updateFilterDict() } } } } Slider { id: tolFreq Layout.fillWidth: true enabled: false value: 0 onValueChanged: { if(switchFreq.checked && textFieldFreq.text !== '') { updateSummaryFreq() updateFilterDict() } } } Label { id: summaryFreq Layout.fillWidth: true Layout.fillHeight: true color: Material.color(Material.Green) horizontalAlignment: Text.AlignHCenter verticalAlignment: Text.AlignVCenter font.pointSize: 16 } } } GroupBox { Layout.fillHeight: true Layout.fillWidth: true ColumnLayout { anchors.fill: parent RowLayout { Label { text: qsTr("Bandwidth") Layout.fillWidth: true font.bold: true font.pointSize: 12 font.capitalization: Font.SmallCaps } Switch { id: switchBand onToggled: { if(switchBand.checked) { lockBand(false) } else { lockBand(true) updateFilterDict() } } } } RowLayout { TextField { id: textFieldBand validator: DoubleValidator { bottom: 0 } onTextChanged: { if(switchBand.checked && textFieldBand.text !== '') { updateSummaryBand() updateFilterDict() } } Layout.fillWidth: true placeholderText: qsTr("Bandwidth") enabled: false } ComboBox { id: comboBoxBand enabled: false textRole: 'text' model: ListModel { ListElement { text: "Hz"; value: 1 } ListElement { text: "kHz"; value: 1e3 } ListElement { text: "MHz"; value: 1e6 } ListElement { text: "GHz"; value: 1e9 } } onActivated: { if(switchBand.checked && textFieldBand.text !== '') { updateSummaryBand() updateFilterDict() } } } } Slider { id: tolBand Layout.fillWidth: true enabled: false value: 0 onValueChanged: { if(switchBand.checked && textFieldBand.text !== '') { updateSummaryBand() updateFilterDict() } } } Label { id: summaryBand Layout.fillWidth: true Layout.fillHeight: true color: Material.color(Material.Green) horizontalAlignment: Text.AlignHCenter verticalAlignment: Text.AlignVCenter font.pointSize: 16 } } } GroupBox { Layout.fillHeight: true Layout.fillWidth: true ColumnLayout { anchors.fill: parent RowLayout { Label { text: qsTr("ACF") Layout.fillWidth: true font.bold: true font.pointSize: 12 font.capitalization: Font.SmallCaps } Switch { id: switchACF onToggled: { if(switchACF.checked) { lockACF(false) } else { lockACF(true) updateFilterDict() } } } } RowLayout { TextField { id: textFieldACF validator: DoubleValidator { bottom: 0 } onTextChanged: { if(switchACF.checked && textFieldACF.text !== '') { updateSummaryACF() updateFilterDict() } } Layout.fillWidth: true placeholderText: qsTr("ACF") enabled: false } ComboBox { enabled: false model: ['ms'] } } Slider { id: tolACF Layout.fillWidth: true enabled: false value: 0 onValueChanged: { if(switchACF.checked && textFieldACF.text !== '') { updateSummaryACF() updateFilterDict() } } } Label { id: summaryACF Layout.fillWidth: true Layout.fillHeight: true color: Material.color(Material.Green) horizontalAlignment: Text.AlignHCenter verticalAlignment: Text.AlignVCenter font.pointSize: 16 } } } GroupBox { Layout.fillHeight: true Layout.fillWidth: true ColumnLayout { anchors.fill: parent RowLayout { Label { text: qsTr("Modulation") Layout.fillWidth: true font.bold: true font.pointSize: 12 font.capitalization: Font.SmallCaps } Switch { id: switchModulation onToggled: { updateFilterDict() } } } ListView { Layout.minimumHeight: 200 Layout.fillWidth: true Layout.fillHeight: true highlightMoveDuration: 0 clip: true ScrollBar.vertical: ScrollBar { active: true } delegate: Item { width: ListView.view.width height: 30 CheckBox { enabled: switchModulation.checked text: value onCheckedChanged: { modelModulation.setProperty(index, "checked", checked) updateFilterDict() } } } model: ListModel { id: modelModulation } } } } GroupBox { Layout.fillHeight: true Layout.fillWidth: true ColumnLayout { anchors.fill: parent RowLayout { Label { text: qsTr("Location") Layout.fillWidth: true font.bold: true font.pointSize: 12 font.capitalization: Font.SmallCaps } Switch { id: switchLocation onToggled: { updateFilterDict() } } } ListView { Layout.minimumHeight: 200 Layout.fillHeight: true Layout.fillWidth: true highlightMoveDuration: 0 clip: true ScrollBar.vertical: ScrollBar { active: true } delegate: Item { width: ListView.view.width height: 30 CheckBox { enabled: switchLocation.checked text: value onCheckedChanged: { modelLocation.setProperty(index, "checked", checked) updateFilterDict() } } } model: ListModel { id: modelLocation } } } } GroupBox { Layout.fillHeight: true Layout.fillWidth: true ColumnLayout { anchors.fill: parent RowLayout { Label { text: qsTr("Category") Layout.fillWidth: true font.bold: true font.pointSize: 12 font.capitalization: Font.SmallCaps } Switch { id: switchCategory onToggled: { updateFilterDict() } } } ListView { Layout.minimumHeight: 200 Layout.fillHeight: true Layout.fillWidth: true highlightMoveDuration: 0 clip: true ScrollBar.vertical: ScrollBar { active: true } delegate: Item { width: ListView.view.width height: 30 CheckBox { enabled: switchCategory.checked text: value onCheckedChanged: { modelCategory.setProperty(index, "checked", checked) updateFilterDict() } } } model: ListModel { id: modelCategory } } } } } } }