package mit.util.ui ;

public abstract class CriteriaPanel
extends mit.swing.ui.LabeledPanel
{
	public abstract javax.swing.JComponent[] getFields() ;
	public abstract String getCriteriaLabel() ;

	private java.awt.GridBagLayout gbl = new java.awt.GridBagLayout() ;
	private java.awt.GridBagConstraints gbc = new java.awt.GridBagConstraints() ;

	public void setCriteria()
	{
		try
		{
			removeAll() ;
			gbc.gridx = 1 ;
			gbc.gridy = 1 ;
			gbc.gridwidth = 1 ;
			gbc.gridheight = 1 ;
			gbc.weightx = 1.0 ;
			gbc.weighty = 1.0 ;
			gbc.anchor = java.awt.GridBagConstraints.WEST ;
			gbc.fill = java.awt.GridBagConstraints.HORIZONTAL ;
			gbc.insets = new java.awt.Insets( 0 , 0 , 0 , 0 ) ;
			gbc.ipadx = 5 ;
			gbc.ipady = 3 ;

			if( null != getFields() )
			{
				int numCols = 2 ;
				javax.swing.JComponent[] fields = getFields() ;
				for( int i = 0 ; fields.length != i ; i ++ )
				{
					addAComponent( fields[ i ] , gbl , gbc ) ;
					gbc.gridwidth = java.awt.GridBagConstraints.REMAINDER ;
					gbc.gridx ++ ;
					if( gbc.gridx > numCols )
					{
						gbc.gridwidth = 1 ;
						gbc.gridx = 1 ;
						gbc.gridy ++ ;
					}
				}
			}
		}
		catch( Exception ex )
		{
			ex.printStackTrace() ;
		}
	}

	public void addNotify()
	{
		super.addNotify() ;
		try
		{
			if( null != getCriteriaLabel() )
			{
				setLabel( getCriteriaLabel() ) ;
			}
			setLayout( gbl ) ;
			setCriteria() ;
		}
		catch( Exception ex )
		{
			ex.printStackTrace() ;
		}
	}

	private void addAComponent
	( javax.swing.JComponent component
	, java.awt.GridBagLayout layout
	, java.awt.GridBagConstraints constraints
	)
	{
		layout.setConstraints( component , constraints ) ;
		add( component ) ;
	}

}