/** * 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.prf.internal.ui.editor.detailspart; import gov.redhawk.common.ui.editor.FormLayoutFactory; import gov.redhawk.prf.internal.ui.editor.PropertiesSection; import gov.redhawk.prf.internal.ui.editor.composite.SimplePropertyComposite; import gov.redhawk.ui.editor.SCAFormEditor; import gov.redhawk.ui.util.EMFEmptyStringToNullUpdateValueStrategy; import gov.redhawk.ui.util.EmptyStringValueToStringConverter; import gov.redhawk.ui.util.FalseToNullValueConverter; import gov.redhawk.ui.util.StringToEmptyStringValueConverter; import java.util.List; import mil.jpeojtrs.sca.prf.PrfPackage; import mil.jpeojtrs.sca.prf.PropertyConfigurationType; import org.eclipse.core.databinding.Binding; import org.eclipse.core.databinding.DataBindingContext; import org.eclipse.core.databinding.observable.value.IObservableValue; import org.eclipse.emf.databinding.EMFUpdateValueStrategy; import org.eclipse.emf.databinding.FeaturePath; import org.eclipse.emf.databinding.edit.EMFEditObservables; import org.eclipse.emf.databinding.edit.EMFEditProperties; import org.eclipse.emf.databinding.edit.IEMFEditValueProperty; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.edit.domain.EditingDomain; import org.eclipse.jface.databinding.swt.WidgetProperties; import org.eclipse.jface.databinding.viewers.ViewersObservables; import org.eclipse.jface.layout.GridDataFactory; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.SelectionChangedEvent; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Composite; import org.eclipse.ui.forms.widgets.FormToolkit; import org.eclipse.ui.forms.widgets.Section; public class SimplePropertyDetailsPage extends BasicSimplePropertyDetailsPage { /** * Instantiates a new simple property details page. * * @param section the section */ public SimplePropertyDetailsPage(final PropertiesSection section) { super(section); } @Override protected List<Binding> bind(final DataBindingContext dataBindingContext, final EObject input) { final List<Binding> retVal = super.bind(dataBindingContext, input); final EditingDomain domain = getEditingDomain(); // Value if (getComposite().getValueEntry() != null) { EMFEmptyStringToNullUpdateValueStrategy targetToModel = new EMFEmptyStringToNullUpdateValueStrategy(); targetToModel.setConverter(new EmptyStringValueToStringConverter()); EMFUpdateValueStrategy modelToTarget = new EMFUpdateValueStrategy(); modelToTarget.setConverter(new StringToEmptyStringValueConverter()); retVal.add(dataBindingContext.bindValue(WidgetProperties.text(SWT.Modify) .observeDelayed(SCAFormEditor.getFieldBindingDelay(), getComposite().getValueEntry().getText()), EMFEditObservables.observeValue(domain, input, PrfPackage.Literals.SIMPLE__VALUE), targetToModel, modelToTarget)); } // Command line if (getComposite().getCommandLineCheckbox() != null) { EMFUpdateValueStrategy targetToModel = new EMFUpdateValueStrategy(); targetToModel.setConverter(new FalseToNullValueConverter()); retVal.add(dataBindingContext.bindValue(WidgetProperties.selection().observe(getComposite().getCommandLineCheckbox()), EMFEditObservables.observeValue(domain, input, PrfPackage.Literals.SIMPLE__COMMANDLINE), targetToModel, null)); // Tie the enabled state of the checkbox to the current kind selection getComposite().getKindViewer().addSelectionChangedListener(new ISelectionChangedListener() { @Override public void selectionChanged(SelectionChangedEvent event) { updateCommandLineEnabled(); } }); } //Enumerations if (getComposite().getEnumerationViewer() != null) { final IEMFEditValueProperty enumProperty = EMFEditProperties.value(getEditingDomain(), FeaturePath.fromList(PrfPackage.Literals.SIMPLE__ENUMERATIONS)); @SuppressWarnings({ "rawtypes", "unchecked" }) IObservableValue modelObservableValue = enumProperty.observe(input); retVal.add(dataBindingContext.bindValue(ViewersObservables.observeInput(getComposite().getEnumerationViewer()), modelObservableValue)); } return retVal; } protected void updateCommandLineEnabled() { // Only enable the commandline checkbox if "property" is selected for the kind IStructuredSelection selection = (IStructuredSelection) getComposite().getKindViewer().getSelection(); boolean enabled = PropertyConfigurationType.PROPERTY.equals(selection.getFirstElement()); getComposite().getCommandLineCheckbox().setEnabled(enabled); } @Override protected SimplePropertyComposite getComposite() { return (SimplePropertyComposite) super.getComposite(); } @Override protected SimplePropertyComposite createSection(final Composite parent, final FormToolkit toolkit) { final Section newSection = toolkit.createSection(parent, Section.EXPANDED | Section.TITLE_BAR); newSection.clientVerticalSpacing = FormLayoutFactory.SECTION_HEADER_VERTICAL_SPACING; newSection.setText("Simple Property"); newSection.setLayoutData(GridDataFactory.fillDefaults().grab(true, true).create()); newSection.setExpanded(true); // Align the master and details section headers (misalignment caused // by section toolbar icons) getPage().alignSectionHeaders(getSection().getSection(), newSection); SimplePropertyComposite retVal = createComposite(newSection, toolkit); newSection.setClient(retVal); return retVal; } public SimplePropertyComposite createComposite(Composite parent, FormToolkit toolkit) { SimplePropertyComposite retVal = new SimplePropertyComposite(parent, SWT.NONE, toolkit); toolkit.adapt(retVal); return retVal; } }