package Ġde . rob ol ab . client . renderer . drawable . edit Ċ Ċ import Ġde . rob ol ab . client . renderer . Plot ting Constraints Ċ import Ġde . rob ol ab . client . renderer . drawable . base . I Anim atable Manager Ċ import Ġde . rob ol ab . client . renderer . drawable . utils . Planet RequestContext Ċ import Ġde . rob ol ab . client . renderer . events . Pointer Event Ċ import Ġde . rob ol ab . client . renderer . view . base . View Color Ċ import Ġde . rob ol ab . client . renderer . view . base . extra Put Ċ import Ġde . rob ol ab . client . renderer . view . component . Group View Ċ import Ġde . rob ol ab . client . renderer . view . component . Square View Ċ import Ġde . rob ol ab . common . planet . Planet Point Ċ import Ġde . rob ol ab . common . planet . Planet Direction Ċ import Ġde . rob ol ab . common . planet . Planet Ċ import Ġkotlin . math . ceil Ċ import Ġkotlin . math . floor Ċ Ċ class ĠEdit Point End s Manager ( ĊĠĠĠ Ġprivate Ġval Ġedit Callback : ĠI Edit Callback , ĊĠĠĠ Ġprivate Ġval Ġcreate Path : ĠCreate Path Manager , ĊĠĠĠ Ġprivate Ġval Ġrequest Context : ĠPlan et RequestContext Ċ ): ĠI Anim atable Manager Ġ{ ĊĊĠĠĠ Ġoverride Ġval Ġview Ġ= ĠGroup View (" Edit Ġpoint Ġends Ġmanager ") ĊĠĠĠ Ġprivate Ġval Ġmap Ġ= Ġmutable Map Of < Planet Point , ĠGroup View >() ĊĊĠĠĠ Ġprivate Ġvar Ġplanet Ġ= ĠPlan et . EMPTY ĊĠĠĠ Ġoverride Ġfun Ġimport Planet ( planet : ĠPlan et ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . planet Ġ= Ġplanet ĊĊĠĠĠĠĠĠĠ Ġupdate Views () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup View Events ( coordinate : ĠPlan et Point , Ġview : ĠGroup View ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( direction Ġin ĠPlan et Direction . values ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview Ġ+= Ġsetup Point End ( coordinate , Ġdirection , Ġedit Callback , Ġcreate Path , Ġrequest Context ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate Views () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġarea Ġ= Ġview . document ?. plot ter ?. context ?. area Ġ?: Ġreturn ĊĊĠĠĠĠĠĠĠ Ġval Ġcoordinates ToRemove Ġ= Ġmap . keys . to Mutable Set () ĊĠĠĠĠĠĠĠ Ġfor Ġ( x Ġin Ġfloor ( area . left ). toInt () .. ceil ( area . right ). to Long ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( y Ġin Ġfloor ( area . top ). toInt () .. ceil ( area . bottom ). to Long ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcoordinate Ġ= ĠPlan et Point ( x , Ġy ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( coordinate Ġin Ġmap ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcoordinates ToRemove Ġ-= Ġcoordinate ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew View Ġ= ĠGroup View ("$ x , Ġ$ y ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsetup View Events ( coordinate , Ġnew View ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap [ coordinate ] Ġ= Ġnew View ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview Ġ+= Ġnew View ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( coordinate Ġin Ġcoordinates ToRemove ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġold View Ġ= Ġmap . remove ( coordinate ) Ġ?: Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview Ġ-= Ġold View ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġview . on Canvas Resize Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Views () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġview . on View Change Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Views () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġview . animation Time Ġ= Ġ 0 . 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġsetup Point End ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcoordinate : ĠPlan et Point , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdirection : ĠPlan et Direction , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġedit Callback : ĠI Edit Callback , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Path : ĠCreate Path Manager , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Context : ĠPlan et RequestContext , ĊĠĠĠĠĠĠĠ Ġ): ĠSquare View Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsquare View Ġ= ĠSquare View ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcoordinate . point Ġ+ Ġdirection . to Vector ( Plot ting Constraints . POINT _ SIZE ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPlot ting Constraints . POINT _ SIZE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPlot ting Constraints . LINE _ WIDTH Ġ* Ġ 0 . 6 5 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠView Color . TRANSP ARENT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsquare View . hover able Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsquare View . animation Time Ġ= Ġ 0 . 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsquare View . extra Put ( coordinate ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsquare View . extra Put ( direction ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġsquare View . register Pointer Hint ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Toggle Ġpath Ġselect ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPointer Event . Type . DOWN , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġalt Key Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsquare View . register Pointer Hint ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Start Ġnew Ġpath ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPointer Event . Type . DOWN , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsquare View . register Pointer Hint ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Start Ġnew Ġpath Ġ( draw Ġmode )", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPointer Event . Type . DOWN , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġctrl Key Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsquare View . on Pointer Down Ġ{ Ġevent Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( request Context . type Ġ== ĠPlan et RequestContext . Type . POINT _ END ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Context . provide Point End ( coordinate , Ġdirection ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevent . stopPropagation () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( event . alt Key ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġedit Callback . toggle Path Select ( coordinate , Ġdirection ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġcreate Path . start Path ( coordinate , Ġdirection , Ġevent . ctrl Key ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevent . stopPropagation () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġsquare View ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ