[jbosstools-commits] JBoss Tools SVN: r6975 - trunk/vpe/plugins/org.jboss.tools.vpe/src/org/jboss/tools/vpe/editor/template.

jbosstools-commits at lists.jboss.org jbosstools-commits at lists.jboss.org
Tue Mar 18 04:55:00 EDT 2008


Author: sdzmitrovich
Date: 2008-03-18 04:55:00 -0400 (Tue, 18 Mar 2008)
New Revision: 6975

Modified:
   trunk/vpe/plugins/org.jboss.tools.vpe/src/org/jboss/tools/vpe/editor/template/EditableTemplateAdapter.java
Log:
http://jira.jboss.com/jira/browse/JBIDE-1492

Modified: trunk/vpe/plugins/org.jboss.tools.vpe/src/org/jboss/tools/vpe/editor/template/EditableTemplateAdapter.java
===================================================================
--- trunk/vpe/plugins/org.jboss.tools.vpe/src/org/jboss/tools/vpe/editor/template/EditableTemplateAdapter.java	2008-03-18 08:44:51 UTC (rev 6974)
+++ trunk/vpe/plugins/org.jboss.tools.vpe/src/org/jboss/tools/vpe/editor/template/EditableTemplateAdapter.java	2008-03-18 08:55:00 UTC (rev 6975)
@@ -21,6 +21,7 @@
 import org.jboss.tools.vpe.editor.selection.VpeSelectionController;
 import org.jboss.tools.vpe.editor.util.TemplateManagingUtil;
 import org.jboss.tools.vpe.editor.util.TextUtil;
+import org.jboss.tools.vpe.editor.util.VisualDomUtil;
 import org.mozilla.interfaces.nsIDOMElement;
 import org.mozilla.interfaces.nsIDOMKeyEvent;
 import org.mozilla.interfaces.nsIDOMNode;
@@ -278,6 +279,7 @@
 
 				// if offset is end of text will do nothing
 				if (focusOffset == node.getNodeValue().length()) {
+					setSourceSelection(pageContext, node, focusOffset, 0);
 					return true;
 				}
 
@@ -362,8 +364,11 @@
 			// if text was not selected then will be deleted previous character
 			if (focusOffset == anchorOffset) {
 				// if offset is start of text then will do nothing
-				if (focusOffset == 0)
+				if (focusOffset == 0) {
+
+					setSourceSelection(pageContext, node, 0, 0);
 					return true;
+				}
 				// set start offset to previous character
 				startOffset = focusOffset - 1;
 				length = 1;
@@ -552,6 +557,8 @@
 
 			if (focusOffset != 0) {
 				setSourceSelection(pageContext, node, focusOffset - 1, 0);
+			} else {
+				setSourceSelection(pageContext, node, 0, 0);
 			}
 		}
 		return true;
@@ -573,27 +580,33 @@
 		return true;
 	}
 
-	/*
-	 * (non-Javadoc)
+	/**
 	 * 
-	 * @see org.jboss.tools.vpe.editor.template.VpeTemplateNodesManager#getSourceNode(org.jboss.tools.vpe.editor.context.VpePageContext,
-	 *      org.mozilla.interfaces.nsIDOMNode)
+	 * @param pageContext
+	 * @param visualNode
+	 * @param elementData
+	 * @return
 	 */
-	public Node getSourceNode(VpePageContext pageContext,
+	protected VpeAttributeData getAttributeData(VpePageContext pageContext,
 			nsIDOMNode visualNode, VpeElementData elementData) {
 
-		if ((elementData != null) && (elementData.getAttributesData() != null)) {
+		// if input data is correct
+		if ((visualNode != null) && (elementData != null)
+				&& (elementData.getAttributesData() != null)) {
 
 			List<VpeAttributeData> attributesMapping = elementData
 					.getAttributesData();
 
 			for (VpeAttributeData attributeData : attributesMapping) {
 
-				if (attributeData.getVisualAttr().equals(visualNode))
-					return attributeData.getSourceAttr();
+				// if visual nodes equals
+				if (visualNode.equals(attributeData.getVisualAttr()))
+					return attributeData;
 			}
 		}
+
 		return null;
+
 	}
 
 	/**
@@ -603,25 +616,67 @@
 	 * @param elementData
 	 * @return
 	 */
-	public nsIDOMNode getVisualNode(VpePageContext pageContext, Node node,
-			VpeElementData elementData) {
+	protected VpeAttributeData getAttributeData(VpePageContext pageContext,
+			Node node, VpeElementData elementData) {
 
-		if ((elementData != null) && (elementData.getAttributesData() != null)) {
+		// if input data is correct
+		if ((node != null) && (elementData != null)
+				&& (elementData.getAttributesData() != null)) {
 
 			List<VpeAttributeData> attributesMapping = elementData
 					.getAttributesData();
 
 			for (VpeAttributeData attributeData : attributesMapping) {
-				if (attributeData.getSourceAttr().equals(node))
-					return attributeData.getVisualAttr();
+
+				// if source nodes equals
+				if (node.equals(attributeData.getSourceAttr()))
+					return attributeData;
 			}
 		}
 		return null;
+
 	}
 
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.jboss.tools.vpe.editor.template.VpeTemplateNodesManager#getSourceNode(org.jboss.tools.vpe.editor.context.VpePageContext,
+	 *      org.mozilla.interfaces.nsIDOMNode)
+	 */
+	public Node getSourceNode(VpePageContext pageContext,
+			nsIDOMNode visualNode, VpeElementData elementData) {
+
+		// get attribute data
+		VpeAttributeData attributeData = getAttributeData(pageContext,
+				visualNode, elementData);
+
+		if (attributeData != null)
+			return attributeData.getSourceAttr();
+
+		return null;
+	}
+
 	/**
 	 * 
 	 * @param pageContext
+	 * @param node
+	 * @param elementData
+	 * @return
+	 */
+	public nsIDOMNode getVisualNode(VpePageContext pageContext, Node node,
+			VpeElementData elementData) {
+
+		VpeAttributeData attributeData = getAttributeData(pageContext, node,
+				elementData);
+		if (attributeData != null)
+			return attributeData.getVisualAttr();
+
+		return null;
+	}
+
+	/**
+	 * 
+	 * @param pageContext
 	 * @param visualNode
 	 * @param elementData
 	 * @return
@@ -629,32 +684,26 @@
 	public boolean isNodeEditable(VpePageContext pageContext,
 			nsIDOMNode visualNode, VpeElementData elementData) {
 
-		if ((elementData != null) && (elementData.getAttributesData() != null)) {
+		VpeAttributeData attributeData = getAttributeData(pageContext,
+				visualNode, elementData);
 
-			List<VpeAttributeData> attributesMapping = elementData
-					.getAttributesData();
+		if (attributeData != null)
+			return attributeData.isEditable();
 
-			for (VpeAttributeData attributeData : attributesMapping) {
-
-				if (attributeData.getVisualAttr().equals(visualNode))
-					return attributeData.isEditable();
-			}
-		}
 		return false;
 	}
 
+	/**
+	 * 
+	 */
 	public boolean isNodeEditable(VpePageContext pageContext, Node node,
 			VpeElementData elementData) {
-		if ((elementData != null) && (elementData.getAttributesData() != null)) {
 
-			List<VpeAttributeData> attributesMapping = elementData
-					.getAttributesData();
+		VpeAttributeData attributeData = getAttributeData(pageContext, node,
+				elementData);
 
-			for (VpeAttributeData attributeData : attributesMapping) {
-
-				if (attributeData.getSourceAttr().equals(node))
-					return attributeData.isEditable();
-			}
+		if (attributeData != null) {
+			return attributeData.isEditable();
 		}
 		return false;
 	}
@@ -688,27 +737,55 @@
 
 		nsIDOMNode focusedVisualNode = selection.getFocusNode();
 
+		if (focusedVisualNode == null)
+			return;
+
 		VpeElementMapping elementMapping = pageContext.getDomMapping()
 				.getNearElementMapping(focusedVisualNode);
+		if (elementMapping == null)
+			return;
 
-		int focusOffset = selection.getFocusOffset();
-		int anchorOffset = selection.getAnchorOffset();
+		int focusOffset;
+		int length;
 
+		VpeAttributeData attributeData = getAttributeData(pageContext,
+				focusedVisualNode, elementMapping.getElementData());
+
 		boolean isEditable = isNodeEditable(pageContext, focusedVisualNode,
 				elementMapping.getElementData());
 
-		Node focusedSourceNode = getSourceNode(pageContext, focusedVisualNode,
-				elementMapping.getElementData());
+		Node focusedSourceNode;
+		if (attributeData == null) {
 
-		if (focusedSourceNode == null)
 			focusedSourceNode = elementMapping.getSourceNode();
-		if (isEditable)
-			setSourceSelection(pageContext, focusedSourceNode, focusOffset,
-					anchorOffset - focusOffset);
-		else
-			setSourceSelection(pageContext, focusedSourceNode, 0,
-					getLengthNode(focusedSourceNode));
+			focusedVisualNode = elementMapping.getVisualNode();
 
+			focusOffset = 0;
+			length = 0;
+
+		} else {
+
+			focusedSourceNode = getSourceNode(pageContext, focusedVisualNode,
+					elementMapping.getElementData());
+
+			if (focusedSourceNode == null)
+				focusedSourceNode = elementMapping.getSourceNode();
+
+			if (isEditable) {
+
+				focusOffset = selection.getFocusOffset();
+				length = selection.getAnchorOffset() - focusOffset;
+
+			} else {
+
+				focusOffset = 0;
+				length = getLengthNode(focusedSourceNode);
+			}
+
+		}
+
+		setSourceSelection(pageContext, focusedSourceNode, focusOffset, length);
+
 		if (focusedVisualNode.getNodeType() != nsIDOMNode.ELEMENT_NODE)
 			focusedVisualNode = focusedVisualNode.getParentNode();
 
@@ -745,7 +822,6 @@
 		int visualFocus = 0;
 		int visualAnchor = 0;
 		nsIDOMNode visualNode = null;
-		nsIDOMNode visualParent = null;
 		if ((focusNode == anchorNode)
 				&& isNodeEditable(pageContext, focusNode, elementMapping
 						.getElementData())) {
@@ -753,8 +829,6 @@
 			visualNode = getVisualNode(pageContext, focusNode, elementMapping
 					.getElementData());
 			if (visualNode != null) {
-				visualParent = (nsIDOMNode) visualNode.getParentNode()
-						.queryInterface(nsIDOMElement.NS_IDOMELEMENT_IID);
 				String text = focusNode.getNodeValue();
 				int start = getStartOffsetNode(focusNode);
 				focus = focus - start;
@@ -766,18 +840,27 @@
 		}
 
 		if (visualNode == null) {
-			visualParent = visualNode = elementMapping.getVisualNode();
+			visualNode = elementMapping.getVisualNode();
 
 		}
 		nsISelection selection = selectionController
 				.getSelection(nsISelectionController.SELECTION_NORMAL);
 
-		selection.collapse(visualNode, visualFocus);
+		if (visualNode.getNodeType() == nsIDOMNode.TEXT_NODE) {
+			selection.collapse(visualNode, visualFocus);
 
-		// if(visualFocus!=visualAnchor)
-		// selection.extend(visualNode, visualAnchor );
+			// if(visualFocus!=visualAnchor)
+			// selection.extend(visualNode, visualAnchor );
+		}
+		else {
+			selection.collapse(visualNode, 0);
+		}
+		if (visualNode.getNodeType() != nsIDOMNode.ELEMENT_NODE) {
+			visualNode = visualNode.getParentNode();
+		}
 		pageContext.getVisualBuilder().setSelectionRectangle(
-				(nsIDOMElement) visualParent);
+				(nsIDOMElement) visualNode
+						.queryInterface(nsIDOMElement.NS_IDOMELEMENT_IID));
 	}
 
 	/*
@@ -796,8 +879,9 @@
 
 			for (VpeAttributeData attributeData : attributesMapping) {
 
-				if ((offset > (getStartOffsetNode(attributeData.getSourceAttr())))
-						&& (offset < (getEndOffsetNode(attributeData
+				if ((offset >= (getStartOffsetNode(attributeData
+						.getSourceAttr())))
+						&& (offset <= (getEndOffsetNode(attributeData
 								.getSourceAttr()))))
 					return attributeData.getSourceAttr();
 			}




More information about the jbosstools-commits mailing list