package Ġde . fl ap do od le . tab Ċ Ċ import Ġde . fl ap do od le . tab . controls . Spread Sheet Ċ import Ġde . fl ap do od le . tab . controls . Spread Sheet Play ground Ċ import Ġde . fl ap do od le . fx . layout . split pane . Better Split Pane Sampler Ċ import Ġde . fl ap do od le . tab . controls . layout . Layout Fun Ċ import Ġde . fl ap do od le . fx . layout . weight grid . Weight Grid Pane Sampler Ċ import Ġde . fl ap do od le . tab . data . Column Id Ċ import Ġde . fl ap do od le . tab . data . Named Column Ċ import Ġde . fl ap do od le . tab . data . Node Positions Ċ import Ġde . fl ap do od le . tab . data . Tab Model Ċ import Ġde . fl ap do od le . tab . data . calcul ations . Calculation Mapping Ċ import Ġde . fl ap do od le . tab . data . calcul ations . Calcul ations Ċ import Ġde . fl ap do od le . tab . data . calcul ations . Eval Ex Calculation Adapter Ċ import Ġde . fl ap do od le . tab . data . nodes . Column Connection Ċ import Ġde . fl ap do od le . tab . data . nodes . Connect able Node Ċ import Ġde . fl ap do od le . tab . data . values . Input Ċ import Ġde . fl ap do od le . fx . extensions . fire Ċ import Ġde . fl ap do od le . fx . extensions . subscribe Event Ċ import Ġde . fl ap do od le . tab . graph . Zoom able Pane Ċ import Ġde . fl ap do od le . tab . graph . nodes . renderer . Model Renderer Ċ import Ġde . fl ap do od le . tab . graph . nodes . renderer . events . Data Event Ċ import Ġde . fl ap do od le . tab . graph . nodes . renderer . events . IO Event Ċ import Ġde . fl ap do od le . tab . graph . nodes . renderer . events . Model Event Ċ import Ġde . fl ap do od le . tab . graph . nodes . renderer . events . UI Event Ċ import Ġde . fl ap do od le . tab . graph . nodes . renderer . mod als . Add Node Modal View Ċ import Ġde . fl ap do od le . fx . lazy . Change able Value Ċ import Ġde . fl ap do od le . tab . persist . Tab Model IO Ċ import Ġde . fl ap do od le . tab . test . Event Propagation Ċ import Ġde . fl ap do od le . tab . test . GridLayout Fun Ċ import Ġde . fl ap do od le . tab . test . Layout Size Fun Ċ import Ġjavafx . stage . FileChooser Ċ import Ġjavafx . util . Duration Ċ import Ġt orn ad of x .* Ċ import Ġjava . math . BigDecimal Ċ import Ġjava . nio . file . Files Ċ import Ġjava . nio . file . Standard Open Option Ċ Ċ class ĠStart View Ġ: ĠView (" My ĠView ") Ġ{ ĊĠ Ġprivate Ġval Ġmodel Ġ= ĠChange able Value ( Tab Model ()) ĊĠ Ġprivate Ġval Ġzoom able Pane : ĠZoom able Pane Ġ= Ġfind () ĊĠ Ġprivate Ġval Ġrenderer Ġ= ĠModel Renderer ( zoom able Pane . content , Ġmodel ) ĊĠ Ġprivate Ġvar Ġnode Positions Ġ= ĠNode Positions () ĊĊĠ Ġoverride Ġval Ġroot Ġ= Ġborder pane Ġ{ ĊĠĠĠ Ġtop Ġ{ Ċ // ĠĠĠĠĠ Ġlabel Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġtext Ġ= Ġ" Tab " Ċ // ĠĠĠĠĠĠĠ Ġstyle Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠ Ġtext Fill Ġ= ĠColor . WHITE Ċ // ĠĠĠĠĠĠĠĠĠ ĠbackgroundColor Ġ= Ġmulti ( Color . RED ) Ċ // ĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġmen ubar Ġ{ ĊĠĠĠĠĠĠĠ Ġmenu (" Files ") Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġitem (" Open ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIO Event . load (). fire () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠ Ġitem (" Save ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIO Event . save (). fire () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ // ĠĠĠ Ġtop Ġ= Ġlabel Ġ{ Ċ // ĠĠĠĠĠ Ġtext Ġ= Ġ" Tab " Ċ // Ċ // ĠĠĠĠĠ Ġbackground Ġ= ĠBackground ( Background Fill ( Color . RED , Ġnull , Ġnull )) Ċ // ĠĠĠ Ġ} ĊĊĠĠĠ Ġcenter Ġ= Ġzoom able Pane . root ĊĊĠĠĠ Ġbottom Ġ{ ĊĠĠĠĠĠ Ġh box Ġ{ ĊĠĠĠĠĠĠĠ Ġbutton (" Add ") Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġon Left Click Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAdd Node Modal View . open Modal () ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbutton (" Test ") Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġon Left Click Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLayout Size Fun . open () ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbutton (" Better ĠSplit Pane ") Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġon Left Click Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBetter Split Pane Sampler . open () ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbutton (" Event ĠProp ") Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġon Left Click Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEvent Propagation . open () ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbutton (" Grid ĠLayout ") Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġon Left Click Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGrid Layout Fun . open () ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbutton (" Weighted ĠGrid ĠLayout ") Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġon Left Click Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠWeight Grid Pane Sampler . open () ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġinit Ġ{ ĊĠĠĠ Ġprimary Stage . width Ġ= Ġ 1 0 2 4 . 0 ĊĠĠĠ Ġprimary Stage . height Ġ= Ġ 7 6 8 . 0 ĊĊĠĠĠ Ġval Ġfoo Column Id Ġ= ĠColumn Id . create < String >() ĊĠĠĠ Ġval Ġbar Column Id Ġ= ĠColumn Id . create < BigDecimal >() ĊĠĠĠ Ġval Ġnumber Column Id Ġ= ĠColumn Id . create < BigDecimal >() ĊĊĠĠĠ Ġrenderer . apply Ġ{ ĊĠĠĠĠĠ Ġchange Ġ{ Ġmodel Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġsource Ġ= ĠConnect able Node . Table (" source ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add ( foo Column Id , Ġ" foo ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add ( bar Column Id , Ġ" bar ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add ( number Column Id , Ġ" numbers ") ĊĊĠĠĠĠĠĠĠ Ġval Ġstring Op Sample Ġ= ĠConnect able Node . Calculated (" string Ġop ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcalculations Ġ= ĠlistOf ( Calculation Mapping ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcalculation Ġ= ĠCalcul ations . Calc _ 1 ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġa Ġ= ĠInput . Variable ( String :: class , Ġ" name "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġformula Ġ= Ġ{ Ġs Ġ-> Ġ"> $ s < " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolumn Ġ= ĠNamed Column (" name Col ", ĠColumn Id . create ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ))) ĊĊĠĠĠĠĠĠĠ Ġval Ġother Num Sample Ġ= ĠConnect able Node . Calculated (" formula ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcalculations Ġ= ĠlistOf ( Calculation Mapping ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcalculation Ġ= ĠEval Ex Calculation Adapter (" a * 1 0 "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolumn Ġ= ĠNamed Column (" result ", ĠColumn Id . create ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ)) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġmodel . add ( source ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add ( string Op Sample ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ. add ( number Op Sample ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add ( other Num Sample ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. connect ( string Op Sample . id , ĠInput . Variable ( String :: class , Ġ" name "), ĠColumn Connection . Column Values ( foo Column Id )) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ. connect ( number Op Sample . id , ĠVariable ( Int :: class , Ġ" x "), ĠColumn Connection . Column Values ( bar Column Id )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. connect ( other Num Sample . id , ĠInput . Variable ( BigDecimal :: class , Ġ" a "), ĠColumn Connection . Column Values ( number Column Id )) ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġchange Data Ġ{ Ġdata Ġ-> ĊĠĠĠĠĠĠĠ Ġdata . change ( foo Column Id , Ġ 4 , Ġ" K la us ") ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġsubscribe Event < Model Event > Ġ{ Ġevent Ġ-> ĊĠĠĠĠĠĠĠ Ġprintln (" got Ġmessage : Ġ$ event ") ĊĊĠĠĠĠĠĠĠ Ġwhen Ġ( event . data ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġis ĠModel Event . EventData . Formula Changed < out ĠConnect able Node > Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" formula Ġchanged : Ġ${ event . data }") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġrenderer . change Ġ{ Ġmodel Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevent . data . apply To ( model ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠ Ġis ĠModel Event . EventData . Connect < out ĠAny > Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" connect : Ġ${ event . data }") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġrenderer . change Ġ{ Ġmodel Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevent . data . apply To ( model ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrenderer . change Ġ{ Ġmodel Ġ-> Ġevent . data . apply To ( model ) Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ċ Ċ // ĠĠĠĠĠĠĠ Ġrenderer . change Ġ{ Ġmodel Ġ-> Ċ // ĠĠĠĠĠĠĠĠĠ Ġmodel Ċ // ĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġsubscribe Event < Data Event > Ġ{ Ġevent Ġ-> ĊĠĠĠĠĠĠĠ Ġprintln (" change Ġdata : Ġ${ event . data }") ĊĊĠĠĠĠĠĠĠ Ġrenderer . change Data Ġ{ Ġdata Ġ-> ĊĠĠĠĠĠĠĠĠĠ Ġevent . data . apply To ( data ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġsubscribe Event < IO Event > Ġ{ Ġevent Ġ-> ĊĠĠĠĠĠĠĠ Ġwhen Ġ( event . action ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ ĠIO Event . Action . Load Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfile Chooser Ġ= Ġfile Chooser () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfile Chooser . title Ġ= Ġ" Open ĠFile " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfile Ġ= Ġfile Chooser . show Open Dialog ( current Stage ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" load Ġ$ file ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( file != null ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontent Ġ= ĠFiles . read All Bytes ( file . to Path ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// model . value ( Tab Model ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ( new Model , new Positions ) Ġ= ĠTab Model IO . fromJson ( String ( content , ĠChar sets . UTF _ 8 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodel . value ( new Model ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode Positions Ġ= Ġnew Positions ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Loaded Ġ$ node Positions ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode Positions . forEach Ġ{ ĠnodeId , Ġpos , Ġsize Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUI Event . move Node ( nodeId , pos , size ). fire () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠ ĠIO Event . Action . Save Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfile Chooser Ġ= Ġfile Chooser () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfile Chooser . title Ġ= Ġ" Save ĠFile " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfile Chooser . initial FileName Ġ= Ġ" sample . tab " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfile Ġ= Ġfile Chooser . show Save Dialog ( current Stage ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" write Ġto Ġ$ file ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( file != null ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjson Ġ= ĠTab Model IO . as Json ( model . value (), Ġnode Positions ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFiles . write ( file . to Path (), json . toByteArray ( Charsets . UTF _ 8 ), ĠStandard Open Option . TRUNC ATE _ EXIST ING , ĠStandard Open Option . CREATE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġsubscribe Event < UI Event > Ġ{ Ġevent Ġ-> ĊĠĠĠĠĠĠĠ Ġif Ġ( event . event Data Ġis ĠUI Event . EventData . Node Moved ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġnode Positions Ġ= Ġnode Positions . set ( event . event Data . id , Ġevent . event Data . position , Ġevent . event Data . size ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ // ĠĠĠ Ġzoom able Pane . content Ġ+= ĠSample Node () Ċ // ĠĠĠ Ġzoom able Pane . content Ġ+= ĠDrag Play ground () ĊĠĠĠ Ġif Ġ( false ) Ġ{ ĊĠĠĠĠĠ Ġzoom able Pane . content Ġ+= ĠSp read Sheet Play ground () ĊĠĠĠ Ġ} ĊĠĠĠ Ġif Ġ( false ) Ġ{ ĊĠĠĠĠĠ Ġzoom able Pane . content Ġ+= ĠSp read Sheet (). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġmove ( time Ġ= ĠDuration . seconds ( 2 . 0 ), Ġdestination Ġ= Ġjavafx . geometry . Point 2 D (- 4 0 . 0 , Ġ- 4 0 . 0 )) ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġzoom able Pane . content Ġ+= ĠLayout Fun () ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĠ Ġprivate Ġfun Ġfile Chooser (): ĠFile Chooser Ġ{ ĊĠĠĠ Ġreturn ĠFile Chooser (). apply Ġ{ ĊĠĠĠĠĠ Ġextension Filters . addAll ( ĊĠĠĠĠĠĠĠĠĠ ĠFile Chooser . Extension Filter (" All ĠFiles ", Ġ"* .* "), ĊĠĠĠĠĠĠĠĠĠ ĠFile Chooser . Extension Filter (" Tab ĠFile ", Ġ"*. tab ") ĊĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊ Ċ } Ċ