[Jsxe-cvs] SF.net SVN: jsxe: [1121] trunk/jsxe/src/net/sourceforge/jsxe/dom
Status: Inactive
Brought to you by:
ian_lewis
From: <ian...@us...> - 2006-08-08 05:55:28
|
Revision: 1121 Author: ian_lewis Date: 2006-08-07 22:55:21 -0700 (Mon, 07 Aug 2006) ViewCVS: http://svn.sourceforge.net/jsxe/?rev=1121&view=rev Log Message: ----------- Fixed a bug with drag and drop and undo Modified Paths: -------------- trunk/jsxe/src/net/sourceforge/jsxe/dom/AdapterNode.java trunk/jsxe/src/net/sourceforge/jsxe/dom/undo/NodeNameChange.java trunk/jsxe/src/net/sourceforge/jsxe/dom/undo/NodePrefixChange.java trunk/jsxe/src/net/sourceforge/jsxe/dom/undo/NodeValueChange.java Modified: trunk/jsxe/src/net/sourceforge/jsxe/dom/AdapterNode.java =================================================================== --- trunk/jsxe/src/net/sourceforge/jsxe/dom/AdapterNode.java 2006-08-08 04:59:58 UTC (rev 1120) +++ trunk/jsxe/src/net/sourceforge/jsxe/dom/AdapterNode.java 2006-08-08 05:55:21 UTC (rev 1121) @@ -516,41 +516,54 @@ //node is already in the location specified return node; } - //add to this AdapterNode and the DOM. - if (node.getNodeType() == Node.DOCUMENT_FRAGMENT_NODE) { - //Add all children of the document fragment - for(int i=0; i<node.childCount(); i++) { - addAdapterNodeAt(node.child(i), location+i); - } - } else { - /* - if the node is already contained in this node - then we are effectively moving the node. - */ - if (m_children.contains(node)) { - if (location > m_children.indexOf(node)) { - location -= 1; + + XMLDocument doc = getOwnerDocument(); + try { + + doc.beginCompoundEdit(); + //add to this AdapterNode and the DOM. + if (node.getNodeType() == Node.DOCUMENT_FRAGMENT_NODE) { + //Add all children of the document fragment + for (int i=0; i<node.childCount(); i++) { + addAdapterNodeAt(node.child(i), location+i); } - m_children.remove(node); - } - if (location >= m_children.size()) { - m_domNode.appendChild(node.getNode()); - ensureChildrenSize(location); - m_children.add(node); } else { - m_domNode.insertBefore(node.getNode(), child(location).getNode()); - m_children.add(location, node); - } - - //Remove from previous parent - AdapterNode previousParent = node.getParentNode(); - if (previousParent != this) { - if (previousParent != null) { - previousParent.removeChild(node); + + + /* + if the node is already contained in this node + then we are effectively moving the node. + */ + if (m_children.contains(node)) { + if (location > m_children.indexOf(node)) { + location -= 1; + } + int index = index(node); + m_children.remove(node); + getOwnerDocument().addUndoableEdit(new RemoveNodeChange(this, node, index)); + } else { + //Remove from previous parent + AdapterNode previousParent = node.getParentNode(); + if (previousParent != this) { + if (previousParent != null) { + previousParent.removeChild(node); + } + } } + if (location >= m_children.size()) { + m_domNode.appendChild(node.getNode()); + ensureChildrenSize(location); + m_children.add(node); + } else { + m_domNode.insertBefore(node.getNode(), child(location).getNode()); + m_children.add(location, node); + } + + node.setParent(this); + fireNodeAdded(this, node, location); } - node.setParent(this); - fireNodeAdded(this, node); + } finally { + doc.endCompoundEdit(); } } else { throw new DOMException(DOMException.INDEX_SIZE_ERR, "The location to insert this node is invalid."); @@ -574,10 +587,11 @@ throw new DOMException(DOMException.NOT_SUPPORTED_ERR, "You cannot remove the root element node."); } if (child.getNodeType() != Node.DOCUMENT_TYPE_NODE) { + int index = index(child); m_domNode.removeChild(child.getNode()); m_children.remove(child); child.setParent(null); - fireNodeRemoved(this, child); + fireNodeRemoved(this, child, index); } else { throw new DOMException(DOMException.NOT_SUPPORTED_ERR, "Cannot remove Document Type Nodes"); } @@ -911,7 +925,13 @@ */ void removeChild(AdapterNode node) { if (node != null) { + int index = index(node); m_children.remove(node); + if (index != -1) { + getOwnerDocument().addUndoableEdit(new RemoveNodeChange(this, node, index)); + } else { + Log.log(Log.DEBUG, this, "node not found"); + } } }//}}} @@ -960,7 +980,9 @@ //{{{ Private members //{{{ fireNodeAdded() - private void fireNodeAdded(AdapterNode source, AdapterNode child) { + private void fireNodeAdded(AdapterNode source, AdapterNode child, int index) { + getOwnerDocument().addUndoableEdit(new AddNodeChange(source, child, index)); + ListIterator iterator = m_listeners.listIterator(); while (iterator.hasNext()) { AdapterNodeListener listener = (AdapterNodeListener)iterator.next(); @@ -970,7 +992,9 @@ }//}}} //{{{ fireNodeRemoved() - private void fireNodeRemoved(AdapterNode source, AdapterNode child) { + private void fireNodeRemoved(AdapterNode source, AdapterNode child, int index) { + getOwnerDocument().addUndoableEdit(new RemoveNodeChange(source, child, index)); + ListIterator iterator = m_listeners.listIterator(); while (iterator.hasNext()) { AdapterNodeListener listener = (AdapterNodeListener)iterator.next(); Modified: trunk/jsxe/src/net/sourceforge/jsxe/dom/undo/NodeNameChange.java =================================================================== --- trunk/jsxe/src/net/sourceforge/jsxe/dom/undo/NodeNameChange.java 2006-08-08 04:59:58 UTC (rev 1120) +++ trunk/jsxe/src/net/sourceforge/jsxe/dom/undo/NodeNameChange.java 2006-08-08 05:55:21 UTC (rev 1121) @@ -50,9 +50,9 @@ */ public class NodeNameChange extends AbstractUndoableEdit { - AdapterNode m_node; - String m_oldValue; - String m_newValue; + private AdapterNode m_node; + private String m_oldValue; + private String m_newValue; //{{{ NodeNameChange constructor public NodeNameChange(AdapterNode node, String oldValue, String newValue) { Modified: trunk/jsxe/src/net/sourceforge/jsxe/dom/undo/NodePrefixChange.java =================================================================== --- trunk/jsxe/src/net/sourceforge/jsxe/dom/undo/NodePrefixChange.java 2006-08-08 04:59:58 UTC (rev 1120) +++ trunk/jsxe/src/net/sourceforge/jsxe/dom/undo/NodePrefixChange.java 2006-08-08 05:55:21 UTC (rev 1121) @@ -50,9 +50,9 @@ */ public class NodePrefixChange extends AbstractUndoableEdit { - AdapterNode m_node; - String m_oldValue; - String m_newValue; + private AdapterNode m_node; + private String m_oldValue; + private String m_newValue; //{{{ NodePrefixChange constructor public NodePrefixChange(AdapterNode node, String oldValue, String newValue) { Modified: trunk/jsxe/src/net/sourceforge/jsxe/dom/undo/NodeValueChange.java =================================================================== --- trunk/jsxe/src/net/sourceforge/jsxe/dom/undo/NodeValueChange.java 2006-08-08 04:59:58 UTC (rev 1120) +++ trunk/jsxe/src/net/sourceforge/jsxe/dom/undo/NodeValueChange.java 2006-08-08 05:55:21 UTC (rev 1121) @@ -50,9 +50,9 @@ */ public class NodeValueChange extends AbstractUndoableEdit { - AdapterNode m_node; - String m_oldValue; - String m_newValue; + private AdapterNode m_node; + private String m_oldValue; + private String m_newValue; //{{{ NodeValueChange constructor public NodeValueChange(AdapterNode node, String oldValue, String newValue) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |