blob: 0070163e2a82eb1c0a45aa2538146ebd48d8674b [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2011-2013 EclipseSource Muenchen GmbH and others.
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Johannes Faltermeier - initial API and implementation
******************************************************************************/
package org.eclipse.emf.ecp.view.custom.ui.swt.test;
import java.util.LinkedHashSet;
import java.util.Set;
import org.eclipse.core.databinding.property.value.IValueProperty;
import org.eclipse.emf.databinding.EMFProperties;
import org.eclipse.emf.ecp.view.spi.custom.model.ECPCustomControlChangeListener;
import org.eclipse.emf.ecp.view.spi.custom.model.ECPHardcodedReferences;
import org.eclipse.emf.ecp.view.spi.custom.swt.ECPAbstractCustomControlSWT;
import org.eclipse.emf.ecp.view.spi.indexdmr.model.VIndexDomainModelReference;
import org.eclipse.emf.ecp.view.spi.indexdmr.model.VIndexdmrFactory;
import org.eclipse.emf.ecp.view.spi.model.VDomainModelReference;
import org.eclipse.emf.ecp.view.spi.model.VFeaturePathDomainModelReference;
import org.eclipse.emf.ecp.view.spi.model.VViewFactory;
import org.eclipse.emf.ecp.view.spi.renderer.NoPropertyDescriptorFoundExeption;
import org.eclipse.emf.ecp.view.spi.renderer.NoRendererFoundException;
import org.eclipse.emf.emfstore.bowling.BowlingPackage;
import org.eclipse.emfforms.spi.swt.core.layout.GridDescriptionFactory;
import org.eclipse.emfforms.spi.swt.core.layout.SWTGridCell;
import org.eclipse.emfforms.spi.swt.core.layout.SWTGridDescription;
import org.eclipse.jface.layout.TableColumnLayout;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Label;
/**
* @author jfaltermeier
*
*/
public class CustomControlStub3 extends ECPAbstractCustomControlSWT implements ECPHardcodedReferences {
// private VFeaturePathDomainModelReference playersReference;
// private VFeaturePathDomainModelReference nameReference;
// private VFeaturePathDomainModelReference dateReference;
private final Set<VDomainModelReference> features = new LinkedHashSet<VDomainModelReference>();
public static final String CHANGE_NOTICED = "CHANGE!";
private Label label;
public CustomControlStub3() {
super();
}
/**
* {@inheritDoc}
*
* @see org.eclipse.emf.ecp.view.spi.custom.model.ECPHardcodedReferences#getNeededDomainModelReferences()
*/
@Override
public Set<VDomainModelReference> getNeededDomainModelReferences() {
if (features.isEmpty()) {
final VFeaturePathDomainModelReference playersReference = VViewFactory.eINSTANCE
.createFeaturePathDomainModelReference();
playersReference.setDomainModelEFeature(BowlingPackage.eINSTANCE.getLeague_Players());
final VIndexDomainModelReference nameReference = VIndexdmrFactory.eINSTANCE
.createIndexDomainModelReference();
nameReference.setDomainModelEFeature(BowlingPackage.eINSTANCE.getPlayer_Name());
nameReference.setIndex(0);
nameReference.getDomainModelEReferencePath().add(BowlingPackage.eINSTANCE.getLeague_Players());
final VIndexDomainModelReference dateReference = VIndexdmrFactory.eINSTANCE
.createIndexDomainModelReference();
dateReference.setDomainModelEFeature(BowlingPackage.eINSTANCE.getPlayer_DateOfBirth());
nameReference.setIndex(0);
dateReference.getDomainModelEReferencePath().add(BowlingPackage.eINSTANCE.getLeague_Players());
features.add(playersReference);
features.add(nameReference);
features.add(dateReference);
}
return features;
}
/**
* {@inheritDoc}
*
* @see org.eclipse.emf.ecp.view.spi.custom.swt.ECPAbstractCustomControlSWT#getGridDescription()
*/
@Override
public SWTGridDescription getGridDescription() {
// TODO Auto-generated method stub
return GridDescriptionFactory.INSTANCE.createSimpleGrid(1, 2, null);
}
/**
* {@inheritDoc}
*
* @see org.eclipse.emf.ecp.view.spi.custom.swt.ECPAbstractCustomControlSWT#renderControl(org.eclipse.emfforms.spi.swt.core.layout.SWTGridCell,
* org.eclipse.swt.widgets.Composite)
*/
@Override
public Control renderControl(SWTGridCell cell, Composite parent) throws NoRendererFoundException,
NoPropertyDescriptorFoundExeption {
if (cell.getColumn() == 0) {
label = new Label(parent, SWT.NONE);
label.setText("Players: ");
return label;
}
if (cell.getColumn() == 1) {
final Composite tableParent = new Composite(parent, SWT.NONE);
final Composite tableComposite = new Composite(tableParent, SWT.NONE);
final TableViewer tableViewer = new TableViewer(tableComposite, SWT.BORDER | SWT.FULL_SELECTION
| SWT.V_SCROLL);
tableViewer.getControl().setLayoutData(new GridData());
tableComposite.setLayout(new TableColumnLayout());
final IValueProperty[] valueProperties = EMFProperties.values(BowlingPackage.Literals.PLAYER__NAME,
BowlingPackage.Literals.PLAYER__DATE_OF_BIRTH);
createViewerBinding(getResolvedDomainModelReference(BowlingPackage.eINSTANCE.getLeague_Players()),
tableViewer,
valueProperties);
registerChangeListener(getResolvedDomainModelReference(BowlingPackage.eINSTANCE.getLeague_Players()),
new LeagueChangeListener());
return tableParent;
}
return null;
}
/**
* {@inheritDoc}
*
* @see org.eclipse.emf.ecp.view.spi.custom.ui.ECPAbstractCustomControl#disposeCustomControl()
*/
@Override
protected void disposeCustomControl() {
}
public class LeagueChangeListener implements ECPCustomControlChangeListener {
/**
* {@inheritDoc}
*
* @see org.eclipse.emf.ecp.view.spi.custom.model.ECPCustomControlChangeListener#notifyChanged()
*/
@Override
public void notifyChanged() {
label.setText(CHANGE_NOTICED);
}
}
/**
* {@inheritDoc}
*
* @see org.eclipse.emf.ecp.view.spi.custom.swt.ECPAbstractCustomControlSWT#handleContentValidation()
*/
@Override
protected void handleContentValidation() {
// TODO Auto-generated method stub
}
/**
* {@inheritDoc}
*
* @see org.eclipse.emf.ecp.view.spi.custom.swt.ECPAbstractCustomControlSWT#setEditable(boolean)
*/
@Override
protected boolean setEditable(boolean editable) {
label.setEnabled(editable);
return super.setEditable(editable);
}
}