/*
* (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 20-jul-2005 18:51:54
* as file EntityPanel.java on package org.f2o.absurdum.puck.gui.panels
*/
//TODO Add spell-specifics
package org.f2o.absurdum.puck.gui.panels;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.util.List;
import java.util.Vector;
import javax.swing.BorderFactory;
import javax.swing.BoxLayout;
import javax.swing.ComboBoxModel;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTabbedPane;
import javax.swing.JTextField;
import org.f2o.absurdum.puck.gui.graph.Arrow;
import org.f2o.absurdum.puck.gui.graph.ItemNode;
import org.f2o.absurdum.puck.gui.graph.SpellNode;
import org.f2o.absurdum.puck.i18n.UIMessages;
import org.f2o.absurdum.puck.util.swing.EnhancedJTextField;
import org.f2o.absurdum.puck.util.xml.DOMUtils;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
/**
* @author carlos
*
* For attack/defense specs of weapons
*/
public class AttDefSpecsPanel extends JPanel
{
private JTextField tfMinUsage = new EnhancedJTextField("0",5);
private JTextField tfProbabilitySteepness = new EnhancedJTextField("0",5);
private JTextField tfTimeStarting = new EnhancedJTextField("10",5);
private JTextField tfTimeSteepness = new EnhancedJTextField("0",5);
private JTextField tfRecoverTimeStarting = new EnhancedJTextField("10",5);
private JTextField tfRecoverTimeSteepness = new EnhancedJTextField("0",5);
private DamageListPanel damagePanel;
private SkillsPanel skillsPanel = new SkillsPanel("relevance");
private boolean attack;
public AttDefSpecsPanel( boolean attack ) //false? defense
{
this.attack = attack;
String type = (attack)?"attack":"defense";
String title = (attack)?
UIMessages.getInstance().getMessage("weapon.attack")
:
UIMessages.getInstance().getMessage("weapon.defense");
setBorder(BorderFactory.createTitledBorder(title));
setLayout(new BoxLayout(this, BoxLayout.PAGE_AXIS));
JPanel minUsagePanel = new JPanel();
minUsagePanel.add(new JLabel(UIMessages.getInstance().getMessage("weapon."+type+".minusage")));
minUsagePanel.add(tfMinUsage);
this.add(minUsagePanel);
JPanel probPanel = new JPanel();
probPanel.add(new JLabel(UIMessages.getInstance().getMessage("weapon."+type+".prob.steepness")));
probPanel.add(tfProbabilitySteepness);
this.add(probPanel);
JPanel timePanel = new JPanel();
timePanel.setBorder(BorderFactory.createTitledBorder(UIMessages.getInstance().getMessage("weapon."+type+".time")));
timePanel.add(new JLabel(UIMessages.getInstance().getMessage("weapon."+type+".time.starting")));
timePanel.add(tfTimeStarting);
timePanel.add(new JLabel(UIMessages.getInstance().getMessage("weapon."+type+".time.steepness")));
timePanel.add(tfTimeSteepness);
this.add(timePanel);
JPanel recoverPanel = new JPanel();
recoverPanel.setBorder(BorderFactory.createTitledBorder(UIMessages.getInstance().getMessage("weapon."+type+".recovertime")));
recoverPanel.add(new JLabel(UIMessages.getInstance().getMessage("weapon."+type+".recovertime.starting")));
recoverPanel.add(tfRecoverTimeStarting);
recoverPanel.add(new JLabel(UIMessages.getInstance().getMessage("weapon."+type+".recovertime.steepness")));
recoverPanel.add(tfRecoverTimeSteepness);
this.add(recoverPanel);
damagePanel = new DamageListPanel(UIMessages.getInstance().getMessage("weapon."+type+".damage"));
this.add(damagePanel);
skillsPanel = new SkillsPanel("relevance");
this.add(skillsPanel);
}
public Node getXML ( Document d )
{
Element result;
if ( attack )
result = d.createElement("Attack");
else
result = d.createElement("Defense");
result.appendChild(skillsPanel.getListXML(d,"InvolvedSkills","Skill"));
result.appendChild(damagePanel.getXML(d));
Element probElt = d.createElement("Probability");
probElt.setAttribute("steepness",tfProbabilitySteepness.getText());
Element timeElt = d.createElement("Time");
timeElt.setAttribute("starting",tfTimeStarting.getText());
timeElt.setAttribute("steepness",tfTimeSteepness.getText());
Element recoverElt = d.createElement("RecoverTime");
recoverElt.setAttribute("starting",tfRecoverTimeStarting.getText());
recoverElt.setAttribute("steepness",tfRecoverTimeSteepness.getText());
result.appendChild(probElt);
result.appendChild(timeElt);
result.appendChild(recoverElt);
result.setAttribute("minUsage", tfMinUsage.getText());
return result;
}
public void initFromXML ( org.w3c.dom.Node n )
{
Element e = (Element) n;
//probability
NodeList probNl = e.getElementsByTagName("Probability");
if ( probNl.getLength() > 0 )
{
Element probElt = (Element) probNl.item(0);
tfProbabilitySteepness.setText(probElt.getAttribute("steepness"));
}
//time
NodeList timeNl = e.getElementsByTagName("Time");
if ( timeNl.getLength() > 0 )
{
Element timeElt = (Element) timeNl.item(0);
tfTimeStarting.setText(timeElt.getAttribute("starting"));
tfTimeSteepness.setText(timeElt.getAttribute("steepness"));
}
//recover time
NodeList recoverNl = e.getElementsByTagName("RecoverTime");
if ( recoverNl.getLength() > 0 )
{
Element recoverElt = (Element) recoverNl.item(0);
tfRecoverTimeStarting.setText(recoverElt.getAttribute("starting"));
tfRecoverTimeSteepness.setText(recoverElt.getAttribute("steepness"));
}
//involved skills
NodeList skillsNl = e.getElementsByTagName("InvolvedSkills");
if ( skillsNl.getLength() > 0 )
{
Element skillsElt = (Element) skillsNl.item(0);
skillsPanel.initFromXML(skillsElt,"Skill");
}
//damage
NodeList damageList = e.getElementsByTagName("DamageList");
if ( damageList.getLength() > 0 )
{
Element damageListElt = (Element) damageList.item(0);
damagePanel.initFromXML(damageListElt);
}
//min usage
if ( e.hasAttribute("minUsage") )
tfMinUsage.setText(e.getAttribute("minUsage"));
//set default values for text fields if they are empty
setDefaultTextIfEmpty ( tfProbabilitySteepness , "0" );
setDefaultTextIfEmpty ( tfTimeStarting , "10" );
setDefaultTextIfEmpty ( tfTimeSteepness , "0" );
setDefaultTextIfEmpty ( tfRecoverTimeStarting , "20" );
setDefaultTextIfEmpty ( tfRecoverTimeSteepness , "0" );
setDefaultTextIfEmpty ( tfMinUsage , "0" );
}
private void setDefaultTextIfEmpty ( JTextField textField , String value )
{
if ( textField.getText().trim().length() <= 0 )
textField.setText(value);
}
}