1) Moved net.sourceforge.phpeclipse.ui\src\net\sourceforge\phpdt back to net.sourcefo...
[phpeclipse.git] / net.sourceforge.phpeclipse / src / net / sourceforge / phpeclipse / wizards / html / TableElementCellModifier.java
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 (file)
index 0000000..62e767d
--- /dev/null
@@ -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));
+               }
+       }
+
+}