blob: 0bf09848f970fa0b88e438be631b27a74775ab76 [file] [log] [blame]
/*******************************************************************************
* <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;
}
}