package Ġspeech er . editor . sub edit . word _ timeline Ċ Ċ import Ġorg . k oin . core . qual ifier . named Ċ import Ġorg . k oin . dsl . module Ċ import Ġorg . k oin . ext . get OrCreate Scope Ċ import Ġspeech er . ui . util . backgroundColor Ċ import Ġspeech er . ui . util . default Font Ċ import Ġjava . awt . Color Ċ import Ġjava . awt . Graphics Ċ import Ġjava . awt . Rectangle Ċ import Ġjava . awt . event . Mouse Adapter Ċ import Ġjava . awt . event . MouseEvent Ċ import Ġjavax . swing . JPanel Ċ Ċ class ĠWord Timeline View () Ġ: ĠJPanel (), ĠWord Timeline Contract . View Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġscope Ġ= Ġthis . get OrCreate Scope () ĊĠĠĠ Ġprivate Ġval Ġstate : ĠWord Timeline State Ġ= Ġscope . get () ĊĠĠĠ Ġprivate Ġval Ġpresenter : ĠWord Timeline Contract . Presenter Ġ= Ġscope . get () ĊĠĠĠ Ġoverride Ġval Ġexternal : ĠWord Timeline Contract . External Ġ= Ġpresenter Ġas ĠWord Timeline Contract . External ĊĊĠĠĠ Ġprivate Ġval Ġclick Regions : ĠMutable List < Rectangle > Ġ= Ġmutable ListOf () ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġbackground Ġ= ĠbackgroundColor ĊĠĠĠĠĠĠĠ Ġadd Mouse Listener ( object Ġ: ĠMouse Adapter () Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġmouse Pressed ( e : ĠMouseEvent ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclick Regions . forEach Indexed Ġ{ Ġi , Ġregion Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( e . x Ġ> Ġregion . x Ġ&& Ġe . x Ġ< Ġregion . x Ġ+ Ġregion . width ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" click : Ġ$ i ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpresenter . on Index Selected ( i ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġpaint ( g : ĠGraphics ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . paint ( g ) ĊĠĠĠĠĠĠĠ Ġg . color Ġ= ĠbackgroundColor ĊĠĠĠĠĠĠĠ Ġg . draw Rect ( 0 , Ġ 0 , Ġwidth , Ġheight ) ĊĠĠĠĠĠĠĠ Ġg . font Ġ= Ġdefault Font () ĊĠĠĠĠĠĠĠ Ġval Ġdist Sec Ġ= Ġstate . limits [ 1 ] Ġ- Ġstate . limits [ 0 ] ĊĠĠĠĠĠĠĠ Ġif Ġ( dist Sec Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclick Regions . clear () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstate . subs . forEach Ġ{ Ġsub Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġposition Start Ġ= Ġ( width Ġ* Ġ( sub . from Sec Ġ- Ġstate . limits [ 0 ]) Ġ/ Ġdist Sec ). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġposition End Ġ= Ġ( width Ġ* Ġ( sub . to Sec Ġ- Ġstate . limits [ 0 ]) Ġ/ Ġdist Sec ). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġg . color Ġ= ĠColor . BLACK ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġg . draw String ( sub . text [ 0 ], Ġposition Start Ġ+ Ġ 2 , Ġheight Ġ- Ġ 5 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġg . color Ġ= ĠColor . BLUE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġg . draw Rect ( position Start , Ġ 0 , Ġposition End Ġ- Ġposition Start , Ġheight ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclick Regions . add ( Rectangle ( position Start , Ġ 0 , Ġposition End Ġ- Ġposition Start , Ġheight )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstate . current Word ?. let Ġ{ Ġcurrent Word Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġposition Start Ġ= Ġ( width Ġ* Ġ( state . current Word Limits [ 0 ] Ġ- Ġstate . limits [ 0 ]) Ġ/ Ġdist Sec ). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġposition End Ġ= Ġ( width Ġ* Ġ( state . current Word Limits [ 1 ] Ġ- Ġstate . limits [ 0 ]) Ġ/ Ġdist Sec ). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġg . color Ġ= ĠColor . decode ("# 0 0 8 8 0 0 ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġg . draw String ( current Word , Ġposition Start Ġ+ Ġ 2 , Ġheight Ġ- Ġ 5 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġg . draw Rect ( position Start , Ġ 0 , Ġposition End Ġ- Ġposition Start , Ġheight ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġupdate () Ġ{ ĊĠĠĠĠĠĠĠ Ġrep aint () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġval Ġscope Ġ= Ġmodule Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscope ( named < Word Timeline View >()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscoped < Word Timeline Contract . View > Ġ{ Ġget Source () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscoped < Word Timeline Contract . Presenter > Ġ{ ĠWord Timeline Presenter ( get (), Ġget ()) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscoped Ġ{ ĠWord Timeline State () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }