/*******************************************************************************
* Copyright (c) 2000, 2010 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
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 org.eclipse.swt.SWT;
import org.eclipse.swt.events.*;
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.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, new Listener() {
@Override
public void handleEvent(Event 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, new Listener() {
@Override
public void handleEvent(Event 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(new FocusListener() {
@Override
public void focusLost(FocusEvent e) {
canvas.redraw();
}
@Override
public void focusGained(FocusEvent 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, new Listener() {
@Override
public void handleEvent(Event event) {
System.out.println("Default button selected");
}
});
childShell.setDefaultButton(button);
Listener printTraverseListener = new Listener() {
@Override
public void handleEvent(Event event) {
StringBuffer buffer = new StringBuffer("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();
}
}