/*******************************************************************************
* 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;
/*
* Accessibility example snippet: tell a screen reader about updates
* to a non-focused descriptive area
*
* For a list of all SWT example snippets see
* http://www.eclipse.org/swt/snippets/
*
* @since 3.6
*/
import org.eclipse.swt.*;
import org.eclipse.swt.accessibility.*;
import org.eclipse.swt.events.*;
import org.eclipse.swt.layout.*;
import org.eclipse.swt.widgets.*;
public class Snippet340 {
public static void main(String[] args) {
Display display = new Display();
Shell shell = new Shell(display);
shell.setLayout(new GridLayout());
shell.setText("Description Relation Example");
// (works with either a Label or a READ_ONLY Text)
final Label liveLabel = new Label(shell, SWT.BORDER | SWT.READ_ONLY);
// final Text liveLabel = new Text(shell, SWT.BORDER | SWT.READ_ONLY);
liveLabel.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
liveLabel.setText("Live region messages go here");
new Label(shell, SWT.NONE).setText("Type an integer from 1 to 4:");
final Text textField = new Text(shell, SWT.SINGLE | SWT.BORDER);
textField.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
textField.addModifyListener(new ModifyListener() {
@Override
public void modifyText(ModifyEvent e) {
String textValue = textField.getText();
String message = textValue + " is not valid input.";
try {
int value = Integer.parseInt(textValue);
switch (value) {
case 1: message = "One for the money,"; break;
case 2: message = "Two for the show,"; break;
case 3: message = "Three to get ready,"; break;
case 4: message = "And four to go!"; break;
}
} catch (NumberFormatException ex) {}
liveLabel.setText(message);
textField.getAccessible().sendEvent(ACC.EVENT_DESCRIPTION_CHANGED, null);
textField.setSelection(0, textField.getCharCount());
}
});
textField.getAccessible().addRelation(ACC.RELATION_DESCRIBED_BY, liveLabel.getAccessible());
liveLabel.getAccessible().addRelation(ACC.RELATION_DESCRIPTION_FOR, textField.getAccessible());
textField.getAccessible().addAccessibleListener(new AccessibleAdapter() {
@Override
public void getDescription(AccessibleEvent event) {
event.result = liveLabel.getText();
}
});
shell.pack();
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) display.sleep();
}
display.dispose();
}
}