package Ġcn . yi ig ux ing . plugin . translate . ui Ċ Ċ import Ġcn . yi ig ux ing . plugin . translate . trans . Lang Ċ import Ġcn . yi ig ux ing . plugin . translate . util . App Storage Ċ import Ġjavax . swing . Abstract ListModel Ċ import Ġjavax . swing . ComboBox Model Ċ Ċ /** Ċ Ġ* ĠLanguage ListModel Ċ Ġ*/ Ċ Ċ abstract Ġclass ĠLanguage ListModel Ġ: ĠAbstract ListModel < Lang >(), ĠCombo Box Model < Lang > Ġ{ ĊĠĠĠ Ġabstract Ġvar Ġselected : ĠLang ? ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġsorted ( languages : ĠCollection < Lang >, Ġselection : ĠLang ? Ġ= Ġnull ): ĠLanguage ListModel Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSorted Language ListModel ( languages , Ġselection ) ĊĊĠĠĠĠĠĠĠ Ġfun Ġsimple ( languages : ĠList < Lang >): ĠLanguage ListModel Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSimple Language ListModel ( languages ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġclass ĠSimple Language ListModel ( private Ġval Ġlanguages : ĠList < Lang >) Ġ: ĠLanguage ListModel () Ġ{ ĊĠĠĠ Ġoverride Ġvar Ġselected : ĠLang ? Ġ= Ġlanguages . elementAt OrNull ( 0 ) ĊĊĠĠĠ Ġoverride Ġfun Ġget ElementAt ( index : ĠInt ): ĠLang Ġ= Ġlanguages [ index ] ĊĊĠĠĠ Ġoverride Ġfun Ġget Size (): ĠInt Ġ= Ġlanguages . size ĊĊĠĠĠ Ġoverride Ġfun Ġset SelectedItem ( an Item : ĠAny ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġselected Ġ= Ġlanguages . find Ġ{ Ġit Ġ== Ġan Item Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget SelectedItem (): ĠLang ? Ġ= Ġselected Ċ } Ċ Ċ private Ġclass ĠSorted Language ListModel ( languages : ĠCollection < Lang >, Ġselection : ĠLang ? Ġ= Ġnull ) ĊĠĠĠ Ġ: ĠLanguage ListModel () Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġapp Storage Ġ= ĠApp Storage ĊĊĠĠĠ Ġprivate Ġval Ġlanguage List : ĠMutable List < Lang > Ġ= ĠArrayList ( languages ). apply Ġ{ Ġsort () Ġ} ĊĊĠĠĠ Ġoverride Ġvar Ġselected : ĠLang ? Ġ= Ġselection Ġ?: Ġlanguage List . first OrNull () ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( field Ġ!= Ġvalue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ?. apply Ġ{ Ġscore Ġ+= Ġ 1 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlanguage List . sort () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar ĠLang . score : ĠInt ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġif Ġ( this Ġ== ĠLang . AUTO ) ĠInt . MAX _ VALUE Ġelse Ġapp Storage . get Language Score ( this ) ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( this Ġ!= ĠLang . AUTO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapp Storage . set Language Score ( this , Ġvalue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Size (): ĠInt Ġ= Ġlanguage List . size ĊĊĠĠĠ Ġoverride Ġfun Ġget SelectedItem (): ĠAny ? Ġ= Ġselected ĊĊĠĠĠ Ġoverride Ġfun Ġget ElementAt ( index : ĠInt ): ĠLang Ġ= Ġlanguage List [ index ] ĊĊĠĠĠ Ġoverride Ġfun Ġset SelectedItem ( an Item : ĠAny ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġselected Ġ= Ġan Item Ġas ĠLang ? ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠMutable List < Lang >. sort () Ġ{ ĊĠĠĠĠĠĠĠ ĠsortBy Descending Ġ{ Ġit . score Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġupdate () Ġ{ ĊĠĠĠĠĠĠĠ Ġfire Contents Changed ( this , Ġ- 1 , Ġ- 1 ) ĊĠĠĠ Ġ} Ċ }