use of org.jdom2.Element in project JMRI by JMRI.
the class PaneProgPane method newRow.
/**
* Create a single row from the JDOM column Element
*
* @param element element containing row contents
* @param showStdName show the name following the rules for the
* <em>nameFmt</em> element
* @param modelElem element containing the decoder model
* @return a panel containing the group
*/
public JPanel newRow(Element element, boolean showStdName, Element modelElem) {
// create a panel to add as a new column or row
final JPanel c = new JPanel();
panelList.add(c);
GridBagLayout g = new GridBagLayout();
GridBagConstraints cs = new GridBagConstraints();
c.setLayout(g);
// handle the xml definition
// for all elements in the column or row
List<Element> elemList = element.getChildren();
log.trace("newRow starting with {} elements", elemList.size());
for (int i = 0; i < elemList.size(); i++) {
// update the grid position
cs.gridy = 0;
cs.gridx++;
Element e = elemList.get(i);
String name = e.getName();
log.trace("newRow processing {} element", name);
// decode the type
if (name.equals("display")) {
// its a variable
// load the variable
newVariable(e, c, g, cs, showStdName);
} else if (name.equals("separator")) {
// its a separator
JSeparator j = new JSeparator(javax.swing.SwingConstants.VERTICAL);
cs.fill = GridBagConstraints.BOTH;
cs.gridheight = GridBagConstraints.REMAINDER;
g.setConstraints(j, cs);
c.add(j);
cs.fill = GridBagConstraints.NONE;
cs.gridheight = 1;
} else if (name.equals("label")) {
cs.gridheight = GridBagConstraints.REMAINDER;
makeLabel(e, c, g, cs);
} else if (name.equals("soundlabel")) {
cs.gridheight = GridBagConstraints.REMAINDER;
makeSoundLabel(e, c, g, cs);
} else if (name.equals("cvtable")) {
makeCvTable(cs, g, c);
} else if (name.equals("indxcvtable")) {
log.debug("starting to build IndexedCvTable pane");
JTable indxcvTable = new JTable(_indexedCvModel);
JScrollPane cvScroll = new JScrollPane(indxcvTable);
indxcvTable.setDefaultRenderer(JTextField.class, new ValueRenderer());
indxcvTable.setDefaultRenderer(JButton.class, new ValueRenderer());
indxcvTable.setDefaultEditor(JTextField.class, new ValueEditor());
indxcvTable.setDefaultEditor(JButton.class, new ValueEditor());
indxcvTable.setRowHeight(new JButton("X").getPreferredSize().height);
indxcvTable.setPreferredScrollableViewportSize(new Dimension(700, indxcvTable.getRowHeight() * 14));
cvScroll.setColumnHeaderView(indxcvTable.getTableHeader());
// don't want a horizontal scroll bar
// Need to see the whole row at one time
// indxcvTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
cs.gridwidth = GridBagConstraints.REMAINDER;
g.setConstraints(cvScroll, cs);
c.add(cvScroll);
cs.gridwidth = 1;
// remember which indexed CVs to read/write
for (int j = 0; j < _indexedCvModel.getRowCount(); j++) {
String sz = "CV" + _indexedCvModel.getName(j);
int in = _varModel.findVarIndex(sz);
indexedCvList.add(in);
}
_cvTable = true;
log.debug("end of building IndexedCvTable pane");
} else if (name.equals("fnmapping")) {
pickFnMapPanel(c, g, cs, modelElem);
} else if (name.equals("dccaddress")) {
JPanel l = addDccAddressPanel(e);
if (l.getComponentCount() > 0) {
cs.gridheight = GridBagConstraints.REMAINDER;
g.setConstraints(l, cs);
c.add(l);
cs.gridheight = 1;
}
} else if (name.equals("column")) {
// nested "column" elements ...
cs.gridheight = GridBagConstraints.REMAINDER;
JPanel l = newColumn(e, showStdName, modelElem);
if (l.getComponentCount() > 0) {
panelList.add(l);
g.setConstraints(l, cs);
c.add(l);
cs.gridheight = 1;
}
} else if (name.equals("row")) {
// nested "row" elements ...
cs.gridwidth = GridBagConstraints.REMAINDER;
JPanel l = newRow(e, showStdName, modelElem);
if (l.getComponentCount() > 0) {
panelList.add(l);
g.setConstraints(l, cs);
c.add(l);
cs.gridwidth = 1;
}
} else if (name.equals("grid")) {
// nested "grid" elements ...
cs.gridwidth = GridBagConstraints.REMAINDER;
JPanel l = newGrid(e, showStdName, modelElem);
if (l.getComponentCount() > 0) {
panelList.add(l);
g.setConstraints(l, cs);
c.add(l);
cs.gridwidth = 1;
}
} else if (name.equals("group")) {
// nested "group" elements ...
JPanel l = newGroup(e, showStdName, modelElem);
if (l.getComponentCount() > 0) {
panelList.add(l);
g.setConstraints(l, cs);
c.add(l);
}
} else if (!name.equals("qualifier")) {
// its a mistake
log.error("No code to handle element of type " + e.getName() + " in newRow");
}
}
// add glue to the bottom to allow resize
if (c.getComponentCount() > 0) {
c.add(Box.createVerticalGlue());
}
// handle qualification if any
QualifierAdder qa = new QualifierAdder() {
@Override
protected Qualifier createQualifier(VariableValue var, String relation, String value) {
return new JComponentQualifier(c, var, Integer.parseInt(value), relation);
}
@Override
protected void addListener(java.beans.PropertyChangeListener qc) {
c.addPropertyChangeListener(qc);
}
};
qa.processModifierElements(element, _varModel);
return c;
}
use of org.jdom2.Element in project JMRI by JMRI.
the class PaneProgPane method newVariable.
/**
* Add the representation of a single variable. The variable is defined by a
* JDOM variable Element from the XML file.
*
* @param var element containing variable
* @param col column to insert label into
* @param g panel layout manager
* @param cs constraints on layout manager
* @param showStdName show the name following the rules for the
* <em>nameFmt</em> element
*/
public void newVariable(Element var, JComponent col, GridBagLayout g, GridBagConstraints cs, boolean showStdName) {
// get the name
String name = var.getAttribute("item").getValue();
// if it doesn't exist, do nothing
int i = _varModel.findVarIndex(name);
if (i < 0) {
log.trace("Variable \"{}\" not found, omitted", name);
return;
}
// Leave here for now. Need to track pre-existing corner-case issue
// log.info("Entry item="+name+";cs.gridx="+cs.gridx+";cs.gridy="+cs.gridy+";cs.anchor="+cs.anchor+";cs.ipadx="+cs.ipadx);
// check label orientation
Attribute attr;
// this default is also set in the DTD
String layout = "left";
if ((attr = var.getAttribute("layout")) != null && attr.getValue() != null) {
layout = attr.getValue();
}
// load label if specified, else use name
String label = name;
if (!showStdName) {
// get name attribute from variable, as that's the mfg name
label = _varModel.getLabel(i);
}
String temp = LocaleSelector.getAttribute(var, "label");
if (temp != null) {
label = temp;
}
// get representation; store into the list to be programmed
JComponent rep = getRepresentation(name, var);
varList.add(i);
// create the paired label
JLabel l = new WatchingLabel(label, rep);
int spaceWidth = getFontMetrics(l.getFont()).stringWidth(" ");
// assemble v from label, rep
switch(layout) {
case "left":
cs.anchor = GridBagConstraints.EAST;
cs.ipadx = spaceWidth;
g.setConstraints(l, cs);
col.add(l);
cs.ipadx = 0;
cs.gridx++;
cs.anchor = GridBagConstraints.WEST;
g.setConstraints(rep, cs);
col.add(rep);
break;
// log.info("Exit item="+name+";cs.gridx="+cs.gridx+";cs.gridy="+cs.gridy+";cs.anchor="+cs.anchor+";cs.ipadx="+cs.ipadx);
case "right":
cs.anchor = GridBagConstraints.EAST;
g.setConstraints(rep, cs);
col.add(rep);
cs.gridx++;
cs.anchor = GridBagConstraints.WEST;
cs.ipadx = spaceWidth;
g.setConstraints(l, cs);
col.add(l);
cs.ipadx = 0;
break;
case "below":
// variable in center of upper line
cs.anchor = GridBagConstraints.CENTER;
g.setConstraints(rep, cs);
col.add(rep);
// label aligned like others
cs.gridy++;
cs.anchor = GridBagConstraints.WEST;
cs.ipadx = spaceWidth;
g.setConstraints(l, cs);
col.add(l);
cs.ipadx = 0;
break;
case "above":
// label aligned like others
cs.anchor = GridBagConstraints.WEST;
cs.ipadx = spaceWidth;
g.setConstraints(l, cs);
col.add(l);
cs.ipadx = 0;
// variable in center of lower line
cs.gridy++;
cs.anchor = GridBagConstraints.CENTER;
g.setConstraints(rep, cs);
col.add(rep);
break;
default:
log.error("layout internally inconsistent: " + layout);
}
}
use of org.jdom2.Element in project JMRI by JMRI.
the class AddressPanel method getXml.
/**
* Create an Element of this object's preferences.
* <ul>
* <li> Window Preferences
* <li> Address value
* </ul>
*
* @return org.jdom2.Element for this objects preferences. Defined in
* DTD/throttle-config
*/
public Element getXml() {
Element me = new Element("AddressPanel");
//Element window = new Element("window");
java.util.ArrayList<Element> children = new java.util.ArrayList<Element>(1);
children.add(WindowPreferences.getPreferences(this));
children.add((new jmri.configurexml.LocoAddressXml()).store(addrSelector.getAddress()));
children.add((new jmri.configurexml.LocoAddressXml()).store(consistAddress));
me.setContent(children);
return me;
}
use of org.jdom2.Element in project JMRI by JMRI.
the class ButtonTrigger method getXml.
@Override
public Element getXml() {
Element me = new Element("Trigger");
log.debug("Bool Trigger getXml():");
log.debug(" trigger_name = " + this.getName());
log.debug(" event_name = " + this.event_name);
log.debug(" target_name = " + target.getName());
log.debug(" match = " + Boolean.valueOf(match_value).toString());
log.debug(" action = " + this.getTriggerType().toString());
me.setAttribute("name", this.getName());
me.setAttribute("type", "BOOLEAN");
me.addContent(new Element("event-name").addContent(event_name));
me.addContent(new Element("target-name").addContent(target.getName()));
me.addContent(new Element("match").addContent(Boolean.valueOf(match_value).toString()));
me.addContent(new Element("action").addContent(this.getTriggerType().toString()));
return (me);
}
use of org.jdom2.Element in project JMRI by JMRI.
the class WindowPreferences method getPreferences.
/**
* Collect container preferences.
*
* @param c The container being XMLed.
* @return An Element containing the following prefs:
* <ul>
* <li> x location
* <li> y location
* <li> width
* <li> height
* </ul>
*/
public static Element getPreferences(Container c) {
Element window = new Element("window");
window.setAttribute("x", String.valueOf(c.getLocation().x));
window.setAttribute("y", String.valueOf(c.getLocation().y));
Dimension size = c.getSize();
window.setAttribute("width", String.valueOf(size.width));
window.setAttribute("height", String.valueOf(size.height));
window.setAttribute("isVisible", String.valueOf(c.isVisible()));
return window;
}
Aggregations