/*
* Copyright 2015 JBoss, by Red Hat, Inc
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.uberfire.ext.wires.core.client.controlpoints;
import com.ait.lienzo.client.core.event.NodeDragMoveEvent;
import com.ait.lienzo.client.core.event.NodeDragMoveHandler;
import com.ait.lienzo.client.core.shape.Circle;
import com.ait.lienzo.client.core.types.Point2D;
import org.uberfire.commons.uuid.UUID;
import org.uberfire.ext.wires.core.api.controlpoints.ControlPoint;
import org.uberfire.ext.wires.core.api.controlpoints.ControlPointMoveHandler;
import org.uberfire.ext.wires.core.client.util.ShapesUtils;
/**
* Default ControlPoint that informs the registered handler of changes to state
*/
public class DefaultControlPoint extends Circle implements ControlPoint<Circle> {
private static final int RADIUS = 8;
private final String id;
private final ControlPointMoveHandler cpMoveHandler;
public DefaultControlPoint(final double x,
final double y,
final ControlPointMoveHandler cpMoveHandler) {
super(RADIUS);
this.id = UUID.uuid();
this.cpMoveHandler = cpMoveHandler;
setFillColor(ShapesUtils.CP_RGB_FILL_COLOR);
setStrokeWidth(ShapesUtils.CP_RGB_STROKE_WIDTH_SHAPE);
setX(x);
setY(y);
setDraggable(true);
setupHandlers(cpMoveHandler);
}
@Override
public String getId() {
return id;
}
@Override
public ControlPointMoveHandler getHandler() {
return cpMoveHandler;
}
@Override
public void move(final double dx,
final double dy) {
setLocation(getLocation().add(new Point2D(dx,
dy)));
}
protected void setupHandlers(final ControlPointMoveHandler moveHandler) {
addNodeDragMoveHandler(new NodeDragMoveHandler() {
@Override
public void onNodeDragMove(final NodeDragMoveEvent nodeDragMoveEvent) {
moveHandler.onMove(DefaultControlPoint.this.getX(),
DefaultControlPoint.this.getY());
getLayer().batch();
}
});
}
@Override
public String toString() {
return "DefaultControlPoint{" + "id=" + id + "}";
}
}