/* * (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 */ package org.f2o.absurdum.puck.gui.panels; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics; import java.awt.event.ActionListener; import java.awt.event.ActionEvent; import java.util.ArrayList; import java.util.List; import java.util.Vector; import javax.swing.BorderFactory; import javax.swing.Box; 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.bsh.BeanShellCodeHolder; import org.f2o.absurdum.puck.gui.graph.Arrow; import org.f2o.absurdum.puck.gui.graph.ItemNode; import org.f2o.absurdum.puck.gui.panels.code.BSHCodePanel; import org.f2o.absurdum.puck.gui.panels.code.BSHCodePanelFactory; import org.f2o.absurdum.puck.gui.panels.code.JSyntaxBSHCodePanel; 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; import eu.irreality.age.windowing.TabUtils; /** * @author carlos * * Created at regulus, 20-jul-2005 18:51:54 */ public class ItemPanel extends EntityPanel implements BeanShellCodeHolder { private JComboBox extendsComboBox = new JComboBox(); private JComboBox clonesComboBox = new JComboBox(); private JComboBox genderComboBox = new JComboBox(); private JTextField tfWeight = new EnhancedJTextField("0",5); private JTextField tfVolume = new EnhancedJTextField("0",5); private JCheckBox containerBox = new JCheckBox(UIMessages.getInstance().getMessage("checkbox.container")); private JCheckBox ungettableBox = new JCheckBox(UIMessages.getInstance().getMessage("checkbox.ungettable")); //privatize public DescriptionListPanel dlp; private ExtraDescriptionsPanel edp; private BSHCodePanel bcp; private PropertiesPanel pp; private DescriptionListPanel snp; //sing names private DescriptionListPanel pnp; //plur names private PathCommandsPanel srn; //sing refnames private PathCommandsPanel prn; //sing refnames //openable-closable support private DescriptionListPanel odp; private DescriptionListPanel cdp; private DescriptionListPanel ldp; private DescriptionListPanel udp; private JCheckBox oBox = new JCheckBox(UIMessages.getInstance().getMessage("checkbox.openable")); private JCheckBox cBox = new JCheckBox(UIMessages.getInstance().getMessage("checkbox.closeable")); private JCheckBox lBox = new JCheckBox(UIMessages.getInstance().getMessage("checkbox.lockable")); private JCheckBox uBox = new JCheckBox(UIMessages.getInstance().getMessage("checkbox.unlockable")); //wearable support private JCheckBox wBox = new JCheckBox(UIMessages.getInstance().getMessage("checkbox.wearable")); private List wearableLimbPanels = new ArrayList(); private DamageListPanel damlp; //weapon support private JCheckBox weaponBox = new JCheckBox(UIMessages.getInstance().getMessage("checkbox.weapon")); private List wieldableLimbPanels = new ArrayList(); private AttDefSpecsPanel attackPanel; private AttDefSpecsPanel defensePanel; //the tabbed pane private JTabbedPane jtp; private ItemNode node; private JPanel innerPanelFifth; private JPanel fifthTab; private JButton buttonLess; private JPanel innerPanelSixth; private JPanel sixthTab; private JButton buttonLess2; public ItemPanel( ItemNode node ) { super(); nameTextField.setText("Item #"+getID()); this.node = node; //add ( extendsComboBox ); } public String toString() { return nameTextField.getText() + "##" + super.toString(); } public String getPanelName() { return nameTextField.getText(); } /* public void linkWithGraph() { ; } */ public String getBSHCode() { if ( bcp == null ) forceRealInitFromXml(true); //code panel not yet initted. return bcp.getCode(); } //adds combo boxes with item nodes, etc. public void linkWithGraph() { //no donut for ewe! this.removeAll(); //we do need a tabbed pane! jtp = new JTabbedPane(); this.add(jtp); JPanel firstTab = new JPanel(); firstTab.setLayout(new BoxLayout(firstTab, BoxLayout.PAGE_AXIS)); JPanel namePanel = new JPanel(); namePanel.add(new JLabel(UIMessages.getInstance().getMessage("entity.uniquename"))); namePanel.add(nameTextField); firstTab.add(namePanel); Vector itemNodes = this.getGraphEditingPanel().getItemNodes(true); extendsComboBox = new JComboBox ( new DefaultComboBoxModel ( itemNodes ) ); clonesComboBox = new JComboBox ( new DefaultComboBoxModel ( itemNodes ) ); JPanel extendsPanel = new JPanel(); extendsPanel.add ( new JLabel(UIMessages.getInstance().getMessage("inherit.from")) ); extendsPanel.add ( extendsComboBox ); firstTab.add(extendsPanel); JPanel clonesPanel = new JPanel(); clonesPanel.add ( new JLabel(UIMessages.getInstance().getMessage("clone.from")) ); clonesPanel.add ( clonesComboBox ); firstTab.add(clonesPanel); JPanel genderPanel = new JPanel(); genderComboBox = new JComboBox ( new String[] { UIMessages.getInstance().getMessage("gender.m") , UIMessages.getInstance().getMessage("gender.f") } ); genderPanel.add(new JLabel(UIMessages.getInstance().getMessage("gender"))); genderPanel.add(genderComboBox); firstTab.add(genderPanel); JPanel weightVolPanel = new JPanel(); weightVolPanel.add(new JLabel(UIMessages.getInstance().getMessage("item.weight"))); weightVolPanel.add(tfWeight); weightVolPanel.add(new JLabel(UIMessages.getInstance().getMessage("item.volume"))); weightVolPanel.add(tfVolume); firstTab.add(weightVolPanel); JPanel flagsPanel = new JPanel(); flagsPanel.add(containerBox); flagsPanel.add(ungettableBox); firstTab.add(flagsPanel); dlp = new DescriptionListPanel(5); firstTab.add(dlp); edp = new ExtraDescriptionsPanel(5); firstTab.add(edp); jtp.add("General",firstTab); JPanel thirdTab = new JPanel(); thirdTab.setLayout(new BoxLayout(thirdTab, BoxLayout.PAGE_AXIS)); snp = new DescriptionListPanel(UIMessages.getInstance().getMessage("label.singnames"),UIMessages.getInstance().getMessage("label.name"),false,true,1); thirdTab.add(snp); pnp = new DescriptionListPanel(UIMessages.getInstance().getMessage("label.plurnames"),UIMessages.getInstance().getMessage("label.name"),1); thirdTab.add(pnp); srn = new PathCommandsPanel(UIMessages.getInstance().getMessage("label.singrefnames"),UIMessages.getInstance().getMessage("label.name"),true); thirdTab.add(srn); prn = new PathCommandsPanel(UIMessages.getInstance().getMessage("label.plurrefnames"),UIMessages.getInstance().getMessage("label.name"),true); thirdTab.add(prn); jtp.add(UIMessages.getInstance().getMessage("tab.names"),thirdTab); JPanel secondTab = new JPanel(); secondTab.setLayout(new BoxLayout(secondTab, BoxLayout.PAGE_AXIS)); bcp //= new JSyntaxBSHCodePanel("item",this); = BSHCodePanelFactory.getInstance().createPanel("item",this); secondTab.add(bcp); pp = new PropertiesPanel(); secondTab.add(pp); jtp.add(UIMessages.getInstance().getMessage("tab.codeprop"),secondTab); //openable-closeable support //JScrollPane fourthTabScroll = new JScrollPane(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,JScrollPane.HORIZONTAL_SCROLLBAR_NEVER); JPanel fourthTabReal = new JPanel(); fourthTabReal.setLayout(new BoxLayout(fourthTabReal, BoxLayout.PAGE_AXIS)); JPanel openableFlagsPanel = new JPanel(); openableFlagsPanel.setBorder(BorderFactory.createTitledBorder(UIMessages.getInstance().getMessage("flags.openable"))); openableFlagsPanel.setLayout(new BoxLayout(openableFlagsPanel, BoxLayout.PAGE_AXIS)); openableFlagsPanel.add(oBox); openableFlagsPanel.add(cBox); openableFlagsPanel.add(uBox); openableFlagsPanel.add(lBox); fourthTabReal.add(openableFlagsPanel); odp = new DescriptionListPanel(UIMessages.getInstance().getMessage("label.opendes"),UIMessages.getInstance().getMessage("label.description"),true,2); cdp = new DescriptionListPanel(UIMessages.getInstance().getMessage("label.closedes"),UIMessages.getInstance().getMessage("label.description"),true,2); ldp = new DescriptionListPanel(UIMessages.getInstance().getMessage("label.lockdes"),UIMessages.getInstance().getMessage("label.description"),true,2); udp = new DescriptionListPanel(UIMessages.getInstance().getMessage("label.unlockdes"),UIMessages.getInstance().getMessage("label.description"),true,2); JScrollPane innerScroll = new JScrollPane(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,JScrollPane.HORIZONTAL_SCROLLBAR_NEVER); JPanel innerPanel = new JPanel(); innerPanel.setLayout( new BoxLayout(innerPanel, BoxLayout.PAGE_AXIS) ); innerPanel.add(odp); innerPanel.add(cdp); innerPanel.add(udp); innerPanel.add(ldp); innerScroll.setViewportView(innerPanel); innerScroll.setPreferredSize(new Dimension(0,400)); fourthTabReal.add(innerScroll); /* fourthTabReal.add(odp); fourthTabReal.add(cdp); fourthTabReal.add(ldp); fourthTabReal.add(udp); */ //fourthTabScroll.setViewportView(fourthTabReal); //fourthTab.add(fourthTabScroll,BorderLayout.CENTER); //jtp.add(Messages.getInstance().getMessage("tab.openclose"),fourthTab); jtp.add(UIMessages.getInstance().getMessage("tab.openclose"),fourthTabReal); fifthTab = new JPanel(); fifthTab.setLayout(new BoxLayout(fifthTab, BoxLayout.PAGE_AXIS)); fifthTab.add(wBox); JScrollPane innerScrollFifth = new JScrollPane(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,JScrollPane.HORIZONTAL_SCROLLBAR_NEVER); innerPanelFifth = new JPanel(); innerPanelFifth.setLayout( new BoxLayout(innerPanelFifth, BoxLayout.PAGE_AXIS) ); innerScrollFifth.setViewportView(innerPanelFifth); innerScrollFifth.setPreferredSize(new Dimension(0,400)); final JPanel notSoInnerPanelFifth = new JPanel(); notSoInnerPanelFifth.setBorder(BorderFactory.createTitledBorder(UIMessages.getInstance().getMessage("tab.wearable.requirements"))); notSoInnerPanelFifth.setLayout(new BorderLayout()); notSoInnerPanelFifth.add(innerScrollFifth,BorderLayout.CENTER); fifthTab.add(notSoInnerPanelFifth); wearableLimbPanels = new ArrayList(); for ( int i = 0 ; i < wearableLimbPanels.size() ; i++ ) { DescriptionListPanel dlp = (DescriptionListPanel) wearableLimbPanels.get(i); fifthTab.add(dlp); } final JPanel buttonsPanel = new JPanel(); buttonsPanel.setLayout( new BoxLayout(buttonsPanel , BoxLayout.LINE_AXIS) ); buttonsPanel.add(Box.createHorizontalGlue()); final JButton buttonMore = new JButton(UIMessages.getInstance().getMessage("tab.wearable.more")); buttonLess = new JButton(UIMessages.getInstance().getMessage("tab.wearable.less")); buttonLess.setEnabled(false); buttonsPanel.add(buttonMore); buttonsPanel.add(buttonLess); buttonMore.addActionListener ( new ActionListener() { public void actionPerformed ( ActionEvent evt ) { PathCommandsPanel newPanel = new PathCommandsPanel(UIMessages.getInstance().getMessage("label.wearrequirement"),UIMessages.getInstance().getMessage("label.name"),true); addLimbRequirementPanel(newPanel); } }); buttonLess.addActionListener ( new ActionListener() { public void actionPerformed ( ActionEvent evt ) { removeLimbRequirementPanel(); } }); damlp = new DamageListPanel(UIMessages.getInstance().getMessage("tab.wearable.damage")); notSoInnerPanelFifth.add(buttonsPanel,BorderLayout.SOUTH); fifthTab.add(damlp); jtp.add(UIMessages.getInstance().getMessage("tab.wearable"),fifthTab); sixthTab = new JPanel(); sixthTab.setLayout(new BoxLayout(sixthTab, BoxLayout.PAGE_AXIS)); sixthTab.add(weaponBox); JScrollPane innerScrollSixth = new JScrollPane(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,JScrollPane.HORIZONTAL_SCROLLBAR_NEVER); innerPanelSixth = new JPanel(); innerPanelSixth.setLayout( new BoxLayout(innerPanelSixth, BoxLayout.PAGE_AXIS) ); innerScrollSixth.setViewportView(innerPanelSixth); innerScrollSixth.setPreferredSize(new Dimension(0,150)); final JPanel notSoInnerPanelSixth = new JPanel(); notSoInnerPanelSixth.setBorder(BorderFactory.createTitledBorder(UIMessages.getInstance().getMessage("tab.weapon.requirements"))); notSoInnerPanelSixth.setLayout(new BorderLayout()); notSoInnerPanelSixth.add(innerScrollSixth,BorderLayout.CENTER); sixthTab.add(notSoInnerPanelSixth); wieldableLimbPanels = new ArrayList(); for ( int i = 0 ; i < wieldableLimbPanels.size() ; i++ ) { DescriptionListPanel dlp = (DescriptionListPanel) wieldableLimbPanels.get(i); sixthTab.add(dlp); } final JPanel buttonsPanel2 = new JPanel(); buttonsPanel2.setLayout( new BoxLayout(buttonsPanel2 , BoxLayout.LINE_AXIS) ); buttonsPanel2.add(Box.createHorizontalGlue()); final JButton buttonMore2 = new JButton(UIMessages.getInstance().getMessage("tab.weapon.more")); buttonLess2 = new JButton(UIMessages.getInstance().getMessage("tab.weapon.less")); buttonLess2.setEnabled(false); buttonsPanel2.add(buttonMore2); buttonsPanel2.add(buttonLess2); buttonMore2.addActionListener ( new ActionListener() { public void actionPerformed ( ActionEvent evt ) { PathCommandsPanel newPanel = new PathCommandsPanel(UIMessages.getInstance().getMessage("label.weaponrequirement"),UIMessages.getInstance().getMessage("label.name"),true); addWeaponLimbRequirementPanel(newPanel); } }); buttonLess2.addActionListener ( new ActionListener() { public void actionPerformed ( ActionEvent evt ) { removeWeaponLimbRequirementPanel(); } }); notSoInnerPanelSixth.add(buttonsPanel2,BorderLayout.SOUTH); attackPanel = new AttDefSpecsPanel(true); //sixthTab.add(attackPanel); defensePanel = new AttDefSpecsPanel(false); //sixthTab.add(defensePanel); JTabbedPane subJtp = new JTabbedPane(); subJtp.add(attackPanel,UIMessages.getInstance().getMessage("weapon.attack")); subJtp.add(defensePanel,UIMessages.getInstance().getMessage("weapon.defense")); subJtp.setBorder(BorderFactory.createBevelBorder(2)); //fifthTab.add(damlp); sixthTab.add(subJtp); jtp.add(UIMessages.getInstance().getMessage("tab.weapon"),sixthTab); TabUtils.setDefaultMnemonics(jtp); } public void doInitMinimal( org.w3c.dom.Node e ) { nameTextField.setText(((org.w3c.dom.Element)e).getAttribute("name")); } private void addLimbRequirementPanel ( PathCommandsPanel newPanel ) { wearableLimbPanels.add(newPanel); innerPanelFifth.add(newPanel); //fifthTab.setVisible(false); //fifthTab.setVisible(true); fifthTab.revalidate(); buttonLess.setEnabled(true); } private void removeLimbRequirementPanel ( ) { if ( wearableLimbPanels.size() < 1 ) return; PathCommandsPanel thePanel = (PathCommandsPanel) wearableLimbPanels.get(wearableLimbPanels.size()-1); wearableLimbPanels.remove(thePanel); innerPanelFifth.remove(thePanel); //fifthTab.setVisible(false); //fifthTab.setVisible(true); fifthTab.revalidate(); if ( wearableLimbPanels.size() < 1 ) buttonLess.setEnabled(false); } private void addWeaponLimbRequirementPanel ( PathCommandsPanel newPanel ) { wieldableLimbPanels.add(newPanel); innerPanelSixth.add(newPanel); //sixthTab.setVisible(false); //sixthTab.setVisible(true); sixthTab.revalidate(); buttonLess2.setEnabled(true); } private void removeWeaponLimbRequirementPanel ( ) { if ( wieldableLimbPanels.size() < 1 ) return; PathCommandsPanel thePanel = (PathCommandsPanel) wieldableLimbPanels.get(wieldableLimbPanels.size()-1); wieldableLimbPanels.remove(thePanel); innerPanelSixth.remove(thePanel); //sixthTab.setVisible(false); //sixthTab.setVisible(true); sixthTab.revalidate(); if ( wieldableLimbPanels.size() < 1 ) buttonLess2.setEnabled(false); } public Node doGetXML ( Document d ) { Element result = d.createElement("Item"); result.setAttribute("name",this.getPanelName()); //TODO: "type" attr would go here if ( wBox.isSelected() ) result.setAttribute("type", "wearable"); if ( weaponBox.isSelected() ) result.setAttribute("type", "weapon"); if ( !extendsComboBox.getSelectedItem().equals(UIMessages.getInstance().getMessage("none") )) result.setAttribute("extends",extendsComboBox.getSelectedItem().toString()); if ( !clonesComboBox.getSelectedItem().equals(UIMessages.getInstance().getMessage("none") )) { result.setAttribute("clones",clonesComboBox.getSelectedItem().toString()); //identical clones can't have more features return result; } //result.setAttribute("weight",tfWeight.getText()); result.setAttribute("weight",String.valueOf(getIntegerFromField(tfWeight,0))); //result.setAttribute("volume",tfVolume.getText()); result.setAttribute("volume",String.valueOf(getIntegerFromField(tfVolume,0))); result.setAttribute("canGet",String.valueOf(!ungettableBox.isSelected())); String genderString = (String) genderComboBox.getSelectedItem(); if (genderString.equals(UIMessages.getInstance().getMessage("gender.m"))) result.setAttribute("gender","true"); else result.setAttribute("gender","false"); result.setAttribute("openable",String.valueOf(oBox.isSelected())); result.setAttribute("closeable",String.valueOf(cBox.isSelected())); result.setAttribute("lockable",String.valueOf(lBox.isSelected())); result.setAttribute("unlockable",String.valueOf(uBox.isSelected())); //names result.appendChild(snp.getXML(d,"SingularNames")); result.appendChild(pnp.getXML(d,"PluralNames")); result.appendChild(srn.getXMLForNames(d,"SingularReferenceNames")); result.appendChild(prn.getXMLForNames(d,"PluralReferenceNames")); result.appendChild((Element)dlp.getXML(d)); result.appendChild((Element)edp.getXML(d)); //open-close-lock-unlock descriptions Element openDes = (Element)odp.getXML(d,"OpenDescriptionList"); if ( openDes.hasChildNodes() || oBox.isSelected() ) result.appendChild(openDes); Element closeDes = (Element)cdp.getXML(d,"CloseDescriptionList"); if ( closeDes.hasChildNodes() || cBox.isSelected() ) result.appendChild(closeDes); Element lockDes = (Element)ldp.getXML(d,"LockDescriptionList"); if ( lockDes.hasChildNodes() || lBox.isSelected() ) result.appendChild(lockDes); Element unlockDes = (Element)udp.getXML(d,"UnlockDescriptionList"); if ( unlockDes.hasChildNodes() || uBox.isSelected() ) result.appendChild(unlockDes); //wearable if ( wBox.isSelected() ) { Element wearableSpecsElt = d.createElement("WearableSpecs"); if ( wearableLimbPanels.size() > 0 ) { Element wearableLimbsElt = d.createElement("WearableLimbs"); for ( int i = 0 ; i < wearableLimbPanels.size() ; i++ ) { PathCommandsPanel aPanel = (PathCommandsPanel) wearableLimbPanels.get(i); Element reqElt = (Element) aPanel.getXMLForNames(d,"Requirement"); wearableLimbsElt.appendChild(reqElt); } wearableSpecsElt.appendChild(wearableLimbsElt); } //damage list wearableSpecsElt.appendChild((Element)damlp.getXML(d)); result.appendChild(wearableSpecsElt); } //weapon if ( weaponBox.isSelected() ) { Element weaponSpecsElt = d.createElement("WeaponSpecs"); if ( wieldableLimbPanels.size() > 0 ) { Element wieldableLimbsElt = d.createElement("WieldableLimbs"); for ( int i = 0 ; i < wieldableLimbPanels.size() ; i++ ) { PathCommandsPanel aPanel = (PathCommandsPanel) wieldableLimbPanels.get(i); Element reqElt = (Element) aPanel.getXMLForNames(d,"Requirement"); wieldableLimbsElt.appendChild(reqElt); } weaponSpecsElt.appendChild(wieldableLimbsElt); } weaponSpecsElt.appendChild(attackPanel.getXML(d)); weaponSpecsElt.appendChild(defensePanel.getXML(d)); result.appendChild(weaponSpecsElt); } //properties, code result.appendChild((Element)pp.getXML(d)); Element codeElt = ((Element)bcp.getXML(d)); if ( codeElt != null ) result.appendChild(codeElt); List arrows = node.getArrows(); //items: Element invElt = null; if ( containerBox.isSelected() ) invElt = d.createElement("Inventory"); Element partsElt = null; Element keysElt = null; //custom relationships //Element relationshipsElt = d.createElement("RelationshipList"); for ( int i = 0 ; i < arrows.size() ; i++ ) { GraphElementPanel gep = ((Arrow)arrows.get(i)).getAssociatedPanel(); if ( gep instanceof ItemHasItemPanel ) { ItemHasItemPanel relPanel = (ItemHasItemPanel) gep; String relType = relPanel.getRelationshipType(); if ( relType.equals(UIMessages.getInstance().getMessage("structural.item.item.contain")) ) //containment relationship { if ( invElt == null ) invElt = d.createElement("Inventory"); invElt.appendChild( relPanel.getXML(d) ); } if ( relType.equals(UIMessages.getInstance().getMessage("structural.item.item.haspart")) ) //has-part relationship { if ( partsElt == null ) partsElt = d.createElement("Inventory"); partsElt.appendChild( relPanel.getXML(d) ); } if ( relType.equals(UIMessages.getInstance().getMessage("structural.item.item.haskey")) ) //has-key relationship { if ( keysElt == null ) keysElt = d.createElement("Inventory"); keysElt.appendChild( relPanel.getXML(d) ); } } /* //refactored upwards if ( gep instanceof ArrowPanel ) //this if check will become unnecessary when custom relationship implementation is complete { ArrowPanel relPanel = (ArrowPanel) gep; Node n = relPanel.getCustomRelationshipXML(d); if ( n.hasChildNodes() ) //if it doesn't have children there are no custom relationships, would be worthless to append it relationshipsElt.appendChild(n); } */ } Element relationshipsElt = (Element) getCustomRelationshipListXML(d,node); if ( invElt != null ) result.appendChild(invElt); if ( partsElt != null ) { Element tempElt = d.createElement("Parts"); tempElt.appendChild(partsElt); result.appendChild(tempElt); } if ( keysElt != null ) { Element tempElt = d.createElement("KeyList"); tempElt.appendChild(keysElt); result.appendChild(tempElt); } if ( relationshipsElt != null ) { result.appendChild(relationshipsElt); } return result; } //returns the index of the object in v whose name is s. private int indexOf ( ComboBoxModel v , String s ) { for ( int i = 0 ; i < v.getSize() ; i++ ) { if ( s.equals(v.getElementAt(i).toString()) ) return i; } return -1; } // from Mobile node public void doInitFromXML ( org.w3c.dom.Node n ) { linkWithGraph(); Element e = (Element) n; //name nameTextField.setText(e.getAttribute("name")); //extends, clones cb if ( e.hasAttribute("extends") ) { int extendsInd = indexOf ( extendsComboBox.getModel() , e.getAttribute("extends") ); if ( extendsInd >= 0 ) { extendsComboBox.setSelectedIndex(extendsInd); } } if ( e.hasAttribute("clones") ) { int clonesInd = indexOf ( clonesComboBox.getModel() , e.getAttribute("clones") ); if ( clonesInd >= 0 ) { clonesComboBox.setSelectedIndex(clonesInd); } } //openable, closeable, etc. flags if ( e.hasAttribute("openable") ) oBox.setSelected( Boolean.parseBoolean( e.getAttribute("openable") ) ); if ( e.hasAttribute("closeable") ) cBox.setSelected( Boolean.parseBoolean( e.getAttribute("closeable") ) ); if ( e.hasAttribute("lockable") ) lBox.setSelected( Boolean.parseBoolean( e.getAttribute("lockable") ) ); if ( e.hasAttribute("unlockable") ) uBox.setSelected( Boolean.parseBoolean( e.getAttribute("unlockable") ) ); //wearable wBox.setSelected("wearable".equals(e.getAttribute("type"))); //weapon weaponBox.setSelected("weapon".equals(e.getAttribute("type"))); //description list panel NodeList desNl = e.getElementsByTagName("DescriptionList"); Element desListElt = (Element) desNl.item(0); if ( desListElt != null ) dlp.initFromXML(desListElt); //extra descriptions panel NodeList edesNl = e.getElementsByTagName("ExtraDescriptionList"); Element edesListElt = (Element) edesNl.item(0); if ( edesListElt != null ) edp.initFromXML(edesListElt); //bsh code panel NodeList codeNl = e.getElementsByTagName("Code"); if ( codeNl.getLength() > 0 ) { Element codeListElt = (Element) codeNl.item(0); bcp.initFromXML(codeListElt); } //properties panel NodeList plNl = e.getElementsByTagName("PropertyList"); Element plElt = (Element) plNl.item(0); if ( plElt != null ) pp.initFromXML(plElt); //sing names panel desNl = e.getElementsByTagName("SingularNames"); desListElt = (Element) desNl.item(0); if ( desListElt != null ) snp.initFromXML(desListElt); //plur names panel desNl = e.getElementsByTagName("PluralNames"); desListElt = (Element) desNl.item(0); if ( desListElt != null ) pnp.initFromXML(desListElt); //sing ref names panel NodeList srnNl = e.getElementsByTagName("SingularReferenceNames"); Element srnListElt = (Element) srnNl.item(0); if ( srnListElt != null ) srn.initFromXML(srnListElt); //plural ref names panel NodeList prnNl = e.getElementsByTagName("PluralReferenceNames"); Element prnListElt = (Element) prnNl.item(0); if ( prnListElt != null ) prn.initFromXML(prnListElt); //open descriptions panel NodeList desOp = e.getElementsByTagName("OpenDescriptionList"); if ( desOp.getLength() > 0 ) { Element openDesListElt = (Element) desOp.item(0); odp.initFromXML(openDesListElt); } //close descriptions panel NodeList desCl = e.getElementsByTagName("CloseDescriptionList"); if ( desCl.getLength() > 0 ) { Element closeDesListElt = (Element) desCl.item(0); cdp.initFromXML(closeDesListElt); } //lock descriptions panel NodeList desLck = e.getElementsByTagName("LockDescriptionList"); if ( desLck.getLength() > 0 ) { Element lockDesListElt = (Element) desLck.item(0); ldp.initFromXML(lockDesListElt); } //unlock descriptions panel NodeList desUnl = e.getElementsByTagName("UnlockDescriptionList"); if ( desUnl.getLength() > 0 ) { Element unlockDesListElt = (Element) desUnl.item(0); udp.initFromXML(unlockDesListElt); } //if it has inventory, then it is a container. Inventory is not initted here. //All inventories are initted at WorldPanel. NodeList invs = DOMUtils.getDirectChildrenElementsByTagName(e,"Inventory"); if ( invs.getLength() > 0 ) containerBox.setSelected(true); //weight, volume textfields tfWeight.setText(e.getAttribute("weight")); tfVolume.setText(e.getAttribute("volume")); //ungettable flag checkbox if ( e.hasAttribute("canGet") ) ungettableBox.setSelected( !Boolean.parseBoolean(e.getAttribute("canGet") ) ); //set default weights and volumes if not present if ( tfWeight.getText().trim().length() <= 0 ) tfWeight.setText("0"); if ( tfVolume.getText().trim().length() <= 0 ) tfVolume.setText("0"); //gender combo box if ( e.getAttribute("gender").equals("false") || e.getAttribute("gender").equals("0") ) genderComboBox.setSelectedIndex(1); else genderComboBox.setSelectedIndex(0); //wearable if ( "wearable".equals(e.getAttribute("type")) ) { NodeList wearableSpecs = e.getElementsByTagName("WearableSpecs"); if ( wearableSpecs.getLength() > 0 ) { Element wearableSpecsElt = (Element) wearableSpecs.item(0); NodeList wearableLimbs = wearableSpecsElt.getElementsByTagName("WearableLimbs"); if ( wearableLimbs.getLength() > 0 ) { Element wearableLimbsElt = (Element) wearableLimbs.item(0); NodeList requirements = wearableLimbsElt.getElementsByTagName("Requirement"); for ( int i = 0 ; i < requirements.getLength() ; i++ ) { Element requirement = (Element)requirements.item(i); PathCommandsPanel newPanel = new PathCommandsPanel(UIMessages.getInstance().getMessage("label.wearrequirement"),UIMessages.getInstance().getMessage("label.name"),true); newPanel.initFromXML(requirement); addLimbRequirementPanel(newPanel); } } NodeList damageList = wearableSpecsElt.getElementsByTagName("DamageList"); if ( damageList.getLength() > 0 ) { Element damageListElt = (Element) damageList.item(0); damlp.initFromXML(damageListElt); } } } //weapon if ( "weapon".equals(e.getAttribute("type")) ) { NodeList weaponSpecs = e.getElementsByTagName("WeaponSpecs"); if ( weaponSpecs.getLength() > 0 ) { Element weaponSpecsElt = (Element) weaponSpecs.item(0); NodeList wieldableLimbs = weaponSpecsElt.getElementsByTagName("WieldableLimbs"); if ( wieldableLimbs.getLength() > 0 ) { Element wieldableLimbsElt = (Element) wieldableLimbs.item(0); NodeList requirements = wieldableLimbsElt.getElementsByTagName("Requirement"); for ( int i = 0 ; i < requirements.getLength() ; i++ ) { Element requirement = (Element)requirements.item(i); PathCommandsPanel newPanel = new PathCommandsPanel(UIMessages.getInstance().getMessage("label.weaponrequirement"),UIMessages.getInstance().getMessage("label.name"),true); newPanel.initFromXML(requirement); addWeaponLimbRequirementPanel(newPanel); } } NodeList attack = weaponSpecsElt.getElementsByTagName("Attack"); if ( attack.getLength() > 0 ) { attackPanel.initFromXML(attack.item(0)); } NodeList defense = weaponSpecsElt.getElementsByTagName("Defense"); if ( defense.getLength() > 0 ) { defensePanel.initFromXML(defense.item(0)); } } } } //nah, this is sz of the panel /* public void paintComponent ( Graphics g ) { System.out.println(this.getParent().getParent()); double splitsz = this.getParent().getParent().getSize().getWidth(); if ( splitsz >= this.getMinimumSize().getWidth() ) this.setPreferredSize(new Dimension((int)splitsz,(int)this.getPreferredSize().getHeight())); super.paintComponent(g); } */ }