| /******************************************************************************* |
| * <copyright> |
| * |
| * Copyright (c) 2011, 2011 SAP AG. |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v1.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v10.html |
| * |
| * Contributors: |
| * SAP AG - initial API, implementation and documentation |
| * |
| * </copyright> |
| * |
| *******************************************************************************/ |
| package org.eclipse.graphiti.examples.chess.features; |
| |
| import org.eclipse.graphiti.examples.chess.MoveUtil; |
| import org.eclipse.graphiti.features.IFeatureProvider; |
| import org.eclipse.graphiti.features.context.IAddConnectionContext; |
| import org.eclipse.graphiti.features.context.IAddContext; |
| import org.eclipse.graphiti.features.impl.AbstractAddFeature; |
| import org.eclipse.graphiti.mm.algorithms.Ellipse; |
| import org.eclipse.graphiti.mm.algorithms.Polyline; |
| import org.eclipse.graphiti.mm.pictograms.Connection; |
| import org.eclipse.graphiti.mm.pictograms.ConnectionDecorator; |
| import org.eclipse.graphiti.mm.pictograms.PictogramElement; |
| import org.eclipse.graphiti.services.Graphiti; |
| import org.eclipse.graphiti.services.IGaService; |
| import org.eclipse.graphiti.services.IPeCreateService; |
| import org.eclipse.graphiti.util.IColorConstant; |
| |
| public class AddChessMoveFeature extends AbstractAddFeature { |
| |
| public AddChessMoveFeature(IFeatureProvider fp) { |
| super(fp); |
| } |
| |
| public boolean canAdd(IAddContext context) { |
| // Add the connection in case it is a move connection (indicated by a |
| // property) |
| if (context instanceof IAddConnectionContext && context.getProperty(MoveUtil.PROPERTY_MOVE) == Boolean.TRUE) { |
| return true; |
| } |
| return false; |
| } |
| |
| public PictogramElement add(IAddContext context) { |
| IAddConnectionContext addConContext = (IAddConnectionContext) context; |
| IPeCreateService peCreateService = Graphiti.getPeCreateService(); |
| IGaService gaService = Graphiti.getGaService(); |
| |
| // Connection visualised as a line |
| Connection connection = peCreateService.createFreeFormConnection(getDiagram()); |
| connection.setStart(addConContext.getSourceAnchor()); |
| connection.setEnd(addConContext.getTargetAnchor()); |
| Polyline polyline = gaService.createPolyline(connection); |
| polyline.setLineWidth(2); |
| polyline.setForeground(manageColor(IColorConstant.ORANGE)); |
| |
| // Add decorator for source of connection (circle) |
| ConnectionDecorator cd = peCreateService.createConnectionDecorator(connection, false, 0, true); |
| Ellipse circle = Graphiti.getGaCreateService().createEllipse(cd); |
| circle.setLineWidth(2); |
| gaService.setLocationAndSize(circle, 0, 0, 6, 6); |
| circle.setForeground(manageColor(IColorConstant.ORANGE)); |
| |
| // Add decorator for target of connection (cross) |
| cd = peCreateService.createConnectionDecorator(connection, false, 1.0, true); |
| Polyline crossPolyline = Graphiti.getGaCreateService().createPolyline(cd, |
| new int[] { -5, -5, 5, 5, 0, 0, -5, 5, 5, -5 }); |
| crossPolyline.setLineWidth(2); |
| crossPolyline.setForeground(manageColor(IColorConstant.ORANGE)); |
| |
| // Add an anchor for move continuation: one to grab the request to |
| // connect to a connection... |
| peCreateService.createChopboxAnchor(connection); |
| // ... and one to actually connect to located at the end decorator |
| peCreateService.createChopboxAnchor(cd); |
| |
| return connection; |
| } |
| } |