/**
* 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.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.image.BufferedImage;
import java.util.List;
import javax.swing.JFileChooser;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.ScrollPaneConstants;
import org.apache.log4j.Logger;
import com.comcast.cats.image.RegionInfo;
import com.comcast.cats.vision.components.XMLFilter;
/**
* The ImageCompare window that holds all image compare functionalities. Appears
* when snap image menu item is clicked on CATS Vision View.
*
* @author Sajay JK
*
* Modified on July 9th,2012 by aswathyann to incorporate MVC pattern
*
*/
public class ImageComparePanel extends JPanel
{
private static final long serialVersionUID = 1L;
private static final Logger logger = Logger.getLogger( ImageComparePanel.class );
private JFileChooser regionFileLoader;
private JFileChooser regionFileSaver;
private RegionDetailsPanel regionDetailsPanel;
private FreezeVideoPanel freezeVideoPanel;
private ImageCompareInfoPanel icInfoPanel;
private JScrollPane freezeVideoScrollPane = new JScrollPane();
private Dimension snapImageSize;
public ImageComparePanel( String macID, RegionDetailsPanel regionDetailsPanel, FreezeVideoPanel freezeVideoPanel,
ImageCompareInfoPanel icInfoPanel )
{
this.regionDetailsPanel = regionDetailsPanel;
this.freezeVideoPanel = freezeVideoPanel;
this.icInfoPanel = icInfoPanel;
freezeVideoScrollPane.setAutoscrolls( true );
freezeVideoScrollPane.setViewportView(freezeVideoPanel);
freezeVideoScrollPane.setHorizontalScrollBarPolicy( ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED );
freezeVideoScrollPane.setVerticalScrollBarPolicy( ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED );
freezeVideoScrollPane.setMinimumSize( freezeVideoPanel.getPreferredSize());
setName( macID );
setLayout( new GridBagLayout() );
initGui();
setVisible( true );
logger.info( "ImageCompare Window Initialized" );
}
private void initGui()
{
createPanels();
createFileChoosers();
}
/**
* Create necessary panels for IC Window.
*/
private void createPanels()
{
GridBagConstraints freezeVideoPanelConstraints = new GridBagConstraints();
freezeVideoPanelConstraints.gridx = 0;
freezeVideoPanelConstraints.gridy = 0;
freezeVideoPanelConstraints.weightx = 0.50;
freezeVideoPanelConstraints.anchor = GridBagConstraints.CENTER;
freezeVideoPanelConstraints.insets = new Insets( 0, 50, 0, 10 );
add( freezeVideoScrollPane, freezeVideoPanelConstraints );
GridBagConstraints sidePanelConstraints = new GridBagConstraints();
sidePanelConstraints.gridx = 1;
sidePanelConstraints.gridy = 0;
sidePanelConstraints.fill = GridBagConstraints.VERTICAL;
sidePanelConstraints.anchor = GridBagConstraints.FIRST_LINE_START;
add( icInfoPanel, sidePanelConstraints );
add( regionDetailsPanel, sidePanelConstraints );
regionDetailsPanel.setVisible( false );
}
/**
* Create JFileChoosers for load and save.
*/
private void createFileChoosers()
{
regionFileSaver = new JFileChooser( "Save Region Info XML" );
regionFileSaver.addChoosableFileFilter( new XMLFilter() );
regionFileSaver.setAcceptAllFileFilterUsed( false );
regionFileLoader = new JFileChooser()
{
private static final long serialVersionUID = -1975049860054501938L;
public void approveSelection()
{
if ( getSelectedFile().exists() )
{
super.approveSelection();
}
}
};
regionFileLoader.addChoosableFileFilter( new XMLFilter() );
regionFileLoader.setAcceptAllFileFilterUsed( false );
}
public void setCurrentImage( BufferedImage currentSnaphot, List< RegionInfo > regionsList )
{
freezeVideoPanel.setSnapshot( currentSnaphot );
logger.debug( "Set Current Snapshot as " + currentSnaphot );
// then update the panels with the loaded information.
if ( regionsList != null && regionsList.size() > 0 )
{
RegionInfo defaultRegion = regionsList.get( 0 );
freezeVideoPanel.paintRegion( defaultRegion );
regionDetailsPanel.loadRegionDetails( defaultRegion );
regionDetailsPanel.setRegionsList( regionsList );
for ( RegionInfo regionInfo : regionsList )
{
logger.debug( "loading Regions as " + regionInfo );
}
}
}
public Dimension getSnapImageSize()
{
return snapImageSize;
}
public void setSnapImageSize( Dimension snapImageSize )
{
this.snapImageSize = snapImageSize;
}
public RegionDetailsPanel getRegionDetailsPanel()
{
return regionDetailsPanel;
}
public void setRegionDetailsPanel( RegionDetailsPanel regionDetailsPanel )
{
this.regionDetailsPanel = regionDetailsPanel;
}
public FreezeVideoPanel getFreezeVideoPanel()
{
return freezeVideoPanel;
}
public void setFreezeVideoPanel( FreezeVideoPanel freezeVideoPanel )
{
this.freezeVideoPanel = freezeVideoPanel;
}
public JFileChooser getRegionFileLoader()
{
return regionFileLoader;
}
public void setRegionFileLoader( JFileChooser regionFileLoader )
{
this.regionFileLoader = regionFileLoader;
}
public JFileChooser getRegionFileSaver()
{
return regionFileSaver;
}
public void setRegionFileSaver( JFileChooser regionFileSaver )
{
this.regionFileSaver = regionFileSaver;
}
public ImageCompareInfoPanel getIcInfoPanel()
{
return icInfoPanel;
}
public void setIcInfoPanel( ImageCompareInfoPanel icInfoPanel )
{
this.icInfoPanel = icInfoPanel;
}
}