All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.yaoqiang.graph.shape.SwimlaneShape Maven / Gradle / Ivy

package org.yaoqiang.graph.shape;

import java.awt.Rectangle;

import org.yaoqiang.bpmn.model.elements.collaboration.Participant;
import org.yaoqiang.graph.model.GraphModel;
import org.yaoqiang.util.Constants;

import com.mxgraph.canvas.mxGraphics2DCanvas;
import com.mxgraph.shape.mxBasicShape;
import com.mxgraph.util.mxConstants;
import com.mxgraph.util.mxRectangle;
import com.mxgraph.util.mxUtils;
import com.mxgraph.view.mxCellState;

/**
 * SwimlaneShape
 * 
 * @author Shi Yaoqiang([email protected])
 */
public class SwimlaneShape extends mxBasicShape {

	public void paintShape(mxGraphics2DCanvas canvas, mxCellState state) {
		GraphModel model = (GraphModel) state.getView().getGraph().getModel();
		int start = (int) Math.round(mxUtils.getInt(state.getStyle(), mxConstants.STYLE_STARTSIZE, mxConstants.DEFAULT_STARTSIZE) * canvas.getScale());

		Rectangle tmp = state.getRectangle();

		if (mxUtils.isTrue(state.getStyle(), mxConstants.STYLE_HORIZONTAL, true)) {
			if (configureGraphics(canvas, state, true)) {
				if (model.isLane(state.getCell())) {
					canvas.fillShape(new Rectangle(tmp.x, tmp.y, tmp.width, tmp.height));
				} else {
					canvas.fillShape(new Rectangle(tmp.x, tmp.y, tmp.width, Math.min(tmp.height, start)));
				}
			}

			if (configureGraphics(canvas, state, false)) {
				if (model.isLane(state.getCell())) {
					canvas.getGraphics().drawRect(tmp.x, tmp.y, tmp.width, tmp.height);
				} else {
					canvas.getGraphics().drawRect(tmp.x, tmp.y, tmp.width, Math.min(tmp.height, start));
					canvas.getGraphics().drawRect(tmp.x, tmp.y + start, tmp.width, tmp.height - start);
				}
			}
		} else {
			if (configureGraphics(canvas, state, true)) {
				if (model.isLane(state.getCell())) {
					canvas.fillShape(new Rectangle(tmp.x, tmp.y, tmp.width, tmp.height));
				} else {
					canvas.fillShape(new Rectangle(tmp.x, tmp.y, Math.min(tmp.width, start), tmp.height));
				}
			}

			if (configureGraphics(canvas, state, false)) {
				if (model.isLane(state.getCell())) {
					canvas.getGraphics().drawRect(tmp.x, tmp.y, tmp.width, tmp.height);
				} else {
					canvas.getGraphics().drawRect(tmp.x, tmp.y, Math.min(tmp.width, start), tmp.height);
					canvas.getGraphics().drawRect(tmp.x + start, tmp.y, tmp.width - start, tmp.height);
				}
			}
		}

		if (model.isPool(state.getCell()) && ((Participant) model.getValue(state.getCell())).getMultiplicity() > 1) {
			double scale = canvas.getScale();
			double imgWidth = 16 * scale;
			double imgHeight = 16 * scale;

			Rectangle imageBounds = state.getRectangle();
			imageBounds.setRect(imageBounds.getX() + (imageBounds.getWidth() - imgWidth) / 2, imageBounds.getY() + imageBounds.getHeight() - imgHeight,
					imgWidth, imgHeight);
			canvas.drawImage(imageBounds, Constants.SHAPE_MARKER + "loop_multiple.png");
		}

	}

	protected mxRectangle getGradientBounds(mxGraphics2DCanvas canvas, mxCellState state) {
		int start = (int) Math.round(mxUtils.getInt(state.getStyle(), mxConstants.STYLE_STARTSIZE, mxConstants.DEFAULT_STARTSIZE) * canvas.getScale());
		mxRectangle result = new mxRectangle(state);

		if (mxUtils.isTrue(state.getStyle(), mxConstants.STYLE_HORIZONTAL, true)) {
			result.setHeight(Math.min(result.getHeight(), start));
		} else {
			result.setWidth(Math.min(result.getWidth(), start));
		}

		return result;
	}

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy