| /******************************************************************************* |
| * Copyright (c) 2011 Laurent CARON. |
| * 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: |
| * Laurent CARON (laurent.caron@gmail.com) |
| *******************************************************************************/ |
| package org.mihalis.opal.multiChoice; |
| |
| import java.util.ArrayList; |
| import java.util.Iterator; |
| import java.util.List; |
| |
| import org.eclipse.swt.SWT; |
| import org.eclipse.swt.events.SelectionEvent; |
| import org.eclipse.swt.layout.GridData; |
| import org.eclipse.swt.layout.GridLayout; |
| import org.eclipse.swt.widgets.Button; |
| import org.eclipse.swt.widgets.Display; |
| import org.eclipse.swt.widgets.Label; |
| import org.eclipse.swt.widgets.MessageBox; |
| import org.eclipse.swt.widgets.Shell; |
| import org.mihalis.opal.utils.SimpleSelectionAdapter; |
| |
| /** |
| * A simple snippet for the MultiChoice Widget |
| */ |
| public class MultiChoiceSnippet { |
| |
| public static void main(final String[] args) { |
| final Display display = new Display(); |
| final Shell shell = new Shell(display); |
| shell.setLayout(new GridLayout(4, false)); |
| shell.setText("MultiChoice Example"); |
| |
| // Data |
| final String[] euroZone = new String[] { "Austria", "Belgium", "Cyprus", "Estonia", "Finland", "France", "Germany", "Greece", "Ireland", "Italy", "Luxembourg", "Malta", "Netherlands", "Portugal", "Slovakia", "Slovenia", "Spain" }; |
| |
| final List<Country> membersOfEuropeanUnion = new ArrayList<Country>(); |
| membersOfEuropeanUnion.add(new Country("Austria", 8372930)); |
| membersOfEuropeanUnion.add(new Country("Belgium", 10827519)); |
| membersOfEuropeanUnion.add(new Country("Bulgaria", 7576751)); |
| membersOfEuropeanUnion.add(new Country("Cyprus", 801851)); |
| membersOfEuropeanUnion.add(new Country("Czech Republic", 10512397)); |
| membersOfEuropeanUnion.add(new Country("Denmark", 5547088)); |
| membersOfEuropeanUnion.add(new Country("Estonia", 1340274)); |
| membersOfEuropeanUnion.add(new Country("Finland", 5530575)); |
| membersOfEuropeanUnion.add(new Country("France", 64709480)); |
| membersOfEuropeanUnion.add(new Country("Germany", 81757595)); |
| membersOfEuropeanUnion.add(new Country("Greece", 11125179)); |
| membersOfEuropeanUnion.add(new Country("Hungary", 10013628)); |
| membersOfEuropeanUnion.add(new Country("Ireland", 4450878)); |
| membersOfEuropeanUnion.add(new Country("Italy", 60397353)); |
| membersOfEuropeanUnion.add(new Country("Latvia", 2248961)); |
| membersOfEuropeanUnion.add(new Country("Lithuania", 3329227)); |
| membersOfEuropeanUnion.add(new Country("Luxembourg", 502207)); |
| membersOfEuropeanUnion.add(new Country("Malta", 416333)); |
| membersOfEuropeanUnion.add(new Country("Netherlands", 16576800)); |
| membersOfEuropeanUnion.add(new Country("Poland", 38163895)); |
| membersOfEuropeanUnion.add(new Country("Portugal", 11317192)); |
| membersOfEuropeanUnion.add(new Country("Romania", 21466174)); |
| membersOfEuropeanUnion.add(new Country("Slovakia", 5424057)); |
| membersOfEuropeanUnion.add(new Country("Slovenia", 2054119)); |
| membersOfEuropeanUnion.add(new Country("Spain", 46087170)); |
| membersOfEuropeanUnion.add(new Country("Sweden", 9347899)); |
| membersOfEuropeanUnion.add(new Country("United Kingdom", 62041708)); |
| |
| final List<Country> membersOfEUSelectAll = new ArrayList<Country>(); |
| membersOfEUSelectAll.addAll(membersOfEuropeanUnion); |
| membersOfEUSelectAll.add(new Country("Select All", -1)); |
| |
| final List<Country> countryCodes = new ArrayList<Country>(); |
| countryCodes.add(new Country("France", "FR")); |
| countryCodes.add(new Country("United states", "US")); |
| countryCodes.add(new Country("United Kingdom", "UK")); |
| countryCodes.add(new Country("Germany", "DE")); |
| countryCodes.add(new Country("Belgium", "BE")); |
| countryCodes.add(new Country("Netherland", "NL")); |
| countryCodes.add(new Country("Italy", "IT")); |
| countryCodes.add(new Country("Spain", "ES")); |
| countryCodes.add(new Country("Portugal", "PT")); |
| |
| // Draw the window |
| drawLabel(shell, "Simple Multichoice :"); |
| final MultiChoice<String> mcSimple = new MultiChoice<String>(shell, SWT.READ_ONLY); |
| final GridData gridData = new GridData(GridData.FILL, GridData.BEGINNING, true, true); |
| gridData.widthHint = 200; |
| mcSimple.setLayoutData(gridData); |
| mcSimple.addAll(euroZone); |
| addButons(mcSimple); |
| |
| drawLabel(shell, "Multichoice with beans :"); |
| final MultiChoice<Country> mcBeans = new MultiChoice<Country>(shell, SWT.READ_ONLY); |
| mcBeans.setLayoutData(new GridData(GridData.FILL, GridData.BEGINNING, true, true)); |
| mcBeans.addAll(membersOfEuropeanUnion); |
| addButons(mcBeans); |
| |
| drawLabel(shell, "Selection listener :"); |
| final MultiChoice<Country> mcSL = new MultiChoice<Country>(shell, SWT.READ_ONLY); |
| mcSL.setLayoutData(new GridData(GridData.FILL, GridData.BEGINNING, true, true)); |
| mcSL.setSelectionListener(new MultiChoiceSelectionListener<Country>(mcSL) { |
| |
| @Override |
| public void handle(final MultiChoice<Country> parent, final Country receiver, final boolean selection, final Shell popup) { |
| if ("Select All".equals(receiver.toString())) { |
| if (selection) { |
| parent.deselectAll(); |
| parent.selectAll(); |
| } else { |
| parent.deselectAll(); |
| } |
| popup.setVisible(false); |
| } |
| |
| } |
| }); |
| mcSL.addAll(membersOfEUSelectAll); |
| addButons(mcSL); |
| |
| drawLabel(shell, "3 columns :"); |
| final MultiChoice<String> mc3Columns = new MultiChoice<String>(shell, SWT.READ_ONLY); |
| mc3Columns.setLayoutData(new GridData(GridData.FILL, GridData.BEGINNING, true, true)); |
| mc3Columns.addAll(euroZone); |
| mc3Columns.setNumberOfColumns(3); |
| addButons(mc3Columns); |
| |
| drawLabel(shell, "Other separator :"); |
| final MultiChoice<String> mcOtherSeparator = new MultiChoice<String>(shell, SWT.READ_ONLY); |
| mcOtherSeparator.setLayoutData(new GridData(GridData.FILL, GridData.BEGINNING, true, true)); |
| mcOtherSeparator.addAll(euroZone); |
| mcOtherSeparator.setSeparator(" - "); |
| addButons(mcOtherSeparator); |
| |
| drawLabel(shell, "Modifiable combo :"); |
| final MultiChoice<Country> mcModify = new MultiChoice<Country>(shell, SWT.NONE); |
| mcModify.setLayoutData(new GridData(GridData.FILL, GridData.BEGINNING, true, true)); |
| mcModify.setLabelProvider(new MultiChoiceLabelProvider() { |
| @Override |
| public String getText(final Object element) { |
| if (element == null || !(element instanceof Country)) { |
| return ""; |
| } |
| return ((Country) element).getCode(); |
| } |
| }); |
| mcModify.addAll(countryCodes); |
| addButons(mcModify); |
| |
| drawLabel(shell, "Lot of data :"); |
| final List<String> data = new ArrayList<String>(); |
| for (int i = 0; i < 1000; i++) { |
| data.add("Data #" + i); |
| } |
| final MultiChoice<String> mcLotOfData = new MultiChoice<String>(shell, SWT.NONE); |
| mcLotOfData.setLayoutData(new GridData(GridData.FILL, GridData.BEGINNING, true, true)); |
| mcLotOfData.setLabelProvider(new MultiChoiceLabelProvider() { |
| @Override |
| public String getText(final Object element) { |
| if (element == null) { |
| return ""; |
| } |
| return (String) element; |
| } |
| }); |
| mcLotOfData.addAll(data); |
| addButons(mcLotOfData); |
| |
| // display the shell... |
| shell.open(); |
| shell.pack(); |
| while (!shell.isDisposed()) { |
| if (!display.readAndDispatch()) { |
| display.sleep(); |
| } |
| } |
| display.dispose(); |
| } |
| |
| private static void drawLabel(final Shell shell, final String text) { |
| final Label label = new Label(shell, SWT.NONE); |
| label.setText(text); |
| label.setLayoutData(new GridData(GridData.BEGINNING, GridData.BEGINNING, false, false)); |
| } |
| |
| private static void addButons(final MultiChoice<?> mc) { |
| final Button buttonShowSelection = new Button(mc.getParent(), SWT.PUSH); |
| buttonShowSelection.setLayoutData(new GridData(GridData.BEGINNING, GridData.BEGINNING, false, false)); |
| buttonShowSelection.setText("Show selection"); |
| buttonShowSelection.addSelectionListener(new SimpleSelectionAdapter() { |
| |
| @Override |
| public void handle(final SelectionEvent e) { |
| final Iterator<?> it = mc.getSelection().iterator(); |
| final StringBuilder sb = new StringBuilder(); |
| while (it.hasNext()) { |
| sb.append(it.next().toString()); |
| if (it.hasNext()) { |
| sb.append(", "); |
| } |
| } |
| final MessageBox mb = new MessageBox(mc.getShell(), SWT.OK); |
| mb.setMessage(sb.toString()); |
| mb.open(); |
| } |
| }); |
| |
| final Button buttonShowSelectedIndex = new Button(mc.getParent(), SWT.PUSH); |
| buttonShowSelectedIndex.setLayoutData(new GridData(GridData.BEGINNING, GridData.BEGINNING, false, false)); |
| buttonShowSelectedIndex.setText("Show selected index"); |
| buttonShowSelectedIndex.addSelectionListener(new SimpleSelectionAdapter() { |
| |
| @Override |
| public void handle(final SelectionEvent e) { |
| final StringBuilder sb = new StringBuilder(); |
| final int[] selectedIndex = mc.getSelectedIndex(); |
| if (selectedIndex.length > 0) { |
| sb.append(selectedIndex[0]); |
| for (int i = 1; i < selectedIndex.length; i++) { |
| sb.append(","); |
| sb.append(selectedIndex[i]); |
| } |
| } else { |
| sb.append("Empty"); |
| } |
| final MessageBox mb = new MessageBox(mc.getShell(), SWT.OK); |
| mb.setMessage(sb.toString()); |
| mb.open(); |
| } |
| }); |
| } |
| } |