/******************************************************************************* * Copyright (c) 2012-2017 Codenvy, S.A. * 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: * Codenvy, S.A. - initial API and implementation *******************************************************************************/ package org.eclipse.che.ide.editor.orion.client; import org.eclipse.che.ide.editor.orion.client.jso.OrionAnnotationIteratorOverlay; import org.eclipse.che.ide.editor.orion.client.jso.OrionAnnotationOverlay; import org.eclipse.che.ide.editor.orion.client.jso.OrionAttributesOverlay; import org.eclipse.che.ide.editor.orion.client.jso.OrionEditorOverlay; import org.eclipse.che.ide.editor.orion.client.jso.OrionStyleOverlay; import org.eclipse.che.ide.api.editor.texteditor.LineStyler; /** * Implementation of {@link LineStyler} for orion. * * @author Anatoliy Bazko */ public class OrionLineStyler implements LineStyler { private static final String CHE_CUSTOM_LINE = "che-custom-line"; /** The editor object. */ private final OrionEditorOverlay editorOverlay; public OrionLineStyler(OrionEditorOverlay editorOverlay) { this.editorOverlay = editorOverlay; this.editorOverlay.getAnnotationStyler().addAnnotationType(CHE_CUSTOM_LINE, 50); } @Override public void addLineStyles(final int lineNumber, final String... styles) { for (final String classname : styles) { OrionAttributesOverlay attributesOverlay = OrionAttributesOverlay.create(); attributesOverlay.setAttribute("debugId", "debug-line"); OrionStyleOverlay style = OrionStyleOverlay.create(); style.setStyleClass(classname); style.setAttributes(attributesOverlay); int lineStart = editorOverlay.getModel().getLineStart(lineNumber); int lineEnd = editorOverlay.getModel().getLineEnd(lineNumber); OrionAnnotationOverlay annotation = OrionAnnotationOverlay.create(); annotation.setStart(lineStart); annotation.setEnd(lineEnd); annotation.setRangeStyle(style); annotation.setType(CHE_CUSTOM_LINE); editorOverlay.getAnnotationModel().addAnnotation(annotation); } } @Override public void removeLineStyles(final int lineNumber, final String... styles) { for (final String classname : styles) { int lineStart = editorOverlay.getModel().getLineStart(lineNumber); int lineEnd = editorOverlay.getModel().getLineEnd(lineNumber); OrionAnnotationIteratorOverlay iter = editorOverlay.getAnnotationModel().getAnnotations(lineStart, lineEnd); if (iter != null) { while (iter.hasNext()) { OrionAnnotationOverlay annotation = iter.next(); if (CHE_CUSTOM_LINE.equals(annotation.getType()) && annotation.getRangeStyle().getStyleClass().equals(classname)) { editorOverlay.getAnnotationModel().removeAnnotation(annotation); } } } } } @Override public void clearLineStyles(final int lineNumber) { int lineStart = editorOverlay.getModel().getLineStart(lineNumber); int lineEnd = editorOverlay.getModel().getLineEnd(lineNumber); OrionAnnotationIteratorOverlay iter = editorOverlay.getAnnotationModel().getAnnotations(lineStart, lineEnd); if (iter != null) { while (iter.hasNext()) { OrionAnnotationOverlay annotation = iter.next(); if (CHE_CUSTOM_LINE.equals(annotation.getType())) { editorOverlay.getAnnotationModel().removeAnnotation(annotation); } } } } }