/**
* Copyright 2014 Comcast Cable Communications Management, LLC
*
* This file is part of CATS.
*
* CATS is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* CATS is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with CATS. If not, see <http://www.gnu.org/licenses/>.
*/
package com.comcast.cats.vision.panel.imagecompare;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import javax.swing.BorderFactory;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JSlider;
import javax.swing.JTextField;
import javax.swing.SwingConstants;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import com.comcast.cats.image.ImageCompareRegionInfo;
public class ICSettingsPanel extends JPanel {
private static final long serialVersionUID = -820880179539663455L;
private JLabel lblMatchPct;
private JLabel lblXTolerance;
private JLabel lblYTolerance;
private JLabel lblBlueTolerance;
private JLabel lblGreenTolerance;
private JLabel lblRedTolerance;
private JTextField txtBlueTolerance;
private JTextField txtGreenTolerance;
private JTextField txtRedTolerance;
private JTextField txtMatchPct;
private JTextField txtXTolerance;
private JTextField txtYTolerance;
private JSlider sldMatchPercentage;
private JSlider sldXTolerance;
private JSlider sldYTolerance;
private JSlider sldBlueTolerance;
private JSlider sldGreenTolerance;
private JSlider sldRedTolerance;
private static final int MATCH_PCT_MIN = 1;
private static final int MATCH_PCT_MAX = 100;
private static final int RGB_MIN = 0;
private static final int RGB_MAX = 255;
private static final int REG_TOLERANCE_MIN = 0;
private static final int REG_TOLERANCE_MAX = 20;
public ICSettingsPanel(){
setLayout( new GridBagLayout() );
setBorder( BorderFactory.createTitledBorder( "Tolerance" ) );
// Constraints for 'Match %:' label
GridBagConstraints matchPercentageConstraints = new GridBagConstraints();
matchPercentageConstraints.anchor = GridBagConstraints.LINE_END;
matchPercentageConstraints.gridx = 0;
matchPercentageConstraints.gridy = 0;
// Add label for 'Match %:'
lblMatchPct = ImageCompareUtil.createLabel( "Match %:", SwingConstants.RIGHT, SwingConstants.RIGHT );
add( lblMatchPct, matchPercentageConstraints );
// Constraints for 'Match %:' slider
matchPercentageConstraints.gridx = 1;
matchPercentageConstraints.gridy = 0;
// Add Slider for 'Match %:'
sldMatchPercentage = ImageCompareUtil.createSlider( JSlider.HORIZONTAL, MATCH_PCT_MIN, MATCH_PCT_MAX,
ImageCompareRegionInfo.DEFAULT_MATCH_PERCENT.intValue(),
"The percentage of the region that must match to result in a pass" );
add( sldMatchPercentage, matchPercentageConstraints );
// Constraints for 'Match %:' text field
matchPercentageConstraints.gridx = 2;
matchPercentageConstraints.gridy = 0;
matchPercentageConstraints.ipadx = 5;
// Add text field for 'Match %:'
txtMatchPct = ImageCompareUtil.createTextField( 2, sldMatchPercentage.getToolTipText(), String.valueOf( sldMatchPercentage
.getValue() ), false );
add( txtMatchPct, matchPercentageConstraints );
// Constraints for X Tolerance label
GridBagConstraints xToleranceConstraints = new GridBagConstraints();
xToleranceConstraints.anchor = GridBagConstraints.LINE_END;
xToleranceConstraints.gridx = 0;
xToleranceConstraints.gridy = 1;
// Add label for for X Tolerance
lblXTolerance = ImageCompareUtil.createLabel( "X:", SwingConstants.RIGHT, SwingConstants.RIGHT );
add( lblXTolerance, xToleranceConstraints );
// Constraints for X Tolerance slider
xToleranceConstraints.gridx = 1;
xToleranceConstraints.gridy = 1;
// Add slider for for X Tolerance
sldXTolerance = ImageCompareUtil.createSlider( JSlider.HORIZONTAL, REG_TOLERANCE_MIN, REG_TOLERANCE_MAX,
ImageCompareRegionInfo.DEFAULT_X_TOLERANCE,
"The number of pixels to the left and right to check for the region" );
add( sldXTolerance, xToleranceConstraints );
// Constraints for X Tolerance text field
xToleranceConstraints.gridx = 2;
xToleranceConstraints.gridy = 1;
xToleranceConstraints.ipadx = 5;
// Add text field for for X Tolerance
txtXTolerance = ImageCompareUtil.createTextField( 2, sldXTolerance.getToolTipText(), String.valueOf( sldXTolerance.getValue() ),
false );
add( txtXTolerance, xToleranceConstraints );
// Constraints for Y Tolerance label
GridBagConstraints yToleranceConstraints = new GridBagConstraints();
yToleranceConstraints.anchor = GridBagConstraints.LINE_END;
yToleranceConstraints.gridx = 0;
yToleranceConstraints.gridy = 2;
// Add label for for Y Tolerance
lblYTolerance = ImageCompareUtil.createLabel( "Y:", SwingConstants.RIGHT, SwingConstants.RIGHT );
add( lblYTolerance, yToleranceConstraints );
// Constraints for Y Tolerance Slider
yToleranceConstraints.gridx = 1;
yToleranceConstraints.gridy = 2;
// Add Slider for Y Tolerance
sldYTolerance = ImageCompareUtil.createSlider( JSlider.HORIZONTAL, REG_TOLERANCE_MIN, REG_TOLERANCE_MAX,
ImageCompareRegionInfo.DEFAULT_Y_TOLERANCE, "The number of pixels up and down to check for the region" );
add( sldYTolerance, yToleranceConstraints );
// Constraints for Y Tolerance text field
yToleranceConstraints.gridx = 2;
yToleranceConstraints.gridy = 2;
yToleranceConstraints.ipadx = 5;
// Add text field for Y Tolerance
txtYTolerance = ImageCompareUtil.createTextField( 2, sldYTolerance.getToolTipText(), String.valueOf( sldYTolerance.getValue() ),
false );
add( txtYTolerance, yToleranceConstraints );
// Constraints for Red Tolerance label
GridBagConstraints redToleranceConstraints = new GridBagConstraints();
redToleranceConstraints.anchor = GridBagConstraints.LINE_END;
redToleranceConstraints.gridx = 0;
redToleranceConstraints.gridy = 3;
// Add label for for Red Tolerance
lblRedTolerance = ImageCompareUtil.createLabel( "Red:", SwingConstants.RIGHT, SwingConstants.RIGHT );
add( lblRedTolerance, redToleranceConstraints );
// Constraints for Red Tolerance slider
redToleranceConstraints.gridx = 1;
redToleranceConstraints.gridy = 3;
// Add Slider for Red Tolerance
sldRedTolerance =ImageCompareUtil. createSlider( JSlider.HORIZONTAL, RGB_MIN, RGB_MAX,
ImageCompareRegionInfo.DEFAULT_RED_TOLERANCE, "The red tolerance of the image compare" );
add( sldRedTolerance, redToleranceConstraints );
// Constraints for red tolerance text field
redToleranceConstraints.gridx = 2;
redToleranceConstraints.gridy = 3;
redToleranceConstraints.ipadx = 5;
// Add Red tolerance text field
txtRedTolerance = ImageCompareUtil.createTextField( 2, sldRedTolerance.getToolTipText(), String.valueOf( sldRedTolerance
.getValue() ), false );
add( txtRedTolerance, redToleranceConstraints );
// Constraints for Green Tolerance label
GridBagConstraints greenToleranceConstraints = new GridBagConstraints();
greenToleranceConstraints.anchor = GridBagConstraints.LINE_END;
greenToleranceConstraints.gridx = 0;
greenToleranceConstraints.gridy = 4;
// Add label for for Green Tolerance
lblGreenTolerance = ImageCompareUtil.createLabel( "Green:", SwingConstants.RIGHT, SwingConstants.RIGHT );
add( lblGreenTolerance, greenToleranceConstraints );
// Constraints for Green Tolerance slider
greenToleranceConstraints.gridx = 1;
greenToleranceConstraints.gridy = 4;
// Add Slider for Red Tolerance
sldGreenTolerance = ImageCompareUtil.createSlider( JSlider.HORIZONTAL, RGB_MIN, RGB_MAX,
ImageCompareRegionInfo.DEFAULT_GREEN_TOLERANCE, "The green tolerance of the image compare" );
add( sldGreenTolerance, greenToleranceConstraints );
// Constraints for Green tolerance text field
greenToleranceConstraints.gridx = 2;
greenToleranceConstraints.gridy = 4;
greenToleranceConstraints.ipadx = 5;
// Add Green tolerance text field
txtGreenTolerance = ImageCompareUtil.createTextField( 2, sldGreenTolerance.getToolTipText(), String.valueOf( sldGreenTolerance
.getValue() ), false );
add( txtGreenTolerance, greenToleranceConstraints );
// Constraints for Blue tolerance label
GridBagConstraints blueToleranceConstraints = new GridBagConstraints();
blueToleranceConstraints.anchor = GridBagConstraints.LINE_END;
blueToleranceConstraints.gridx = 0;
blueToleranceConstraints.gridy = 5;
// Add label for for Blue Tolerance
lblBlueTolerance = ImageCompareUtil.createLabel( "Blue:", SwingConstants.RIGHT, SwingConstants.RIGHT );
add( lblBlueTolerance, blueToleranceConstraints );
// Constraints for Blue tolerance slider
blueToleranceConstraints.gridx = 1;
blueToleranceConstraints.gridy = 5;
// Add slider for for Blue Tolerance
sldBlueTolerance = ImageCompareUtil.createSlider( JSlider.HORIZONTAL, RGB_MIN, RGB_MAX,
ImageCompareRegionInfo.DEFAULT_BLUE_TOLERANCE, "The blue tolerance of the image compare" );
add( sldBlueTolerance, blueToleranceConstraints );
// Constraints for Blue tolerance text field
blueToleranceConstraints.gridx = 2;
blueToleranceConstraints.gridy = 5;
blueToleranceConstraints.ipadx = 5;
// Add Blue tolerance text field
txtBlueTolerance = ImageCompareUtil.createTextField( 2, sldBlueTolerance.getToolTipText(), String.valueOf( sldBlueTolerance
.getValue() ), false );
add( txtBlueTolerance, blueToleranceConstraints );
setupListeners();
}
public void setMatchPct(int matchPct){
sldMatchPercentage.setValue( matchPct);
txtMatchPct.setText( String.valueOf( sldMatchPercentage.getValue() ) );
}
public void setXTolerance(int xTolerance){
sldXTolerance.setValue( xTolerance );
txtXTolerance.setText( String.valueOf( sldXTolerance.getValue() ) );
}
public void setYTolerance(int yTolerance){
sldYTolerance.setValue( yTolerance );
txtYTolerance.setText( String.valueOf( sldYTolerance.getValue() ) );
}
public void setRedTolerance(int redTolerance){
sldRedTolerance.setValue( redTolerance );
txtRedTolerance.setText( String.valueOf( sldRedTolerance.getValue() ) );
}
public void setGreenTolerance(int greenTolerance){
sldGreenTolerance.setValue( greenTolerance );
txtGreenTolerance.setText( String.valueOf( sldGreenTolerance.getValue() ) );
}
public void setBlueTolerance(int blueTolerance){
sldBlueTolerance.setValue( blueTolerance );
txtBlueTolerance.setText( String.valueOf( sldBlueTolerance.getValue() ) );
}
public int getMatchPct(){
return Integer.parseInt(txtMatchPct.getText());
}
public int getXTolerance(){
return Integer.parseInt(txtXTolerance.getText());
}
public int getYTolerance(){
return Integer.parseInt(txtYTolerance.getText());
}
public int getRedTolerance(){
return Integer.parseInt(txtRedTolerance.getText());
}
public int getGreenTolerance(){
return Integer.parseInt(txtGreenTolerance.getText());
}
public int getBlueTolerance(){
return Integer.parseInt(txtBlueTolerance.getText());
}
public void clearValues() {
sldMatchPercentage.setValue(ImageCompareRegionInfo.DEFAULT_MATCH_PERCENT.intValue());
txtMatchPct.setText( String.valueOf( sldMatchPercentage.getValue() ) );
sldXTolerance.setValue( ImageCompareRegionInfo.DEFAULT_X_TOLERANCE );
txtXTolerance.setText( String.valueOf( sldXTolerance.getValue() ) );
sldYTolerance.setValue( ImageCompareRegionInfo.DEFAULT_Y_TOLERANCE );
txtYTolerance.setText( String.valueOf( sldYTolerance.getValue() ) );
sldRedTolerance.setValue( ImageCompareRegionInfo.DEFAULT_RED_TOLERANCE );
txtRedTolerance.setText( String.valueOf( sldRedTolerance.getValue() ) );
sldGreenTolerance.setValue( ImageCompareRegionInfo.DEFAULT_GREEN_TOLERANCE );
txtGreenTolerance.setText( String.valueOf( sldGreenTolerance.getValue() ) );
sldBlueTolerance.setValue( ImageCompareRegionInfo.DEFAULT_BLUE_TOLERANCE );
txtBlueTolerance.setText( String.valueOf( sldBlueTolerance.getValue() ) );
}
/**
* Adding ChangeListener for Sliders, ActionListener for 'Add/Update'
* button.
*/
private void setupListeners()
{
// Match Percent slider
sldMatchPercentage.addChangeListener( new ChangeListener()
{
@Override
public void stateChanged( ChangeEvent e )
{
txtMatchPct.setText( String.valueOf( sldMatchPercentage.getValue() ) );
}
} );
// X Tolerance slider.
sldXTolerance.addChangeListener( new ChangeListener()
{
@Override
public void stateChanged( ChangeEvent e )
{
txtXTolerance.setText( String.valueOf( sldXTolerance.getValue() ) );
}
} );
// Y Tolerance slider.
sldYTolerance.addChangeListener( new ChangeListener()
{
@Override
public void stateChanged( ChangeEvent e )
{
txtYTolerance.setText( String.valueOf( sldYTolerance.getValue() ) );
}
} );
// Red Tolerance slider.
sldRedTolerance.addChangeListener( new ChangeListener()
{
@Override
public void stateChanged( ChangeEvent e )
{
txtRedTolerance.setText( String.valueOf( sldRedTolerance.getValue() ) );
}
} );
// Green Tolerance slider.
sldGreenTolerance.addChangeListener( new ChangeListener()
{
@Override
public void stateChanged( ChangeEvent e )
{
txtGreenTolerance.setText( String.valueOf( sldGreenTolerance.getValue() ) );
}
} );
// Blue Tolerance slider.
sldBlueTolerance.addChangeListener( new ChangeListener()
{
@Override
public void stateChanged( ChangeEvent e )
{
txtBlueTolerance.setText( String.valueOf( sldBlueTolerance.getValue() ) );
}
} );
}
}