Example usage for org.eclipse.swt.custom StyledText computeTrim

List of usage examples for org.eclipse.swt.custom StyledText computeTrim

Introduction

In this page you can find the example usage for org.eclipse.swt.custom StyledText computeTrim.

Prototype

public Rectangle computeTrim(int x, int y, int width, int height) 

Source Link

Document

Given a desired client area for the receiver (as described by the arguments), returns the bounding rectangle which would be required to produce that client area.

Usage

From source file:org.eclipse.swt.snippets.Snippet343.java

public static void main(String[] args) {
    final Display display = new Display();
    Shell shell = new Shell(display);
    shell.setText("Snippet 343");
    shell.setLayout(new FillLayout());
    shell.setSize(400, 400);//from   w  ww  . j  av  a 2s .c o m
    SashForm sashForm = new SashForm(shell, SWT.HORIZONTAL);
    Composite leftComposite = new Composite(sashForm, SWT.NONE);
    leftComposite.setLayout(new FillLayout());
    Composite rightComposite = new Composite(sashForm, SWT.NONE);
    rightComposite.setLayout(new FillLayout());
    ExpandBar expandBar = new ExpandBar(leftComposite, SWT.NONE);
    final ExpandItem expandItem1 = new ExpandItem(expandBar, SWT.NONE);
    expandItem1.setText("item 1");
    new ExpandItem(expandBar, SWT.NONE).setText("item 2"); /* expandItem2 */

    final StyledText text = new StyledText(expandBar, SWT.MULTI | SWT.WRAP);
    expandItem1.setControl(text);
    text.setText("initial text that will wrap if it's long enough");

    /* update the item's height if needed in response to changes in the text's size */
    final int TRIAL_WIDTH = 100;
    final int trimWidth = text.computeTrim(0, 0, TRIAL_WIDTH, 100).width - TRIAL_WIDTH;
    text.addListener(SWT.Modify, event -> {
        Point size = text.computeSize(text.getSize().x - trimWidth, SWT.DEFAULT);
        if (expandItem1.getHeight() != size.y) {
            expandItem1.setHeight(size.y);
        }
    });
    expandBar.addListener(SWT.Resize, event -> display.asyncExec(() -> {
        /*
         * The following is done asynchronously to allow the Text's width
         * to be changed before re-calculating its preferred height.
         */
        if (text.isDisposed())
            return;
        Point size = text.computeSize(text.getSize().x - trimWidth, SWT.DEFAULT);
        if (expandItem1.getHeight() != size.y) {
            expandItem1.setHeight(size.y);
        }
    }));

    shell.open();
    /* set the item's initial height */
    Point size = text.computeSize(expandBar.getClientArea().width, SWT.DEFAULT);
    expandItem1.setHeight(size.y);
    expandItem1.setExpanded(true);

    while (!shell.isDisposed()) {
        if (!display.readAndDispatch())
            display.sleep();
    }
    display.dispose();
}