/*******************************************************************************
* 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.dockable.components.actions.contrast;
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.GridLayout;
import javax.swing.BorderFactory;
import javax.swing.BoxLayout;
import javax.swing.JCheckBox;
import javax.swing.JPanel;
import javax.swing.JSlider;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import org.weasis.acquire.AcquireObject;
import org.weasis.acquire.Messages;
import org.weasis.acquire.dockable.components.actions.AbstractAcquireActionPanel;
import org.weasis.acquire.dockable.components.actions.contrast.comp.BrightnessComponent;
import org.weasis.acquire.dockable.components.actions.contrast.comp.ContrastComponent;
import org.weasis.acquire.dockable.components.util.AbstractComponent;
import org.weasis.acquire.dockable.components.util.AbstractSliderComponent;
import org.weasis.acquire.explorer.AcquireImageInfo;
import org.weasis.acquire.explorer.AcquireImageValues;
import org.weasis.acquire.operations.OpValueChanged;
import org.weasis.acquire.operations.impl.AutoLevelListener;
import org.weasis.base.viewer2d.EventManager;
import org.weasis.core.api.image.BrightnessOp;
import org.weasis.core.api.image.ImageOpNode;
import org.weasis.core.api.media.data.ImageElement;
import org.weasis.core.ui.editor.image.ViewCanvas;
public class ContrastPanel extends AbstractAcquireActionPanel implements ChangeListener, OpValueChanged {
private static final long serialVersionUID = -3978989511436089997L;
private final AbstractSliderComponent contrastPanel;
private final AbstractSliderComponent brightnessPanel;
private final AutoLevelListener autoLevelListener;
private JCheckBox autoLevelBtn = new JCheckBox(Messages.getString("ContrastPanel.auto")); //$NON-NLS-1$
public ContrastPanel() {
super();
setLayout(new BorderLayout());
setBorder(BorderFactory.createEmptyBorder(10, 0, 0, 0));
autoLevelListener = new AutoLevelListener();
autoLevelBtn.addActionListener(autoLevelListener);
contrastPanel = new ContrastComponent(this);
brightnessPanel = new BrightnessComponent(this);
JPanel content = new JPanel(new GridLayout(3, 1, 0, 10));
content.setAlignmentX(Component.LEFT_ALIGNMENT);
content.setAlignmentY(Component.TOP_ALIGNMENT);
content.setLayout(new BoxLayout(content, BoxLayout.Y_AXIS));
content.add(contrastPanel);
content.add(brightnessPanel);
content.add(autoLevelBtn);
add(content, BorderLayout.NORTH);
}
@Override
public boolean needValidationPanel() {
return true;
}
@Override
public void initValues(AcquireImageInfo info, AcquireImageValues values) {
ViewCanvas<ImageElement> view = EventManager.getInstance().getSelectedViewPane();
info.clearPreProcess();
AcquireImageValues next = info.getNextValues();
next.setContrast(values.getContrast());
next.setBrightness(values.getBrightness());
next.setAutoLevel(values.isAutoLevel());
autoLevelBtn.removeActionListener(autoLevelListener);
contrastPanel.removeChangeListener(this);
brightnessPanel.removeChangeListener(this);
contrastPanel.setSliderValue(next.getContrast());
brightnessPanel.setSliderValue(next.getBrightness());
contrastPanel.addChangeListener(this);
brightnessPanel.addChangeListener(this);
autoLevelBtn.setSelected(next.isAutoLevel());
repaint();
applyNextValues();
autoLevelListener.applyNextValues();
info.applyPreProcess(view);
}
@Override
public void stateChanged(ChangeEvent e) {
JSlider slider = (JSlider) e.getSource();
JPanel panel = (JPanel) slider.getParent();
if (panel instanceof AbstractSliderComponent) {
((AbstractComponent) panel).updatePanelTitle();
}
AcquireImageInfo imageInfo = AcquireObject.getImageInfo();
imageInfo.getNextValues().setBrightness(brightnessPanel.getSliderValue());
imageInfo.getNextValues().setContrast(contrastPanel.getSliderValue());
applyNextValues();
imageInfo.applyPreProcess(AcquireObject.getView());
}
@Override
public void applyNextValues() {
AcquireImageInfo imageInfo = AcquireObject.getImageInfo();
ImageOpNode node = imageInfo.getPreProcessOpManager().getNode(BrightnessOp.OP_NAME);
if (node == null) {
node = new BrightnessOp();
imageInfo.addPreProcessImageOperationAction(node);
} else {
node.clearIOCache();
}
node.setParam(BrightnessOp.P_BRIGTNESS_VALUE, (double) imageInfo.getNextValues().getBrightness());
node.setParam(BrightnessOp.P_CONTRAST_VALUE, (double) imageInfo.getNextValues().getContrast());
}
}