/** * $Id: mxElbowEdgeHandler.java,v 1.1 2012/11/15 13:26:44 gaudenz Exp $ * Copyright (c) 2008, Gaudenz Alder */ package com.mxgraph.swing.handler; import java.awt.Point; import java.awt.Rectangle; import java.awt.event.MouseEvent; import java.util.List; import com.mxgraph.model.mxGeometry; import com.mxgraph.swing.mxGraphComponent; import com.mxgraph.util.mxConstants; import com.mxgraph.util.mxPoint; import com.mxgraph.util.mxResources; import com.mxgraph.view.mxCellState; import com.mxgraph.view.mxGraphView; /** * @author Administrator * */ public class mxElbowEdgeHandler extends mxEdgeHandler { /** * * @param graphComponent * @param state */ public mxElbowEdgeHandler(mxGraphComponent graphComponent, mxCellState state) { super(graphComponent, state); } /** * Hook for subclassers to return tooltip texts for certain points on the * handle. */ public String getToolTipText(MouseEvent e) { int index = getIndexAt(e.getX(), e.getY()); if (index == 1) { return mxResources.get("doubleClickOrientation"); } return null; } /** * */ protected boolean isFlipEvent(MouseEvent e) { return e.getClickCount() == 2 && index == 1; } /** * Returns true if the given index is the index of the last handle. */ public boolean isLabel(int index) { return index == 3; } /** * */ protected Rectangle[] createHandles() { p = createPoints(state); Rectangle[] h = new Rectangle[4]; mxPoint p0 = state.getAbsolutePoint(0); mxPoint pe = state.getAbsolutePoint(state.getAbsolutePointCount() - 1); h[0] = createHandle(p0.getPoint()); h[2] = createHandle(pe.getPoint()); // Creates the middle green edge handle mxGeometry geometry = graphComponent.getGraph().getModel().getGeometry( state.getCell()); List<mxPoint> points = geometry.getPoints(); Point pt = null; if (points == null || points.isEmpty()) { pt = new Point((int) (Math.round(p0.getX()) + Math .round((pe.getX() - p0.getX()) / 2)), (int) (Math.round(p0 .getY()) + Math.round((pe.getY() - p0.getY()) / 2))); } else { mxGraphView view = graphComponent.getGraph().getView(); pt = view.transformControlPoint(state, points.get(0)) .getPoint(); } // Create the green middle handle h[1] = createHandle(pt); // Creates the yellow label handle h[3] = createHandle(state.getAbsoluteOffset().getPoint(), mxConstants.LABEL_HANDLE_SIZE); // Makes handle slightly bigger if the yellow label handle // exists and intersects this green handle if (isHandleVisible(3) && h[1].intersects(h[3])) { h[1] = createHandle(pt, mxConstants.HANDLE_SIZE + 3); } return h; } }