package org.openflexo.ve.shema; import java.awt.event.MouseEvent; import org.openflexo.fge.GraphicalRepresentation; import org.openflexo.fge.controller.DrawingController; import org.openflexo.fge.controller.MouseClickControl; import org.openflexo.foundation.FlexoEditor; import org.openflexo.foundation.view.ViewElement; import org.openflexo.foundation.view.action.ActionSchemeAction; import org.openflexo.foundation.view.action.ActionSchemeActionType; import org.openflexo.foundation.view.action.NavigationSchemeAction; import org.openflexo.foundation.view.action.NavigationSchemeActionType; import org.openflexo.foundation.viewpoint.ActionScheme; import org.openflexo.foundation.viewpoint.GraphicalElementAction; import org.openflexo.foundation.viewpoint.GraphicalElementAction.ActionMask; import org.openflexo.foundation.viewpoint.GraphicalElementPatternRole; import org.openflexo.foundation.viewpoint.NavigationScheme; public class VEMouseClickControl extends MouseClickControl { private GraphicalElementPatternRole patternRole = null; private GraphicalElementAction.ActionMask mask; public VEMouseClickControl(GraphicalElementAction.ActionMask mask, GraphicalElementPatternRole patternRole) { super(mask.name(), MouseButton.LEFT, mask == ActionMask.DoubleClick ? 2 : 1, mask == ActionMask.ShiftClick, mask == ActionMask.CtrlClick, mask == ActionMask.MetaClick, mask == ActionMask.AltClick); this.patternRole = patternRole; this.mask = mask; } @Override public void handleClick(GraphicalRepresentation<?> graphicalRepresentation, DrawingController<?> controller, MouseEvent event) { super.handleClick(graphicalRepresentation, controller, event); FlexoEditor editor = ((VEShemaController) controller).getEditor(); ViewElement ve = null; if (graphicalRepresentation instanceof VEShapeGR) { VEShapeGR gr = (VEShapeGR) graphicalRepresentation; ve = gr.getDrawable(); } else if (graphicalRepresentation instanceof VEConnectorGR) { VEConnectorGR gr = (VEConnectorGR) graphicalRepresentation; ve = gr.getDrawable(); } if (ve != null && ve.getEditionPatternReference() != null) { for (GraphicalElementAction action : patternRole.getActions(mask)) { if (action.evaluateCondition(ve.getEditionPatternReference())) { if (action.getAbstractActionScheme() instanceof NavigationScheme) { NavigationSchemeAction navigationAction = new NavigationSchemeActionType( (NavigationScheme) action.getAbstractActionScheme(), ve.getEditionPatternReference()).makeNewAction(ve, null, editor); navigationAction.doAction(); } else if (action.getAbstractActionScheme() instanceof ActionScheme) { ActionSchemeAction actionAction = new ActionSchemeActionType((ActionScheme) action.getAbstractActionScheme(), ve.getEditionPatternReference()).makeNewAction(ve, null, editor); actionAction.doAction(); } } } } } }