gov.redhawk.ide.dcd.internal.ui.editor.composite.ComponentPlacementComposite.java Source code

Java tutorial

Introduction

Here is the source code for gov.redhawk.ide.dcd.internal.ui.editor.composite.ComponentPlacementComposite.java

Source

/*******************************************************************************
 * This file is protected by Copyright. 
 * Please refer to the COPYRIGHT file distributed with this source distribution.
 *
 * This file is part of REDHAWK IDE.
 *
 * 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
 *******************************************************************************/
package gov.redhawk.ide.dcd.internal.ui.editor.composite;

import gov.redhawk.common.ui.editor.FormLayoutFactory;
import gov.redhawk.common.ui.parts.FormEntry;
import gov.redhawk.diagram.sheet.properties.ComponentInstantiationPropertyViewerAdapter;
import gov.redhawk.sca.ui.ScaComponentFactory;
import gov.redhawk.sca.ui.properties.ScaPropertiesAdapterFactory;
import gov.redhawk.ui.editor.IScaComposite;
import mil.jpeojtrs.sca.dcd.DcdComponentInstantiation;
import mil.jpeojtrs.sca.dcd.DcdComponentPlacement;

import org.eclipse.emf.edit.domain.IEditingDomainProvider;
import org.eclipse.jface.layout.GridDataFactory;
import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.jface.viewers.ComboViewer;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.ui.forms.IFormColors;
import org.eclipse.ui.forms.widgets.FormToolkit;

/**
 * 
 */
public class ComponentPlacementComposite extends Composite implements IScaComposite {
    private static final int NUM_COLUMNS = 3;

    private final FormToolkit toolkit;
    private FormEntry nameEntry;
    private ComboViewer parentViewer;
    private Button unsetParentButton;

    private ScaPropertiesAdapterFactory adapterFactory = new ScaPropertiesAdapterFactory();
    private final IEditingDomainProvider editingDomainProvider;

    private final ComponentInstantiationPropertyViewerAdapter adapter;

    private TreeViewer propertiesViewer;

    /**
     * @param parent
     * @param style
     * @param toolkit
     */
    public ComponentPlacementComposite(final Composite parent, final int style, final FormToolkit toolkit,
            final IEditingDomainProvider editingDomainProvider) {
        super(parent, style);

        this.toolkit = toolkit;
        this.editingDomainProvider = editingDomainProvider;
        this.adapter = new ComponentInstantiationPropertyViewerAdapter(this.editingDomainProvider);

        setLayout(FormLayoutFactory.createSectionClientGridLayout(false, ComponentPlacementComposite.NUM_COLUMNS));

        createNameEntry();

        createParentEntry();

        createPropertiesArea();

        toolkit.paintBordersFor(this);
    }

    /**
     * Creates the name entry.
     * 
     * @param client the client
     * @param toolkit the toolkit
     * @param actionBars the action bars
     */
    private void createNameEntry() {
        this.nameEntry = new FormEntry(this, this.toolkit, "Name:", SWT.SINGLE);
        this.nameEntry.getText().setToolTipText("Human readable name for the device instantiation");
    }

    @Override
    public void dispose() {
        if (this.adapterFactory != null) {
            this.adapterFactory.dispose();
            this.adapterFactory = null;
        }
        super.dispose();
    }

    /**
     * Creates the generator entry.
     * 
     * @param client the client
     * @param toolkit the toolkit
     * @param actionBars the action bars
     */
    private void createParentEntry() {
        final Label label = this.toolkit.createLabel(this, "Parent:");
        label.setForeground(this.toolkit.getColors().getColor(IFormColors.TITLE));
        this.parentViewer = new ComboViewer(this, SWT.SINGLE | SWT.READ_ONLY | SWT.DROP_DOWN);
        this.parentViewer.getCombo().addListener(SWT.MouseVerticalWheel, new Listener() {

            @Override
            public void handleEvent(Event event) {
                // Disable Mouse Wheel Combo Box Control
                event.doit = false;
            }

        });

        this.parentViewer.setContentProvider(new ArrayContentProvider());
        this.parentViewer.setLabelProvider(new LabelProvider() {
            @Override
            public String getText(final Object element) {
                final DcdComponentPlacement desc = (DcdComponentPlacement) element;
                return (desc != null) ? desc.getComponentInstantiation().get(0).getUsageName() : ""; // SUPPRESS CHECKSTYLE AvoidInline
            }
        });
        this.parentViewer.getControl()
                .setLayoutData(GridDataFactory.fillDefaults().span(1, 1).grab(true, false).create());
        this.unsetParentButton = this.toolkit.createButton(this, "Unset", SWT.PUSH);
        this.unsetParentButton.setLayoutData(GridDataFactory.fillDefaults().span(1, 1).grab(false, false).create());
        this.unsetParentButton.setEnabled(false);
    }

    /**
     * Creates the properties entry.
     * 
     * @param client the client
     * @param toolkit the toolkit
     * @param actionBars the action bars
     */
    private void createPropertiesArea() {
        final Group group = new Group(this, SWT.SHADOW_ETCHED_IN);
        group.setText("Properties");
        group.setLayoutData(
                GridDataFactory.fillDefaults().grab(true, true).span(3, 1).hint(SWT.DEFAULT, 300).create());
        group.setLayout(new FillLayout());
        this.propertiesViewer = ScaComponentFactory.createPropertyTable(group, SWT.SINGLE | SWT.BORDER,
                this.adapterFactory);
        this.adapter.setViewer(this.propertiesViewer);
    }

    /**
     * @return the unsetParentButton
     */
    public Button getUnsetParentButton() {
        return this.unsetParentButton;
    }

    public FormEntry getNameEntry() {
        return this.nameEntry;
    }

    public ComboViewer getParentViewer() {
        return this.parentViewer;
    }

    /**
     * {@inheritDoc}
     */
    @Override
    public void setEditable(final boolean canEdit) {
        this.nameEntry.setEditable(canEdit);
        this.parentViewer.getCombo().setEnabled(canEdit);
        this.unsetParentButton.setEnabled(canEdit);
        // Don't set enabled on properties viewer since this will disable scrolling
        //      this.propertiesViewer.getTree().setEnabled(canEdit);
    }

    public void setInput(final DcdComponentInstantiation instantiation) {
        this.adapter.setInput(instantiation);
    }
}