/*
GNU Lesser General Public License
PropertiesDialog
Copyright (C) 2003 Howard Kistler
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
package com.hexidec.ekit.component;
import java.awt.Frame;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.StringTokenizer;
import javax.swing.JComponent;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JDialog;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
import com.hexidec.util.Translatrix;
/** Class for providing a dialog that lets the user specify values for tag attributes
*/
public class PropertiesDialog extends JDialog
{
private JOptionPane jOptionPane;
private Hashtable<String, JComponent> htInputFields;
public PropertiesDialog(Frame parent, String[] fields, String[] types, String[] values, String title, boolean bModal)
{
super(parent, title, bModal);
htInputFields = new Hashtable<String, JComponent>();
final Object[] buttonLabels = { Translatrix.getTranslationString("DialogAccept"), Translatrix.getTranslationString("DialogCancel") };
Object[] panelContents = new Object[(fields.length * 2)];
int objectCount = 0;
for(int iter = 0; iter < fields.length; iter++)
{
String fieldName = fields[iter];
String fieldType = types[iter];
JComponent fieldComponent;
if(fieldType.equals("text"))
{
fieldComponent = new JTextField(3);
if(values[iter] != null && values[iter].length() > 0)
{
((JTextField)(fieldComponent)).setText(values[iter]);
}
}
else if(fieldType.equals("bool"))
{
fieldComponent = new JCheckBox();
if(values[iter] != null)
{
((JCheckBox)(fieldComponent)).setSelected(values[iter] == "true");
}
}
else if(fieldType.equals("combo"))
{
fieldComponent = new JComboBox();
if(values[iter] != null)
{
StringTokenizer stParse = new StringTokenizer(values[iter], ",", false);
while(stParse.hasMoreTokens())
{
((JComboBox)(fieldComponent)).addItem(stParse.nextToken());
}
}
}
else
{
fieldComponent = new JTextField(3);
}
htInputFields.put(fieldName, fieldComponent);
panelContents[objectCount] = fieldName; // Translatrix.getTranslationString(fieldName);
panelContents[objectCount + 1] = fieldComponent;
objectCount += 2;
}
jOptionPane = new JOptionPane(panelContents, JOptionPane.QUESTION_MESSAGE, JOptionPane.OK_CANCEL_OPTION, null, buttonLabels, buttonLabels[0]);
setContentPane(jOptionPane);
setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
jOptionPane.addPropertyChangeListener(new PropertyChangeListener() {
public void propertyChange(PropertyChangeEvent e)
{
String prop = e.getPropertyName();
if(isVisible() && (e.getSource() == jOptionPane) && (prop.equals(JOptionPane.VALUE_PROPERTY) || prop.equals(JOptionPane.INPUT_VALUE_PROPERTY)))
{
Object value = jOptionPane.getValue();
if(value == JOptionPane.UNINITIALIZED_VALUE)
{
return;
}
if(value.equals(buttonLabels[0]))
{
setVisible(false);
}
else
{
setVisible(false);
}
}
}
});
this.pack();
}
public PropertiesDialog(Frame parent, String[] fields, String[] types, String title, boolean bModal)
{
this(parent, fields, types, new String[fields.length], title, bModal);
}
public String getFieldValue(String fieldName)
{
Object dataField = htInputFields.get(fieldName);
if(dataField instanceof JTextField)
{
return ((JTextField)dataField).getText();
}
else if(dataField instanceof JCheckBox)
{
if(((JCheckBox)dataField).isSelected())
{
return "true";
}
else
{
return "false";
}
}
else if(dataField instanceof JComboBox)
{
return (String)(((JComboBox)dataField).getSelectedItem());
}
else
{
return (String)null;
}
}
public String getDecisionValue()
{
return jOptionPane.getValue().toString();
}
}