package vgp.iterate.pythagoreanTree;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;

import jv.object.PsPanel;
import jv.object.PsUpdateIf;
import jv.project.PjProject_IP;

/**
 * Info panel of Pythagorean Tree project.
 * 
 * @author		Andreas Haferburg, Konrad Polthier
 * @version		04.11.06, 2.00 revised (kp) Rewrite to synchronize with JavaView standards.<br>
 *			      29.03.06, 1.00 created (ah)
 */
public class PjPythagoreanTree_IP extends PjProject_IP implements ActionListener, ItemListener { 
	/** Parent project. */
	protected	PjPythagoreanTree		m_pjTree;
	/** Container for age inspector. */
	protected	Panel						m_sliderPanel;
	/** Determines if triangle above trunk is right angled. */
	protected	Checkbox					m_cTriangle;
	/** Determines if trunk is a square. */
	protected	Checkbox					m_cTrunk;
	/** Reset button. */
	protected	Button					m_bReset;
	
	public PjPythagoreanTree_IP() {
		super();

		if (getClass() == PjPythagoreanTree_IP.class) {
			init();
		}
	}
	public void init() {
		super.init();
		addTitle("Pythagorean Tree");

		Panel pCheck = new Panel(new GridLayout(1, 2));
		add(pCheck);
		{
			m_cTrunk = new Checkbox("Square Trunk");
			m_cTrunk.addItemListener(this);
			pCheck.add(m_cTrunk);
			
			m_cTriangle = new Checkbox("Right Triangle");
			m_cTriangle.addItemListener(this);
			pCheck.add(m_cTriangle);
		}

		m_sliderPanel = new PsPanel();
		add(m_sliderPanel);
		
		// buttons at bottom
		Panel pBottomButtons = new Panel(new FlowLayout(FlowLayout.CENTER));
		m_bReset = new Button("Reset");
		m_bReset.addActionListener(this);
		pBottomButtons.add(m_bReset);
		add(pBottomButtons);
	}
	
	public void setParent(PsUpdateIf parent) {
		super.setParent(parent);
		m_pjTree = (PjPythagoreanTree)parent;
		setTitle(m_pjTree.getName());
		m_sliderPanel.removeAll();
		m_sliderPanel.add(m_pjTree.m_age.getInfoPanel());
		m_sliderPanel.add(m_pjTree.m_colTrunk.getInfoPanel());
		m_sliderPanel.add(m_pjTree.m_colLeaf.getInfoPanel());
	}
	/**
	 * Update the panel whenever the parent has changed somewhere else.
	 * Method is invoked from the parent or its superclasses.
	 */
	public boolean update(Object event) {
		if (event == m_project) {
			PsPanel.setState(m_cTrunk, m_pjTree.isEnabledSquareTrunk());
			PsPanel.setState(m_cTriangle, m_pjTree.isEnabledRightTriangle());
			return true;
		}
		return super.update(event);
	}

	public void actionPerformed(ActionEvent event) {
		if (m_pjTree == null)
			return;
		Object source = event.getSource();
		if (source == m_bReset) {
			m_pjTree.reset();
			m_pjTree.update(m_pjTree);
			return;
		}
	}
	public void itemStateChanged(ItemEvent event) {
		if (m_pjTree == null)
			return;
		Object source = event.getSource();
		if (source == m_cTrunk) {
			boolean bTrunk		= m_cTrunk.getState();
			m_pjTree.setEnabledSquareTrunk(bTrunk);
			if (bTrunk) {
				m_pjTree.update(m_pjTree);
			}
			return;
		} else if (source == m_cTriangle) {
			boolean bTriangle	= m_cTriangle.getState();
			m_pjTree.setEnabledRightTriangle(bTriangle);
			if (bTriangle) {
				m_pjTree.update(m_pjTree);
			}
			return;
		}
	}
}

