/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 2 1 ĠMT Software Ċ Ġ* Ċ Ġ* Ġ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 . Ċ Ġ*/ Ċ package Ġorg . my teer . no vel . gui . base Ċ Ċ import Ġjavafx . beans . property . Simple String Property Ċ import Ġjavafx . beans . property . String Property Ċ import Ġjavafx . event . ActionEvent Ċ import Ġjavafx . event . EventHandler Ċ import Ġjavafx . geometry . Insets Ċ import Ġjavafx . geometry . Orientation Ċ import Ġjavafx . geometry . Pos Ċ import Ġjavafx . scene . Cursor Ċ import Ġjavafx . scene . Group Ċ import Ġjavafx . scene . Node Ċ import Ġjavafx . scene . control . Button Ċ import Ġjavafx . scene . control . Label Ċ import Ġjavafx . scene . control . Separator Ċ import Ġjavafx . scene . layout .* Ċ import Ġorg . my teer . no vel . gui . utils . icon Ċ Ċ open Ġclass ĠTitle d Overlay Box ( ĊĠĠĠ Ġtitle Property : ĠString Property , ĊĠĠĠ Ġgraphic : ĠNode , ĊĠĠĠ Ġcontent : ĠNode , ĊĠĠĠ Ġres izable H : ĠBoolean Ġ= Ġtrue , ĊĠĠĠ Ġres izable V : ĠBoolean Ġ= Ġtrue , ĊĠĠĠ Ġvar arg Ġcustom Title Bar Items : ĠNode Ċ ) Ġ: ĠStack Pane ( Group ( Resizable Pane ( Inner V Box ( title Property , Ġgraphic , Ġcontent , Ġres izable H , Ġres izable V , Ġcustom Title Bar Items )))) Ġ{ ĊĠĠĠ Ġconstructor ( ĊĠĠĠĠĠĠĠ Ġtitle : ĠString , ĊĠĠĠĠĠĠĠ Ġgraphic : ĠNode , ĊĠĠĠĠĠĠĠ Ġcontent : ĠNode , ĊĠĠĠĠĠĠĠ Ġres izable H : ĠBoolean Ġ= Ġtrue , ĊĠĠĠĠĠĠĠ Ġres izable V : ĠBoolean Ġ= Ġtrue , ĊĠĠĠĠĠĠĠ Ġvar arg Ġcustom Title Bar Items : ĠNode ĊĠĠĠ Ġ) Ġ: Ġthis ( Simple String Property ( title ), Ġgraphic , Ġcontent , Ġres izable H , Ġres izable V , Ġ* custom Title Bar Items ) ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġis Pick On Bounds Ġ= Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġclass ĠRes izable Pane ( val Ġcontent : ĠInner V Box ) Ġ: ĠBorder Pane ( content ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠP REFER RED _ RE SIZE _ AREA _ SIZE Ġ= Ġ 3 . 5 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠP REFER RED _ RE SIZE _ SPEED Ġ= Ġ 2 . 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( content . resizable V ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Ġ= Ġbuild Top () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Ġ= Ġbuild Bottom () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( content . resizable H ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft Ġ= Ġbuild Left () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright Ġ= Ġbuild Right () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġbuild Top () Ġ= ĠStack Pane (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcursor Ġ= ĠCursor . V _ RE SIZE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpref Height Ġ= ĠP REFER RED _ RE SIZE _ AREA _ SIZE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġreleased Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġlast Y : ĠDouble ? Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset On Mouse Released Ġ{ Ġreleased Ġ= Ġtrue Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset On Mouse Drag ged Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( null Ġ=== Ġlast Y Ġ|| Ġreleased ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Y Ġ= Ġit . scene Y ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreleased Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent . pref Height Ġ= Ġcontent . height Ġ- Ġ( it . scene Y Ġ- Ġlast Y !! ) Ġ* ĠP REFER RED _ RE SIZE _ SPEED ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Y Ġ= Ġit . scene Y ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġbuild Bottom () Ġ= ĠStack Pane (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcursor Ġ= ĠCursor . V _ RE SIZE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpref Height Ġ= ĠP REFER RED _ RE SIZE _ AREA _ SIZE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġreleased Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġlast Y : ĠDouble ? Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset On Mouse Released Ġ{ Ġreleased Ġ= Ġtrue Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset On Mouse Drag ged Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( null Ġ=== Ġlast Y Ġ|| Ġreleased ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Y Ġ= Ġit . scene Y ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreleased Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent . pref Height Ġ= Ġcontent . height Ġ+ Ġ( it . scene Y Ġ- Ġlast Y !! ) Ġ* ĠP REFER RED _ RE SIZE _ SPEED ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Y Ġ= Ġit . scene Y ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġbuild Left () Ġ= ĠStack Pane (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcursor Ġ= ĠCursor . H _ RE SIZE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpref Width Ġ= ĠP REFER RED _ RE SIZE _ AREA _ SIZE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġreleased Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġlast X : ĠDouble ? Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset On Mouse Released Ġ{ Ġreleased Ġ= Ġtrue Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset On Mouse Drag ged Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( null Ġ=== Ġlast X Ġ|| Ġreleased ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast X Ġ= Ġit . scene X ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreleased Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent . pref Width Ġ= Ġcontent . width Ġ- Ġ( it . scene X Ġ- Ġlast X !! ) Ġ* ĠP REFER RED _ RE SIZE _ SPEED ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast X Ġ= Ġit . scene X ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġbuild Right () Ġ= ĠStack Pane (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcursor Ġ= ĠCursor . H _ RE SIZE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpref Width Ġ= ĠP REFER RED _ RE SIZE _ AREA _ SIZE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġreleased Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġlast X : ĠDouble ? Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset On Mouse Released Ġ{ Ġreleased Ġ= Ġtrue Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset On Mouse Drag ged Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( null Ġ=== Ġlast X Ġ|| Ġreleased ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast X Ġ= Ġit . scene X ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreleased Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent . pref Width Ġ= Ġcontent . width Ġ+ Ġ( it . scene X Ġ- Ġlast X !! ) Ġ* ĠP REFER RED _ RE SIZE _ SPEED ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast X Ġ= Ġit . scene X ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġclass ĠInner V Box ( ĊĠĠĠĠĠĠĠ Ġtitle Property : ĠString Property , ĊĠĠĠĠĠĠĠ Ġgraphic : ĠNode , ĊĠĠĠĠĠĠĠ Ġcontent : ĠNode , ĊĠĠĠĠĠĠĠ Ġval Ġres izable H : ĠBoolean , ĊĠĠĠĠĠĠĠ Ġval Ġres izable V : ĠBoolean , ĊĠĠĠĠĠĠĠ Ġcustom Title Bar Items : ĠArray < out ĠNode > ĊĠĠĠ Ġ) Ġ: ĠV Box () Ġ{ ĊĠĠĠĠĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstyle Class . add (" overlay - box ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchildren . add ( Title Bar ( title Property , Ġgraphic , Ġthis , Ġres izable H , Ġres izable V , Ġcustom Title Bar Items )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchildren . add ( content . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstyle Class . add (" content ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset V grow ( this , ĠPriority . ALWAYS ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġclass ĠTitle Bar ( ĊĠĠĠĠĠĠĠ Ġtitle Property : ĠString Property , ĊĠĠĠĠĠĠĠ Ġgraphic : ĠNode , ĊĠĠĠĠĠĠĠ Ġcontent : ĠV Box , ĊĠĠĠĠĠĠĠ Ġres izable H : ĠBoolean , ĊĠĠĠĠĠĠĠ Ġres izable V : ĠBoolean , ĊĠĠĠĠĠĠĠ Ġcustom Title Bar Items : ĠArray < out ĠNode > ĊĠĠĠ Ġ) Ġ: ĠBorder Pane () Ġ{ ĊĠĠĠĠĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠRES IZE _ UNIT Ġ= Ġ 3 5 . 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstyle Class . add (" title - bar ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġleft Ġ= Ġgraphic . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Alignment ( this , ĠPos . CENTER ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Margin ( this , ĠIn sets ( 0 . 0 , Ġ 0 . 0 , Ġ 0 . 0 , Ġ 5 . 0 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcenter Ġ= Ġbuild Title Label ( title Property ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġright Ġ= Ġbuild Right Box ( content , Ġres izable H , Ġres izable V , Ġcustom Title Bar Items ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġbuild Title Label ( title Property : ĠString Property ) Ġ= ĠLabel (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext Property (). bind ( title Property ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Alignment ( this , ĠPos . CENTER _ LEFT ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Margin ( this , ĠIn sets ( 0 . 0 , Ġ 0 . 0 , Ġ 0 . 0 , Ġ 5 . 0 )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġbuild Right Box ( content : ĠV Box , Ġres izable H : ĠBoolean , Ġres izable V : ĠBoolean , Ġcustom Title Bar Items : ĠArray < out ĠNode >) Ġ= ĠH Box ( 5 . 0 ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Alignment ( this , ĠPos . CENTER _ RIGHT ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( custom Title Bar Items . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcustom Title Bar Items . forEach ( children :: add ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchildren . add ( Separator ( Orientation . VERTICAL )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( resizable V ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchildren . add ( build Button (" arrow - up - icon "){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent . pref Height Ġ= Ġcontent . height Ġ+ ĠRES IZE _ UNIT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchildren . add ( build Button (" arrow - down - icon "){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent . pref Height Ġ= Ġcontent . height Ġ- ĠRES IZE _ UNIT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( resizable H ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchildren . add ( build Button (" arrow - left - icon "){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent . pref Width Ġ= Ġcontent . width Ġ- ĠRES IZE _ UNIT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchildren . add ( build Button (" arrow - right - icon "){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent . pref Width Ġ= Ġcontent . width Ġ+ ĠRES IZE _ UNIT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġbuild Button ( icon Style Class : ĠString , Ġaction : ĠEventHandler < ActionEvent >) Ġ= ĠButton (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgraphic Ġ= Ġicon ( icon Style Class ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Action Ġ= Ġaction ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpadding Ġ= ĠIn sets ( 0 . 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }