package Ġde . fl ap do od le . tab . graph . nodes . renderer Ċ Ċ import Ġde . fl ap do od le . tab . controls . tables . Smart Cell Ċ import Ġde . fl ap do od le . tab . controls . tables . Smart Column Ċ import Ġde . fl ap do od le . tab . controls . tables . Smart Table Ċ import Ġde . fl ap do od le . tab . converter . Converters Ċ import Ġde . fl ap do od le . tab . data . Column Id Ċ import Ġde . fl ap do od le . tab . data . Data Ċ import Ġde . fl ap do od le . tab . data . Named Column Ċ import Ġde . fl ap do od le . tab . data . nodes . Connect able Node Ċ import Ġde . fl ap do od le . tab . data . nodes . Has Columns Ċ import Ġde . fl ap do od le . fx . extensions . property Ċ import Ġde . fl ap do od le . fx . extensions . subscribe Event Ċ 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 . Explain Event Ċ import Ġde . fl ap do od le . fx . lazy . Lazy Value Ċ import Ġde . fl ap do od le . fx . lazy . asList Binding Ċ import Ġde . fl ap do od le . fx . lazy . bind From Ċ import Ġde . fl ap do od le . fx . lazy . map Ċ import Ġde . fl ap do od le . fx . lazy . merge Ċ import Ġde . fl ap do od le . fx . lazy . sync From Ċ import Ġjavafx . collections . FX Collections Ċ import Ġjavafx . scene . control . ContextMenu Ċ import Ġjavafx . scene . control . Control Ċ import Ġjavafx . scene . layout . Priority Ċ import Ġjavafx . scene . paint . Color Ċ import Ġt orn ad of x .* Ċ Ċ class ĠSmart Columns Node < T >( ĊĠĠĠ Ġnode : ĠLazy Value < T >, ĊĠĠĠ Ġdata : ĠLazy Value < Data >, ĊĠĠĠ Ġprivate Ġval Ġcolumn Header : Ġ(( Named Column < out ĠAny >) Ġ-> ĠFragment )? Ġ= Ġnull , ĊĠĠĠ Ġprivate Ġval Ġcolumn Footer : Ġ(( Smart Column < Data . Row , Ġ* >) Ġ-> ĠFragment )? Ġ= Ġnull , ĊĠĠĠ Ġprivate Ġval Ġeditable : ĠBoolean Ġ= Ġfalse , ĊĠĠĠ Ġprivate Ġval Ġmenu : Ġ( ContextMenu . () Ġ-> ĠUnit )? Ġ= Ġnull Ċ ) Ġ: ĠFragment () ĊĠĠĠ Ġwhere ĠT Ġ: ĠHas Columns , ĊĠĠĠĠĠĠĠĠĠ ĠT Ġ: ĠConnect able Node Ġ{ ĊĊĠ Ġinit Ġ{ ĊĠĠĠ Ġrequire ( node . value () Ġ!= Ġnull ) Ġ{ Ġ" node Ġis Ġnull " Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġval Ġcolumn List Ġ= Ġnode . map ( Has Columns :: columns ) ĊĠ Ġprivate Ġval Ġrows Ġ= Ġnode . merge ( data ) Ġ{ Ġt , Ġd Ġ-> ĊĠĠĠ Ġd Ġto Ġt . columns (). map Ġ{ Ġit . id Ġ} ĊĠ Ġ}. map Ġ{ ĊĠĠĠ Ġappend Empty Row ( it . first . rows ( it . second )) ĊĠ Ġ}. asList Binding () ĊĊĠ Ġprivate Ġfun Ġappend Empty Row ( rows : ĠList < Data . Row >): ĠList < Data . Row > Ġ{ ĊĠĠĠ Ġreturn Ġif Ġ( editable ) ĊĠĠĠĠĠ Ġrows Ġ+ ĠData . Row ( rows . size , Ġempty Map ()) ĊĠĠĠ Ġelse ĊĠĠĠĠĠ Ġrows ĊĠ Ġ} ĊĊĠ Ġoverride Ġval Ġroot Ġ= Ġv box Ġ{ ĊĊĠĠĠ Ġif Ġ( menu Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠ Ġcontext menu ( menu ) ĊĠĠĠ Ġ} ĊĊ Ċ // ĠĠĠ Ġval Ġcolumns Ġ= Ġcolumn List . map List Ġ{ Ġtable Column ( it ) Ġ}. asList Binding () ĊĠĠĠ Ġval Ġc Ġ= ĠFX Collections . observable ArrayList < Smart Column < Data . Row , ĠAny >>() ĊĠĠĠ Ġc . bind From ( column List ) Ġ{ Ġtable Column ( it ) Ġ} ĊĊĠĠĠ Ġval Ġtable Ġ= ĠSmart Table ( ĊĠĠĠĠĠĠĠ Ġrows Ġ= Ġrows , ĊĠĠĠĠĠĠĠ Ġcolumns Ġ= Ġc ĊĠĠĠ Ġ). apply Ġ{ Ċ // ĠĠĠĠĠ Ġis Editable Ġ= Ġeditable ĊĠĠĠĠĠ Ġv grow Ġ= ĠPriority . ALWAYS ĊĊĠĠĠĠĠ Ġ// columns (). sync From ( column List ) Ġ{ Ġtable Column ( it ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġtab pane Ġ{ ĊĠĠĠĠĠ Ġv grow Ġ= ĠPriority . ALWAYS ĊĠĠĠĠĠ Ġtab (" Data ") Ġ{ ĊĠĠĠĠĠĠĠ Ġis C losable Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġthis Ġ+= Ġtable ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġtab (" Chart ") Ġ{ ĊĠĠĠĠĠĠĠ Ġis C losable Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġthis Ġ+= ĠInline Chart Node ( node , Ġdata ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ // ĠĠĠ Ġval Ġtable Ġ= Ġtable view ( rows ) Ġ{ Ċ // ĠĠĠĠĠ Ġis Editable Ġ= Ġeditable Ċ // ĠĠĠĠĠ Ġv grow Ġ= ĠPriority . ALWAYS Ċ // Ċ // ĠĠĠĠĠ Ġcolumns . sync From ( column List ) Ġ{ Ġtable Column ( it ) Ġ} Ċ // ĠĠĠ Ġ} ĊĊĠĠĠ Ġif Ġ( column Footer Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠ Ġh box Ġ{ Ċ // ĠĠĠĠĠĠĠ ĠmaxWidth Ġ= ĠControl . USE _ PRE F _ SIZE ĊĠĠĠĠĠĠĠ Ġval Ġfactory Ġ= Ġcolumn Footer ĊĠĠĠĠĠĠĠ Ġchildren . sync From ( table . columns ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġfactory ( it !! ). root ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġ< T Ġ: ĠAny > Ġtable Column ( named Column : ĠNamed Column < out ĠT >): ĠSmart Column < Data . Row , ĠT > Ġ{ ĊĠĠĠ Ġprintln (" table Column Ġfor Ġ$ named Column ") ĊĠĠĠ Ġval Ġheader Ġ= Ġif Ġ( column Header Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠ Ġh box Ġ{ ĊĠĠĠĠĠĠĠ Ġlabel ( named Column . name ) ĊĠĠĠĠĠĠĠ Ġthis Ġ+= Ġcolumn Header . invoke ( named Column ). root ĊĊĠĠĠĠĠĠĠ ĠmaxWidth = Control . USE _ PRE F _ SIZE ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠ Ġlabel ( named Column . name ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn Ġobject Ġ: ĠSmart Column < Data . Row , ĠT >( header ) Ġ{ ĊĊĠĠĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġproperty [ Column Id :: class ] Ġ= Ġnamed Column . id ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġoverride Ġfun Ġcell ( row : ĠData . Row ): ĠSmart Cell < Data . Row , ĠT > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġobject Ġ: ĠSmart Cell < Data . Row , ĠT >( row [ named Column . id ], Ġeditable , ĠConverter s . converter For ( named Column . id . type )) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsubscribe Event < Explain Event > Ġ{ Ġevent Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( event . data ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠEx plain Event . EventData . Column Selected < out ĠAny > Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( event . data . id Ġ== Ġnamed Column . id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstyle Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠbackgroundColor Ġ+= ĠColor ( 0 . 0 , Ġ 0 . 0 , Ġ 0 . 0 , Ġ 0 . 1 ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠborderWidth Ġ+= Ġbox ( 0 . 0 . px , Ġ 1 . 0 . px ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠborderColor Ġ+= Ġbox ( Color . RED ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠEx plain Event . EventData . No Column Selected Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstyle Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠbackgroundColor Ġ= Ġmulti () Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠborderWidth Ġ= Ġmulti () Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠborderColor Ġ= Ġmulti () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonChange ( value : ĠT ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfire ( Data Event . EventData . Changed ( named Column . id , Ġrow . index , Ġvalue ). as Event ()) ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ }