1import QtQuick 2.13 2import QtQuick.Controls 2.13 3import QtQuick.Layouts 1.1 4import QtQuick.Window 2.2 5import "./../../common" 6import "../../common/platformutils.js" as PlatformUtils 7 8RowLayout { 9 id: streamFilter 10 objectName: "rdm_stream_filter" 11 12 property bool enabled: streamRangeSlider.from < streamRangeSlider.to 13 property string dateTimeFormat: PlatformUtils.dateTimeFormat 14 property string inputMask: "9999-99-99 99:99:99.999" 15 16 function setStreamFilter() { 17 var start = Date.fromLocaleString(locale, streamRangeStartField.text, streamFilter.dateTimeFormat).getTime() 18 var end = Date.fromLocaleString(locale, streamRangeEndField.text, streamFilter.dateTimeFormat).getTime() 19 if (start < end) { 20 keyTab.keyModel.setFilter("start", start) 21 keyTab.keyModel.setFilter("end", end) 22 23 reloadValue() 24 25 streamRangeStartField.isEdited = false; 26 streamRangeEndField.isEdited = false; 27 } else { 28 notification.showError(qsTranslate("RDM","Start date should be less than End date")) 29 } 30 } 31 32 RegExpValidator { 33 id: dateTimeValidator 34 regExp: /(\d{4})-(\d{2})-(\d{2}) (\d{2})\:(\d{2})\:(\d{2}).(\d{3})/ 35 } 36 37 BetterTextField { 38 id: streamRangeStartField 39 objectName: "rdm_stream_filter_start_field" 40 41 property bool isEdited: false 42 43 implicitWidth: 180 44 font.pixelSize: 14 45 color: enabled ? sysPalette.text : disabledSysPalette.text 46 47 enabled: streamFilter.enabled 48 49 text: new Date(streamRangeSlider.first.value).toLocaleString(locale, streamFilter.dateTimeFormat) 50 inputMask: streamFilter.inputMask 51 validator: dateTimeValidator 52 53 BetterToolTip { 54 title: streamRangeSlider.first.value 55 visible: title && (streamRangeSlider.first.pressed || streamRangeSlider.first.hovered) 56 } 57 58 onTextEdited: { 59 isEdited = true 60 } 61 62 onAccepted: { 63 streamFilter.setStreamFilter() 64 } 65 } 66 67 RangeSlider { 68 id: streamRangeSlider 69 objectName: "rdm_stream_filter_range_slider" 70 71 Layout.fillWidth: true 72 palette.midlight: sysPalette.button 73 palette.dark: enabled ? sysPalette.highlight : disabledSysPalette.highlight 74 padding: 0 75 76 enabled: streamFilter.enabled 77 78 stepSize: 1.0 79 snapMode: Slider.SnapAlways 80 81 first.handle.implicitWidth: 20 82 first.handle.implicitHeight: 20 83 84 second.handle.implicitWidth: 20 85 second.handle.implicitHeight: 20 86 87 first.onPressedChanged: { 88 if (!first.pressed) { 89 streamRangeStartField.isEdited = true 90 } 91 } 92 93 second.onPressedChanged: { 94 if (!second.pressed) { 95 streamRangeEndField.isEdited = true 96 } 97 } 98 } 99 100 BetterTextField { 101 id: streamRangeEndField 102 objectName: "rdm_stream_filter_end_field" 103 104 property bool isEdited: false 105 106 implicitWidth: 180 107 font.pixelSize: 14 108 color: enabled ? sysPalette.text : disabledSysPalette.text 109 110 enabled: streamFilter.enabled 111 112 text: new Date(streamRangeSlider.second.value).toLocaleString(locale, streamFilter.dateTimeFormat) 113 inputMask: streamFilter.inputMask 114 validator: dateTimeValidator 115 116 BetterToolTip { 117 title: streamRangeSlider.second.value 118 visible: title && (streamRangeSlider.second.pressed || streamRangeSlider.second.hovered) 119 } 120 121 onTextEdited: { 122 isEdited = true 123 } 124 125 onAccepted: { 126 streamFilter.setStreamFilter() 127 } 128 } 129 130 BetterButton { 131 objectName: "rdm_stream_filter_apply_btn" 132 133 iconSource: "qrc:/images/filter.svg" 134 text: qsTranslate("RDM","Apply filter") 135 enabled: (streamRangeStartField.isEdited || streamRangeEndField.isEdited) && streamFilter.enabled 136 137 onClicked: { 138 streamFilter.setStreamFilter() 139 } 140 } 141 142 Connections { 143 target: keyModel ? keyModel : null 144 145 function onRowsLoaded() { 146 147 var firstEntry = String(keyModel.filter("first-entry")).slice(0, -2) 148 var lastEntry = String(keyModel.filter("last-entry")).slice(0, -2) 149 150 var start = keyModel.filter("start") ? keyModel.filter("start") : firstEntry 151 var end = keyModel.filter("end") ? keyModel.filter("end") : lastEntry 152 153 console.log("STREAM filter start end:", start, end) 154 155 streamRangeSlider.from = Number(firstEntry) 156 streamRangeSlider.to = Number(lastEntry) 157 158 streamRangeSlider.first.value = Number(start) 159 streamRangeSlider.second.value = Number(end) 160 } 161 } 162 163} 164