66 * (at your option) any later version. *
77 * *
88 ***************************************************************************/
9+ pragma ComponentBehavior : Bound
910
1011import QtQuick
1112
@@ -18,48 +19,23 @@ Column {
1819 width: parent .width
1920 spacing: __style .margin8
2021
21- required property string fieldDisplayName
22- required property bool hasTime
22+ required property string filterName
23+ required property string filterId
2324 required property var currentValue
24- required property var currentValueTo
25- required property string fieldLayerId
26- required property string fieldName
27-
28- property var initialFromDate: {
29- let v = root .currentValue
30- if ( v === null || v === undefined ) return null
31- let d = new Date ( v )
32- return isNaN ( d .getTime () ) ? null : d
33- }
34- property var initialToDate: {
35- let v = root .currentValueTo
36- if ( v === null || v === undefined ) return null
37- let d = new Date ( v )
38- return isNaN ( d .getTime () ) ? null : d
39- }
40-
41- property var fromDate: initialFromDate
42- property var toDate: initialToDate
43-
44- property bool rangeInvalid: fromDate !== null && toDate !== null && fromDate .getTime () > toDate .getTime ()
25+ readonly property bool hasTime: __activeProject .filterController .isDateFilterDateTime (filterId)
4526
46- property bool _initialized: false
47- Component .onCompleted : _initialized = true
48-
49- function applyDateFilter () {
50- if ( ! _initialized || ! fieldLayerId || ! fieldName ) return
51- __activeProject .filterController .setDateFilter ( fieldLayerId, fieldName, fromDate, toDate, hasTime )
27+ property bool rangeInvalid: {
28+ if ( ! currentValue || ! currentValue[0 ] || ! currentValue[1 ] ){
29+ return false
30+ }
31+ return currentValue[0 ] > currentValue[1 ]
5232 }
5333
54- onFromDateChanged: applyDateFilter ()
55- onToDateChanged: applyDateFilter ()
56-
5734 MMText {
5835 width: parent .width
59- text: root .fieldDisplayName
36+ text: root .filterName
6037 font: __style .p6
6138 color: __style .nightColor
62- visible: root .fieldDisplayName !== " "
6339 }
6440
6541 Row {
@@ -75,21 +51,43 @@ Column {
7551
7652 width: parent .width
7753 type: MMFilterTextInput .InputType .Date
78- checked: root .fromDate !== null && ! root .rangeInvalid
7954 placeholderText: qsTr ( " From" )
80- errorMsg: root .rangeInvalid ? qsTr ( " \" From\" must be less than \" To\" " ) : " "
55+ errorMsg: root .rangeInvalid ? qsTr ( " \" From\" must be sooner than \" To\" " ) : " "
8156 text: {
82- if ( ! root .fromDate ) return " "
83- if ( root .hasTime ) return Qt .formatDateTime ( root .fromDate , Qt . DefaultLocaleShortDate )
84- return Qt .formatDate ( root .fromDate , Qt . DefaultLocaleShortDate )
57+ if ( ! root .currentValue || ! root . currentValue [ 0 ] ) return " "
58+ if ( root .hasTime ) return Qt .formatDateTime ( root .currentValue [ 0 ] )
59+ return Qt .formatDate ( root .currentValue [ 0 ] )
8560 }
8661
8762 onTextClicked: fromCalendarLoader .active = true
8863 onRightContentClicked: {
89- if ( root .fromDate ) {
90- root .fromDate = null
64+ if (checked) {
65+ textField .clear ()
66+ checked = false
67+ if ( root .currentValue [1 ] ){
68+ root .currentValue = [undefined , root .currentValue [1 ]]
69+ } else {
70+ root .currentValue = undefined
71+ }
72+ root .currentValueChanged ()
9173 } else {
92- fromCalendarLoader .active = true
74+ let currentTimestamp = new Date ()
75+
76+ if (root .hasTime ) {
77+ text = Qt .formatDateTime (currentTimestamp)
78+ } else {
79+ text = Qt .formatDate (currentTimestamp)
80+ }
81+
82+ if (! root .hasTime ) {
83+ currentTimestamp .setHours (0 , 0 , 0 , 0 )
84+ }
85+ if (! root .currentValue ) {
86+ root .currentValue = [currentTimestamp, undefined ]
87+ } else {
88+ root .currentValue [0 ] = currentTimestamp
89+ }
90+ root .currentValueChanged ()
9391 }
9492 }
9593 }
@@ -106,10 +104,21 @@ Column {
106104 MMFormComponents .MMCalendarDrawer {
107105 hasDatePicker: true
108106 hasTimePicker: root .hasTime
109- dateTime: root .fromDate ? root .fromDate : new Date ()
107+ dateTime: root .currentValue && root . currentValue [ 0 ] ? root .currentValue [ 0 ] : new Date ()
110108
111109 onPrimaryButtonClicked: {
112- root .fromDate = dateTime
110+ let currentTimestamp = dateTime
111+ if (! root .hasTime ) {
112+ currentTimestamp .setHours (0 , 0 , 0 , 0 )
113+ }
114+ if (! root .currentValue ){
115+ root .currentValue = [currentTimestamp, undefined ]
116+ } else {
117+ root .currentValue [0 ] = currentTimestamp
118+ root .currentValueChanged ()
119+ }
120+
121+ fromDateInput .text = root .hasTime ? Qt .formatDateTime (dateTime) : Qt .formatDate (dateTime)
113122 }
114123 onClosed: fromCalendarLoader .active = false
115124 Component .onCompleted : open ()
@@ -126,21 +135,44 @@ Column {
126135
127136 width: parent .width
128137 type: MMFilterTextInput .InputType .Date
129- checked: root .toDate !== null && ! root .rangeInvalid
130138 placeholderText: qsTr ( " To" )
131- errorMsg: root .rangeInvalid ? qsTr ( " \" From\" must be less than \" To\" " ) : " "
139+ errorMsg: root .rangeInvalid ? qsTr ( " \" From\" must be sooner than \" To\" " ) : " "
132140 text: {
133- if ( ! root .toDate ) return " "
134- if ( root .hasTime ) return Qt .formatDateTime ( root .toDate , Qt . DefaultLocaleShortDate )
135- return Qt .formatDate ( root .toDate , Qt . DefaultLocaleShortDate )
141+ if ( ! root .currentValue || ! root . currentValue [ 1 ] ) return " "
142+ if ( root .hasTime ) return Qt .formatDateTime ( root .currentValue [ 1 ] )
143+ return Qt .formatDate ( root .currentValue [ 1 ] )
136144 }
137145
138146 onTextClicked: toCalendarLoader .active = true
139147 onRightContentClicked: {
140- if ( root .toDate ) {
141- root .toDate = null
148+ if (checked) {
149+ textField .clear ()
150+ checked = false
151+ if ( root .currentValue [0 ] ){
152+ root .currentValue = [root .currentValue [0 ], undefined ]
153+ } else {
154+ root .currentValue = undefined
155+ }
156+ root .currentValueChanged ()
157+
142158 } else {
143- toCalendarLoader .active = true
159+ let currentTimestamp = new Date ()
160+
161+ if (root .hasTime ) {
162+ text = Qt .formatDateTime (currentTimestamp)
163+ } else {
164+ text = Qt .formatDate (currentTimestamp)
165+ }
166+
167+ if (! root .hasTime ) {
168+ currentTimestamp .setHours (0 , 0 , 0 , 0 )
169+ }
170+ if (! root .currentValue ) {
171+ root .currentValue = [undefined , currentTimestamp]
172+ } else {
173+ root .currentValue [1 ] = currentTimestamp
174+ root .currentValueChanged ()
175+ }
144176 }
145177 }
146178 }
@@ -157,10 +189,21 @@ Column {
157189 MMFormComponents .MMCalendarDrawer {
158190 hasDatePicker: true
159191 hasTimePicker: root .hasTime
160- dateTime: root .toDate ? root .toDate : new Date ()
192+ dateTime: root .currentValue && root . currentValue [ 1 ] ? root .currentValue [ 1 ] : new Date ()
161193
162194 onPrimaryButtonClicked: {
163- root .toDate = dateTime
195+ let currentTimestamp = dateTime
196+ if (! root .hasTime ) {
197+ currentTimestamp .setHours (0 , 0 , 0 , 0 )
198+ }
199+ if (! root .currentValue ){
200+ root .currentValue = [undefined , currentTimestamp]
201+ } else {
202+ root .currentValue [1 ] = currentTimestamp
203+ }
204+ root .currentValueChanged ()
205+
206+ toDateInput .text = root .hasTime ? Qt .formatDateTime (dateTime) : Qt .formatDate (dateTime)
164207 }
165208 onClosed: toCalendarLoader .active = false
166209 Component .onCompleted : open ()
0 commit comments