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