/** * Copyright (c) 2014 by Brainwy Software LTDA. All Rights Reserved. * Licensed under the terms of the Eclipse Public License (EPL). * Please see the license.txt included with this distribution for details. * Any modifications to this file must keep this entire header intact. */ package org.python.pydev.shared_ui.editor; 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.custom.StyledText; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Layout; import org.eclipse.swt.widgets.ScrollBar; import org.python.pydev.overview_ruler.MinimapOverviewRulerPreferencesPage; import org.python.pydev.overview_ruler.StyledTextWithoutVerticalBar; import org.python.pydev.shared_core.log.Log; public abstract class BaseSourceViewer extends ProjectionViewer implements ITextViewerExtensionAutoEditions { private boolean autoEditionsEnabled = true; private VerticalIndentGuidesPainter verticalLinesPainter; public BaseSourceViewer(Composite parent, IVerticalRuler verticalRuler, IOverviewRuler overviewRuler, boolean showAnnotationsOverview, int styles, IVerticalIndentGuidePreferencesProvider verticalIndentPrefs) { super(parent, verticalRuler, overviewRuler, showAnnotationsOverview, styles); verticalLinesPainter = new VerticalIndentGuidesPainter( getIndentGuide(verticalIndentPrefs)); StyledText styledText = this.getTextWidget(); verticalLinesPainter.setStyledText(styledText); styledText.addPaintListener(verticalLinesPainter); styledText.setLeftMargin(Math.max(styledText.getLeftMargin(), 2)); } @Override public boolean getAutoEditionsEnabled() { return autoEditionsEnabled; } @Override public void setAutoEditionsEnabled(boolean b) { this.autoEditionsEnabled = b; } @Override protected void handleDispose() { try { super.handleDispose(); } finally { this.verticalLinesPainter.dispose(); } } @Override protected Layout createLayout() { //Workaround for https://bugs.eclipse.org/bugs/show_bug.cgi?id=438641 return new RulerLayout(GAP_SIZE_1) { @Override protected void layout(Composite composite, boolean flushCache) { StyledText textWidget = getTextWidget(); if (textWidget == null) { Log.log("Error: textWidget is already null. SourceViewer: " + BaseSourceViewer.this + " control: " + BaseSourceViewer.this.getControl()); return; } super.layout(composite, flushCache); } }; } protected IVerticalLinesIndentGuideComputer getIndentGuide( IVerticalIndentGuidePreferencesProvider verticalIndentPrefs) { return new TextVerticalLinesIndentGuide(verticalIndentPrefs); } @Override protected StyledText createTextWidget(Composite parent, int styles) { StyledTextWithoutVerticalBar styledText = new StyledTextWithoutVerticalBar(parent, styles); if (!MinimapOverviewRulerPreferencesPage.getShowVerticalScrollbar()) { ScrollBar verticalBar = styledText.getVerticalBar(); if (verticalBar != null) { verticalBar.setVisible(false); } } if (!MinimapOverviewRulerPreferencesPage.getShowHorizontalScrollbar()) { ScrollBar horizontalBar = styledText.getHorizontalBar(); if (horizontalBar != null) { horizontalBar.setVisible(false); } } return styledText; } }