Author: yradtsevich
Date: 2011-02-18 05:32:25 -0500 (Fri, 18 Feb 2011)
New Revision: 29235
Modified:
trunk/jsf/plugins/org.jboss.tools.jsf.vpe.jsf/src/org/jboss/tools/jsf/vpe/jsf/template/AbstractOutputJsfTemplate.java
trunk/jsf/plugins/org.jboss.tools.jsf.vpe.jsf/src/org/jboss/tools/jsf/vpe/jsf/template/util/NodeProxyUtil.java
trunk/jsf/tests/org.jboss.tools.jsf.vpe.jsf.test/src/org/jboss/tools/jsf/vpe/jsf/test/jbide/JBIDE2584Test.java
trunk/vpe/plugins/org.jboss.tools.vpe/src/org/jboss/tools/vpe/editor/template/SelectionManager.java
trunk/vpe/plugins/org.jboss.tools.vpe/src/org/jboss/tools/vpe/editor/template/VpeAbstractTemplate.java
trunk/vpe/plugins/org.jboss.tools.vpe/src/org/jboss/tools/vpe/editor/template/VpeTemplate.java
Log:
https://issues.jboss.org/browse/JBIDE-8115 : Support for multiple selection in visual
part
- SelectionManager.refreshVisualSelection() mathod has been splitted to
refreshVisualNodeSelection() and refreshVisualTextSelection()
- other minor changes
Modified:
trunk/jsf/plugins/org.jboss.tools.jsf.vpe.jsf/src/org/jboss/tools/jsf/vpe/jsf/template/AbstractOutputJsfTemplate.java
===================================================================
---
trunk/jsf/plugins/org.jboss.tools.jsf.vpe.jsf/src/org/jboss/tools/jsf/vpe/jsf/template/AbstractOutputJsfTemplate.java 2011-02-18
08:23:53 UTC (rev 29234)
+++
trunk/jsf/plugins/org.jboss.tools.jsf.vpe.jsf/src/org/jboss/tools/jsf/vpe/jsf/template/AbstractOutputJsfTemplate.java 2011-02-18
10:32:25 UTC (rev 29235)
@@ -11,6 +11,7 @@
package org.jboss.tools.jsf.vpe.jsf.template;
+import org.eclipse.swt.graphics.Point;
import org.eclipse.wst.xml.core.internal.provisional.document.IDOMAttr;
import org.jboss.tools.jsf.vpe.jsf.template.util.JSF;
import org.jboss.tools.jsf.vpe.jsf.template.util.NodeProxyUtil;
@@ -198,8 +199,7 @@
@Override
public nsIDOMNode getVisualNodeBySourcePosition(
- VpeElementMapping elementMapping, int focusPosition,
- int anchorPosition, VpeDomMapping domMapping) {
+ VpeElementMapping elementMapping, Point selectionRange, VpeDomMapping domMapping) {
nsIDOMNode node = null;
if ((elementMapping.getElementData() instanceof VpeElementProxyData)
@@ -210,15 +210,13 @@
.getElementData();
VpeNodeMapping nodeMapping = NodeProxyUtil.findNodeByPosition(
- domMapping, elementProxyData.getNodelist(), focusPosition,
- anchorPosition);
+ domMapping, elementProxyData.getNodelist(), selectionRange);
if (nodeMapping != null) {
if (nodeMapping instanceof VpeElementMapping) {
node = super.getVisualNodeBySourcePosition(
- (VpeElementMapping) nodeMapping, focusPosition,
- anchorPosition, domMapping);
+ (VpeElementMapping) nodeMapping, selectionRange, domMapping);
} else {
node = nodeMapping.getVisualNode();
}
@@ -227,7 +225,7 @@
if (node == null) {
node = super.getVisualNodeBySourcePosition(elementMapping,
- focusPosition, anchorPosition, domMapping);
+ selectionRange, domMapping);
}
return node;
}
Modified:
trunk/jsf/plugins/org.jboss.tools.jsf.vpe.jsf/src/org/jboss/tools/jsf/vpe/jsf/template/util/NodeProxyUtil.java
===================================================================
---
trunk/jsf/plugins/org.jboss.tools.jsf.vpe.jsf/src/org/jboss/tools/jsf/vpe/jsf/template/util/NodeProxyUtil.java 2011-02-18
08:23:53 UTC (rev 29234)
+++
trunk/jsf/plugins/org.jboss.tools.jsf.vpe.jsf/src/org/jboss/tools/jsf/vpe/jsf/template/util/NodeProxyUtil.java 2011-02-18
10:32:25 UTC (rev 29235)
@@ -12,6 +12,7 @@
import org.eclipse.jst.jsp.core.internal.domdocument.DOMModelForJSP;
import org.eclipse.jst.jsp.core.internal.parser.JSPSourceParser;
+import org.eclipse.swt.graphics.Point;
import org.eclipse.wst.sse.core.internal.document.StructuredDocumentFactory;
import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocument;
import org.eclipse.wst.xml.core.internal.provisional.document.IDOMAttr;
@@ -72,29 +73,25 @@
* @return
*/
static public VpeNodeMapping findNodeByPosition(VpeDomMapping domMapping,
- NodeList nodeList, int focusPosition, int anchorPosition) {
+ NodeList nodeList, Point selectionRange) {
+ int beginPosition = Math.min(selectionRange.x, selectionRange.x + selectionRange.y);
+ int endPosition = Math.max(selectionRange.x, selectionRange.x + selectionRange.y);
- if (anchorPosition < focusPosition) {
- focusPosition = anchorPosition;
- anchorPosition = focusPosition;
- }
-
for (int i = 0; i < nodeList.getLength(); i++) {
Node child = nodeList.item(i);
VpeNodeMapping result = null;
if (child.hasChildNodes()) {
-
result = findNodeByPosition(domMapping, child.getChildNodes(),
- focusPosition, anchorPosition);
+ selectionRange);
}
if (result != null)
return result;
- if ((focusPosition >= (NodesManagingUtil.getStartOffsetNode(child)))
- && (anchorPosition <= (NodesManagingUtil
+ if ((beginPosition >= (NodesManagingUtil.getStartOffsetNode(child)))
+ && (endPosition <= (NodesManagingUtil
.getEndOffsetNode(child)))) {
return VpeNodesManagingUtil.getNodeMapping(domMapping, child);
Modified:
trunk/jsf/tests/org.jboss.tools.jsf.vpe.jsf.test/src/org/jboss/tools/jsf/vpe/jsf/test/jbide/JBIDE2584Test.java
===================================================================
---
trunk/jsf/tests/org.jboss.tools.jsf.vpe.jsf.test/src/org/jboss/tools/jsf/vpe/jsf/test/jbide/JBIDE2584Test.java 2011-02-18
08:23:53 UTC (rev 29234)
+++
trunk/jsf/tests/org.jboss.tools.jsf.vpe.jsf.test/src/org/jboss/tools/jsf/vpe/jsf/test/jbide/JBIDE2584Test.java 2011-02-18
10:32:25 UTC (rev 29235)
@@ -12,6 +12,7 @@
import org.eclipse.core.resources.IFile;
import org.eclipse.jface.text.ITextViewer;
+import org.eclipse.swt.graphics.Point;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.part.FileEditorInput;
import org.jboss.tools.jsf.vpe.jsf.test.JsfAllTests;
@@ -68,8 +69,8 @@
VpeTemplate simpleTextTemplate = simpleTextMapping.getTemplate();
-
- nsIDOMNode domNode =
simpleTextTemplate.getVisualNodeBySourcePosition(simpleTextMapping,
TestUtil.getLinePositionOffcet(itextViewer, 14, 10), 0, domMapping).getFirstChild();
+ int positionOffset = TestUtil.getLinePositionOffcet(itextViewer, 14, 10);
+ nsIDOMNode domNode =
simpleTextTemplate.getVisualNodeBySourcePosition(simpleTextMapping, new
Point(positionOffset, -positionOffset), domMapping).getFirstChild();
assertEquals(simpleTextNode
,domMapping.getNearElementMappingAtVisualNode(domNode).getSourceNode());
assertEquals("Node should be a text node",
nsIDOMNode.TEXT_NODE,domNode.getNodeType()); //$NON-NLS-1$
@@ -107,7 +108,8 @@
VpeTemplate simpleTextTemplate = simpleTextMapping.getTemplate();
- nsIDOMNode domNode =
simpleTextTemplate.getVisualNodeBySourcePosition(simpleTextMapping,
TestUtil.getLinePositionOffcet(itextViewer, 15, 27), 0, domMapping).getFirstChild();
+ int positionOffset = TestUtil.getLinePositionOffcet(itextViewer, 15, 27);
+ nsIDOMNode domNode =
simpleTextTemplate.getVisualNodeBySourcePosition(simpleTextMapping, new
Point(positionOffset, -positionOffset), domMapping).getFirstChild();
assertEquals("Node should be a text node",
nsIDOMNode.TEXT_NODE,domNode.getNodeType()); //$NON-NLS-1$
assertEquals(simpleTextNode
,domMapping.getNearElementMappingAtVisualNode(domNode).getSourceNode());
Modified:
trunk/vpe/plugins/org.jboss.tools.vpe/src/org/jboss/tools/vpe/editor/template/SelectionManager.java
===================================================================
---
trunk/vpe/plugins/org.jboss.tools.vpe/src/org/jboss/tools/vpe/editor/template/SelectionManager.java 2011-02-18
08:23:53 UTC (rev 29234)
+++
trunk/vpe/plugins/org.jboss.tools.vpe/src/org/jboss/tools/vpe/editor/template/SelectionManager.java 2011-02-18
10:32:25 UTC (rev 29235)
@@ -90,8 +90,7 @@
SelectionUtil.setSourceSelection(getPageContext(),
selectionData.getSourceNode(),
selectionOffset, selectionLength);
- getPageContext().getVisualBuilder().setSelectionRectangle(
- selectionData.getVisualNode());
+ refreshVisualNodeSelection();
}
private SelectionData getSelectionData(nsIDOMNode visualNode) {
@@ -136,76 +135,88 @@
}
/**
- * Syncronization visual selection and source selection, actually moves
- * source selection to visual selection
+ * Synchronize visual selection and source selection (move
+ * source selection to visual selection).
*/
final public void refreshVisualSelection() {
+ refreshVisualNodeSelection();
+ refreshVisualTextSelection();
+ }
+
+ /**
+ * Draws selection rectangle in the Visual Part according to source selection.
+ */
+ private void refreshVisualNodeSelection() {
// checks for null, for case when we close editor and background
// update job is running
if (getSourceEditor().getTextViewer() == null) {
-
return;
}
-
- Point range = SelectionUtil
- .getSourceSelectionRange(getSourceEditor());
-
- if (range == null)
+
+ Point range = SelectionUtil.getSourceSelectionRange(getSourceEditor());
+ if (range == null) {
return;
-
- int focusOffcetInSourceDocument = range.x;
-
- int anchorOffcetInSourceDocument = focusOffcetInSourceDocument
- + range.y;
+ }
+
VpeNodeMapping nodeMapping = SelectionUtil
- .getNodeMappingBySourceSelection(getSourceEditor(),
- getDomMapping());
-
+ .getNodeMappingBySourceSelection(getSourceEditor(), getDomMapping());
if (nodeMapping == null) {
return;
}
-
+
// visual node which will be selected
- nsIDOMNode targetVisualNode;
-
- // int visualNodeOffcet =
- // TextUtil.visualPosition(((Node)targetSourceNode
- // ).getNodeValue(),offcetReferenceToSourceNode);
-
- // if mapping is elementMapping
+ nsIDOMNode targetVisualNode;
+ if (nodeMapping instanceof VpeElementMapping) {
+ VpeElementMapping elementMapping = (VpeElementMapping) nodeMapping;
+ targetVisualNode = elementMapping.getTemplate()
+ .getVisualNodeBySourcePosition(elementMapping,
+ range, getDomMapping());
+ } else {
+ targetVisualNode = nodeMapping.getVisualNode();
+ }
+ getPageContext().getVisualBuilder().setSelectionRectangle(
+ targetVisualNode);
+ }
+
+ /**
+ * Selects text in the Visual Part Visual Part according to source selection.
+ */
+ private void refreshVisualTextSelection() {
+ // checks for null, for case when we close editor and background
+ // update job is running
+ if (getSourceEditor().getTextViewer() == null) {
+ return;
+ }
+ Point range = SelectionUtil.getSourceSelectionRange(getSourceEditor());
+ if (range == null) {
+ return;
+ }
+
+ VpeNodeMapping nodeMapping = SelectionUtil
+ .getNodeMappingBySourceSelection(getSourceEditor(), getDomMapping());
+ if (nodeMapping == null) {
+ return;
+ }
+
SelectionUtil.clearSelection(selectionController);
+ // visual node which will be selected
+
if (nodeMapping instanceof VpeElementMapping) {
-
VpeElementMapping elementMapping = (VpeElementMapping) nodeMapping;
-
- VpeTemplate template = elementMapping.getTemplate();
-
- targetVisualNode = template.getVisualNodeBySourcePosition(
- elementMapping, focusOffcetInSourceDocument,
- anchorOffcetInSourceDocument, getDomMapping());
-
- NodeData nodeData = template.getNodeData(targetVisualNode,
+ nsIDOMNode targetVisualNode = elementMapping.getTemplate()
+ .getVisualNodeBySourcePosition(
+ elementMapping, range, getDomMapping());
+ NodeData nodeData = elementMapping.getTemplate().getNodeData(targetVisualNode,
elementMapping.getElementData(), getDomMapping());
// we can restore cursor position only if we have nodeData and
// range.y==0
if (nodeData != null) {
// restore cursor position in source document
- restoreVisualCursorPosition(template, nodeData,
- focusOffcetInSourceDocument,
- anchorOffcetInSourceDocument);
+ restoreVisualCursorPosition(elementMapping.getTemplate(), nodeData, range);
}
- } else {
-
- targetVisualNode = nodeMapping.getVisualNode();
- // restore cursor position for source node
-// restoreVisualCursorPositionForTextNode(targetVisualNode,
-// focusOffcetInSourceDocument, model);
}
- // here we restore only highlight
- getPageContext().getVisualBuilder().setSelectionRectangle(
- targetVisualNode);
}
/**
@@ -219,8 +230,7 @@
* and visual node, attribute
*/
private void restoreVisualCursorPosition(VpeTemplate template,
- NodeData nodeData, int focusOffcetInSourceDocument,
- int anchorOffsetrInSourceDocument) {
+ NodeData nodeData, Point selectionRange) {
nsIDOMNode visualNode = nodeData.getVisualNode();
@@ -230,10 +240,10 @@
Node targetSourceNode = nodeData.getSourceNode();
- int focusOffcetReferenceToSourceNode = focusOffcetInSourceDocument
+ int focusOffcetReferenceToSourceNode = selectionRange.x
- NodesManagingUtil.getStartOffsetNode(targetSourceNode);
- int anchorOffcetReferenceToSourceNode = anchorOffsetrInSourceDocument
+ int anchorOffcetReferenceToSourceNode = selectionRange.x + selectionRange.y
- NodesManagingUtil.getStartOffsetNode(targetSourceNode);
int length = visualNode.getNodeValue().length();
Modified:
trunk/vpe/plugins/org.jboss.tools.vpe/src/org/jboss/tools/vpe/editor/template/VpeAbstractTemplate.java
===================================================================
---
trunk/vpe/plugins/org.jboss.tools.vpe/src/org/jboss/tools/vpe/editor/template/VpeAbstractTemplate.java 2011-02-18
08:23:53 UTC (rev 29234)
+++
trunk/vpe/plugins/org.jboss.tools.vpe/src/org/jboss/tools/vpe/editor/template/VpeAbstractTemplate.java 2011-02-18
10:32:25 UTC (rev 29235)
@@ -1338,15 +1338,16 @@
* Gets the visual node by by source position.
*
* @param domMapping the dom mapping
- * @param focusPosition the focus position
- * @param anchorPosition the anchor position
+ * @param selectionRange the selection range
* @param elementMapping the element mapping
*
* @return the visual node by by source position
*/
+ @Override
public nsIDOMNode getVisualNodeBySourcePosition(
- VpeElementMapping elementMapping, int focusPosition,
- int anchorPosition, VpeDomMapping domMapping) {
+ VpeElementMapping elementMapping, Point selectionRange, VpeDomMapping domMapping) {
+ int focusPosition = selectionRange.x;
+ int anchorPosition = selectionRange.x + selectionRange.y;
// find focus attribute by position
nsIDOMNode focusNode = findNodeByPosition(elementMapping
Modified:
trunk/vpe/plugins/org.jboss.tools.vpe/src/org/jboss/tools/vpe/editor/template/VpeTemplate.java
===================================================================
---
trunk/vpe/plugins/org.jboss.tools.vpe/src/org/jboss/tools/vpe/editor/template/VpeTemplate.java 2011-02-18
08:23:53 UTC (rev 29234)
+++
trunk/vpe/plugins/org.jboss.tools.vpe/src/org/jboss/tools/vpe/editor/template/VpeTemplate.java 2011-02-18
10:32:25 UTC (rev 29235)
@@ -11,6 +11,7 @@
package org.jboss.tools.vpe.editor.template;
import org.eclipse.jface.text.IRegion;
+import org.eclipse.swt.graphics.Point;
import org.jboss.tools.jst.jsp.editor.ITextFormatter;
import org.jboss.tools.jst.jsp.selection.SourceSelection;
import org.jboss.tools.vpe.editor.VpeSourceInnerDragInfo;
@@ -446,14 +447,13 @@
/**
*
* @param elementMapping
- * @param focusPosition
- * @param anchorPosition
+ * @param selectionRange
* @param domMapping
* @return
*/
public nsIDOMNode getVisualNodeBySourcePosition(
- VpeElementMapping elementMapping, int focusPosition,
- int anchorPosition, VpeDomMapping domMapping);
+ VpeElementMapping elementMapping,
+ Point selectionRange, VpeDomMapping domMapping);
public boolean isInvisible();