/*
* (c) 2005-2009 Carlos G�mez Rodr�guez, todos los derechos reservados / all rights reserved.
* Licencia en license/bsd.txt / License in license/bsd.txt
*
* Created at regulus on 22-abr-2008 23:55:11
* as file DamageListPanel.java on package org.f2o.absurdum.puck.gui.panels
*/
package org.f2o.absurdum.puck.gui.panels;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.BorderFactory;
import javax.swing.BoxLayout;
import javax.swing.DefaultListModel;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import org.f2o.absurdum.puck.i18n.UIMessages;
import org.f2o.absurdum.puck.util.swing.EnhancedJList;
import org.f2o.absurdum.puck.util.swing.EnhancedJTextField;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.w3c.dom.Text;
/**
* @author carlos
*
* Created at regulus, 22-jul-2005 23:55:11
*/
public class DamageListPanel extends JPanel
{
private JList theList;
private JTextField typeTextField = new EnhancedJTextField(20);
private JTextField formulaTextField = new EnhancedJTextField(20);
private JButton delButton = new JButton(UIMessages.getInstance().getMessage("button.del"));
private JButton addButton = new JButton(UIMessages.getInstance().getMessage("button.add"));
private JButton modButton = new JButton(UIMessages.getInstance().getMessage("button.mod"));
private JButton topButton = new JButton(UIMessages.getInstance().getMessage("button.top"));
private JLabel formulaLabel;
private JLabel typeLabel;
//privatize it
public DefaultListModel listContent = new DefaultListModel();
private static String typeLabelText = UIMessages.getInstance().getMessage("label.damage.type");
private static String formulaLabelText = UIMessages.getInstance().getMessage("label.damage.formula");
public DamageListPanel ( String borderText )
{
theList = new EnhancedJList( listContent );
theList.setCellRenderer ( new TwoStringCellRenderer() );
setLayout(new BoxLayout(this, BoxLayout.PAGE_AXIS));
final JScrollPane jsp = new JScrollPane(theList);
jsp.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
jsp.setPreferredSize(new Dimension(80,45));
final JPanel jp = new JPanel();
jp.setLayout(new BorderLayout());
jp.add(jsp,BorderLayout.CENTER);
this.add(jp);
this.setBorder(BorderFactory.createTitledBorder(borderText));
JPanel p1 = new JPanel();
p1.add ( typeLabel = new JLabel(typeLabelText) );
p1.add ( typeTextField );
add(p1);
JPanel p2 = new JPanel();
p2.add ( formulaLabel = new JLabel(formulaLabelText) );
p2.add ( formulaTextField );
add(p2);
JPanel buttonsPanel = new JPanel();
buttonsPanel.add(addButton);
buttonsPanel.add(modButton);
buttonsPanel.add(delButton);
buttonsPanel.add(topButton);
add(buttonsPanel);
addButton.addActionListener ( new ActionListener()
{
public void actionPerformed(ActionEvent evt)
{
String[] nu;
nu = new String[]
{
typeTextField.getText(), formulaTextField.getText()
};
listContent.addElement(nu);
jsp.repaint();
}
}
);
delButton.addActionListener ( new ActionListener()
{
public void actionPerformed(ActionEvent evt)
{
int[] indices = theList.getSelectedIndices();
for ( int i = indices.length-1 ; i >= 0 ; i-- )
{
listContent.remove(indices[i]);
}
jsp.repaint();
}
}
);
modButton.addActionListener ( new ActionListener()
{
public void actionPerformed(ActionEvent evt)
{
int ind = theList.getSelectedIndex();
String[] nu;
nu = new String[]
{
typeTextField.getText(), formulaTextField.getText()
};
listContent.set(ind,nu);
jsp.repaint();
}
}
);
topButton.addActionListener ( new ActionListener()
{
public void actionPerformed(ActionEvent evt)
{
String[] it = (String[]) theList.getSelectedValue();
int ind = theList.getSelectedIndex();
if ( ind > 0 )
{
String[] prev = (String[]) theList.getModel().getElementAt(ind-1);
listContent.set(ind-1,it);
listContent.set(ind,prev);
theList.setSelectedIndex(ind-1);
jsp.repaint();
}
}
}
);
theList.addListSelectionListener(
new ListSelectionListener()
{
public void valueChanged(ListSelectionEvent arg0)
{
String[] ar = (String[]) theList.getSelectedValue();
String desc;
if ( ar == null ) return;
if ( ar[1] == null )
desc = "";
else
desc = ar[1];
typeTextField.setText(ar[0]);
formulaTextField.setText(desc);
}
}
);
}
public Node getXML ( Document d )
{
return getXML ( d , "DamageList" );
}
public Node getXML ( Document d , String name )
{
Element result = d.createElement(name);
for ( int i = 0 ; i < listContent.size() ; i++ )
{
String[] desc = (String[]) listContent.get(i);
Element descNode = d.createElement("Damage");
if ( desc[0] != null && desc[0].length() > 0 && desc[1] != null && desc[1].length() > 0 )
{
descNode.setAttribute("type", desc[0]);
descNode.setAttribute("formula", desc[1]);
result.appendChild(descNode);
}
}
return result;
}
//from DescriptionList node
public void initFromXML ( org.w3c.dom.Node n )
{
Element e = (Element) n;
//have to init ListContent as a Model of String[] { type , formula }
NodeList nl = e.getElementsByTagName("Damage");
for ( int i = 0 ; i < nl.getLength() ; i++ )
{
Element damElt = (Element) nl.item(i);
String typeText = damElt.getAttribute("type");
String formulaText = damElt.getAttribute("formula");
listContent.addElement(new String[]{typeText.trim(),formulaText.trim()});
}
}
}