package Ġde . u ul m . se . co uched it . client . controller . canvas . ge f . policy Ċ Ċ import Ġcom . google . inject . Inject Ċ import Ġde . j ens d . fx . glyph s . fontawesome . FontAwesome Icon Ċ import Ġde . j ens d . fx . glyph s . fontawesome . utils . FontAwesome Icon Factory Ċ import Ġde . u ul m . se . co uched it . client . controller . canvas . ge f . part . Base Part Ċ import Ġde . u ul m . se . co uched it . client . controller . canvas . processing . Canvas Coordinator Ċ import Ġde . u ul m . se . co uched it . client . controller . canvas . processing . Graphic Object Queries Ċ import Ġde . u ul m . se . co uched it . client . controller . workspace . Editor Pane Controller Ċ import Ġde . u ul m . se . co uched it . processing . common . model . diff collection . Diff Collection Ċ import Ġjavafx . scene . Node Ċ import Ġjavafx . scene . control . ContextMenu Ċ import Ġjavafx . scene . control . MenuItem Ċ import Ġjavafx . scene . control . Separator MenuItem Ċ import Ġjavafx . scene . input . MouseEvent Ċ import Ġorg . eclipse . ge f . mvc . fx . handlers . Abstract Handler Ċ import Ġorg . eclipse . ge f . mvc . fx . handlers . I OnClick Handler Ċ import Ġorg . eclipse . ge f . mvc . fx . models . Hover Model Ċ import Ġorg . eclipse . ge f . mvc . fx . parts . I Content Part Ċ import Ġorg . eclipse . ge f . mvc . fx . policies . Deletion Policy Ċ import Ġt orn ad of x .* Ċ import Ġjava . util .* Ċ Ċ internal Ġclass ĠShow Graphic Object ContextMenu OnClick Policy Ġ@ Inject Ġconstructor ( ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġcanvas Coordinator : ĠCanvas Coordinator , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġqueries : ĠGraph ic Object Queries Ċ ) Ġ: ĠAbstract Handler (), ĠI OnClick Handler Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġclick ( event : ĠMouseEvent ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! event . is Secondary Button Down ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġmenu Items Ġ= Ġmutable ListOf < MenuItem >() ĊĊĠĠĠĠĠĠĠ Ġ( host Ġas ? ĠBase Part < *, Ġ* >) ?. let Ġ{ Ġbase Part Host Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġicons Ġ= ĠFont Awesome Icon Factory . get () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinspect Node Item Ġ= ĠMenuItem (" Inspect ĠShapes ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġicons . setIcon ( inspect Node Item , ĠFont Awesome Icon . BUG ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinspect Node Item . setOn Action Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . inspect Shape () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmenu Items . add ( inspect Node Item ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdelete Node Item Ġ= ĠMenuItem (" Delete ĠNode ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġicons . setIcon ( delete Node Item , ĠFont Awesome Icon . TR ASH ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelete Node Item . setOn Action Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . delete Part () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmenu Items . add ( delete Node Item ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġto Background Item Ġ= ĠMenuItem (" To ĠBackground ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġicons . setIcon ( to Background Item , ĠFont Awesome Icon . BACK WARD ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġto Background Item . setOn Action Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . to Background () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmenu Items . add ( to Background Item ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġone Step To Back Item Ġ= ĠMenuItem (" One Ġstep Ġto Ġback ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġicons . setIcon ( one Step To Back Item , ĠFont Awesome Icon . STEP _ BACK WARD ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġone Step To Back Item . setOn Action Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . one Step To Back () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmenu Items . add ( one Step To Back Item ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġone Step To Front Item Ġ= ĠMenuItem (" One Ġstep Ġto Ġfront ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġicons . setIcon ( one Step To Front Item , ĠFont Awesome Icon . STEP _ FORWARD ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġone Step To Front Item . setOn Action Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . one Step To Front () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmenu Items . add ( one Step To Front Item ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġto Foreground Item Ġ= ĠMenuItem (" To ĠFore ground ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġicons . setIcon ( to Foreground Item , ĠFont Awesome Icon . FORWARD ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġto Foreground Item . setOn Action Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . to Foreground () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmenu Items . add ( to Foreground Item ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsuggestions Ġ= Ġbuild Suggestion Menu Items ( base Part Host ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( suggestions . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmenu Items Ġ+= ĠSe parator MenuItem () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmenu Items . addAll ( suggestions ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġmenu Ġ= ĠContext Menu () ĊĠĠĠĠĠĠĠ Ġmenu . items . addAll ( menu Items ) ĊĠĠĠĠĠĠĠ Ġ// Ġshow Ġthe Ġmenu Ġat Ġthe Ġmouse Ġposition ĊĠĠĠĠĠĠĠ Ġmenu . show ( event . target Ġas ĠNode , Ġevent . screen X , Ġevent . screen Y ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġbuild Suggestion Menu Items ( part : ĠBase Part < *, Ġ* >): ĠList < MenuItem > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġpart . getContent ()?. id ?. let ( this . queries :: get Suggestions For )?. map Ġ{ Ġsuggestion Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġret Ġ= ĠMenuItem ( suggestion . title ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġret . setOn Action Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexecute Diff Collection ( suggestion . apply Actions ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ map Ġret ĊĠĠĠĠĠĠĠ Ġ} Ġ?: Ġempty List () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinspect Shape () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġ( host Ġas ? ĠBase Part < *, Ġ* >) ?. content Id Ġ?: Ġreturn ĊĊĠĠĠĠĠĠĠ Ġval Ġeditor Pane Controller Ġ= Ġget Editor Pane Controller () ĊĊĠĠĠĠĠĠĠ Ġeditor Pane Controller . inspect Element ( id ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdelete Part () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġremove Ġpart Ġfrom Ġhover Ġmodel Ġ( transient Ġmodel , Ġi . e . Ġchanges Ġare Ġnot Ġundo able ) ĊĠĠĠĠĠĠĠ Ġval Ġhover Ġ= Ġhost . viewer . get Adapter ( Hover Model :: class . java ) ĊĠĠĠĠĠĠĠ Ġif Ġ( host Ġ=== Ġhover . hover ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhover . clear Hover () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġquery ĠDe letion Policy Ġfor Ġthe Ġremoval Ġof Ġthe Ġhost ĊĠĠĠĠĠĠĠ Ġval Ġroot Ġ= Ġhost . root ĊĠĠĠĠĠĠĠ Ġval Ġdel Policy Ġ= Ġroot . get Adapter ( Deletion Policy :: class . java ) ĊĠĠĠĠĠĠĠ Ġinit ( del Policy ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġget Ġall Ġach ore ds Ġand Ġcheck Ġif Ġwe Ġhave Ġa Ġconnection Ġpart ĊĠĠĠĠĠĠĠ Ġfor Ġ( a Ġin ĠArrayList ( host . anch ore ds Un modifiable )) Ġ{ ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġand Ġfinally Ġremove Ġthe Ġnode Ġpart ĊĠĠĠĠĠĠĠ Ġdel Policy . delete ( host Ġas ĠI Content Part < out ĠNode >) ĊĠĠĠĠĠĠĠ Ġcommit ( del Policy ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġto Foreground () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpolicy Ġ= Ġthis . getZ Order Policy () ĊĠĠĠĠĠĠĠ Ġinit ( policy ) ĊĊĠĠĠĠĠĠĠ Ġpolicy . to Foreground () ĊĊĠĠĠĠĠĠĠ Ġcommit ( policy ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġto Background () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpolicy Ġ= Ġthis . getZ Order Policy () ĊĠĠĠĠĠĠĠ Ġinit ( policy ) ĊĊĠĠĠĠĠĠĠ Ġpolicy . to Background () ĊĊĠĠĠĠĠĠĠ Ġcommit ( policy ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġone Step To Back () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpolicy Ġ= Ġthis . getZ Order Policy () ĊĠĠĠĠĠĠĠ Ġinit ( policy ) ĊĊĠĠĠĠĠĠĠ Ġpolicy . one Step To Back () ĊĊĠĠĠĠĠĠĠ Ġcommit ( policy ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġone Step To Front () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpolicy Ġ= Ġthis . getZ Order Policy () ĊĠĠĠĠĠĠĠ Ġinit ( policy ) ĊĊĠĠĠĠĠĠĠ Ġpolicy . one Step To Front () ĊĊĠĠĠĠĠĠĠ Ġcommit ( policy ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Z Order Policy (): ĠZ Order Policy Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġhost . get Adapter ( Z Order Policy :: class . java ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhost As Base Part (): ĠBase Part < *, Ġ* >? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġhost Ġas ? ĠBase Part < *, Ġ*> ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġexecute Diff Collection ( it : ĠDiff Collection ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . canvas Coordinator . apply And Publish Prepared Diff Collection ( it ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Editor Pane Controller (): ĠEditor Pane Controller Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠFX . find ( Editor Pane Controller :: class . java ) ĊĠĠĠ Ġ} Ċ } Ċ