package jas.util;
import java.awt.Frame;
import javax.swing.JTabbedPane;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
public class PropertyDialog extends JASDialog implements PropertySite, ChangeListener
{
protected PropertyDialog(Frame f,String title,Object bean)
{
super(f,title,true,OK_BUTTON|APPLY_BUTTON|CANCEL_BUTTON|HELP_BUTTON);
m_tab_manager = new JTabbedPane();
m_tab_manager.addChangeListener(this);
setContentPane(m_tab_manager);
m_currentPage = null;
m_bean = bean;
}
protected void addPage(final String name, final PropertyPage p, final boolean select)
{
m_tab_manager.addTab(name,p);
p.setPropertySite(this);
if (select) m_tab_manager.setSelectedComponent(p);
}
public void stateChanged(ChangeEvent evt)
{
if (m_suppressChangeEvents) return; // don't receive change events that this method creates
if (m_currentPage == null || m_currentPage.hasValidInput())
// notification of invalid input is the responsibility of the field binding
{
doDataExchange(true);
if (m_currentPage != null) m_currentPage.deactivate();
m_currentPage = (PropertyPage) m_tab_manager.getSelectedComponent();
m_currentPage.activate();
doDataExchange(false);
setHelpTopic(m_currentPage.getHelpTopic());
super.callEnable();
}
else
{
m_suppressChangeEvents = true; // ignore change event from the call below
m_tab_manager.setSelectedComponent(m_currentPage); // return to page that was not valid
m_suppressChangeEvents = false; // allow change events again
}
}
private void doDataExchange(boolean set)
{
// guaranteed by this point to be valid input
if (m_currentPage != null) m_currentPage.doDataExchange(set,m_bean);
}
public void enableApply(JASState state)
{
state.setEnabled(m_currentPage.hasChanged());
}
public void callEnable()
{
super.callEnable();
}
public void onApply()
{
if (m_currentPage.hasValidInput())
// notification of invalid input is the responsibility of the field binding
{
doDataExchange(true);
doDataExchange(false); // In case other values change
super.onApply();
super.callEnable();
}
}
public void onOK()
{
if (m_currentPage.hasValidInput())
{
doDataExchange(true);
m_currentPage.deactivate();
super.onOK();
}
}
public void onCancel()
{
m_currentPage.deactivate();
super.onCancel();
}
private Object m_bean;
private JTabbedPane m_tab_manager;
private PropertyPage m_currentPage;
private boolean m_suppressChangeEvents = false;
}