// Near Infinity - An Infinity Engine Browser and Editor
// Copyright (C) 2001 - 2005 Jon Olav Hauglid
// See LICENSE.txt for license information
package org.infinity.gui;
import java.awt.Dialog;
import java.awt.Window;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import javax.swing.AbstractAction;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JDialog;
import javax.swing.KeyStroke;
import org.infinity.icon.Icons;
// Common base class for settings dialogs, used to customize the creation of new resources
public abstract class NewAbstractSettings extends JDialog implements ActionListener
{
private static final KeyStroke escKey = KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0);
private boolean accepted;
private JButton okButton;
private JButton cancelButton;
protected NewAbstractSettings(Window parent, String title)
{
super(parent, title, Dialog.ModalityType.APPLICATION_MODAL);
initDialog(parent);
}
// public interface to resource-specific configuration data
public abstract Object getConfig();
// incquire the return state of the dialog
public boolean isAccepted()
{
return accepted;
}
// override to implement special actions performed when clicking the "Create" button
protected void accept()
{
accepted = true;
setVisible(false);
}
// override to implement special actions performed when clicking the "Cancel" button
protected void reject()
{
accepted = false;
setVisible(false);
}
protected JButton acceptButton()
{
return okButton;
}
protected JButton rejectButton()
{
return cancelButton;
}
private void initDialog(Window parent)
{
accepted = false;
okButton = new JButton("Create", Icons.getIcon(Icons.ICON_NEW_16));
okButton.addActionListener(this);
getRootPane().setDefaultButton(okButton);
cancelButton = new JButton("Cancel", Icons.getIcon(Icons.ICON_DELETE_16));
cancelButton.addActionListener(this);
getRootPane().getActionMap().put("NIclose", new AbstractAction() {
@Override
public void actionPerformed(ActionEvent event)
{
reject();
}
});
}
protected boolean isCancelOnEscape()
{
return (getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).get(escKey) != null);
}
protected void setCancelOnEscape(boolean bEnable)
{
if (bEnable == true && getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).get(escKey) == null)
getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(escKey, "NIclose");
else if (bEnable == false && getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).get(escKey) != null)
getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).remove(escKey);
}
//--------------------- Begin Interface ActionListener ---------------------
@Override
public void actionPerformed(ActionEvent event)
{
if (event.getSource() == acceptButton())
accept();
else if (event.getSource() == rejectButton())
reject();
}
//--------------------- End Interface ActionListener ---------------------
}