/* Ċ Ġ* ĠFX GL Ġ- ĠJava FX ĠGame ĠLibrary . ĠThe ĠMIT ĠLicense Ġ( MIT ). Ċ Ġ* ĠCopyright Ġ( c ) ĠAl mas B Ġ( al mas lvl @ gmail . com ). Ċ Ġ* ĠSee ĠLICENSE Ġfor Ġdetails . Ċ Ġ*/ Ċ Ċ package Ġcom . al mas b . fx gl . dsl . chat Ċ Ċ import Ġcom . al mas b . fx gl . dsl . FX GL Ċ import Ġcom . al mas b . fx gl . dsl . get UI Factory Service Ċ import Ġcom . al mas b . fx gl . scene . Sub Scene Ċ import Ġjavafx . collections . FX Collections Ċ import Ġjavafx . scene . control . TextArea Ċ import Ġjavafx . scene . control . TextField Ċ import Ġjavafx . scene . paint . Color Ċ import Ġjavafx . scene . shape . Rectangle Ċ import Ġjava . util . function . Consumer Ċ Ċ /** Ċ Ġ* Ċ Ġ* Ġ@ author ĠAl mas ĠB aim ag amb et ov Ġ( al mas lvl @ gmail . com ) Ċ Ġ*/ Ċ class ĠChat Sub Scene ( val Ġwidth : ĠInt , Ġval Ġheight : ĠInt ) Ġ: ĠSub Scene () Ġ{ ĊĊĠĠĠ Ġoverride Ġval Ġis Allow Concurrency : ĠBoolean Ġ= Ġtrue ĊĊĠĠĠ Ġ// ĠTODO : Ġshouldn 't Ġthis Ġbelong Ġto Ġscene , Ġi . e . Ġa Ġscene Ġshould Ġknow Ġwhen Ġit 's Ġin Ġthe Ġstate Ġmachine Ġ... ĊĠĠĠ Ġvar ĠisActive Ġ= Ġfalse ĊĊĠĠĠ Ġprivate Ġval Ġusers Ġ= ĠFX Collections . observable ArrayList < String >() ĊĠĠĠ Ġprivate Ġval Ġtext Area Ġ= ĠText Area () ĊĠĠĠ Ġprivate Ġval Ġtext Input Ġ= ĠTextField () ĊĊĠĠĠ Ġinternal Ġlateinit Ġvar Ġinput Handler : ĠConsumer < String > ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbg Ġ= ĠRectangle ( width . toDouble (), Ġheight . toDouble (), ĠColor . color ( 0 . 0 8 , Ġ 0 . 0 8 , Ġ 0 . 1 )) ĊĊĠĠĠĠĠĠĠ Ġval Ġuser Views Ġ= ĠFX GL . get UI Factory Service (). new ListView < String >( users ) ĊĠĠĠĠĠĠĠ Ġuser Views . pref Width Ġ= Ġ 2 0 0 . 0 ĊĠĠĠĠĠĠĠ Ġuser Views . pref Height Ġ= Ġbg . height ĊĊĊĠĠĠĠĠĠĠ Ġtext Area . translate X Ġ= Ġuser Views . pref Width ĊĠĠĠĠĠĠĠ Ġtext Area . pref Width Ġ= Ġbg . width Ġ- Ġuser Views . pref Width ĊĠĠĠĠĠĠĠ Ġtext Area . pref Height Ġ= Ġbg . height Ġ- Ġ 5 0 ĊĠĠĠĠĠĠĠ Ġtext Area . is Editable Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġtext Area . is Wrap Text Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġtext Area . style Class Ġ+= Ġ" fx gl - chat - text - area " ĊĠĠĠĠĠĠĠ Ġtext Area . font Ġ= Ġget UI Factory Service (). new Font ( 1 4 . 0 ) ĊĊĊĠĠĠĠĠĠĠ Ġtext Input . translate X Ġ= Ġuser Views . pref Width ĊĠĠĠĠĠĠĠ Ġtext Input . translate Y Ġ= Ġtext Area . pref Height Ġ+ Ġ 1 0 . 0 ĊĠĠĠĠĠĠĠ Ġtext Input . pref Width Ġ= Ġtext Area . pref Width ĊĠĠĠĠĠĠĠ Ġtext Input . pref Height Ġ= Ġ 1 5 . 0 ĊĠĠĠĠĠĠĠ Ġtext Input . style Class Ġ+= Ġ" fx gl - chat - text - input " ĊĠĠĠĠĠĠĠ Ġtext Input . font Ġ= Ġget UI Factory Service (). new Font ( 1 4 . 0 ) ĊĊĠĠĠĠĠĠĠ Ġtext Input . setOn Action Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinput Handler . accept ( textInput . text ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext Input . clear () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcontent Root . children . addAll ( bg , Ġuser Views , Ġtext Area , Ġtext Input ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate () Ġ{ ĊĠĠĠĠĠĠĠ ĠisActive Ġ= Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy () Ġ{ ĊĠĠĠĠĠĠĠ ĠisActive Ġ= Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd User ( userName : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġusers Ġ+= ĠuserName ĊĊĠĠĠĠĠĠĠ Ġappend Message ("", Ġ"$ userName Ġjoined Ġthe Ġchat .") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġremove User ( userName : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġusers Ġ-= ĠuserName ĊĊĠĠĠĠĠĠĠ Ġappend Message ("", Ġ"$ userName Ġleft Ġthe Ġchat .") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠTODO : Ġowner Ġtype ĊĠĠĠ Ġfun Ġappend Message ( owner Name : ĠString , Ġmessage : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtext Area . append Text ("$ owner Name : Ġ$ message \ n ") ĊĠĠĠ Ġ} Ċ }