package Ġde . rob ol ab . client . ui . views . boxes Ċ Ċ import Ġde . rob ol ab . client . app . controller . System Controller Ċ import Ġde . rob ol ab . client . app . model . base . IN avigation Bar Entry Ċ import Ġde . rob ol ab . client . app . model . base . IN avigation Bar List Ċ import Ġde . rob ol ab . client . app . view model . ViewModel Ċ import Ġde . rob ol ab . client . ui . View Factory Ċ import Ġde . rob ol ab . client . ui . adapter . Web Canvas Ċ import Ġde . rob ol ab . client . utils . Preference Storage Ċ import Ġde . rob ol ab . common . utils . Dimension Ċ import Ġde . rob ol ab . common . utils . Vector Ċ import Ġde . west erm ann . k observe . event . now Ċ import Ġde . west erm ann . k observe . not Ċ import Ġde . west erm ann . k observe . property . map Binding Ċ import Ġde . west erm ann . k webview . View Ċ import Ġde . west erm ann . k webview . View Collection Ċ import Ġde . west erm ann . k webview . client Position Ċ import Ġde . west erm ann . k webview . components .* Ċ import Ġde . west erm ann . k webview . extra . list Factory Ċ import Ġde . west erm ann . k webview . sync Ċ import Ġkotlinx . browser . window Ċ import Ġkotlinx . coroutines . Global Scope Ċ import Ġkotlinx . coroutines . launch Ċ import Ġkotlin . math . max Ċ import Ġkotlin . math . min Ċ Ċ class ĠSide Bar Navigation View ( private Ġval ĠviewModel : ĠIN avigation Bar List ) Ġ: ĠView Collection < View >() Ġ{ ĊĊĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġbox View Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlist Factory ( viewModel . children Property , Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSide Bar Navigation Entry View ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Wheel Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Preview Position () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġinit Preview View () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ: ĠView Factory Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠPRE VIEW _ P ADDING Ġ= Ġ 2 0 . 0 ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġmatches ( viewModel : ĠViewModel ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠviewModel Ġis ĠIN avigation Bar List ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcreate ( viewModel : ĠViewModel ): ĠView Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠSide Bar Navigation View ( viewModel Ġas ĠIN avigation Bar List ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġpreview View : ĠView ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġpreview Dimension Ġ= ĠDimension . ZERO ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġpreview Box Ġ= ĠBox View () ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġpreview Image Ġ= ĠImageView ("") ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġis Preview Initialized Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġupdate Preview Position () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrectangle Ġ= Ġpreview View ?. dimension Ġ?: Ġreturn ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġleft Px Ġ= Ġrectangle . right Ġ- Ġ 1 0 . 0 ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġt 0 Ġ= Ġ( rectangle . top Ġ+ Ġrectangle . bottom ) Ġ/ Ġ 2 Ġ- Ġpreview Dimension . height Ġ/ Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtop Px Ġ= Ġmax ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPRE VIEW _ P ADDING , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmin ( window . innerHeight Ġ- Ġpreview Dimension . height Ġ- ĠPRE VIEW _ P ADDING , Ġt 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġpreview Box . style Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft Ġ= Ġ"${ left Px } px " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Ġ= Ġ"${ top Px } px " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġrender Preview ( src : ĠString , Ġdimension : ĠDimension , Ġreference View : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpreview View Ġ= Ġreference View ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpreview Dimension Ġ= Ġdimension ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpreview Image . source Ġ= Ġsrc ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpreview Box . style Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwidth Ġ= Ġ"${ dimension . width } px " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheight Ġ= Ġ"${ dimension . height } px " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdisplay Ġ= Ġ" block " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Preview Position () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġremove Preview () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpreview View Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpreview Dimension Ġ= ĠDimension . ZERO ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpreview Image . source Ġ= Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpreview Box . style Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremove Property (" left ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremove Property (" top ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremove Property (" width ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremove Property (" height ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdisplay Ġ= Ġ" none " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġinit Preview View () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Preview Initialized ) Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Preview Initialized Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġpreview Image . html . draggable Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBody Ġ+= Ġpreview Box ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith ( preview Box ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclass List Ġ+= Ġ" navigation - bar - preview " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ preview Image ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonMouse Leave Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrect Ġ= Ġpreview View ?. dimension ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( rect Ġ!= Ġnull Ġ&& Ġit . client Position Ġ! in Ġrect . shrink ( 1 . 0 )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremove Preview () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremove Preview () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinner Ġclass ĠSide Bar Navigation Entry View ( entry : ĠIN avigation Bar Entry ) Ġ: ĊĠĠĠĠĠĠĠ ĠView Collection < View >() Ġ{ ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġcalculate Preview Dimension ( dimension : ĠDimension ): ĠPair < Dimension , ĠDouble > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdpi Ġ= Ġwindow . device Pixel Ratio ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdpi Dimension Ġ= Ġdimension Ġ* Ġdpi ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġwindow Dimension Ġ= ĠDimension ( window . innerWidth , Ġwindow . innerHeight ) Ġ- ĠDimension ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPRE VIEW _ P ADDING Ġ* Ġ 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPRE VIEW _ P ADDING Ġ* Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmax Dimension Ġ= ĠDimension ( 4 0 0 . 0 , Ġ 2 0 0 . 0 ). min ( window Dimension ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġwidth Scale Ġ= Ġmax Dimension . width Ġ/ Ġdpi Dimension . width ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġheight Scale Ġ= Ġmax Dimension . height Ġ/ Ġdpi Dimension . height ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmin Scale Ġ= Ġmin ( width Scale , Ġheight Scale ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġdpi Dimension Ġ* Ġmin Scale Ġto Ġdpi ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠtextView ( entry . name Property ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠtextView ( entry . subtitle Property ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbox View Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsync ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġentry . status Icon Property , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Ġ= Ġ{ Ġitem Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIcon View ( item ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Ġ= Ġ{ Ġview , Ġitem Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . icon Ġ= Ġitem ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelete Ġ= Ġ{ Ġview Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . icon Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġclass List . bind (" disabled ", Ġ! entry . enabled Property ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclass List . bind (" one - line ", Ġentry . subtitle Property . map Binding Ġ{ Ġit . isBlank () Ġ}) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠonClick Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġentry . open ( it . ctrl Key Ġ|| Ġit . meta Key ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Aux Click Ġ{ Ġevent Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġwhich Ġ= Ġevent . as Dynamic (). which Ġas ĠInt ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( which Ġ== Ġ 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevent . preventDefault () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġentry . open ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Context Ġ{ Ġevent Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevent . stopPropagation () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevent . preventDefault () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmenu Ġ= Ġentry . generate ContextMenu At ( Vector ( event . client X , Ġevent . client Y )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( menu Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSystem Controller . open ContextMenu ( menu ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġis Hover ed : ĠBoolean ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġpreview Src Ġ= Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġpreview Dimension Ġ= ĠDimension . ZERO ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġpreview Timestamp Ġ= Ġ- 1 L ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPreference Storage . selected Theme Property . onChange Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpreview Timestamp Ġ= Ġ- 1 L ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠonMouse Enter Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Hover ed Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGlobal Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcurrent Timestamp Ġ= Ġentry . get Render Data Timestamp () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( current Timestamp Ġ> Ġpreview Timestamp ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpreview Timestamp Ġ= Ġcurrent Timestamp ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġdim Ġ= ĠDimension . ZERO ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġweb Canvas Ġ= Ġentry . render Preview Ġ{ Ġdimension Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ( d , Ġs ) Ġ= Ġcalculate Preview Dimension ( dimension ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdim Ġ= Ġd ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠWeb Canvas ( d , Ġs ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( web Canvas Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpreview Dimension Ġ= Ġdim ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpreview Src Ġ= Ġweb Canvas . canvas . html . to Data URL (" image / png ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Hover ed Ġ&& Ġpreview Src . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrender Preview ( preview Src , Ġpreview Dimension , Ġthis @ Side Bar Navigation Entry View ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( preview Src . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrender Preview ( preview Src , Ġpreview Dimension , Ġthis @ Side Bar Navigation Entry View ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠonMouse Leave Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Hover ed Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . client Position Ġ! in Ġdimension . shrink ( 1 . 0 )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremove Preview () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ