package Ġme . leon . tools fx . plugin . table Ċ Ċ import Ġjavafx . beans . property . ObjectProperty Ċ import Ġjavafx . beans . property . Simple ObjectProperty Ċ import Ġjavafx . collections . FX Collections Ċ import Ġjavafx . collections . Observable List Ċ import Ġjavafx . scene . control .* Ċ import Ġjavafx . scene . input . KeyEvent Ċ import Ġjavafx . util . Callback Ċ import Ġjavafx . util . String Converter Ċ import Ġjavafx . util . converter . Default String Converter Ċ import Ġme . leon . tools fx . plugin . table . Cell Generator . cancel Edit Ċ import Ġme . leon . tools fx . plugin . table . Cell Generator . create TextField Ċ import Ġme . leon . tools fx . plugin . table . Cell Generator . start Edit Ċ import Ġme . leon . tools fx . plugin . table . Cell Generator . update Item Ċ Ċ class ĠEdit ing Cell < S , ĠT > Ġ: ĠTable Cell < S , ĠT > Ġ{ ĊĊĠĠĠ Ġvar Ġtext Field Cell : ĠTextField ĊĊĠĠĠ Ġconstructor () Ġ: Ġthis ( null ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtext Field Cell Ġ= Ġcreate TextField ( this , Ġget Converter ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġconstructor ( converter : ĠString Converter < T > ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġstyle Class . add (" text - field - table - cell ") ĊĠĠĠĠĠĠĠ Ġset Converter ( converter ) ĊĠĠĠĠĠĠĠ Ġtext Field Cell Ġ= Ġcreate TextField ( this , Ġget Converter ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġconstructor ( converter : ĠString Converter < T > ?, Ġis Field Editable : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġstyle Class . add (" text - field - table - cell ") ĊĠĠĠĠĠĠĠ Ġset Converter ( converter ) ĊĠĠĠĠĠĠĠ Ġtext Field Cell Ġ= Ġcreate TextField ( this , Ġget Converter ()) ĊĠĠĠĠĠĠĠ Ġtext Field Cell . is Editable Ġ= Ġis Field Editable ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġconverter : ĠObject Property < String Converter < T > ?> Ġ= ĊĠĠĠĠĠĠĠ ĠSimple ObjectProperty ( this , Ġ" converter ") ĊĊĠĠĠ Ġfun Ġconverter Property (): ĠObject Property < String Converter < T > ?> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġconverter ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Converter ( value : ĠString Converter < T > ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġconverter Property (). set ( value ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Converter (): ĠString Converter < T >? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġconverter Property (). get () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġstart Edit () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! is Editable Ġ|| Ġ! table View . is Editable Ġ|| Ġ! table Column . is Editable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsuper . start Edit () ĊĠĠĠĠĠĠĠ Ġif Ġ( is Editing ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart Edit ( this , Ġget Converter (), Ġnull , Ġnull , Ġtext Field Cell ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcancel Edit () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . cancel Edit () ĊĠĠĠĠĠĠĠ Ġcancel Edit ( this , Ġget Converter (), Ġnull ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġpublic Ġoverride Ġfun Ġupdate Item ( item : ĠT , Ġempty : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . update Item ( item , Ġempty ) ĊĠĠĠĠĠĠĠ Ġupdate Item ( this , Ġget Converter (), Ġnull , Ġnull , Ġtext Field Cell ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġcontext TableView : ĠTable View < S > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġtable View ĊĊĠĠĠ Ġfun Ġset Next Column ( event : ĠKeyEvent ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnext Column : ĠTable Column < S , Ġ* >? Ġ= ĠgetNext Column (! event . is Shift Down ) ĊĠĠĠĠĠĠĠ Ġif Ġ( next Column Ġ!= Ġnull ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠGet ĠSelected Ġindex Ġto Ġreset Ġcurrent Ġeditable Ġrow ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġselected Row Ġ= Ġtable Row . index ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSet Ġrow Ġthat Ġserves Ġas Ġa Ġcontrol Ġfor Ġt apping Ġthrough ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( current Row Ġ== Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Row Ġ= Ġtable Row . index ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠReset Ġediting Ġupon Ġselection Ġchange Ġrow ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( current Row Ġ!= Ġselected Row ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Row Ġ= Ġselected Row ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcol Size Ġ= Ġtable View . columns . size ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcol index Ġ= Ġtable View . columns . indexOf ( next Column ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( col index Ġ== Ġcol Size Ġ- Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontrol ++ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( control Ġ> Ġ 0 Ġ&& Ġcol index Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Row ++ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( table View . items . size Ġ> Ġcurrent Row ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtable View . edit ( current Row , Ġnext Column ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Row Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtable View . edit ( current Row , Ġnext Column ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠgetNext Column ( forward : ĠBoolean ): ĠTable Column < S , Ġ* >? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcolumns : ĠMutable List < TableColumn < S , Ġ* >> Ġ= ĠArrayList () ĊĠĠĠĠĠĠĠ Ġfor Ġ( column Ġin Ġtable View . columns ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcolumns . addAll ( get Le aves ( column )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠThere Ġis Ġno Ġother Ġcolumn Ġthat Ġsupports Ġediting . ĊĠĠĠĠĠĠĠ Ġif Ġ( columns . size Ġ< Ġ 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval ĠcurrentIndex Ġ= Ġcolumns . indexOf ( table Column ) ĊĠĠĠĠĠĠĠ Ġvar Ġnext Index Ġ= ĠcurrentIndex ĊĠĠĠĠĠĠĠ Ġif Ġ( forward ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnext Index ++ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( next Index Ġ> Ġcolumns . size Ġ- Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnext Index Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnext Index -- ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( next Index Ġ< Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnext Index Ġ= Ġcolumns . size Ġ- Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġcolumns [ next Index ] ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Le aves ( column 2 : ĠTable Column < S , Ġ* >): ĠObservable List < TableColumn < S , Ġ* >> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcolumns Ġ= ĠFX Collections . observable ArrayList < TableColumn < S , Ġ* >>() ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( column 2 . columns . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠWe Ġonly Ġwant Ġthe Ġleaves Ġthat Ġare Ġeditable . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( column 2 . is Editable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolumns . addAll ( column 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcolumns ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( column Ġin Ġcolumn 2 . columns ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolumns . addAll ( get Le aves ( column )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcolumns ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġ< S > Ġfor TableColumn (): ĠCallback < TableColumn < S , ĠString >, ĠTable Cell < S , ĠString >> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfor TableColumn ( Default String Converter ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġ< S , ĠT > Ġfor TableColumn ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconverter : ĠString Converter < T >? ĊĠĠĠĠĠĠĠ Ġ): ĠCallback < TableColumn < S , ĠT >, ĠTable Cell < S , ĠT >> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠCallback Ġ{ ĠEdit ing Cell ( converter ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġ< S , ĠT > Ġfor TableColumn ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconverter : ĠString Converter < T > ?, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Field Editable : ĠBoolean ĊĠĠĠĠĠĠĠ Ġ): ĠCallback < TableColumn < S , ĠT >, ĠTable Cell < S , ĠT >> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠCallback Ġ{ ĠEdit ing Cell ( converter , Ġis Field Editable ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġcurrent Row Ġ= Ġ- 1 ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġcontrol Ġ= Ġ 0 ĊĠĠĠ Ġ} Ċ } Ċ