org.eclipse.swt.snippets.Snippet338.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.swt.snippets.Snippet338.java

Source

/*******************************************************************************
 * Copyright (c) 2000, 2018 IBM Corporation and others.
 *
 * This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License 2.0
 * which accompanies this distribution, and is available at
 * https://www.eclipse.org/legal/epl-2.0/
 *
 * SPDX-License-Identifier: EPL-2.0
 *
 * Contributors:
 *     IBM Corporation - initial API and implementation
 *     Lars Vogel <Lars.Vogel@vogella.com> - Bug 508155
 *******************************************************************************/
package org.eclipse.swt.snippets;

/*
 * Control example snippet: perform custom traversals
 *
 * For a list of all SWT example snippets see
 * http://www.eclipse.org/swt/snippets/
 *
 * @since 3.6
 */

import static org.eclipse.swt.events.FocusListener.*;

import org.eclipse.swt.*;
import org.eclipse.swt.layout.*;
import org.eclipse.swt.widgets.*;

public class Snippet338 {

    public static void main(String[] args) {
        Display display = new Display();
        Shell parentShell = new Shell(display);
        parentShell.setText("Snippet 338");
        parentShell.setBounds(10, 10, 100, 100);
        parentShell.open();

        Shell childShell = new Shell(parentShell);
        childShell.setLayout(new GridLayout());
        TabFolder folder = new TabFolder(childShell, SWT.NONE);
        folder.setLayout(new FillLayout());
        TabItem tab1 = new TabItem(folder, SWT.NONE);
        tab1.setText("Tab &1");
        new TabItem(folder, SWT.NONE).setText("Tab &2");
        Composite composite = new Composite(folder, SWT.NONE);
        composite.setLayout(new GridLayout());
        tab1.setControl(composite);
        Text text1 = new Text(composite, SWT.SINGLE);

        /* canvas represents a custom control */
        final Canvas canvas = new Canvas(composite, SWT.BORDER);
        canvas.setLayoutData(new GridData(300, 200));
        canvas.addListener(SWT.Paint, event -> {
            if (canvas.isFocusControl()) {
                event.gc.drawText(
                        "focus is here, custom traverse keys:\n\tN: Tab next\n\tP: Tab previous\n\tR: Return\n\tE: Esc\n\tT: Tab Folder next page",
                        0, 0);
            } else {
                event.gc.drawString("focus is not in this control", 0, 0);
            }
        });
        canvas.addListener(SWT.KeyDown, event -> {
            int traversal = SWT.NONE;
            switch (event.keyCode) {
            case 'n':
                traversal = SWT.TRAVERSE_TAB_NEXT;
                break;
            case 'p':
                traversal = SWT.TRAVERSE_TAB_PREVIOUS;
                break;
            case 'r':
                traversal = SWT.TRAVERSE_RETURN;
                break;
            case 'e':
                traversal = SWT.TRAVERSE_ESCAPE;
                break;
            case 't':
                traversal = SWT.TRAVERSE_PAGE_NEXT;
                break;
            }
            if (traversal != SWT.NONE) {
                event.doit = true; /* this will be the Traverse event's initial doit value */
                canvas.traverse(traversal, event);
            }
        });
        canvas.addFocusListener(focusLostAdapter(e -> canvas.redraw()));
        canvas.addFocusListener(focusGainedAdapter(e -> canvas.redraw()));

        Text text2 = new Text(composite, SWT.SINGLE);
        Button button = new Button(childShell, SWT.PUSH);
        button.setText("Default &Button");
        button.addListener(SWT.Selection, event -> System.out.println("Default button selected"));
        childShell.setDefaultButton(button);

        Listener printTraverseListener = event -> {
            StringBuilder buffer = new StringBuilder("Traverse ");
            buffer.append(event.widget);
            buffer.append(" type=");
            switch (event.detail) {
            case SWT.TRAVERSE_ARROW_NEXT:
                buffer.append("TRAVERSE_ARROW_NEXT");
                break;
            case SWT.TRAVERSE_ARROW_PREVIOUS:
                buffer.append("TRAVERSE_ARROW_NEXT");
                break;
            case SWT.TRAVERSE_ESCAPE:
                buffer.append("TRAVERSE_ESCAPE");
                break;
            case SWT.TRAVERSE_MNEMONIC:
                buffer.append("TRAVERSE_MNEMONIC");
                break;
            case SWT.TRAVERSE_PAGE_NEXT:
                buffer.append("TRAVERSE_PAGE_NEXT");
                break;
            case SWT.TRAVERSE_PAGE_PREVIOUS:
                buffer.append("TRAVERSE_PAGE_PREVIOUS");
                break;
            case SWT.TRAVERSE_RETURN:
                buffer.append("TRAVERSE_RETURN");
                break;
            case SWT.TRAVERSE_TAB_NEXT:
                buffer.append("TRAVERSE_TAB_NEXT");
                break;
            case SWT.TRAVERSE_TAB_PREVIOUS:
                buffer.append("TRAVERSE_TAB_PREVIOUS");
                break;
            }
            buffer.append(" doit=" + event.doit);
            buffer.append(" keycode=" + event.keyCode);
            buffer.append(" char=" + event.character);
            buffer.append(" stateMask=" + event.stateMask);
            System.out.println(buffer.toString());
        };
        childShell.addListener(SWT.Traverse, printTraverseListener);
        folder.addListener(SWT.Traverse, printTraverseListener);
        composite.addListener(SWT.Traverse, printTraverseListener);
        canvas.addListener(SWT.Traverse, printTraverseListener);
        button.addListener(SWT.Traverse, printTraverseListener);
        text1.addListener(SWT.Traverse, printTraverseListener);
        text2.addListener(SWT.Traverse, printTraverseListener);

        childShell.pack();
        childShell.open();
        text1.setFocus();
        while (!parentShell.isDisposed()) {
            if (!display.readAndDispatch())
                display.sleep();
        }
        display.dispose();
    }

}