package Ġeu . vaadin on kotlin . vaadin 8 Ċ Ċ import Ġcom . github . mv ys ny . k ari bud sl . v 8 .* Ċ import Ġeu . vaadin on kotlin . Filter Factory Ċ import Ġeu . vaadin on kotlin . toDate Ċ import Ġcom . vaadin . data . Binder Ċ import Ġcom . vaadin . shared . ui . date field . DateTime Resolution Ċ import Ġcom . vaadin . ui .* Ċ import Ġjava . io . Serializable Ċ import Ġjava . time . LocalDate Ċ import Ġjava . time . LocalDateTime Ċ import Ġjava . time . format . DateTime Formatter Ċ import Ġjava . time . format . Format Style Ċ Ċ /** Ċ Ġ* ĠA Ġpotentially Ġopen Ġnumeric Ġrange . ĠIf Ġboth Ġ[ min ] Ġand Ġ[ max ] Ġare Ġ` null `, Ġthen Ġthe Ġinterval Ġaccepts Ġany Ġnumber . Ċ Ġ* Ġ@ property Ġmin Ġthe Ġminimum Ġaccepted Ġvalue , Ġinclusive . ĠIf Ġ` null ` Ġthen Ġthe Ġnumeric Ġrange Ġhas Ġno Ġlower Ġlimit . Ċ Ġ* Ġ@ property Ġmax Ġthe Ġmaximum Ġaccepted Ġvalue , Ġinclusive . ĠIf Ġ` null ` Ġthen Ġthe Ġnumeric Ġrange Ġhas Ġno Ġupper Ġlimit . Ċ Ġ*/ Ċ data Ġclass ĠNumber Interval < T Ġ: ĠNumber >( var Ġmin : ĠT ?, Ġvar Ġmax : ĠT ?) Ġ: ĠSerializable Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreates Ġa Ġfilter Ġout Ġof Ġthis Ġinterval , Ġusing Ġgiven Ġ[ filter Factory ]. ĊĠĠĠĠ Ġ* Ġ@ return Ġa Ġfilter Ġwhich Ġmatches Ġthe Ġsame Ġset Ġof Ġnumbers Ġas Ġthis Ġinterval . ĠReturns Ġ` null ` Ġfor Ġuniversal Ġset Ġinterval . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġ< F > Ġto Filter ( propertyName : ĠString , Ġfilter Factory : ĠFilter Factory < F >): ĠF ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( is Single Item ) Ġreturn Ġfilter Factory . eq ( propertyName , Ġmax !! ) ĊĠĠĠĠĠĠĠ Ġif Ġ( max Ġ!= Ġnull Ġ&& Ġmin Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfilter Factory . between ( propertyName , Ġmin !! , Ġmax !! ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( max Ġ!= Ġnull ) Ġreturn Ġfilter Factory . le ( propertyName , Ġmax !! ) ĊĠĠĠĠĠĠĠ Ġif Ġ( min Ġ!= Ġnull ) Ġreturn Ġfilter Factory . ge ( propertyName , Ġmin !! ) ĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠTrue Ġif Ġthe Ġinterval Ġconsists Ġof Ġsingle Ġnumber Ġonly . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġis Single Item : ĠBoolean ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġmax Ġ!= Ġnull Ġ&& Ġmin Ġ!= Ġnull Ġ&& Ġmax Ġ== Ġmin ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠTrue Ġif Ġthe Ġinterval Ġincludes Ġall Ġpossible Ġnumbers Ġ( both Ġ[ min ] Ġand Ġ[ max ] Ġare Ġ` null `). ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġis Universal Set : ĠBoolean ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġmax Ġ== Ġnull Ġ&& Ġmin Ġ== Ġnull Ċ } Ċ Ċ /** Ċ Ġ* ĠOnly Ġshows Ġa Ġsingle Ġbutton Ġas Ġits Ġcontents . ĠWhen Ġthe Ġbutton Ġis Ġclicked , Ġit Ġopens Ġa Ġdialog Ġand Ġallows Ġthe Ġuser Ġto Ġspecify Ġa Ġrange Ċ Ġ* Ġof Ġnumbers . ĠWhen Ġthe Ġuser Ġsets Ġthe Ġvalues , Ġthe Ġdialog Ġis Ċ Ġ* Ġhidden Ġand Ġthe Ġnumber Ġrange Ġis Ġset Ġas Ġthe Ġvalue Ġof Ġthe Ġpopup . Ċ Ġ* Ċ Ġ* ĠThe Ġcurrent Ġnumeric Ġrange Ġis Ġalso Ġdisplayed Ġas Ġthe Ġcaption Ġof Ġthe Ġbutton . Ċ Ġ*/ Ċ class ĠNumber Filter Popup Ġ: ĠCustom Field < Number Interval < Double > ?> () Ġ{ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġlt Input : ĠTextField ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġgt Input : ĠTextField ĊĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠ Ġprivate Ġval Ġbinder : ĠB inder < Number Interval < Double >> Ġ= ĠB inder ( Number Interval :: class . java Ġas ĠClass < Number Interval < Double >> ). apply Ġ{ Ġbean Ġ= ĠNumber Interval ( null , Ġnull ) Ġ} ĊĠĠĠ Ġprivate Ġvar Ġinternal Value : ĠNumber Interval < Double >? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun Ġinit Content (): ĠComponent ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠPopup View ( Simple Content . EMPTY ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġw Ġ= Ġfill Parent ; Ġminim ized Value As HTML Ġ= Ġvt [" filter . all "]; Ġis Hide On Mouse Out Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvertical Layout Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġw Ġ= Ġwrap Content ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhorizontal Layout Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgt Input Ġ= Ġtext Field Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplaceholder Ġ= Ġvt [" filter . at least "] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġw Ġ= Ġ 1 0 0 . px ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbind ( binder ). toDouble (). bind ( Number Interval < Double >:: min ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlabel ("") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġw Ġ= Ġwrap Content ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlt Input Ġ= Ġtext Field Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplaceholder Ġ= Ġvt [" filter . at most "] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġw Ġ= Ġ 1 0 0 . px ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbind ( binder ). toDouble (). bind ( Number Interval < Double >:: max ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhorizontal Layout Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġalignment Ġ= ĠAlignment . MIDDLE _ RIGHT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbutton ( vt [" filter . clear "]) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Left Click Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinder . fields . forEach Ġ{ Ġit . clear () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠsetValue ( null , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Popup Visible Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbutton ( vt [" filter . ok "]) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Left Click Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcopy Ġ= Ġbinder . bean . copy () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠsetValue ( if Ġ( copy . is Universal Set ) Ġnull Ġelse Ġcopy , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Popup Visible Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset ReadOnly ( readOnly : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . set ReadOnly ( readOnly ) ĊĠĠĠĠĠĠĠ Ġlt Input . isEnabled Ġ= Ġ! readOnly ĊĠĠĠĠĠĠĠ Ġgt Input . isEnabled Ġ= Ġ! readOnly ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate Caption () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcontent Ġ= Ġcontent Ġas ĠPopup View ĊĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġif Ġ( value Ġ== Ġnull Ġ|| Ġvalue . is Universal Set ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontent . minim ized Value As HTML Ġ= Ġvt [" filter . all "] ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( value . is Single Item ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent . minim ized Value As HTML Ġ= Ġ"[ x ] Ġ= Ġ${ value . max }" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( value . min Ġ!= Ġnull Ġ&& Ġvalue . max Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent . minim ized Value As HTML Ġ= Ġ"${ value . min } Ġâī ¤ Ġ[ x ] Ġâī ¤ Ġ${ value . max }" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( value . min Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent . minim ized Value As HTML Ġ= Ġ"[ x ] Ġâī ¥ Ġ${ value . min }" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( value . max Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent . minim ized Value As HTML Ġ= Ġ"[ x ] Ġâī ¤ Ġ${ value . max }" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdo SetValue ( value : ĠNumber Interval < Double > ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġinternal Value Ġ= Ġvalue ?. copy () ĊĠĠĠĠĠĠĠ Ġbinder . bean Ġ= Ġvalue ?. copy () Ġ?: ĠNumber Interval < Double >( null , Ġnull ) ĊĠĠĠĠĠĠĠ Ġupdate Caption () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetValue () Ġ= Ġinternal Value ?. copy () Ċ } Ċ Ċ /** Ċ Ġ* ĠConverts Ġthis Ġclass Ġto Ġits Ġnon - primitive Ġcounter part . ĠFor Ġexample , Ġconverts Ġ` int . class ` Ġto Ġ` Integer . class `. Ċ Ġ* Ġ@ return Ġconverts Ġclass Ġof Ġprimitive Ġtype Ġto Ġappropriate Ġnon - primitive Ġclass ; Ġother Ġclasses Ġare Ġsimply Ġreturned Ġas - is . Ċ Ġ*/ Ċ @ Suppress (" UN CHECK ED _ CAST ") Ċ val Ġ< T > ĠClass < T >. non Primitive : ĠClass < T > Ġget () Ġ= Ġwhen ( this ) Ġ{ ĊĠĠĠ ĠInteger . TYPE Ġ-> ĠInteger :: class . java Ġas ĠClass < T > ĊĠĠĠ Ġjava . lang . Long . TYPE Ġ-> ĠLong :: class . java Ġas ĠClass < T > ĊĠĠĠ Ġjava . lang . Float . TYPE Ġ-> ĠFloat :: class . java Ġas ĠClass < T > ĊĠĠĠ Ġjava . lang . Double . TYPE Ġ-> Ġjava . lang . Double :: class . java Ġas ĠClass < T > ĊĠĠĠ Ġjava . lang . Short . TYPE Ġ-> ĠShort :: class . java Ġas ĠClass < T > ĊĠĠĠ Ġjava . lang . Byte . TYPE Ġ-> ĠByte :: class . java Ġas ĠClass < T > ĊĠĠĠ Ġelse Ġ-> Ġthis Ċ } Ċ Ċ /** Ċ Ġ* ĠA Ġpotentially Ġopen Ġdate Ġrange . ĠIf Ġboth Ġ[ from ] Ġand Ġ[ to ] Ġare Ġ` null `, Ġthen Ġthe Ġinterval Ġaccepts Ġany Ġdate . Ċ Ġ* Ġ@ property Ġto Ġthe Ġmaximum Ġaccepted Ġvalue , Ġinclusive . ĠIf Ġ` null ` Ġthen Ġthe Ġdate Ġrange Ġhas Ġno Ġupper Ġlimit . Ċ Ġ* Ġ@ property Ġfrom Ġthe Ġminimum Ġaccepted Ġvalue , Ġinclusive . ĠIf Ġ` null ` Ġthen Ġthe Ġdate Ġrange Ġhas Ġno Ġlower Ġlimit . Ċ Ġ*/ Ċ data Ġclass ĠDate Interval ( var Ġfrom : ĠLocalDateTime ?, Ġvar Ġto : ĠLocalDateTime ?) Ġ: ĠSerializable Ġ{ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠTrue Ġif Ġthe Ġinterval Ġincludes Ġall Ġpossible Ġnumbers Ġ( both Ġ[ from ] Ġand Ġ[ to ] Ġare Ġ` null `). ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġis Universal Set : ĠBoolean ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġfrom Ġ== Ġnull Ġ&& Ġto Ġ== Ġnull ĊĊĠĠĠ Ġprivate Ġfun Ġ< T : ĠComparable < T >, ĠF > ĠT . lege Filter ( propertyName : ĠString , Ġfilter Factory : ĠFilter Factory < F >, Ġis Le : ĠBoolean ): ĠF Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Le ) Ġfilter Factory . le ( propertyName , Ġthis ) Ġelse Ġfilter Factory . ge ( propertyName , Ġthis ) ĊĊĠĠĠ Ġprivate Ġfun Ġ< F > ĠLocalDateTime . to Filter ( propertyName : ĠString , Ġfilter Factory : ĠFilter Factory < F >, ĠfieldType : ĠClass <* >, Ġis Le : ĠBoolean ): ĠF Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( fieldType ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLocalDateTime :: class . java Ġ-> Ġle ge Filter ( propertyName , Ġfilter Factory , Ġis Le ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLocalDate :: class . java Ġ-> Ġto LocalDate (). lege Filter ( propertyName , Ġfilter Factory , Ġis Le ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġat Zone ( browser TimeZone ). to Instant (). toDate . lege Filter ( propertyName , Ġfilter Factory , Ġis Le ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġ< F : ĠAny > Ġto Filter ( propertyName : ĠString , Ġfilter Factory : ĠFilter Factory < F >, ĠfieldType : ĠClass < *> ): ĠF ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfilters Ġ= ĠlistOf ( from ?. to Filter ( propertyName , Ġfilter Factory , ĠfieldType , Ġfalse ), Ġto ?. to Filter ( propertyName , Ġfilter Factory , ĠfieldType , Ġtrue )). filter NotNull () ĊĠĠĠĠĠĠĠ Ġreturn Ġfilter Factory . and ( filters . toSet ()) ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠOnly Ġshows Ġa Ġsingle Ġbutton Ġas Ġits Ġcontents . ĠWhen Ġthe Ġbutton Ġis Ġclicked , Ġit Ġopens Ġa Ġdialog Ġand Ġallows Ġthe Ġuser Ġto Ġspecify Ġa Ġrange Ċ Ġ* Ġof Ġdates . ĠWhen Ġthe Ġuser Ġsets Ġthe Ġvalues , Ġthe Ġdialog Ġis Ċ Ġ* Ġhidden Ġand Ġthe Ġdate Ġrange Ġis Ġset Ġas Ġthe Ġvalue Ġof Ġthe Ġpopup . Ċ Ġ* Ċ Ġ* ĠThe Ġcurrent Ġdate Ġrange Ġis Ġalso Ġdisplayed Ġas Ġthe Ġcaption Ġof Ġthe Ġbutton . Ċ Ġ*/ Ċ class ĠDate Filter Popup : ĠCustom Field < Date Interval ?> () Ġ{ ĊĠĠĠ Ġprivate Ġval Ġformatter Ġget () Ġ= ĠDateTime Formatter . of Localized DateTime ( Format Style . SHORT ). with Locale ( UI . getCurrent (). locale !! ) ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġfrom Field : ĠInline DateTimeField ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġto Field : ĠInline DateTimeField ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġset : ĠButton ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġclear : ĠButton ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġdesired Ġresolution Ġof Ġthis Ġfilter Ġpopup , Ġdefaults Ġto Ġ[ DateTime Resolution . MINUTE ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġresolution : ĠDateTime Resolution ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġfrom Field . resolution ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfrom Field . resolution Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġto Field . resolution Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġinternal Value : ĠDate Interval ? Ġ= Ġnull ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġstyle Name Ġ= Ġ" date filter popup " ĊĠĠĠĠĠĠĠ Ġ// Ġforce Ġinit contents Ġso Ġthat Ġfrom Field Ġand Ġto Field Ġare Ġinitialized Ġand Ġone Ġcan Ġset Ġresolution Ġto Ġthem ĊĠĠĠĠĠĠĠ Ġcontent ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdo SetValue ( value : ĠDate Interval ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġinternal Value Ġ= Ġvalue ?. copy () ĊĠĠĠĠĠĠĠ Ġfrom Field . value Ġ= Ġinternal Value ?. from ĊĠĠĠĠĠĠĠ Ġto Field . value Ġ= Ġinternal Value ?. to ĊĠĠĠĠĠĠĠ Ġupdate Caption () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetValue () Ġ= Ġinternal Value ?. copy () ĊĊĠĠĠ Ġprivate Ġfun Ġformat ( date : ĠLocalDateTime ?) Ġ= Ġif Ġ( date Ġ== Ġnull ) Ġ"" Ġelse Ġformatter . format ( date ) ĊĊĠĠĠ Ġprivate Ġfun Ġupdate Caption () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcontent Ġ= Ġcontent Ġas ĠPopup View ĊĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġif Ġ( value Ġ== Ġnull Ġ|| Ġvalue . is Universal Set ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontent . minim ized Value As HTML Ġ= Ġvt [" filter . all "] ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontent . minim ized Value As HTML Ġ= Ġ"${ format ( from Field . value )} Ġ- Ġ${ format ( to Field . value )}" ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġtruncate Date ( date : ĠLocalDateTime ?, Ġresolution : ĠDateTime Resolution , Ġstart : ĠBoolean ): ĠLocalDateTime ? Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Suppress (" NAME _ SH ADO WING ") ĊĠĠĠĠĠĠĠ Ġvar Ġdate Ġ= Ġdate Ġ?: Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġfor Ġ( res Ġin ĠDateTime Resolution . values (). slice ( 0 .. resolution . ordinal Ġ- Ġ 1 )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( res Ġ== ĠDateTime Resolution . SECOND ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdate Ġ= Ġdate . with Second ( if Ġ( start ) Ġ 0 Ġelse Ġ 5 9 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( res Ġ== ĠDateTime Resolution . MINUTE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdate Ġ= Ġdate . with Minute ( if Ġ( start ) Ġ 0 Ġelse Ġ 5 9 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( res Ġ== ĠDateTime Resolution . HOUR ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdate Ġ= Ġdate . with Hour ( if Ġ( start ) Ġ 0 Ġelse Ġ 2 3 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( res Ġ== ĠDateTime Resolution . DAY ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdate Ġ= Ġdate . with Day OfMonth ( if Ġ( start ) Ġ 1 Ġelse Ġdate . to LocalDate (). length OfMonth ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( res Ġ== ĠDateTime Resolution . MONTH ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdate Ġ= Ġdate . with Month ( if Ġ( start ) Ġ 1 Ġelse Ġ 1 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġdate ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġinit Content (): ĠComponent ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠPopup View ( Simple Content . EMPTY ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġw Ġ= Ġfill Parent ; Ġminim ized Value As HTML Ġ= Ġvt [" filter . all "]; Ġis Hide On Mouse Out Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvertical Layout Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstyle Name Ġ= Ġ" date filter popup content "; Ġset Size Undefined (); Ġis Spacing Ġ= Ġtrue ; Ġis Margin Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhorizontal Layout Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Spacing Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfrom Field Ġ= Ġinline DateTimeField () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġto Field Ġ= Ġinline DateTimeField () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhorizontal Layout Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġalignment Ġ= ĠAlignment . BOTTOM _ RIGHT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Spacing Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Ġ= Ġbutton ( vt [" filter . set "]) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Left Click Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġ= ĠDate Interval ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtruncate Date ( from Field . value , Ġresolution , Ġtrue ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtruncate Date ( to Field . value , Ġresolution , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Popup Visible Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclear Ġ= Ġbutton ( vt [" filter . clear "]) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Left Click Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Popup Visible Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġattach () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . attach () ĊĠĠĠĠĠĠĠ Ġfrom Field . locale Ġ= Ġlocale ĊĠĠĠĠĠĠĠ Ġto Field . locale Ġ= Ġlocale ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset ReadOnly ( readOnly : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . set ReadOnly ( readOnly ) ĊĠĠĠĠĠĠĠ Ġset . isEnabled Ġ= Ġ! readOnly ĊĠĠĠĠĠĠĠ Ġclear . isEnabled Ġ= Ġ! readOnly ĊĠĠĠĠĠĠĠ Ġfrom Field . isEnabled Ġ= Ġ! readOnly ĊĠĠĠĠĠĠĠ Ġto Field . isEnabled Ġ= Ġ! readOnly ĊĠĠĠ Ġ} Ċ } Ċ