package Ġcom . val b 3 r . bpmn . intellij . plugin . core Ċ Ċ import Ġcom . intellij . openapi . project . Project Ċ import Ġcom . val b 3 r . bpmn . intellij . plugin . core . render . Canvas Ċ import Ġcom . val b 3 r . bpmn . intellij . plugin . core . ui . components . popup menu . popup Menu Provider Ċ import Ġjava . awt . event .* Ċ import Ġjava . awt . geom . Point 2 D Ċ import Ġjava . util .* Ċ import Ġjavax . swing . Swing Utilities Ċ Ċ private Ġval Ġmouse EventHandler Ġ= ĠCollections . synchronized Map ( Weak HashMap < Project , Ġ ĠMouse EventHandler >()) Ċ Ċ fun Ġcurrent Mouse EventHandler ( project : ĠProject ): ĠMouse EventHandler Ġ{ ĊĠĠĠ Ġreturn Ġmouse EventHandler [ project ] !! Ċ } Ċ Ċ fun ĠsetCurrent Mouse EventHandler ( project : ĠProject , Ġcanvas : ĠCanvas ): ĠMouse EventHandler Ġ{ ĊĠĠĠ Ġval Ġhandler Ġ= ĠMouse EventHandler ( project , Ġcanvas ) ĊĠĠĠ Ġmouse EventHandler [ project ] Ġ= Ġhandler ĊĠĠĠ Ġreturn Ġhandler Ċ } Ċ Ċ class ĠMouse EventHandler ( private Ġval Ġproject : ĠProject , Ġprivate Ġval Ġcanvas : ĠCanvas ): ĠMouse Listener , ĠMouse Motion Listener , ĠMouse Wheel Listener Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġprev Action able Mouse Position : ĠPoint 2 D . Float ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġcurrent Mouse Position : ĠPoint 2 D . Float ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun Ġmouse Clicked ( event : ĠMouseEvent ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpoint 2 D Ġ= ĠPoint 2 D . Float ( event . x . toFloat (), Ġevent . y . toFloat ()) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( Swing Utilities . is Right MouseButton ( event )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpopup Menu Provider ( project ). popup Menu ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . from Camera View ( point 2 D ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . parent ableElement At ( point 2 D ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). show ( event . component , Ġevent . x , Ġevent . y ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġthis . canvas . click ( point 2 D ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġmouse Pressed ( event : ĠMouseEvent ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . canvas . request Focus () ĊĠĠĠĠĠĠĠ Ġval Ġpoint 2 D Ġ= ĠPoint 2 D . Float ( event . x . toFloat (), Ġevent . y . toFloat ()) ĊĠĠĠĠĠĠĠ Ġif Ġ( Swing Utilities . is Left MouseButton ( event ) Ġ&& Ġevent . is Shift Down ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . canvas . start Canvas Drag With Button ( point 2 D ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( Swing Utilities . is Left MouseButton ( event )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . canvas . start Selection Or Selected Drag ( point 2 D ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġmouse Released ( event : ĠMouseEvent ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . canvas . stop Drag Or Select () ĊĠĠĠĠĠĠĠ Ġprev Action able Mouse Position Ġ= Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġmouse Entered ( e : ĠMouseEvent ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠN OP ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġmouse Exit ed ( e : ĠMouseEvent ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠN OP ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġmouse Drag ged ( event : ĠMouseEvent ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmouse Pos Ġ= ĠPoint 2 D . Float ( event . x . toFloat (), Ġevent . y . toFloat ()) ĊĠĠĠĠĠĠĠ Ġval Ġprev Mouse Pos Ġ= Ġprev Action able Mouse Position Ġ?: Ġmouse Pos ĊĊĠĠĠĠĠĠĠ Ġif Ġ( Swing Utilities . is Middle MouseButton ( event )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . canvas . drag With Wheel ( prev Mouse Pos , Ġmouse Pos ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( Swing Utilities . is Left MouseButton ( event )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . canvas . drag Or Select With Left Button ( prev Mouse Pos , Ġmouse Pos ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprev Action able Mouse Position Ġ= Ġmouse Pos ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġmouse Moved ( event : ĠMouseEvent ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcurrent Mouse Position Ġ= ĠPoint 2 D . Float ( event . x . toFloat (), Ġevent . y . toFloat ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġmouse Wheel Moved ( event : ĠMouse Wheel Event ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcurrent Mouse Position Ġ= ĠPoint 2 D . Float ( event . x . toFloat (), Ġevent . y . toFloat ()) ĊĠĠĠĠĠĠĠ Ġthis . canvas . zoom ( current Mouse Position , Ġevent . wheel Rotation ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġlast Position (): ĠPoint 2 D . Float ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġcurrent Mouse Position ĊĠĠĠ Ġ} Ċ } Ċ