/*******************************************************************************
* 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.util.Collections;
import java.util.List;
import javax.swing.Icon;
import javax.swing.JOptionPane;
import org.weasis.acquire.AcquireObject;
import org.weasis.acquire.Messages;
import org.weasis.acquire.dockable.EditionToolFactory;
import org.weasis.acquire.dockable.components.actions.calibrate.CalibrationPanel;
import org.weasis.acquire.explorer.AcquireImageInfo;
import org.weasis.acquire.explorer.AcquireManager;
import org.weasis.core.api.gui.util.ComboItemListener;
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.CalibrationView;
import org.weasis.core.ui.editor.image.ViewCanvas;
import org.weasis.core.ui.model.GraphicModel;
import org.weasis.core.ui.model.graphic.imp.line.LineGraphic;
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;
public class CalibrationGraphic extends LineGraphic {
private static final long serialVersionUID = -6996238746877983645L;
public CalibrationGraphic() {
super();
setColorPaint(Color.RED);
}
public CalibrationGraphic(CalibrationGraphic calibrationGraphic) {
super(calibrationGraphic);
}
@Override
public void buildShape(MouseEventDouble mouseevent) {
super.buildShape(mouseevent);
ViewCanvas<ImageElement> view = AcquireObject.getView();
GraphicModel graphicManager = view.getGraphicManager();
if (graphicManager.getModels().removeIf(g -> g.getLayer().getType() == getLayerType() && g != this)) {
graphicManager.fireChanged();
}
if (!getResizingOrMoving()) {
CalibrationView calibrationDialog = new CalibrationView(this, view, false);
int res = JOptionPane.showConfirmDialog(view.getJComponent(), calibrationDialog, Messages.getString("CalibrationGraphic.calib"), //$NON-NLS-1$
JOptionPane.OK_CANCEL_OPTION);
if (res == JOptionPane.OK_OPTION) {
calibrationDialog.applyNewCalibration();
if (calibrationDialog.isApplyingToSeries()) {
ImageElement image = view.getImage();
if (image != null) {
AcquireImageInfo info = AcquireManager.findByImage(image);
if (info != null) {
List<AcquireImageInfo> list = AcquireManager.findbySeries(info.getSeries());
for (AcquireImageInfo acquireImageInfo : list) {
ImageElement img = acquireImageInfo.getImage();
if (img != image) {
img.setPixelSpacingUnit(image.getPixelSpacingUnit());
img.setPixelSize(image.getPixelSize());
}
}
}
}
}
}
view.getEventManager().getAction(EditionToolFactory.DRAW_EDITON, ComboItemListener.class)
.ifPresent(a -> a.setSelectedItem(CalibrationPanel.CALIBRATION_LINE_GRAPHIC));
}
}
@Override
public Icon getIcon() {
return LineGraphic.ICON;
}
@Override
public LayerType getLayerType() {
return LayerType.ACQUIRE;
}
@Override
public String getUIName() {
return Messages.getString("CalibrationGraphic.calib_line"); //$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 CalibrationGraphic copy() {
return new CalibrationGraphic(this);
}
}