Java tutorial
/******************************************************************************* * Copyright (c) 2002, 2014 Innoopract Informationssysteme GmbH 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: * Innoopract Informationssysteme GmbH - initial API and implementation * EclipseSource - ongoing development ******************************************************************************/ package org.eclipse.rap.demo.controls; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.viewers.ComboViewer; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.IStructuredContentProvider; import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.jface.viewers.SelectionChangedEvent; import org.eclipse.jface.viewers.Viewer; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.CCombo; import org.eclipse.swt.events.ModifyEvent; import org.eclipse.swt.events.ModifyListener; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.VerifyEvent; import org.eclipse.swt.events.VerifyListener; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Combo; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Menu; import org.eclipse.swt.widgets.MenuItem; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Text; public class ComboTab extends ExampleTab { private static final String PROP_SELECTION_LISTENER = "selectionListener"; private static final String PROP_MODIFY_LISTENER = "modifyListener"; private static final String[] ITEMS = new String[] { "Eiffel", "Java", "Python", "Ruby", "Simula", "Smalltalk" }; private Combo firstCombo; private Combo verifyCombo; private Combo viewerCombo; private CCombo cCombo; private Button createEmptyComboButton; private Button preselectFirstItemButton; private Button editableButton; private boolean empty; private boolean preselectItem; public ComboTab() { super("Combo"); } @Override protected void createStyleControls(Composite parent) { createStyleButton("BORDER", SWT.BORDER); createStyleButton("READ_ONLY", SWT.READ_ONLY); createStyleButton("FLAT", SWT.FLAT); createVisibilityButton(); createEnablementButton(); createFgColorButton(); createBgColorButton(); createFontChooser(); createCursorCombo(); createPropertyCheckbox("Add Selection Listener", PROP_SELECTION_LISTENER); createPropertyCheckbox("Add Modify Listener", PROP_MODIFY_LISTENER); Group grpManioulateCCombo = new Group(parent, SWT.NONE); grpManioulateCCombo.setText("Manipulate CCombo"); grpManioulateCCombo.setLayout(new GridLayout()); createSetTextLimitButton(grpManioulateCCombo, false); createChangeSizeButton(grpManioulateCCombo); createToggleListVisibilityButton(grpManioulateCCombo); createEditableButton(grpManioulateCCombo); createTextButton(grpManioulateCCombo); Group group = new Group(parent, SWT.NONE); group.setText("Manipulate First Combo"); group.setLayout(new GridLayout()); createAddButton(group); createSetVisibleItemCountButton(group); createRemoveAllButton(group); createDeselectAllButton(group); createRemoveFirstItemButton(group); createSelectFirstItemButton(group); createEmptyComboButton = new Button(group, SWT.CHECK); createEmptyComboButton.setText("Create Empty Combo"); createEmptyComboButton.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { if (createEmptyComboButton.getSelection()) { empty = true; } else { empty = false; } createNew(); } }); preselectFirstItemButton = new Button(group, SWT.CHECK); preselectFirstItemButton.setText("Preselect First Item"); preselectFirstItemButton.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { if (preselectFirstItemButton.getSelection()) { preselectItem = true; } else { preselectItem = false; } createNew(); } }); Label selectionTitle = new Label(group, SWT.NONE); selectionTitle.setText("Text selection:"); createSetSelectionControls(group); createGetSelectionControls(group); createSetTextLimitButton(group, true); } @Override protected void createExampleControls(final Composite parent) { parent.setLayout(new GridLayout(3, false)); int style = getStyle(); // Standard Combo Label lblFilledCombo = new Label(parent, SWT.NONE); lblFilledCombo.setText("Filled Combo"); firstCombo = new Combo(parent, style); if (!empty) { firstCombo.setItems(ITEMS); } if (!empty && preselectItem) { firstCombo.select(0); } if (hasCreateProperty(PROP_SELECTION_LISTENER)) { firstCombo.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent event) { show(event, false); } @Override public void widgetDefaultSelected(SelectionEvent event) { show(event, true); } private void show(SelectionEvent event, boolean defaultSelection) { String type = defaultSelection ? "DefaultSelection" : "Selection"; String msg = type + ": " + event + "\n" + "Text: " + firstCombo.getText() + "\n" + "Selection: " + firstCombo.getSelectionIndex(); log(msg); } }); } if (hasCreateProperty(PROP_MODIFY_LISTENER)) { firstCombo.addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent event) { log(event.toString()); } }); } Button btnShowSelection = new Button(parent, SWT.PUSH); btnShowSelection.setText("Show Selection"); btnShowSelection.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent event) { showSelection(firstCombo.getItems(), firstCombo.getSelectionIndex()); } }); // -- verify listener -- Label lblVerifyCombo = new Label(parent, SWT.NONE); lblVerifyCombo.setText("Combo with VerifyListener (only 0-9 allowed)"); verifyCombo = new Combo(parent, style); verifyCombo.setLayoutData(createGridDataWithSpan(SWT.NONE, 2)); verifyCombo.add("0"); verifyCombo.add("1"); verifyCombo.add("2"); verifyCombo.add("3"); verifyCombo.addVerifyListener(new VerifyListener() { public void verifyText(VerifyEvent event) { StringBuffer allowedText = new StringBuffer(); for (int i = 0; i < event.text.length(); i++) { char ch = event.text.charAt(i); if (ch >= '0' && ch <= '9') { allowedText.append(ch); } } event.text = allowedText.toString(); } }); // Viewer Combo Label lblViewerCombo = new Label(parent, SWT.NONE); String msg = "ComboViewer with context menu"; lblViewerCombo.setText(msg); viewerCombo = new Combo(parent, style); viewerCombo.setLayoutData(createGridDataWithSpan(SWT.NONE, 2)); ComboViewer viewer = new ComboViewer(viewerCombo); viewer.setContentProvider(new IStructuredContentProvider() { public void dispose() { } public void inputChanged(Viewer viewer, Object oldIn, Object newIn) { } public Object[] getElements(Object inputElement) { return (Object[]) inputElement; } }); viewer.setLabelProvider(new LabelProvider()); viewer.setInput(ITEMS); viewer.addSelectionChangedListener(new ISelectionChangedListener() { public void selectionChanged(SelectionChangedEvent event) { String message = "Selected item: " + event.getSelection().toString(); Shell shell = parent.getShell(); MessageDialog.openInformation(shell, "Info", message); } }); Menu menu = new Menu(viewerCombo); MenuItem menuItem = new MenuItem(menu, SWT.NONE); menuItem.setText("MenuItem on ComboViewer"); viewerCombo.setMenu(menu); // Separator int separatorStyle = SWT.SEPARATOR | SWT.HORIZONTAL | SWT.SHADOW_OUT; Label separator = new Label(parent, separatorStyle); separator.setLayoutData(createGridDataWithSpan(GridData.FILL_HORIZONTAL, 3)); // CCombo Label lblCCombo = new Label(parent, SWT.NONE); lblCCombo.setText("CCombo"); cCombo = new CCombo(parent, style); cCombo.setItems(ITEMS); cCombo.setEditable(checkControl(editableButton) ? editableButton.getSelection() : true); if (hasCreateProperty(PROP_SELECTION_LISTENER)) { cCombo.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent event) { show(event, false); } @Override public void widgetDefaultSelected(SelectionEvent event) { show(event, true); } private void show(SelectionEvent event, boolean defaultSelection) { String type = defaultSelection ? "DefaultSelection" : "Selection"; String msg = type + ": " + event + "\n" + "Text: " + cCombo.getText() + "\n" + "Selection: " + cCombo.getSelectionIndex(); log(msg); } }); } Button btnShowSelectionCCombo = new Button(parent, SWT.PUSH); btnShowSelectionCCombo.setText("Show Selection"); btnShowSelectionCCombo.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent event) { showSelection(cCombo.getItems(), cCombo.getSelectionIndex()); } }); // Register controls registerControl(firstCombo); registerControl(verifyCombo); registerControl(viewerCombo); registerControl(cCombo); } private void createAddButton(Composite parent) { Composite composite = new Composite(parent, SWT.NONE); composite.setLayout(new GridLayout(3, false)); Label lblAddItem = new Label(composite, SWT.NONE); lblAddItem.setText("Add Item"); final Text txtAddItem = new Text(composite, SWT.BORDER); txtAddItem.setText("New Item"); Button btnAddItem = new Button(composite, SWT.PUSH); btnAddItem.setText("Add"); btnAddItem.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent event) { firstCombo.add(txtAddItem.getText()); } }); } private void createRemoveAllButton(Composite parent) { Button button = new Button(parent, SWT.PUSH); button.setText("Remove All Items"); button.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent event) { firstCombo.removeAll(); } }); } private void createDeselectAllButton(Composite parent) { Button button = new Button(parent, SWT.PUSH); button.setText("Deselect All Items"); button.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent event) { firstCombo.deselectAll(); } }); } private void createRemoveFirstItemButton(Composite parent) { Button button = new Button(parent, SWT.PUSH); button.setText("Remove First Item"); button.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent event) { if (firstCombo.getItemCount() > 0) { firstCombo.remove(0); } } }); } private void createSelectFirstItemButton(Composite parent) { Button button = new Button(parent, SWT.PUSH); button.setText("Select First Item"); button.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent event) { if (firstCombo.getItemCount() > 0) { firstCombo.select(0); } } }); } private void createSetVisibleItemCountButton(Composite parent) { Composite composite = new Composite(parent, SWT.NONE); composite.setLayout(new GridLayout(3, false)); final Text text = new Text(composite, SWT.BORDER | SWT.SINGLE); text.setText("3"); text.setLayoutData(new GridData(20, SWT.DEFAULT)); Button button = new Button(composite, SWT.PUSH); button.setText("Set Visible Item Count"); button.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent event) { try { int vic = Integer.parseInt(text.getText()); firstCombo.setVisibleItemCount(vic); } catch (NumberFormatException e) { } } }); } private void createSetSelectionControls(Composite parent) { Composite composite = new Composite(parent, SWT.NONE); composite.setLayout(new GridLayout(5, false)); Label lblSelectionFrom = new Label(composite, SWT.NONE); lblSelectionFrom.setText("From"); final Text txtSelectionFrom = new Text(composite, SWT.BORDER | SWT.SINGLE); txtSelectionFrom.setTextLimit(2); txtSelectionFrom.setText("0"); txtSelectionFrom.setLayoutData(new GridData(20, SWT.DEFAULT)); Label lblSelectionTo = new Label(composite, SWT.NONE); lblSelectionTo.setText("to"); final Text txtSelectionTo = new Text(composite, SWT.BORDER | SWT.SINGLE); txtSelectionTo.setTextLimit(2); txtSelectionTo.setText("0"); txtSelectionTo.setLayoutData(new GridData(20, SWT.DEFAULT)); Button btnSetSelection = new Button(composite, SWT.PUSH); btnSetSelection.setText("set"); btnSetSelection.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent event) { int from = parseInt(txtSelectionFrom.getText()); int to = parseInt(txtSelectionTo.getText()); if (from >= 0 && to >= 0) { firstCombo.setSelection(new Point(from, to)); firstCombo.setFocus(); } else { MessageDialog.openError(getShell(), "Error", "Invalid Selection"); } } }); } private void createGetSelectionControls(Composite parent) { Composite composite = new Composite(parent, SWT.NONE); composite.setLayout(new GridLayout(2, false)); final Text outputSelection = new Text(composite, SWT.BORDER); outputSelection.setEditable(false); Button btnGetSelection = new Button(composite, SWT.PUSH); btnGetSelection.setText("get"); btnGetSelection.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent event) { Point selection = firstCombo.getSelection(); outputSelection.setText(selection.x + ", " + selection.y); } }); } private int parseInt(String text) { int result; try { result = Integer.parseInt(text); } catch (NumberFormatException e) { result = -1; } return result; } private void createSetTextLimitButton(Composite parent, final boolean isCombo) { Composite composite = new Composite(parent, SWT.NONE); composite.setLayout(new GridLayout(2, false)); final Text text = new Text(composite, SWT.BORDER | SWT.SINGLE); text.setText("5"); text.setLayoutData(new GridData(20, SWT.DEFAULT)); Button button = new Button(composite, SWT.PUSH); button.setText("Set Text Limit"); button.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent event) { try { int textLimit = Integer.parseInt(text.getText()); if (isCombo) { firstCombo.setTextLimit(textLimit); } else { cCombo.setTextLimit(textLimit); } } catch (NumberFormatException e) { } } }); } private void createChangeSizeButton(Composite parent) { Button button = new Button(parent, SWT.PUSH); button.setText("Change Size"); button.addSelectionListener(new SelectionAdapter() { private boolean customSize; @Override public void widgetSelected(SelectionEvent event) { if (customSize) { GridData gridData = new GridData(SWT.DEFAULT, SWT.DEFAULT); cCombo.setLayoutData(gridData); customSize = false; } else { GridData gridData = new GridData(100, 100); cCombo.setLayoutData(gridData); customSize = true; } Composite parent = controls.get(0).getParent(); parent.layout(true, true); } }); } private void createToggleListVisibilityButton(Composite parent) { Button button = new Button(parent, SWT.PUSH); button.setText("Toggle List Visibility"); button.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent event) { boolean listVisible = cCombo.getListVisible(); cCombo.setListVisible(!listVisible); } }); } private void createEditableButton(Composite parent) { editableButton = new Button(parent, SWT.CHECK); editableButton.setText("Editable"); editableButton.setSelection(true); editableButton.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { cCombo.setEditable(editableButton.getSelection()); } }); } private void createTextButton(Composite parent) { Button button = new Button(parent, SWT.PUSH); button.setText("Change text"); button.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent event) { cCombo.setText("foo"); } }); } private void showSelection(String[] items, int selectionIndex) { String selection = "(nothing)"; if (selectionIndex != -1) { selection = items[selectionIndex]; } String msg = "Your Selection: " + selection; MessageDialog.openInformation(getShell(), "Information", msg); } private GridData createGridDataWithSpan(int style, int span) { GridData gridData = new GridData(style); gridData.horizontalSpan = span; return gridData; } }