org.springsource.ide.eclipse.commons.livexp.ui.ChooseMultipleSection.java Source code

Java tutorial

Introduction

Here is the source code for org.springsource.ide.eclipse.commons.livexp.ui.ChooseMultipleSection.java

Source

/*******************************************************************************
 * Copyright (c) 2013 Pivotal Software, Inc.
 * 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:
 *   Pivotal Software, Inc. - initial API and implementation
 *******************************************************************************/
package org.springsource.ide.eclipse.commons.livexp.ui;

import java.util.Set;

import org.eclipse.jface.layout.GridDataFactory;
import org.eclipse.jface.viewers.CheckStateChangedEvent;
import org.eclipse.jface.viewers.CheckboxTableViewer;
import org.eclipse.jface.viewers.ICheckStateListener;
import org.eclipse.jface.viewers.ILabelProvider;
import org.eclipse.jface.viewers.ILabelProviderListener;
import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
import org.springsource.ide.eclipse.commons.livexp.core.LiveExpression;
import org.springsource.ide.eclipse.commons.livexp.core.LiveSet;
import org.springsource.ide.eclipse.commons.livexp.core.ValidationResult;
import org.springsource.ide.eclipse.commons.livexp.core.ValueListener;

public class ChooseMultipleSection<T extends Ilabelable> extends WizardPageSection {

    private static final boolean DEBUG = false; //(""+Platform.getLocation()).contains("kdvolder");

    private String labelText;
    private Ilabelable[] validChoices;
    private LiveSet<T> chosen;
    private LiveExpression<ValidationResult> validator;

    public ChooseMultipleSection(IPageWithSections owner, String labelText, T[] validChoices, LiveSet<T> chosen,
            LiveExpression<ValidationResult> validator) {
        super(owner);
        this.labelText = labelText;
        this.validChoices = validChoices;
        this.chosen = chosen;
        this.validator = validator;
    }

    @Override
    public LiveExpression<ValidationResult> getValidator() {
        return validator;
    }

    @Override
    public void createContents(Composite page) {
        Composite composite = new Composite(page, SWT.NONE);
        GridLayout layout = new GridLayout();
        layout.numColumns = 2;
        layout.marginWidth = 0;
        composite.setLayout(layout);
        GridDataFactory grab = GridDataFactory.fillDefaults().grab(true, true).hint(SWT.DEFAULT,
                UIConstants.SCROLLABLE_LIST_HEIGTH);
        grab.applyTo(composite);
        composite.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));

        Label label = new Label(composite, SWT.NONE);
        label.setText(labelText);
        GridDataFactory.fillDefaults().align(SWT.CENTER, SWT.BEGINNING)
                .hint(UIConstants.fieldLabelWidthHint(label), SWT.DEFAULT).applyTo(label);

        CheckboxTableViewer tv = CheckboxTableViewer.newCheckList(composite, SWT.BORDER);
        grab.applyTo(tv.getTable());
        tv.setContentProvider(new ContentProvider());
        tv.setLabelProvider(new LabelProvider());
        tv.setInput(validChoices);
        tv.setCheckedElements(chosen.getValues().toArray());

        tv.addCheckStateListener(new ICheckStateListener() {
            public void checkStateChanged(CheckStateChangedEvent event) {
                @SuppressWarnings("unchecked")
                T e = (T) event.getElement();
                boolean checked = event.getChecked();
                if (checked) {
                    chosen.add(e);
                } else {
                    chosen.remove(e);
                }
            }
        });

        if (DEBUG) {
            chosen.addListener(new ValueListener<Set<T>>() {
                public void gotValue(LiveExpression<Set<T>> exp, Set<T> value) {
                    System.out.println(">>>> starters");
                    for (T e : value) {
                        System.out.println(e.getLabel());
                    }
                    System.out.println("<<<< starters");
                }
            });
        }

    }

    class ContentProvider implements IStructuredContentProvider {
        public void dispose() {
        }

        public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
        }

        public Object[] getElements(Object inputElement) {
            return validChoices;
        }
    }

    public class LabelProvider implements ILabelProvider {

        public void addListener(ILabelProviderListener listener) {
        }

        public void dispose() {
        }

        public boolean isLabelProperty(Object element, String property) {
            return false;
        }

        public void removeListener(ILabelProviderListener listener) {
        }

        public Image getImage(Object element) {
            //no image
            return null;
        }

        public String getText(Object element) {
            if (element instanceof Ilabelable) {
                return ((Ilabelable) element).getLabel();
            }
            return "" + element;
        }
    }
}