org.eclipse.nebula.snippets.radiogroup.RadioGroupViewerSnippet01.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.nebula.snippets.radiogroup.RadioGroupViewerSnippet01.java

Source

/*******************************************************************************
 * Copyright (c) 2008 Matthew Hall 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:
 *     Matthew Hall - initial API and implementation (bug 248956)
 *******************************************************************************/

package org.eclipse.nebula.snippets.radiogroup;

import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport;

import org.eclipse.core.databinding.beans.BeanProperties;
import org.eclipse.core.databinding.observable.Realm;
import org.eclipse.core.databinding.observable.list.IObservableList;
import org.eclipse.core.databinding.observable.list.WritableList;
import org.eclipse.core.databinding.property.value.IValueProperty;
import org.eclipse.jface.databinding.swt.SWTObservables;
import org.eclipse.jface.databinding.viewers.ViewerSupport;
import org.eclipse.jface.dialogs.InputDialog;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.window.Window;
import org.eclipse.nebula.jface.viewer.radiogroup.RadioGroupViewer;
import org.eclipse.nebula.widgets.radiogroup.RadioGroup;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.layout.RowLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;

public class RadioGroupViewerSnippet01 {
    public static void main(String[] arrrrgs) {
        final Display display = new Display();

        Realm.runWithDefault(SWTObservables.getRealm(display), new Runnable() {
            public void run() {
                Shell shell = createShell();

                shell.open();
                while (!shell.isDisposed())
                    if (!display.readAndDispatch())
                        display.sleep();

                display.dispose();
            }
        });
    }

    private static Shell createShell() {
        final IObservableList people = createModel();

        final Shell shell = new Shell();
        shell.setLayout(new GridLayout(3, false));

        Group actionGroup = new Group(shell, SWT.NONE);
        actionGroup.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, false));
        actionGroup.setText(" Actions ");
        RowLayout rowLayout = new RowLayout(SWT.VERTICAL);
        rowLayout.fill = true;
        actionGroup.setLayout(rowLayout);

        Button addPerson = new Button(actionGroup, SWT.PUSH);
        addPerson.setText("Add person");

        Button renamePerson = new Button(actionGroup, SWT.PUSH);
        renamePerson.setText("Rename person");

        Button removePerson = new Button(actionGroup, SWT.PUSH);
        removePerson.setText("Remove person");

        Button refresh = new Button(actionGroup, SWT.PUSH);
        refresh.setText("Refresh");

        Group group = new Group(shell, SWT.NONE);
        group.setText(" Radio Group Viewer ");
        group.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, false));
        group.setLayout(new FillLayout());

        final RadioGroupViewer radioGroupViewer = new RadioGroupViewer(new RadioGroup(group, SWT.VERTICAL));

        Group eventGroup = new Group(shell, SWT.NONE);
        eventGroup.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
        eventGroup.setText(" Events ");
        eventGroup.setLayout(new FillLayout());

        final Text events = new Text(eventGroup,
                SWT.MULTI | SWT.READ_ONLY | SWT.V_SCROLL | SWT.H_SCROLL | SWT.BORDER);

        // Bind UI

        addPerson.addListener(SWT.Selection, new Listener() {
            public void handleEvent(Event event) {
                InputDialog dialog = new InputDialog(shell, "Add person", "Enter name", "<name>", null);
                if (dialog.open() == Window.OK) {
                    Person person = new Person(dialog.getValue());
                    people.add(person);
                }
            }
        });

        renamePerson.addListener(SWT.Selection, new Listener() {
            public void handleEvent(Event event) {
                IStructuredSelection selection = (IStructuredSelection) radioGroupViewer.getSelection();
                if (!selection.isEmpty()) {
                    Person person = (Person) selection.getFirstElement();
                    InputDialog dialog = new InputDialog(shell, "Rename person", "Enter new name", person.getName(),
                            null);
                    if (dialog.open() == Window.OK) {
                        person.setName(dialog.getValue());
                    }
                }
            }
        });

        removePerson.addListener(SWT.Selection, new Listener() {
            public void handleEvent(Event event) {
                IStructuredSelection selection = (IStructuredSelection) radioGroupViewer.getSelection();
                if (!selection.isEmpty()) {
                    Person person = (Person) selection.getFirstElement();
                    if (MessageDialog.openConfirm(shell, "Remove person",
                            "Remove person " + person.getName() + "?")) {
                        people.remove(person);
                    }
                }
            }
        });

        refresh.addListener(SWT.Selection, new Listener() {
            public void handleEvent(Event event) {
                radioGroupViewer.refresh();
            }
        });

        IValueProperty nameProp = BeanProperties.value(Person.class, "name");

        ViewerSupport.bind(radioGroupViewer, people, nameProp);

        radioGroupViewer.addPostSelectionChangedListener(new ISelectionChangedListener() {
            public void selectionChanged(SelectionChangedEvent event) {
                events.append(event.toString() + "\n");
                events.append("\tselection = " + ((IStructuredSelection) event.getSelection()).getFirstElement()
                        + "\n\n");
            }
        });

        return shell;
    }

    private static IObservableList createModel() {
        final IObservableList radioItems = new WritableList();
        radioItems.add(new Person("Tom"));
        radioItems.add(new Person("Dick"));
        radioItems.add(new Person("Harry"));
        return radioItems;
    }

    static class Person {
        private String name;

        private PropertyChangeSupport changeSupport = new PropertyChangeSupport(this);

        Person(String name) {
            this.name = name;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            changeSupport.firePropertyChange("name", this.name, this.name = name);
        }

        public void addPropertyChangeListener(String propertyName, PropertyChangeListener listener) {
            changeSupport.addPropertyChangeListener(propertyName, listener);
        }

        public void removePropertyChangeListener(String propertyName, PropertyChangeListener listener) {
            changeSupport.removePropertyChangeListener(propertyName, listener);
        }

        public void addPropertyChangeListener(PropertyChangeListener listener) {
            changeSupport.addPropertyChangeListener(listener);
        }

        public void removePropertyChangeListener(PropertyChangeListener listener) {
            changeSupport.removePropertyChangeListener(listener);
        }

        @Override
        public String toString() {
            return "Person[name=\"" + name + "\"]";
        }
    }
}