Skip to main content

This CGIT instance is deprecated, and repositories have been moved to Gitlab or Github. See the repository descriptions for specific locations.

summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'bundles/org.eclipse.wst.xml.ui/src/org/eclipse/wst/xml/ui/internal/doubleclick/XMLDoubleClickStrategy.java')
-rw-r--r--bundles/org.eclipse.wst.xml.ui/src/org/eclipse/wst/xml/ui/internal/doubleclick/XMLDoubleClickStrategy.java285
1 files changed, 0 insertions, 285 deletions
diff --git a/bundles/org.eclipse.wst.xml.ui/src/org/eclipse/wst/xml/ui/internal/doubleclick/XMLDoubleClickStrategy.java b/bundles/org.eclipse.wst.xml.ui/src/org/eclipse/wst/xml/ui/internal/doubleclick/XMLDoubleClickStrategy.java
deleted file mode 100644
index 24f756001d..0000000000
--- a/bundles/org.eclipse.wst.xml.ui/src/org/eclipse/wst/xml/ui/internal/doubleclick/XMLDoubleClickStrategy.java
+++ /dev/null
@@ -1,285 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * IBM Corporation - initial API and implementation
- * Jens Lukowski/Innoopract - initial renaming/restructuring
- *
- *******************************************************************************/
-package org.eclipse.wst.xml.ui.internal.doubleclick;
-
-import org.eclipse.jface.text.DefaultTextDoubleClickStrategy;
-import org.eclipse.jface.text.ITextViewer;
-import org.eclipse.swt.graphics.Point;
-import org.eclipse.wst.sse.core.StructuredModelManager;
-import org.eclipse.wst.sse.core.internal.provisional.IStructuredModel;
-import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocumentRegion;
-import org.eclipse.wst.sse.core.internal.provisional.text.ITextRegion;
-import org.eclipse.wst.sse.ui.internal.StructuredTextViewer;
-import org.eclipse.wst.xml.core.internal.regions.DOMRegionContext;
-import org.w3c.dom.Node;
-
-
-public class XMLDoubleClickStrategy extends DefaultTextDoubleClickStrategy {
- protected static final char DOUBLE_QUOTE = '\"';
- protected static final char SINGLE_QUOTE = '\'';
- protected static final char SPACE = ' ';
- protected int fCaretPosition = -1;
- protected int fDoubleClickCount = 0;
- protected Node fNode = null;
- protected IStructuredDocumentRegion fStructuredDocumentRegion = null;
- protected String fStructuredDocumentRegionText = ""; //$NON-NLS-1$
- protected IStructuredModel fStructuredModel = null;
- protected StructuredTextViewer fStructuredTextViewer;
- protected ITextRegion fTextRegion = null;
-
- public void doubleClicked(ITextViewer textViewer) {
- if (textViewer instanceof StructuredTextViewer) {
- fStructuredTextViewer = (StructuredTextViewer) textViewer;
- try {
- fStructuredModel = StructuredModelManager.getModelManager().getExistingModelForRead(fStructuredTextViewer.getDocument());
-
- if (fStructuredModel != null) {
- int caretPosition = textViewer.getSelectedRange().x;
- if (caretPosition < 0)
- return;
-
- fNode = (Node) fStructuredModel.getIndexedRegion(caretPosition);
- if (fNode == null)
- return;
-
- updateDoubleClickCount(caretPosition);
- updateStructuredDocumentRegion();
- updateTextRegion();
-
- if (fNode.getNodeType() == Node.TEXT_NODE)
- processTextDoubleClicked();
- else
- processElementDoubleClicked();
- }
- } finally {
- if (fStructuredModel != null)
- fStructuredModel.releaseFromRead();
- }
- }
- }
-
- protected Point getWord(String string, int cursor) {
- if (string == null)
- return null;
-
- int wordStart = 0;
- int wordEnd = string.length();
-
- wordStart = string.lastIndexOf(SPACE, cursor - 1);
- int temp = string.lastIndexOf(SINGLE_QUOTE, cursor - 1);
- wordStart = Math.max(wordStart, temp);
- temp = string.lastIndexOf(DOUBLE_QUOTE, cursor - 1);
- wordStart = Math.max(wordStart, temp);
- if (wordStart == -1)
- wordStart = cursor;
- else
- wordStart++;
-
- wordEnd = string.indexOf(SPACE, cursor);
- if (wordEnd == -1)
- wordEnd = string.length();
- temp = string.indexOf(SINGLE_QUOTE, cursor);
- if (temp == -1)
- temp = string.length();
- wordEnd = Math.min(wordEnd, temp);
- temp = string.indexOf(DOUBLE_QUOTE, cursor);
- if (temp == -1)
- temp = string.length();
- wordEnd = Math.min(wordEnd, temp);
- if (wordEnd == string.length())
- wordEnd = cursor;
-
- if ((wordStart == wordEnd) && !isQuoted(string)) {
- wordStart = 0;
- wordEnd = string.length();
- }
-
- return new Point(wordStart, wordEnd);
- }
-
- protected boolean isQuoted(String string) {
- if ((string == null) || (string.length() < 2))
- return false;
-
- int lastIndex = string.length() - 1;
- char firstChar = string.charAt(0);
- char lastChar = string.charAt(lastIndex);
-
- return (((firstChar == SINGLE_QUOTE) && (lastChar == SINGLE_QUOTE)) || ((firstChar == DOUBLE_QUOTE) && (lastChar == DOUBLE_QUOTE)));
- }
-
- protected void processElementAttrEqualsDoubleClicked2Times() {
- int prevRegionOffset = fStructuredDocumentRegion.getStartOffset(fTextRegion) - 1;
- ITextRegion prevRegion = fStructuredDocumentRegion.getRegionAtCharacterOffset(prevRegionOffset);
- int nextRegionOffset = fStructuredDocumentRegion.getEndOffset(fTextRegion);
- ITextRegion nextRegion = fStructuredDocumentRegion.getRegionAtCharacterOffset(nextRegionOffset);
-
- if ((prevRegion != null) && (prevRegion.getType() == DOMRegionContext.XML_TAG_ATTRIBUTE_NAME) && (nextRegion != null) && (nextRegion.getType() == DOMRegionContext.XML_TAG_ATTRIBUTE_VALUE)) {
- fStructuredTextViewer.setSelectedRange(fStructuredDocumentRegion.getStartOffset(prevRegion), nextRegion.getTextEnd() - prevRegion.getStart());
- }
- }
-
- protected void processElementAttrNameDoubleClicked2Times() {
- int nextRegionOffset = fStructuredDocumentRegion.getEndOffset(fTextRegion);
- ITextRegion nextRegion = fStructuredDocumentRegion.getRegionAtCharacterOffset(nextRegionOffset);
-
- if (nextRegion != null) {
- nextRegionOffset = fStructuredDocumentRegion.getEndOffset(nextRegion);
- nextRegion = fStructuredDocumentRegion.getRegionAtCharacterOffset(nextRegionOffset);
- if ((nextRegion != null) && (nextRegion.getType() == DOMRegionContext.XML_TAG_ATTRIBUTE_VALUE)) {
- fStructuredTextViewer.setSelectedRange(fStructuredDocumentRegion.getStartOffset(fTextRegion), nextRegion.getTextEnd() - fTextRegion.getStart());
- } else {
- // attribute has no value
- fStructuredTextViewer.setSelectedRange(fStructuredDocumentRegion.getStart(), fStructuredDocumentRegion.getLength());
- fDoubleClickCount = 0;
- }
- }
- }
-
- protected void processElementAttrValueDoubleClicked() {
- String regionText = fStructuredDocumentRegion.getText(fTextRegion);
-
- if (fDoubleClickCount == 1) {
- Point word = getWord(regionText, fCaretPosition - fStructuredDocumentRegion.getStartOffset(fTextRegion));
- if (word.x == word.y) { // no word found; select whole region
- fStructuredTextViewer.setSelectedRange(fStructuredDocumentRegion.getStartOffset(fTextRegion), regionText.length());
- fDoubleClickCount++;
- } else
- fStructuredTextViewer.setSelectedRange(fStructuredDocumentRegion.getStartOffset(fTextRegion) + word.x, word.y - word.x);
- } else if (fDoubleClickCount == 2) {
- if (isQuoted(regionText)) {
- // ==> // Point word = getWord(regionText, fCaretPosition -
- // fStructuredDocumentRegion.getStartOffset(fTextRegion));
- fStructuredTextViewer.setSelectedRange(fStructuredDocumentRegion.getStartOffset(fTextRegion), regionText.length());
- } else
- processElementAttrValueDoubleClicked2Times();
- } else if (fDoubleClickCount == 3) {
- if (isQuoted(regionText))
- processElementAttrValueDoubleClicked2Times();
- else {
- fStructuredTextViewer.setSelectedRange(fStructuredDocumentRegion.getStart(), fStructuredDocumentRegion.getLength());
- fDoubleClickCount = 0;
- }
- } else { // fDoubleClickCount == 4
- fStructuredTextViewer.setSelectedRange(fStructuredDocumentRegion.getStart(), fStructuredDocumentRegion.getLength());
- fDoubleClickCount = 0;
- }
- }
-
- protected void processElementAttrValueDoubleClicked2Times() {
- int prevRegionOffset = fStructuredDocumentRegion.getStartOffset(fTextRegion) - 1;
- ITextRegion prevRegion = fStructuredDocumentRegion.getRegionAtCharacterOffset(prevRegionOffset);
-
- if (prevRegion != null) {
- prevRegionOffset = fStructuredDocumentRegion.getStartOffset(prevRegion) - 1;
- prevRegion = fStructuredDocumentRegion.getRegionAtCharacterOffset(prevRegionOffset);
- if ((prevRegion != null) && (prevRegion.getType() == DOMRegionContext.XML_TAG_ATTRIBUTE_NAME)) {
- fStructuredTextViewer.setSelectedRange(fStructuredDocumentRegion.getStartOffset(prevRegion), fTextRegion.getTextEnd() - prevRegion.getStart());
- }
- }
- }
-
- protected void processElementDoubleClicked() {
- if (fTextRegion.getType() == DOMRegionContext.XML_TAG_ATTRIBUTE_VALUE)
- processElementAttrValueDoubleClicked(); // special handling for
- // XML_TAG_ATTRIBUTE_VALUE
- else {
- if (fDoubleClickCount == 1) {
- fStructuredTextViewer.setSelectedRange(fStructuredDocumentRegion.getStart() + fTextRegion.getStart(), fTextRegion.getTextLength());
- } else if (fDoubleClickCount == 2) {
- if (fTextRegion.getType() == DOMRegionContext.XML_TAG_ATTRIBUTE_NAME)
- processElementAttrNameDoubleClicked2Times();
- else if (fTextRegion.getType() == DOMRegionContext.XML_TAG_ATTRIBUTE_EQUALS)
- processElementAttrEqualsDoubleClicked2Times();
- else {
- fStructuredTextViewer.setSelectedRange(fStructuredDocumentRegion.getStart(), fStructuredDocumentRegion.getLength());
- fDoubleClickCount = 0;
- }
- } else { // fDoubleClickCount == 3
- fStructuredTextViewer.setSelectedRange(fStructuredDocumentRegion.getStart(), fStructuredDocumentRegion.getLength());
- fDoubleClickCount = 0;
- }
- }
- }
-
- protected void processTextDoubleClicked() {
- if (fDoubleClickCount == 1) {
- super.doubleClicked(fStructuredTextViewer);
-
- Point selectedRange = fStructuredTextViewer.getSelectedRange();
- if ((selectedRange.x == fStructuredDocumentRegion.getStartOffset(fTextRegion)) && (selectedRange.y == fTextRegion.getTextLength()))
- // only one word in region, skip one level of double click
- // selection
- fDoubleClickCount++;
- } else if (fDoubleClickCount == 2) {
- if (fTextRegion.getType() == DOMRegionContext.UNDEFINED) {
- fStructuredTextViewer.setSelectedRange(fStructuredDocumentRegion.getStart(), fStructuredDocumentRegion.getLength());
- fDoubleClickCount = 0;
- } else {
- if (isQuoted(fStructuredDocumentRegion.getFullText(fTextRegion)))
- fStructuredTextViewer.setSelectedRange(fStructuredDocumentRegion.getStartOffset(fTextRegion) + 1, fTextRegion.getTextLength() - 2);
- else
- fStructuredTextViewer.setSelectedRange(fStructuredDocumentRegion.getStartOffset(fTextRegion), fTextRegion.getTextLength());
- }
- } else {
- if ((fDoubleClickCount == 3) && isQuoted(fStructuredDocumentRegion.getFullText(fTextRegion)))
- fStructuredTextViewer.setSelectedRange(fStructuredDocumentRegion.getStartOffset(fTextRegion), fTextRegion.getTextLength());
- else {
- if ((fDoubleClickCount == 3) && isQuoted(fStructuredDocumentRegionText))
- fStructuredTextViewer.setSelectedRange(fStructuredDocumentRegion.getStart() + 1, fStructuredDocumentRegion.getLength() - 2);
- else {
- fStructuredTextViewer.setSelectedRange(fStructuredDocumentRegion.getStart(), fStructuredDocumentRegion.getLength());
- fDoubleClickCount = 0;
- }
- }
- }
- }
-
- public void setModel(IStructuredModel structuredModel) {
- fStructuredModel = structuredModel;
- }
-
- protected void updateDoubleClickCount(int caretPosition) {
- if (fCaretPosition == caretPosition) {
- if (fStructuredDocumentRegion != null)
- fDoubleClickCount++;
- else
- fDoubleClickCount = 1;
- } else {
- fCaretPosition = caretPosition;
- fDoubleClickCount = 1;
- }
- }
-
- protected void updateStructuredDocumentRegion() {
- fStructuredDocumentRegion = fStructuredModel.getStructuredDocument().getRegionAtCharacterOffset(fCaretPosition);
- if (fStructuredDocumentRegion != null)
- fStructuredDocumentRegionText = fStructuredDocumentRegion.getText();
- else
- fStructuredDocumentRegionText = ""; //$NON-NLS-1$
- }
-
- protected void updateTextRegion() {
- if (fStructuredDocumentRegion != null) {
- fTextRegion = fStructuredDocumentRegion.getRegionAtCharacterOffset(fCaretPosition);
- // if fTextRegion is null, it means we are at just past the last
- // fStructuredDocumentRegion,
- // at the very end of the document, so we'll use the last text
- // region in the document
- if (fTextRegion == null) {
- fTextRegion = fStructuredDocumentRegion.getRegionAtCharacterOffset(fCaretPosition - 1);
- }
- } else
- fTextRegion = null;
- }
-}

Back to the top