/*******************************************************************************
* Copyright (c) 2008, 2017 Phil Muldoon 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:
* Phil Muldoon <pkmuldoon@picobot.org> - initial API.
* Red Hat - modifications for use with Valgrind plugins.
*******************************************************************************/
package org.eclipse.linuxtools.internal.valgrind.ui.editor;
import java.util.HashMap;
import org.eclipse.jface.text.Position;
import org.eclipse.jface.text.source.Annotation;
import org.eclipse.jface.text.source.ISourceViewer;
import org.eclipse.jface.text.source.IVerticalRuler;
import org.eclipse.jface.text.source.projection.ProjectionAnnotation;
import org.eclipse.jface.text.source.projection.ProjectionAnnotationModel;
import org.eclipse.jface.text.source.projection.ProjectionSupport;
import org.eclipse.jface.text.source.projection.ProjectionViewer;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.editors.text.TextEditor;
public class SuppressionsEditor extends TextEditor {
private ProjectionAnnotationModel annotationModel;
private Annotation[] oldAnnotations;
public SuppressionsEditor() {
setSourceViewerConfiguration(new SuppressionsConfiguration(this));
setDocumentProvider(new SuppressionsDocumentProvider());
oldAnnotations = null;
}
@Override
public void createPartControl(Composite parent) {
super.createPartControl(parent);
ProjectionViewer viewer =(ProjectionViewer)getSourceViewer();
ProjectionSupport projectionSupport = new ProjectionSupport(viewer, getAnnotationAccess(), getSharedColors());
projectionSupport.install();
viewer.doOperation(ProjectionViewer.TOGGLE);
annotationModel = viewer.getProjectionAnnotationModel();
}
@Override
protected ISourceViewer createSourceViewer(Composite parent,
IVerticalRuler ruler, int styles) {
ISourceViewer viewer = new ProjectionViewer(parent, ruler,
getOverviewRuler(), isOverviewRulerVisible(), styles);
getSourceViewerDecorationSupport(viewer);
return viewer;
}
public void updateFoldingStructure(Position[] updatedPositions) {
Annotation[] updatedAnnotations = new Annotation[updatedPositions.length];
HashMap<ProjectionAnnotation, Position> newAnnotations = new HashMap<>();
for (int i = 0; i < updatedPositions.length; i++) {
ProjectionAnnotation annotation = new ProjectionAnnotation();
newAnnotations.put(annotation, updatedPositions[i]);
updatedAnnotations[i] = annotation;
}
annotationModel.modifyAnnotations(oldAnnotations, newAnnotations, null);
oldAnnotations = updatedAnnotations;
}
}