package Ġcom . the py program mer . fx tools . angles Ċ Ċ import Ġjavafx . beans . Default Property Ċ import Ġjavafx . beans . Invalid ation Listener Ċ import Ġjavafx . beans . property . Double Property Ċ import Ġjavafx . beans . property . Double Property Base Ċ import Ġjavafx . beans . property . ObjectProperty Ċ import Ġjavafx . beans . property . ObjectProperty Base Ċ import Ġjavafx . beans . value . Observable Value Ċ import Ġjavafx . collections . Observable List Ċ import Ġjavafx . event . EventHandler Ċ import Ġjavafx . geometry . Insets Ċ import Ġjavafx . geometry . Pos Ċ import Ġjavafx . geometry . V Pos Ċ import Ġjavafx . scene . Node Ċ import Ġjavafx . scene . control . TextField Ċ import Ġjavafx . scene . control . Text Formatter Ċ import Ġjavafx . scene . effect . Blur Type Ċ import Ġjavafx . scene . effect . Inner Shadow Ċ import Ġjavafx . scene . input . KeyCode Ċ import Ġjavafx . scene . input . KeyEvent Ċ import Ġjavafx . scene . input . MouseEvent Ċ import Ġjavafx . scene . layout . Pane Ċ import Ġjavafx . scene . layout . Region Ċ import Ġjavafx . scene . paint .* Ċ import Ġjavafx . scene . shape . Circle Ċ import Ġjavafx . scene . shape . Rectangle Ċ import Ġjavafx . scene . text . Font Ċ import Ġjavafx . scene . text . Text Ċ import Ġjavafx . scene . transform . Rotate Ċ import Ġjavafx . util . String Converter Ċ import Ġjava . util .* Ċ import Ġkotlin . math . atan 2 Ċ import Ġkotlin . math . sqrt Ċ Ċ /* ĠCopyright Ġ( c ) Ġ 2 0 1 8 Ġby ĠG errit ĠG run wal d Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ ĊĊĊĊ Ċ /** Ċ Ġ* ĠUser : Ġh ans olo Ċ Ġ* ĠDate : Ġ 0 7 . 1 1 . 1 8 Ċ Ġ* ĠTime : Ġ 1 2 : 3 0 Ċ Ġ*/ Ċ @ Default Property (" children ") Ċ open Ġclass ĠAngle Picker Ġ: ĠRegion () Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġsize Ġ= Ġ 0 . 0 ĊĠĠĠ Ġprivate Ġvar Ġwidth Prop Ġ= Ġ 0 . 0 ĊĠĠĠ Ġprivate Ġvar Ġheight Prop Ġ= Ġ 0 . 0 ĊĠĠĠ Ġprivate Ġvar Ġbackground : ĠCircle ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġforeground : ĠCircle ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġindicator : ĠRectangle ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġtext : ĠText ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġpane : ĠP ane ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġval Ġrotate : ĠRotate ĊĠĠĠ Ġprivate Ġvar Ġ_ angle : ĠDouble ĊĠĠĠ Ġprivate Ġvar Ġangle : ĠDouble Property ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġ_ background Paint : ĠPaint ? ĊĠĠĠ Ġprivate Ġvar Ġbackground Paint : ĠObject Property < Paint ?> ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġ_ foreground Paint : ĠPaint ? ĊĠĠĠ Ġprivate Ġvar Ġforeground Paint : ĠObject Property < Paint ?> ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġindicator Paint : ĠObject Property < Paint ?> ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġ_ indicator Paint : ĠPaint ? ĊĠĠĠ Ġprivate Ġvar Ġ_ text Paint : ĠPaint ? ĊĠĠĠ Ġprivate Ġvar Ġtext Paint : ĠObject Property < Paint ?> ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġinner Shadow : ĠInner Shadow ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġtext Field : ĠTextField ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġval Ġconverter : ĠString Converter < Double ?> ĊĠĠĠ Ġprivate Ġval Ġmouse Filter : ĠEventHandler < MouseEvent > ĊĊĠĠĠ Ġ// Ġ***************** *** ĠInitialization Ġ********************************* *** ĊĠĠĠ Ġprivate Ġfun Ġinit Graphics () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( pref Width . compareTo ( 0 . 0 ) Ġ<= Ġ 0 Ġ|| Ġpref Height . compareTo ( 0 . 0 ) Ġ<= Ġ 0 Ġ|| Ġget Width (). compareTo ( 0 . 0 ) Ġ<= Ġ 0 Ġ|| Ġget Height (). compareTo ( 0 . 0 ) Ġ<= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( pref Width Ġ> Ġ 0 Ġ&& Ġpref Height Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Pref Size ( pref Width , Ġpref Height ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Pref Size ( PREFERRED _ WIDTH , ĠP REFER RED _ HEIGHT ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġstyle Class . add (" angle - picker ") ĊĠĠĠĠĠĠĠ Ġrotate . angle Ġ= Ġ 0 . 0 ĊĠĠĠĠĠĠĠ Ġinner Shadow Ġ= ĠInner Shadow ( Blur Type . TWO _ PASS _ BOX , ĠColor . rgb ( 2 5 5 , Ġ 2 5 5 , Ġ 2 5 5 , Ġ 0 . 3 ), Ġ 1 . 0 , Ġ 0 . 0 , Ġ 0 . 0 , Ġ 0 . 5 ) ĊĠĠĠĠĠĠĠ Ġbackground Ġ= ĠCircle () ĊĠĠĠĠĠĠĠ Ġbackground !!. fill Ġ= Ġ_ background Paint ĊĠĠĠĠĠĠĠ Ġbackground !!. is Mouse Transparent Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġforeground Ġ= ĠCircle () ĊĠĠĠĠĠĠĠ Ġforeground !!. fill Ġ= Ġ_ foreground Paint ĊĠĠĠĠĠĠĠ Ġforeground !!. effect Ġ= Ġinner Shadow ĊĠĠĠĠĠĠĠ Ġindicator Ġ= ĠRectangle () ĊĠĠĠĠĠĠĠ Ġindicator !!. transforms . add ( rotate ) ĊĠĠĠĠĠĠĠ Ġindicator !!. is Mouse Transparent Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġtext Ġ= ĠText ( String . format ( Locale . US , Ġ"% . 0 f \ u 0 0 b 0 ", Ġ_ angle )) ĊĠĠĠĠĠĠĠ Ġtext !!. text Origin Ġ= ĠV Pos . CENTER ĊĠĠĠĠĠĠĠ Ġtext !!. is Mouse Transparent Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġtext Field Ġ= ĠTextField ( String . format ( Locale . US , Ġ"% . 0 f \ u 0 0 b 0 ", Ġ_ angle )) ĊĠĠĠĠĠĠĠ Ġ// textField . set Regex ("\\ d { 0 , 3 } ([ \\. ]\\ d { 0 , 1 }) ?"); ĊĠĠĠĠĠĠĠ Ġtext Field !!. text Formatter Property (). value Ġ= ĠText Formatter ( converter , Ġget Angle ()) ĊĠĠĠĠĠĠĠ Ġtext Field !!. padding Ġ= ĠIn sets ( 2 . 0 ) ĊĠĠĠĠĠĠĠ Ġtext Field !!. alignment Ġ= ĠPos . CENTER ĊĠĠĠĠĠĠĠ Ġtext Field !!. isVisible Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġtext Field !!. is Managed Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġpane Ġ= ĠP ane ( background , Ġforeground , Ġindicator , Ġtext , Ġtext Field ) ĊĠĠĠĠĠĠĠ Ġchildren . set All ( pane ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġregister Listeners () Ġ{ ĊĠĠĠĠĠĠĠ Ġwidth Property (). addListener ( ĠIn validation Listener { Ġresize () Ġ}) ĊĠĠĠĠĠĠĠ Ġheight Property (). addListener ( ĠIn validation Listener { Ġresize () Ġ}) ĊĠĠĠĠĠĠĠ Ġforeground !!. add Event Filter ( MouseEvent . MOUSE _ DR AG GED , Ġmouse Filter ) ĊĠĠĠĠĠĠĠ Ġforeground !!. add Event Filter ( MouseEvent . MOUSE _ CLICK ED , Ġmouse Filter ) ĊĠĠĠĠĠĠĠ Ġtext Field !!. on Key Pressed Ġ= ĠEventHandler Ġ{ Ġe : ĠKeyEvent Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( e . code Ġ== ĠKeyCode . ENTER ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate TextField () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġtext Field !!. focused Property (). addListener Ġ{ Ġo : ĠObservable Value < out ĠBoolean ?> ?, Ġ_: ĠBoolean ?, Ġnv : ĠBoolean ? Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! nv !! ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate TextField () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġfocused Property (). addListener Ġ{ Ġo : ĠObservable Value < out ĠBoolean ?> ?, Ġ_: ĠBoolean ?, Ġnv : ĠBoolean ? Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! nv !! ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate TextField () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġ***************** *** ĠMethods Ġ********************************* ******** ** ĊĠĠĠ Ġpublic Ġoverride Ġfun Ġlayout Children () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . layout Children () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcompute Min Width ( HEIGHT : ĠDouble ): ĠDouble Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠMIN IMUM _ WIDTH ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcompute Min Height ( WIDTH : ĠDouble ): ĠDouble Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠMIN IMUM _ HEIGHT ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcompute Max Width ( HEIGHT : ĠDouble ): ĠDouble Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠMAX IMUM _ WIDTH ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcompute Max Height ( WIDTH : ĠDouble ): ĠDouble Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠMAX IMUM _ HEIGHT ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġpublic Ġoverride Ġfun Ġget Children (): ĠObservable List < Node > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . getChildren () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Angle (): ĠDouble Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( null Ġ== Ġangle ) Ġ_ angle Ġelse Ġangle !!. get () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Angle ( angle : ĠDouble ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( null Ġ== Ġthis . angle ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ angle Ġ= Ġangle Ġ% Ġ 3 6 0 . 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrotate . angle Ġ= Ġ_ angle ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext !!. text Ġ= ĠString . format ( Locale . US , Ġ"% . 0 f \ u 0 0 b 0 ", Ġ 3 6 0 Ġ- Ġ_ angle ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext !!. re locate (( size Ġ- Ġtext !!. layout Bounds . width ) Ġ* Ġ 0 . 5 , Ġ( size Ġ- Ġtext !!. layout Bounds . height ) Ġ* Ġ 0 . 5 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext Field !!. text Ġ= ĠString . format ( Locale . US , Ġ"% . 0 f \ u 0 0 b 0 ", Ġ 3 6 0 Ġ- Ġ_ angle ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . angle !!. set ( angle ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġangle Property (): ĠDouble Property Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( null Ġ== Ġangle ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġangle Ġ= Ġobject Ġ: ĠDouble Property Base (_ angle ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġinvalid ated () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrotate . angle Ġ= Ġget () Ġ% Ġ 3 6 0 . 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext !!. text Ġ= ĠString . format ( Locale . US , Ġ"% . 0 f \ u 0 0 b 0 ", Ġ 3 6 0 Ġ- Ġget ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext !!. re locate (( size Ġ- Ġtext !!. layout Bounds . width ) Ġ* Ġ 0 . 5 , Ġ( size Ġ- Ġtext !!. layout Bounds . height ) Ġ* Ġ 0 . 5 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Field !!. text Ġ= ĠString . format ( Locale . US , Ġ"% . 0 f \ u 0 0 b 0 ", Ġ 3 6 0 Ġ- Ġget ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Bean (): ĠAny Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis @ Angle Picker ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠgetName (): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ" angle " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġangle !! ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Background Paint (): ĠPaint ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( null Ġ== Ġbackground Paint ) Ġ_ background Paint Ġelse Ġbackground Paint !!. get () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Background Paint ( background Paint : ĠPaint ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( null Ġ== Ġthis . background Paint ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ background Paint Ġ= Ġbackground Paint ĊĠĠĠĠĠĠĠĠĠĠĠ Ġredraw () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . background Paint !!. set ( background Paint ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġbackground Paint Property (): ĠObject Property < Paint ?> ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( null Ġ== Ġbackground Paint ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbackground Paint Ġ= Ġobject Ġ: ĠObject Property Base < Paint ? >(_ background Paint ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġinvalid ated () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġredraw () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Bean (): ĠAny Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis @ Angle Picker ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠgetName (): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ" background Paint " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ background Paint Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġbackground Paint ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Foreground Paint (): ĠPaint ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( null Ġ== Ġforeground Paint ) Ġ_ foreground Paint Ġelse Ġforeground Paint !!. get () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Foreground Paint ( foreground Paint : ĠPaint ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( null Ġ== Ġthis . foreground Paint ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ foreground Paint Ġ= Ġforeground Paint ĊĠĠĠĠĠĠĠĠĠĠĠ Ġredraw () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . foreground Paint !!. set ( foreground Paint ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġforeground Paint Property (): ĠObject Property < Paint ?> ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( null Ġ== Ġforeground Paint ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġforeground Paint Ġ= Ġobject Ġ: ĠObject Property Base < Paint ? >(_ foreground Paint ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġinvalid ated () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġredraw () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Bean (): ĠAny Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis @ Angle Picker ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠgetName (): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ" foreground Paint " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ foreground Paint Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġforeground Paint ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Indicator Paint (): ĠPaint ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( null Ġ== Ġindicator Paint ) Ġ_ indicator Paint Ġelse Ġindicator Paint !!. get () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Indicator Paint ( indicator Paint : ĠPaint ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( null Ġ== Ġthis . indicator Paint ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ indicator Paint Ġ= Ġindicator Paint ĊĠĠĠĠĠĠĠĠĠĠĠ Ġredraw () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . indicator Paint !!. set ( indicator Paint ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġindicator Paint Property (): ĠObject Property < Paint ?> ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( null Ġ== Ġindicator Paint ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġindicator Paint Ġ= Ġobject Ġ: ĠObject Property Base < Paint ? >(_ indicator Paint ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġinvalid ated () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġredraw () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Bean (): ĠAny Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis @ Angle Picker ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠgetName (): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ" indicator Paint " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ indicator Paint Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġindicator Paint ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠgetText Paint (): ĠPaint ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( null Ġ== Ġtext Paint ) Ġ_ text Paint Ġelse Ġtext Paint !!. get () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Text Paint ( text Paint : ĠPaint ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( null Ġ== Ġthis . text Paint ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ text Paint Ġ= Ġtext Paint ĊĠĠĠĠĠĠĠĠĠĠĠ Ġredraw () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . text Paint !!. set ( text Paint ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtext Paint Property (): ĠObject Property < Paint ?> ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( null Ġ== Ġtext Paint ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext Paint Ġ= Ġobject Ġ: ĠObject Property Base < Paint ? >(_ text Paint ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġinvalid ated () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġredraw () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Bean (): ĠAny Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis @ Angle Picker ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠgetName (): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ" text Paint " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ text Paint Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġtext Paint ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate TextField () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtext Ġ= Ġtext Field !!. text . replace ("\\ n ", Ġ""). replace ("\ u 0 0 b 0 ", Ġ"") ĊĠĠĠĠĠĠĠ Ġif Ġ(! text . matches ( Regex ("\\ d { 0 , 3 } ([ .] \\ d ? )? "))) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( text . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Angle ( textField !!. text . toDouble ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġtext Field !!. isVisible Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġtext Field !!. is Managed Ġ= Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Angle From XY ( ĊĠĠĠĠĠĠĠ Ġx : ĠDouble , ĊĠĠĠĠĠĠĠ Ġy : ĠDouble , ĊĠĠĠĠĠĠĠ Ġcenter X : ĠDouble , ĊĠĠĠĠĠĠĠ Ġcenter Y : ĠDouble , ĊĠĠĠĠĠĠĠ Ġangle Offset : ĠDouble ĊĠĠĠ Ġ): ĠDouble Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠFor ĠAN GLE _ OFFSET Ġ= ĠĠ 0 Ġ-> ĠAngle Ġof Ġ 0 Ġis Ġat Ġ 3 Ġo ' clock ĊĠĠĠĠĠĠĠ Ġ// ĠFor ĠAN GLE _ OFFSET Ġ= Ġ 9 0 Ġ Ġ-> Angle Ġof Ġ 0 Ġis Ġat Ġ 1 2 Ġo ' clock ĊĠĠĠĠĠĠĠ Ġval Ġdelta X Ġ= Ġx Ġ- Ġcenter X ĊĠĠĠĠĠĠĠ Ġval Ġdelta Y Ġ= Ġy Ġ- Ġcenter Y ĊĠĠĠĠĠĠĠ Ġval Ġradius Ġ= Ġsqrt ( delta X Ġ* Ġdelta X Ġ+ Ġdelta Y Ġ* Ġdelta Y ) ĊĠĠĠĠĠĠĠ Ġval Ġnx Ġ= Ġdelta X Ġ/ Ġradius ĊĠĠĠĠĠĠĠ Ġval Ġny Ġ= Ġdelta Y Ġ/ Ġradius ĊĠĠĠĠĠĠĠ Ġvar Ġtheta Ġ= Ġatan 2 ( ny , Ġnx ) ĊĠĠĠĠĠĠĠ Ġtheta Ġ= Ġif Ġ( theta . compareTo ( 0 . 0 ) Ġ>= Ġ 0 ) ĠMath . to Degrees ( theta ) Ġelse ĠMath . to Degrees ( theta ) Ġ+ Ġ 3 6 0 . 0 ĊĠĠĠĠĠĠĠ Ġreturn Ġ( theta Ġ+ Ġangle Offset ) Ġ% Ġ 3 6 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġ***************** *** ĠRes izing Ġ********************************* ******** * ĊĠĠĠ Ġprivate Ġfun Ġresize () Ġ{ ĊĠĠĠĠĠĠĠ Ġwidth Prop Ġ= Ġget Width () Ġ- Ġin sets . left Ġ- Ġin sets . right ĊĠĠĠĠĠĠĠ Ġheight Prop Ġ= Ġget Height () Ġ- Ġin sets . top Ġ- Ġin sets . bottom ĊĠĠĠĠĠĠĠ Ġsize Ġ= Ġif Ġ( width Prop Ġ< Ġheight Prop ) Ġwidth Prop Ġelse Ġheight Prop ĊĠĠĠĠĠĠĠ Ġif Ġ( width Prop Ġ> Ġ 0 Ġ&& Ġheight Prop Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpane !!. setMax Size ( size , Ġsize ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpane !!. set Pref Size ( size , Ġsize ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpane !!. re locate (( getWidth () Ġ- Ġsize ) Ġ* Ġ 0 . 5 , Ġ( getHeight () Ġ- Ġsize ) Ġ* Ġ 0 . 5 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrotate . pivot X Ġ= Ġindicator !!. x Ġ- Ġsize Ġ* Ġ 0 . 2 7 7 7 7 7 7 8 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrotate . pivot Y Ġ= Ġindicator !!. height Ġ* Ġ 0 . 5 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinner Shadow !!. radius Ġ= Ġsize Ġ* Ġ 0 . 0 2 1 2 7 6 6 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinner Shadow !!. offset Y Ġ= Ġsize Ġ* Ġ 0 . 0 1 0 6 3 8 3 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbackground !!. radius Ġ= Ġsize Ġ* Ġ 0 . 5 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbackground !!. re locate ( 0 . 0 , Ġ 0 . 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġforeground !!. radius Ġ= Ġsize Ġ* Ġ 0 . 4 7 8 7 2 3 4 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġforeground !!. re locate ( size Ġ* Ġ 0 . 0 2 1 2 7 6 6 , Ġsize Ġ* Ġ 0 . 0 2 1 2 7 6 6 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġindicator !!. width Ġ= Ġsize Ġ* Ġ 0 . 2 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġindicator !!. height Ġ= Ġsize Ġ* Ġ 0 . 0 1 5 8 7 3 0 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġindicator !!. re locate ( size Ġ* Ġ 0 . 7 7 7 7 7 7 7 8 , Ġ( size Ġ- Ġindicator !!. height ) Ġ* Ġ 0 . 5 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext !!. font Ġ= ĠFont . font ( size Ġ* Ġ 0 . 1 9 1 4 8 9 3 6 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext !!. re locate (( size Ġ- Ġtext !!. layout Bounds . width ) Ġ* Ġ 0 . 5 , Ġ( size Ġ- Ġtext !!. layout Bounds . height ) Ġ* Ġ 0 . 5 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext Field !!. pref Width Ġ= Ġsize Ġ* Ġ 0 . 6 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext Field !!. pref Height Ġ= Ġsize Ġ* Ġ 0 . 2 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext Field !!. font Ġ= ĠFont . font ( size Ġ* Ġ 0 . 1 9 1 4 8 9 3 6 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext Field !!. re locate (( size Ġ- Ġtext Field !!. pref Width ) Ġ* Ġ 0 . 5 , Ġ( size Ġ- Ġtext Field !!. pref Height ) Ġ* Ġ 0 . 5 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġredraw () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġredraw () Ġ{ ĊĠĠĠĠĠĠĠ Ġbackground !!. fill Ġ= Ġget Background Paint () ĊĠĠĠĠĠĠĠ Ġforeground !!. fill Ġ= Ġget Foreground Paint () ĊĠĠĠĠĠĠĠ Ġindicator !!. fill Ġ= Ġget Indicator Paint () ĊĠĠĠĠĠĠĠ Ġtext !!. fill Ġ= ĠgetText Paint () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠP REFER RED _ WIDTH Ġ= Ġ 6 3 . 0 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠP REFER RED _ HEIGHT Ġ= Ġ 6 3 . 0 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠMIN IMUM _ WIDTH Ġ= Ġ 2 0 . 0 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠMIN IMUM _ HEIGHT Ġ= Ġ 2 0 . 0 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠMAX IMUM _ WIDTH Ġ= Ġ 1 0 2 4 . 0 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠMAX IMUM _ HEIGHT Ġ= Ġ 1 0 2 4 . 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġ***************** *** ĠConstructors Ġ********************************* ***** ĊĠĠĠ Ġinit Ġ{ ĊĊĠĠĠĠĠĠĠ Ġstyle sheets . add ( Thread . currentThread (). context ClassLoader . getResource (" style / angle - picker . css ") ?. to External Form ()) ĊĠĠĠĠĠĠĠ Ġrotate Ġ= ĠRotate () ĊĠĠĠĠĠĠĠ Ġ_ angle Ġ= Ġ 0 . 0 ĊĠĠĠĠĠĠĠ Ġ_ background Paint Ġ= ĠColor . rgb ( 3 2 , Ġ 3 2 , Ġ 3 2 ) ĊĠĠĠĠĠĠĠ Ġ_ foreground Paint Ġ= ĠLinear Gradient ( ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 . 0 , Ġ. 0 , Ġ. 0 , Ġ 1 . 0 , Ġtrue , ĠCycle Method . NO _ CYCLE , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠStop ( 0 . 0 , ĠColor . rgb ( 6 1 , Ġ 6 1 , Ġ 6 1 )), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠStop ( 0 . 5 , ĠColor . rgb ( 5 0 , Ġ 5 0 , Ġ 5 0 )), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠStop ( 1 . 0 , ĠColor . rgb ( 4 2 , Ġ 4 2 , Ġ 4 2 )) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ_ indicator Paint Ġ= ĠColor . rgb ( 1 5 9 , Ġ 1 5 9 , Ġ 1 5 9 ) ĊĠĠĠĠĠĠĠ Ġ_ text Paint Ġ= ĠColor . rgb ( 2 3 0 , Ġ 2 3 0 , Ġ 2 3 0 ) ĊĠĠĠĠĠĠĠ Ġconverter Ġ= Ġobject Ġ: ĠString Converter < Double ?> () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠtoString ( number : ĠDouble ?): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠString . format ( Locale . US , Ġ"% . 1 f ", Ġ 3 6 0 Ġ- Ġnumber !! ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġfrom String ( string : ĠString ?): ĠDouble ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( string . isNull Or Blank ()) Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnumber String Ġ= Ġstring . replace ("\\ n ", Ġ""). replace ("\ u 0 0 b 0 ", Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( number String . matches ( Regex ("\\ d { 0 , 3 } ([ .] \\ d ? )? "))) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 3 6 0 Ġ- Ġjava . lang . Double . valueOf ( number String ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 . 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġmouse Filter Ġ= ĠEventHandler Ġ{ Ġevt : ĠMouseEvent Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtype Ġ= Ġevt . eventType ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( type Ġ== ĠMouseEvent . MOUSE _ DR AG GED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġangle Ġ= Ġget Angle From XY ( evt . x Ġ+ Ġsize Ġ* Ġ 0 . 5 , Ġevt . y Ġ+ Ġsize Ġ* Ġ 0 . 5 , Ġsize Ġ* Ġ 0 . 5 , Ġsize Ġ* Ġ 0 . 5 , Ġ 0 . 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Angle ( angle ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( type Ġ== ĠMouseEvent . MOUSE _ CLICK ED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġclicks Ġ= Ġevt . click Count ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( click s Ġ== Ġ 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Field !!. is Managed Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Field !!. isVisible Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Field !!. is Focus Tra versable Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġinit Graphics () ĊĠĠĠĠĠĠĠ Ġregister Listeners () ĊĠĠĠ Ġ} Ċ }