es.cv.gvcase.fefem.common.composites.EMFPropertyComboListViewComposite.java Source code

Java tutorial

Introduction

Here is the source code for es.cv.gvcase.fefem.common.composites.EMFPropertyComboListViewComposite.java

Source

/***************************************************************************
* Copyright (c) 2008 Conselleria de Infraestructuras y Transporte,
* Generalitat de la Comunitat Valenciana . 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: Jose Manuel Garca Valladolid (CIT) - Initial API and implementation
*
**************************************************************************/

package es.cv.gvcase.fefem.common.composites;

import org.eclipse.core.databinding.observable.Realm;
import org.eclipse.core.databinding.observable.list.IObservableList;
import org.eclipse.core.databinding.observable.value.IObservableValue;
import org.eclipse.emf.databinding.EMFObservables;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.jface.databinding.viewers.ObservableListContentProvider;
import org.eclipse.jface.databinding.viewers.ViewersObservables;
import org.eclipse.jface.viewers.ComboViewer;
import org.eclipse.jface.viewers.ILabelProvider;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Combo;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
import org.eclipse.ui.forms.widgets.FormToolkit;

import es.cv.gvcase.fefem.common.FEFEMPage;

/**
 * Creates a readonly combo list composite very usefull for creating the master part of a master/detail UI patterns.
 * The candidate elements are automatically obtained by the given structural feature.
 * The descendant classes only needs to provide a LabelProvider for these elements.
 *
 * @author Jose Manuel Garca Valladolid
 */
public abstract class EMFPropertyComboListViewComposite extends EMFPropertyComposite {

    protected ComboViewer viewer;
    protected Combo combo;

    /**
     * @param parent
     * @param style 
     * @param toolkit
     * @param object
     * @param page
     */
    public EMFPropertyComboListViewComposite(Composite parent, int style, FormToolkit toolkit, EObject object,
            FEFEMPage page) {
        super(parent, style, toolkit, object, page);
    }

    /**
     * @param parent
     * @param style
     * @param toolkit
     * @param viewer
     * @param page
     */
    public EMFPropertyComboListViewComposite(Composite parent, int style, FormToolkit toolkit, Viewer viewer,
            FEFEMPage page) {
        super(parent, style, toolkit, viewer, page);

    }

    /* (non-Javadoc)
     * @see es.cv.gvcase.fefem.common.composites.EMFPropertyComposite#createWidgets(org.eclipse.ui.forms.widgets.FormToolkit)
     */
    @Override
    protected void createWidgets(FormToolkit toolkit) {

        this.setLayout(new GridLayout(2, false));

        Label label = toolkit.createLabel(this, getLabelText());
        GridData gd = new GridData(GridData.BEGINNING);
        label.setLayoutData(gd);

        combo = new Combo(this, SWT.READ_ONLY);
        combo.setLayoutData(new GridData(GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_BEGINNING));

        viewer = new ComboViewer(combo);

        toolkit.adapt(combo);
        toolkit.adapt(this);

    }

    @Override
    protected void bindFeatureToWidget() {
        if (getPage().getEditor().getModel() == null || getPage().getEditor().getEditingDomain() == null)
            return;

        IObservableList candidatesObservable;

        if (!isDetailComposite()) {
            candidatesObservable = EMFObservables.observeList(this.getEObject(), getFeature());

        } else {
            IObservableValue selectionObservable = ViewersObservables
                    .observeSingleSelection(this.getMasterViewer());

            candidatesObservable = EMFObservables.observeDetailList(Realm.getDefault(), selectionObservable,
                    getFeature());

        }

        ObservableListContentProvider contentProvider = new ObservableListContentProvider();
        viewer.setContentProvider(contentProvider);
        viewer.setInput(candidatesObservable);
        if (getLabelProvider() != null) {
            viewer.setLabelProvider(getLabelProvider());
        }
    }

    /* (non-Javadoc)
     * @see es.cv.gvcase.fefem.common.composites.EMFPropertyComposite#getTargetObservable()
     */
    @Override
    protected IObservableValue getTargetObservable() {
        return ViewersObservables.observeSingleSelection(viewer);
    }

    public ComboViewer getViewer() {
        return viewer;
    }

    protected abstract ILabelProvider getLabelProvider();
}