/* File: ProgressDialog.java
 * Author: Jason Gookins
 * Description: A modal internal dialog that keeps track of the run progress.
 */

import java.awt.Cursor;
import java.awt.Dimension;
import java.beans.PropertyVetoException;
import javax.swing.JInternalFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JProgressBar;
import javax.swing.JRootPane;

public class ProgressDialog extends JInternalFrame
{
	/************************
	 ** Instance Variables **
	 ************************/

	private Belief belief;
	private JProgressBar progressBar;



	/**********************
	 ** Main Constructor **
	 **********************/

	public ProgressDialog(Belief belief, int numberOfRuns, boolean minimizeChange)
	{
		super("", false, false, false, false);

		this.belief = belief;

		setPreferredSize(new Dimension(200, 65));
		setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));

		JPanel progressPanel = new JPanel();

		progressBar = new JProgressBar(0, 100);
		progressBar.setValue(0);
		progressBar.setStringPainted(true);
		progressPanel.add(progressBar);

		getContentPane().add(progressPanel);

		putClientProperty("JInternalFrame.frameType", "optionDialog");

		Dimension size = getPreferredSize();
		Dimension rootSize = belief.getRootPane().getSize();

		setBounds((rootSize.width - size.width) / 2, (rootSize.height - size.height) / 2, size.width, size.height); 
		belief.getRootPane().validate();

		belief.getSecondEventPane().setVisible(true);
		setVisible(true);
		belief.getLayeredPane().add(this, new Integer(3));

		try
		{
			setSelected(true);
		}
		catch (PropertyVetoException ignored) { }

		belief.getBeliefListener().runNetwork(numberOfRuns, minimizeChange);
	}



	/**********************
	 ** Instance Methods **
	 **********************/

	public void cleanUpAfterClosing()
	{
		try
		{
			setClosed(true);
		}
		catch (PropertyVetoException ignored) { }

		belief.getSecondEventPane().setVisible(false);
	}

	public void updateProgress(int progress)
	{
		progressBar.setValue(progress);
	}
}