private boolean setSelection(ISelection selection, boolean reveal) { if (selection instanceof IStructuredSelection) { IStructuredSelection structuredSelection = (IStructuredSelection) selection; Object object = structuredSelection.getFirstElement(); if (object instanceof EObject) { EObject element = (EObject) object; Resource resource = element.eResource(); if (resource == null) { return false; } if (!(resource instanceof com.github.funthomas424242.rezeptsammler.rezept.resource.rezept.IRezeptTextResource)) { return false; } com.github.funthomas424242.rezeptsammler.rezept.resource.rezept.IRezeptTextResource textResource = (com.github.funthomas424242.rezeptsammler.rezept.resource.rezept .IRezeptTextResource) resource; com.github.funthomas424242.rezeptsammler.rezept.resource.rezept.IRezeptLocationMap locationMap = textResource.getLocationMap(); int destination = locationMap.getCharStart(element); if (destination < 0) { destination = 0; } selectAndReveal(destination, 0); int length = locationMap.getCharEnd(element) - destination + 1; getSourceViewer().setRangeIndication(destination, length, true); getSourceViewer().setSelectedRange(destination, length); return true; } } return false; }
/** * Sets the caret to the offset of the given element. * * @param element has to be contained in the resource of this editor. */ public void setCaret(EObject element, String text) { try { if (element == null || text == null || text.equals("")) { return; } ISourceViewer viewer = getSourceViewer(); com.github.funthomas424242.rezeptsammler.rezept.resource.rezept.IRezeptTextResource textResource = (com.github.funthomas424242.rezeptsammler.rezept.resource.rezept.IRezeptTextResource) element.eResource(); com.github.funthomas424242.rezeptsammler.rezept.resource.rezept.IRezeptLocationMap locationMap = textResource.getLocationMap(); int destination = locationMap.getCharStart(element); int length = locationMap.getCharEnd(element) + 1 - destination; com.github.funthomas424242.rezeptsammler.rezept.resource.rezept.IRezeptTextScanner lexer = getResource().getMetaInformation().createLexer(); try { lexer.setText(viewer.getDocument().get(destination, length)); com.github.funthomas424242.rezeptsammler.rezept.resource.rezept.IRezeptTextToken token = lexer.getNextToken(); String tokenText = token.getText(); while (tokenText != null) { if (token.getText().equals(text)) { destination += token.getOffset(); break; } token = lexer.getNextToken(); if (token == null) { break; } tokenText = token.getText(); } } catch (BadLocationException e) { } destination = ((ProjectionViewer) viewer).modelOffset2WidgetOffset(destination); if (destination < 0) { destination = 0; } viewer.getTextWidget().setSelection(destination); } catch (Exception e) { com.github.funthomas424242.rezeptsammler.rezept.resource.rezept.ui.RezeptUIPlugin.logError( "Exception in setCaret()", e); } }