X-Git-Url: http://git.phpeclipse.com diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/wizards/html/TableElementCellModifier.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/wizards/html/TableElementCellModifier.java new file mode 100644 index 0000000..62e767d --- /dev/null +++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/wizards/html/TableElementCellModifier.java @@ -0,0 +1,82 @@ +/* + * $Id: TableElementCellModifier.java,v 1.3 2006-10-21 23:18:43 pombredanne Exp $ + * Copyright Narushima Hironori. All rights reserved. + */ +package net.sourceforge.phpeclipse.wizards.html; + +import javax.xml.parsers.DocumentBuilderFactory; + +import org.eclipse.jface.util.IPropertyChangeListener; +import org.eclipse.jface.util.PropertyChangeEvent; +import org.eclipse.jface.viewers.ICellModifier; +import org.eclipse.swt.widgets.Item; +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; + +/** + * + */ +public class TableElementCellModifier implements ICellModifier { + + DocumentBuilderFactory builderFactory; + + IPropertyChangeListener listener; + + public TableElementCellModifier(IPropertyChangeListener listener) { + builderFactory = DocumentBuilderFactory.newInstance(); + this.listener = listener; + } + + public boolean canModify(Object element, String property) { + return getValue(element, property) != null; + } + + public Object getValue(Object trElem, String property) { + if (trElem instanceof Element) { + Element e = (Element) trElem; + if (e.getNodeName().equals("tr")) { + int v = TableElementModel.toNumeric(property); + Element[] cells = TableElementModel.chooseCellElements(e); + if (v >= 0 && v < cells.length) { + NodeList nodes = cells[v].getChildNodes(); + if (nodes.getLength() == 1) { + Node n = nodes.item(0); + if (n instanceof Text) { + return n.getNodeValue(); + } + } + } + } + } + return null; + } + + public void modify(Object element, String property, Object value) { + if (element instanceof Item) { + element = ((Item) element).getData(); + } + Element trElem = (Element) element; + int index = TableElementModel.toNumeric(property); + Element cellElem = TableElementModel.chooseCellElements(trElem)[index]; + + NodeList nodes = cellElem.getChildNodes(); + for (int i = 0; i < nodes.getLength(); i++) { + cellElem.removeChild(nodes.item(i)); + } + Document doc = cellElem.getOwnerDocument(); + + if (value instanceof String) { + cellElem.appendChild(doc.createTextNode((String) value)); + } + // notify listener + if (listener != null) { + String oldValue = nodes.item(0).getNodeValue(); + listener.propertyChange(new PropertyChangeEvent(this, property, + (String) value, oldValue)); + } + } + +}