/******************************************************************************* * Copyright (c) 2014, 2015 Cisco Systems, Inc. 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 * *******************************************************************************/ package com.cisco.yangide.editor.editors; import java.util.ArrayList; import org.eclipse.jface.text.ITextPresentationListener; import org.eclipse.jface.text.reconciler.IReconciler; import org.eclipse.jface.text.source.IOverviewRuler; import org.eclipse.jface.text.source.IVerticalRuler; import org.eclipse.jface.text.source.projection.ProjectionViewer; import org.eclipse.swt.widgets.Composite; /** * @author Konstantin Zaitsev * @date Jul 24, 2014 */ public class YangSourceViewer extends ProjectionViewer { private boolean notifyTextListeners = true; public YangSourceViewer(Composite parent, IVerticalRuler verticalRuler, IOverviewRuler overviewRuler, boolean showAnnotationsOverview, int styles) { super(parent, verticalRuler, overviewRuler, showAnnotationsOverview, styles); } /** * Prepends the text presentation listener at the beginning of the viewer's list of text * presentation listeners. If the listener is already registered with the viewer this call moves * the listener to the beginning of the list. * * @param listener the text presentation listener */ @SuppressWarnings("unchecked") public void prependTextPresentationListener(ITextPresentationListener listener) { if (fTextPresentationListeners == null) { fTextPresentationListeners = new ArrayList<ITextPresentationListener>(); } fTextPresentationListeners.remove(listener); fTextPresentationListeners.add(0, listener); } /** * @return the reconciler */ public IReconciler getReconciler() { return fReconciler; } public void updateDocument() { resetVisibleRegion(); } public void enableTextListeners() { this.notifyTextListeners = true; } public void disableTextListeners() { this.notifyTextListeners = false; } @Override protected void updateTextListeners(WidgetCommand cmd) { if (notifyTextListeners) { super.updateTextListeners(cmd); } } @Override public int modelLine2WidgetLine(int modelLine) { try { return super.modelLine2WidgetLine(modelLine); } catch (IllegalStateException e) { return modelLine; } } }