⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pycompletionpresentationupdater.java

📁 Python Development Environment (Python IDE plugin for Eclipse). Features editor, code completion, re
💻 JAVA
字号:
/*
 * Created on Jul 13, 2006
 * @author Fabio
 */
package org.python.pydev.editor.codecompletion;

import org.eclipse.jface.text.IRegion;
import org.eclipse.jface.text.ITextViewer;
import org.eclipse.jface.text.ITextViewerExtension2;
import org.eclipse.jface.text.ITextViewerExtension5;
import org.eclipse.jface.text.Region;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.StyleRange;
import org.eclipse.swt.custom.StyledText;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.widgets.Display;
import org.python.pydev.editor.codefolding.PySourceViewer;

public class PyCompletionPresentationUpdater {

    private StyleRange fRememberedStyleRange;
    
    private static Color getForegroundColor(StyledText text) {
        return Display.getDefault().getSystemColor(SWT.COLOR_RED);
    }

    private static Color getBackgroundColor(StyledText text) {
        return Display.getDefault().getSystemColor(SWT.COLOR_YELLOW);
    }


    public PyCompletionPresentationUpdater() {
    }
    
    
    public void repairPresentation(ITextViewer viewer) {
        if (fRememberedStyleRange != null) {
             if (viewer instanceof ITextViewerExtension2) {
                // attempts to reduce the redraw area
                ITextViewerExtension2 viewer2= (ITextViewerExtension2) viewer;

                if (viewer instanceof ITextViewerExtension5) {

                    ITextViewerExtension5 extension= (ITextViewerExtension5) viewer;
                    IRegion modelRange= extension.widgetRange2ModelRange(new Region(fRememberedStyleRange.start, fRememberedStyleRange.length));
                    if (modelRange != null)
                        viewer2.invalidateTextPresentation(modelRange.getOffset(), modelRange.getLength());

                } else {
                    viewer2.invalidateTextPresentation(fRememberedStyleRange.start + viewer.getVisibleRegion().getOffset(), fRememberedStyleRange.length);
                }

            } else
                viewer.invalidateTextPresentation();
        }
        if(viewer instanceof PySourceViewer){
            PySourceViewer pySourceViewer = (PySourceViewer) viewer;
            pySourceViewer.setInToggleCompletionStyle(false);
        }
    }
    
    public void updateStyle(ITextViewer viewer, int initialOffset, int len) {

        StyledText text= viewer.getTextWidget();
        if (text == null || text.isDisposed())
            return;

        int widgetCaret= text.getCaretOffset();

        int modelCaret= 0;
        if (viewer instanceof ITextViewerExtension5) {
            ITextViewerExtension5 extension= (ITextViewerExtension5) viewer;
            modelCaret= extension.widgetOffset2ModelOffset(widgetCaret);
        } else {
            IRegion visibleRegion= viewer.getVisibleRegion();
            modelCaret= widgetCaret + visibleRegion.getOffset();
        }

        if (modelCaret >= initialOffset + len) {
            repairPresentation(viewer);
            return;
        }

        int offset= widgetCaret;
        int length= initialOffset + len - modelCaret;

        Color foreground= getForegroundColor(text);
        Color background= getBackgroundColor(text);

        StyleRange range= text.getStyleRangeAtOffset(offset);
        int fontStyle= range != null ? range.fontStyle : SWT.NORMAL;

        repairPresentation(viewer);
        fRememberedStyleRange= new StyleRange(offset, length, foreground, background, fontStyle);
        if (range != null) {
            fRememberedStyleRange.strikeout= range.strikeout;
            fRememberedStyleRange.underline= range.underline;
        }

        // http://dev.eclipse.org/bugs/show_bug.cgi?id=34754
        try {
            if(viewer instanceof PySourceViewer){
                PySourceViewer pySourceViewer = (PySourceViewer) viewer;
                pySourceViewer.setInToggleCompletionStyle(true);
            }
            text.setStyleRange(fRememberedStyleRange);
        } catch (IllegalArgumentException x) {
            // catching exception as offset + length might be outside of the text widget
            fRememberedStyleRange= null;
        }
    }

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -