package Ġio . github . red nest o . mus ics he lf . ui Ċ Ċ import Ġio . github . red nest o . mus ics he lf . She lf Ċ import Ġio . github . red nest o . mus ics he lf . utils .* Ċ import Ġjavafx . collections .* Ċ import Ġjavafx . scene . control . CheckBox Ċ import Ġjavafx . scene . control . ListView Ċ import Ġjavafx . scene . control . Selection Mode Ċ import Ġjavafx . scene . control . cell . ComboBox List Cell Ċ Ċ object ĠS hel vable Groups ListView Helper Ġ{ ĊĠĠĠ Ġfun Ġconfigure ( list View : ĠListView < String >, ĠaddTo Root Checkbox : ĠCheckBox , Ġshe lf : ĠShe lf ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġavailable Groups : ĠObservable List < String > Ġ= ĠFX Collections . observable ArrayList () ĊĊĠĠĠĠĠĠĠ ĠlistView . selection Model . selection Mode Ġ= ĠSelection Mode . MULTIPLE ĊĠĠĠĠĠĠĠ ĠlistView . set Cell Factory Ġ{ ĠCombo Box List Cell ( available Groups ). apply Ġ{ Ġis ComboBox Editable Ġ= Ġtrue Ġ} Ġ} ĊĠĠĠĠĠĠĠ ĠlistView . setOn Edit Commit Ġ{ Ġevent Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Group Ġ= Ġnormalize Group ( event . newValue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Root Group ( new Group )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠaddTo Root Checkbox . isSelected Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistView . items . remove At ( event . index ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠoldValue Ġ= ĠlistView . items [ event . index ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( new Group Ġ!= ĠoldValue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Key Ġ= Ġrename To Avoid Duplicates ( new Group , ĠlistView . items . without ( oldValue )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistView . items [ event . index ] Ġ= Ġnew Key ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġevent . consume () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠlistView . items . addListener ( List ChangeListener Ġ{ ĠaddTo Root Checkbox . is Disable Ġ= ĠlistView . items . isEmpty () Ġ}) ĊĠĠĠĠĠĠĠ ĠlistView . items . addListener ( List ChangeListener Ġ{ Ġchange Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( change . next ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchange . added Sub List . forEach Ġ{ Ġavailable Groups . remove ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchange . removed . forEach Ġ{ Ġavailable Groups . add If Absent ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġavailable Groups . sort () ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( shelf Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshe lf . all Groups . addListener ( Weak Set ChangeListener ( Set ChangeListener Ġ{ Ġchange Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġadded Ġ= Ġchange . element Added ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( added Ġ!= Ġnull Ġ&& Ġ! list View . items . contains ( added ) Ġ&& Ġ! is Root Group ( added )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġavailable Groups . add If Absent ( added ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġavailable Groups . sort () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ})) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġavailable Groups . addAll ( shelf . all Groups ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġavailable Groups . removeAll ( list View . items ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġavailable Groups . remove ("/") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġavailable Groups . sort () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ