/*******************************************************************************
* Copyright (c) 2016 Weasis Team and others.
* 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:
* Nicolas Roduit - initial API and implementation
*******************************************************************************/
package org.weasis.acquire.graphics;
import java.awt.Color;
import java.awt.Rectangle;
import java.awt.geom.Area;
import java.util.Collections;
import java.util.List;
import javax.swing.Icon;
import org.weasis.acquire.AcquireObject;
import org.weasis.acquire.Messages;
import org.weasis.acquire.explorer.AcquireImageInfo;
import org.weasis.acquire.explorer.AcquireManager;
import org.weasis.core.api.image.ImageOpNode;
import org.weasis.core.api.image.MaskOp;
import org.weasis.core.api.image.util.MeasurableLayer;
import org.weasis.core.api.image.util.Unit;
import org.weasis.core.api.media.data.ImageElement;
import org.weasis.core.ui.editor.image.ViewCanvas;
import org.weasis.core.ui.model.graphic.imp.area.RectangleGraphic;
import org.weasis.core.ui.model.layer.LayerType;
import org.weasis.core.ui.model.utils.bean.MeasureItem;
import org.weasis.core.ui.model.utils.bean.Measurement;
import org.weasis.core.ui.util.MouseEventDouble;
/**
*
* @author Yannick LARVOR
* @version 2.5.0
* @since v2.5.0 - 2016-04-08 - ylar - creation
*
*/
public class CropRectangleGraphic extends RectangleGraphic {
private static final long serialVersionUID = -933393713355235688L;
public CropRectangleGraphic() {
super();
setColorPaint(Color.RED);
}
public CropRectangleGraphic(CropRectangleGraphic rectangleGraphic) {
super(rectangleGraphic);
}
@Override
public LayerType getLayerType() {
return LayerType.ACQUIRE;
}
@Override
public void buildShape(MouseEventDouble mouseevent) {
super.buildShape(mouseevent);
if (!getResizingOrMoving()) {
AcquireImageInfo info = AcquireManager.getCurrentAcquireImageInfo();
if (info != null) {
ViewCanvas<ImageElement> view = AcquireObject.getView();
info.getNextValues().setCropZone(this.getShape().getBounds());
updateCropDisplay(info);
if (view != null) {
view.getImageLayer().setImage(view.getImage(), info.getPreProcessOpManager());
}
}
}
}
public void updateCropDisplay(AcquireImageInfo imageInfo) {
ImageOpNode node = imageInfo.getPreProcessOpManager().getNode(MaskOp.OP_NAME);
if (node == null) {
node = new MaskOp();
imageInfo.addPreProcessImageOperationAction(node);
} else {
node.clearIOCache();
}
node.setParam(MaskOp.P_SHOW, true);
Rectangle area = imageInfo.getNextValues().getCropZone();
node.setParam(MaskOp.P_SHAPE, area == null ? null : new Area(area));
node.setParam(MaskOp.P_GRAY_TRANSPARENCY, 255);
}
@Override
public Icon getIcon() {
return RectangleGraphic.ICON;
}
@Override
public String getUIName() {
return Messages.getString("CropRectangleGraphic.crop_img"); //$NON-NLS-1$
}
@Override
public List<MeasureItem> computeMeasurements(MeasurableLayer layer, boolean releaseEvent, Unit displayUnit) {
return Collections.emptyList();
}
@Override
public List<Measurement> getMeasurementList() {
return Collections.emptyList();
}
@Override
public CropRectangleGraphic copy() {
if (!pts.isEmpty()) {
// Do not allow to copy it elsewhere
return null;
}
return new CropRectangleGraphic(this);
}
}