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

📄 swtscrollableviewdecorator.java

📁 Java开发图文混排的编辑器
💻 JAVA
字号:
/*
 * Created on 2004-8-1
 * Author: Xuefeng, Copyright (C) 2004, Xuefeng.
 */
package jexi.ui.swt;

import jexi.core.Document;

import org.eclipse.swt.SWT;
import org.eclipse.swt.events.*;
import org.eclipse.swt.widgets.*;

/**
 * ScrollableView implementation. 
 * 
 * @author Xuefeng
 */
public final class SWTScrollableViewDecorator extends jexi.ui.ScrollableViewDecorator {

    private final int PAGE_STEP = 48;
    private final int CLICK_STEP = 32;

    private final Slider sliderH;
    private final Slider sliderV;

    public SWTScrollableViewDecorator(jexi.ui.View view, Slider sliderH, Slider sliderV) {
        super(view);
        this.sliderH = sliderH;
        this.sliderV = sliderV;
        //setOffsetX(0);
        //setOffsetY(0);
        this.sliderH.setIncrement(CLICK_STEP);
        this.sliderV.setIncrement(CLICK_STEP);
        this.sliderH.addSelectionListener(new SelectionAdapter() {
            public void widgetSelected(SelectionEvent e) {
                onHScrollChanged();
                update();
            }
        });
        this.sliderV.addListener (SWT.Selection, new Listener () {
            public void handleEvent (Event e) {
                onVScrollChanged();
                update();
            }
        });
    }

    private void onVScrollChanged() {
        System.out.println(sliderV.getSelection());
        setOffsetY(-sliderV.getSelection());
        this.component.getDocument().updateCaret();
    }

    private void onHScrollChanged() {
        setOffsetX(-sliderH.getSelection());
        this.component.getDocument().updateCaret();
    }

    /* (non-Javadoc)
     * @see jexi.ui.View#update()
     */
    public void update() {
        this.component.update();
    }

    /* (non-Javadoc)
     * @see jexi.ui.View#setDocument(jexi.core.Document)
     */
    public void setDocument(Document document) {
        this.component.setDocument(document);
        onDocumentSizeChanged();
    }

    /* (non-Javadoc)
     * @see jexi.ui.View#onSizeChanged(int, int)
     */
    public void onSizeChanged(int width, int height) {
        // NOTE: The size is the control textView (Canvas):
        this.component.onSizeChanged(width, height);
        resetScroll();
    }

    /* (non-Javadoc)
     * @see jexi.ui.View#ensureCaretVisible()
     */
    public void ensureCaretVisible() {
        this.component.ensureCaretVisible();
    }

    /* (non-Javadoc)
     * @see jexi.ui.View#onDocumentSizeChanged()
     */
    public void onDocumentSizeChanged() {
        System.out.println("Document size changed!!!!!!!!!!!!!!!!!");
        this.component.onDocumentSizeChanged();
        resetScroll();
    }

    private void resetScroll() {
        Document doc = this.component.getDocument();
        if(doc!=null) {
            sliderV.setMinimum(0);
            int max = doc.height() - getHeight();
            if(max<=0) {
                sliderV.setEnabled(false);
            }
            else {
                sliderV.setEnabled(true);
                //max = max > 0 ? max : 0;
                System.out.println("vscroll max=" + max);
                sliderV.setMaximum(max + sliderV.getThumb());
                sliderV.setPageIncrement( getHeight() - PAGE_STEP > 0 ? getHeight() - PAGE_STEP : 0 );
            }

            sliderH.setMinimum(0);
            max = doc.width() - getWidth();
            if(max<=0) {
                sliderH.setEnabled(false);
            }
            else {
                sliderH.setEnabled(true);
                System.out.println("hscroll max=" + max);
                sliderH.setMaximum(max + sliderH.getThumb());
                sliderH.setPageIncrement( getWidth() - PAGE_STEP > 0 ? getWidth() - PAGE_STEP : 0 );
            }
        }
    }

    /* (non-Javadoc)
     * @see jexi.ui.View#setOffsetX(int)
     */
    public void setOffsetX(int x) {
        this.component.setOffsetX(x);
    }

    /* (non-Javadoc)
     * @see jexi.ui.View#setOffsetY(int)
     */
    public void setOffsetY(int y) {
        this.component.setOffsetY(y);
    }
}

⌨️ 快捷键说明

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