org.eclipse.rap.demo.controls.ComboTab.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.rap.demo.controls.ComboTab.java

Source

/*******************************************************************************
 * 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;
    }

}