org.eclipse.emf.ecp.editor.mecontrols.MESWTDateAndTimeControl.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.emf.ecp.editor.mecontrols.MESWTDateAndTimeControl.java

Source

/*******************************************************************************
 * Copyright (c) 2008-2011 Chair for Applied Software Engineering,
 * Technische Universitaet Muenchen.
 * 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:
 ******************************************************************************/
package org.eclipse.emf.ecp.editor.mecontrols;

import org.eclipse.core.databinding.observable.value.DateAndTimeObservableValue;
import org.eclipse.core.databinding.observable.value.IObservableValue;
import org.eclipse.emf.common.util.Diagnostic;
import org.eclipse.emf.databinding.EMFDataBindingContext;
import org.eclipse.emf.databinding.edit.EMFEditObservables;
import org.eclipse.emf.ecore.EAttribute;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecp.common.commands.ECPCommand;
import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
import org.eclipse.jface.databinding.swt.SWTObservables;
import org.eclipse.jface.layout.GridDataFactory;
import org.eclipse.jface.layout.GridLayoutFactory;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.MouseAdapter;
import org.eclipse.swt.events.MouseEvent;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.DateTime;
import org.eclipse.swt.widgets.Label;
import org.eclipse.ui.ISharedImages;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.forms.widgets.ImageHyperlink;

/**
 * An SWT-based date widget with an additional time field, which
 * are both controlled by spinners.
 * 
 * @author Hunnilee
 * 
 */
public class MESWTDateAndTimeControl extends AbstractMEControl implements IValidatableControl {

    private static final int PRIORITY = 3;

    private EAttribute attribute;
    private ImageHyperlink dateDeleteButton;
    private Composite dateComposite;
    private DateTime dateWidget;
    private DateTime timeWidget;
    private Label labelWidgetImage; //Label for diagnostic image

    @Override
    public int canRender(IItemPropertyDescriptor itemPropertyDescriptor, EObject modelElement) {
        return PRIORITY;
    }

    @Override
    protected Control createControl(Composite parent, int style) {
        this.attribute = (EAttribute) getItemPropertyDescriptor().getFeature(getModelElement());
        dateComposite = getToolkit().createComposite(parent);
        dateComposite.setBackgroundMode(SWT.INHERIT_FORCE);
        GridLayoutFactory.fillDefaults().numColumns(4).spacing(2, 0).applyTo(dateComposite);
        GridDataFactory.fillDefaults().grab(true, false).applyTo(dateComposite);

        createDateAndTimeWidget();

        IObservableValue model = EMFEditObservables.observeValue(getEditingDomain(), getModelElement(), attribute);
        EMFDataBindingContext dbc = new EMFDataBindingContext();
        IObservableValue dateObserver = SWTObservables.observeSelection(dateWidget);
        IObservableValue timeObserver = SWTObservables.observeSelection(timeWidget);
        dbc.bindValue(new DateAndTimeObservableValue(dateObserver, timeObserver), model, null, null);

        return dateComposite;
    }

    private void createDateAndTimeWidget() {
        labelWidgetImage = getToolkit().createLabel(dateComposite, "     ");
        labelWidgetImage.setBackground(dateComposite.getBackground());

        dateWidget = new DateTime(dateComposite, SWT.DATE);
        dateWidget.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));

        timeWidget = new DateTime(dateComposite, SWT.TIME | SWT.SHORT);
        timeWidget.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));

        dateDeleteButton = new ImageHyperlink(dateComposite, SWT.TOP);
        dateDeleteButton
                .setImage(PlatformUI.getWorkbench().getSharedImages().getImage(ISharedImages.IMG_TOOL_DELETE));

        dateDeleteButton.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseUp(MouseEvent e) {
                new ECPCommand(getModelElement()) {

                    @Override
                    protected void doRun() {
                        getModelElement().eSet(attribute, null);
                    }
                }.run(true);
            }
        });
    }

    /**.
     * {@inheritDoc}}
     * */
    public void handleValidation(Diagnostic diagnostic) {
        if (diagnostic.getSeverity() == Diagnostic.ERROR || diagnostic.getSeverity() == Diagnostic.WARNING) {
            Image image = org.eclipse.emf.ecp.editor.Activator.getImageDescriptor("icons/validation_error.png")
                    .createImage();
            this.labelWidgetImage.setImage(image);
            this.labelWidgetImage.setToolTipText(diagnostic.getMessage());
        }
    }

    /**.
     * {@inheritDoc}}
     * */
    public void resetValidation() {
        this.labelWidgetImage.setImage(null);
        this.labelWidgetImage.setToolTipText("");

    }

}