package Ġde . west erm ann . k observe . list Ċ Ċ import Ġde . west erm ann . k observe . base . Observable List Ċ import Ġde . west erm ann . k observe . base . Observable List .* Ċ import Ġde . west erm ann . k observe . event . EventHandler Ċ import Ġde . west erm ann . k observe . event . emit Ċ Ċ abstract Ġclass ĠBase Observable List < T >( ĊĠĠĠĠĠĠĠ Ġprotected Ġval Ġbacking Field : ĠMutable List < T > Ċ ) Ġ: ĠObservable List < T > Ġ{ ĊĊĠĠĠ Ġoverride Ġval Ġon Add Index Ġ= ĠEventHandler < Add Event < T >>() ĊĠĠĠ Ġoverride Ġval Ġon Set Index Ġ= ĠEventHandler < Set Event < T >>() ĊĠĠĠ Ġoverride Ġval Ġon Remove Index Ġ= ĠEventHandler < Remove Event < T >>() ĊĊĠĠĠ Ġoverride Ġval Ġon Add Ġ= ĠEventHandler < T >() ĊĠĠĠ Ġoverride Ġval Ġon Remove Ġ= ĠEventHandler < T >() ĊĠĠĠ Ġoverride Ġval Ġon Clear Ġ= ĠEventHandler < Collection < T >>() ĊĊĠĠĠ Ġoverride Ġval ĠonChange Ġ= ĠEventHandler < Unit >() ĊĊĠĠĠ Ġprotected Ġfun Ġemit On Add ( index : ĠInt , Ġelement : ĠT , Ġemit OnChange : ĠBoolean Ġ= Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠ Ġon Add . emit ( element ) ĊĠĠĠĠĠĠĠ Ġon Add Index . emit ( Add Event ( index , Ġelement )) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( emit OnChange ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠonChange . emit () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġfun Ġemit On Set ( index : ĠInt , Ġold Element : ĠT , Ġnew Element : ĠT , Ġemit OnChange : ĠBoolean Ġ= Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠ Ġon Remove . emit ( old Element ) ĊĠĠĠĠĠĠĠ Ġon Add . emit ( new Element ) ĊĠĠĠĠĠĠĠ Ġon Set Index . emit ( Set Event ( index , Ġold Element , Ġnew Element )) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( emit OnChange ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠonChange . emit () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġfun Ġemit On Remove ( index : ĠInt , Ġelement : ĠT , Ġemit OnChange : ĠBoolean Ġ= Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠ Ġon Remove . emit ( element ) ĊĠĠĠĠĠĠĠ Ġon Remove Index . emit ( Remove Event ( index , Ġelement )) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( emit OnChange ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠonChange . emit () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġfun Ġemit On Clear ( elements : ĠList < T >) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( elements . isEmpty ()) Ġreturn ĊĊĠĠĠĠĠĠĠ Ġon Clear . emit ( elements ) ĊĠĠĠĠĠĠĠ ĠonChange . emit () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġval Ġsize : ĠInt ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġbacking Field . size ĊĊĠĠĠ Ġoverride Ġfun Ġcontains ( element : ĠT ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġbacking Field . contains ( element ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcontains All ( elements : ĠCollection < T >): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġbacking Field . contains All ( elements ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget ( index : ĠInt ): ĠT Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġbacking Field [ index ] ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠindexOf ( element : ĠT ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġbacking Field . indexOf ( element ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠisEmpty (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġbacking Field . isEmpty () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġlast IndexOf ( element : ĠT ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġbacking Field . lastIndexOf ( element ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠhashCode (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġbacking Field . hashCode () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ= Ġbacking Field . toString () Ċ } Ċ