/******************************************************************************* * 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.codegen.ui.internal; import gov.redhawk.common.ui.editor.FormLayoutFactory; import gov.redhawk.ide.codegen.PortRepToGeneratorMap; import gov.redhawk.ide.codegen.provider.CodegenItemProviderAdapterFactory; import gov.redhawk.ui.editor.IScaComposite; import org.eclipse.emf.common.notify.AdapterFactory; import org.eclipse.emf.edit.provider.ComposedAdapterFactory; import org.eclipse.emf.edit.provider.ReflectiveItemProviderAdapterFactory; import org.eclipse.emf.edit.provider.resource.ResourceItemProviderAdapterFactory; import org.eclipse.emf.edit.ui.provider.AdapterFactoryContentProvider; import org.eclipse.emf.edit.ui.provider.AdapterFactoryLabelProvider; import org.eclipse.jface.layout.GridDataFactory; import org.eclipse.jface.viewers.ColumnWeightData; import org.eclipse.jface.viewers.TableLayout; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.jface.viewers.Viewer; import org.eclipse.jface.viewers.ViewerComparator; import org.eclipse.jface.viewers.ViewerFilter; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.TableColumn; import org.eclipse.ui.forms.IFormColors; import org.eclipse.ui.forms.widgets.FormToolkit; /** * */ public class PortGeneratorComposite extends Composite implements IScaComposite { private static final int NUM_COLUMNS = 3; private static final int NUM_ROWS = 3; private final FormToolkit toolkit; private TableViewer portMapViewer; private Button addPropertyButton; private Button editPropertyButton; private Button removePropertyButton; private ComposedAdapterFactory adapterFactory; /** * @param parent * @param style * @param toolkit */ public PortGeneratorComposite(final Composite parent, final int style, final FormToolkit toolkit) { super(parent, style); this.toolkit = toolkit; setLayout(FormLayoutFactory.createSectionClientGridLayout(false, PortGeneratorComposite.NUM_COLUMNS)); createPropertiesArea(); toolkit.paintBordersFor(this); } /** * {@inheritDoc} */ @Override public void dispose() { if (this.adapterFactory != null) { this.adapterFactory.dispose(); this.adapterFactory = null; } super.dispose(); } /** * Gets the adapter factory. * * @return the adapter factory */ protected AdapterFactory getAdapterFactory() { if (this.adapterFactory == null) { this.adapterFactory = new ComposedAdapterFactory(ComposedAdapterFactory.Descriptor.Registry.INSTANCE); this.adapterFactory.addAdapterFactory(new ResourceItemProviderAdapterFactory()); this.adapterFactory.addAdapterFactory(new CodegenItemProviderAdapterFactory()); this.adapterFactory.addAdapterFactory(new ReflectiveItemProviderAdapterFactory()); } return this.adapterFactory; } /** * Creates the properties entry. * * @param client the client * @param toolkit the toolkit * @param actionBars the action bars */ private void createPropertiesArea() { final Label label = this.toolkit.createLabel(this, "Port\nGenerators:"); label.setForeground(this.toolkit.getColors().getColor(IFormColors.TITLE)); label.setLayoutData(GridDataFactory.fillDefaults().align(SWT.LEFT, SWT.TOP).span(1, PortGeneratorComposite.NUM_ROWS).create()); final Table table = new Table(this, SWT.SINGLE | SWT.BORDER | SWT.FULL_SELECTION); table.setLinesVisible(true); table.setHeaderVisible(true); final TableLayout tableLayout = new TableLayout(); tableLayout.addColumnData(new ColumnWeightData(20, 165, true)); // SUPPRESS CHECKSTYLE MagicNumber tableLayout.addColumnData(new ColumnWeightData(30, 100, true)); // SUPPRESS CHECKSTYLE MagicNumber table.setLayout(tableLayout); table.setLayoutData(GridDataFactory.fillDefaults().span(1, PortGeneratorComposite.NUM_ROWS).hint(SWT.DEFAULT, 100).grab(true, true).create()); // SUPPRESS CHECKSTYLE MagicNumber TableColumn column = new TableColumn(table, SWT.NULL); column.setText("RepID"); column = new TableColumn(table, SWT.NULL); column.setText("Generator"); this.portMapViewer = new TableViewer(table); this.portMapViewer.setLabelProvider(new AdapterFactoryLabelProvider(getAdapterFactory())); this.portMapViewer.setContentProvider(new AdapterFactoryContentProvider(getAdapterFactory())); this.portMapViewer.setFilters(createPortMapViewerFilter()); this.portMapViewer.setComparator(createPortMapViewerComparator()); this.addPropertyButton = this.toolkit.createButton(this, "Add...", SWT.PUSH); this.addPropertyButton.setLayoutData(GridDataFactory.fillDefaults().align(SWT.FILL, SWT.TOP).create()); this.editPropertyButton = this.toolkit.createButton(this, "Edit", SWT.PUSH); this.editPropertyButton.setLayoutData(GridDataFactory.fillDefaults().align(SWT.FILL, SWT.TOP).create()); this.editPropertyButton.setEnabled(false); this.removePropertyButton = this.toolkit.createButton(this, "Remove", SWT.PUSH); this.removePropertyButton.setLayoutData(GridDataFactory.fillDefaults().align(SWT.FILL, SWT.TOP).create()); this.removePropertyButton.setEnabled(false); } /** * Creates the port mapping viewer filter. * * @return the viewer filter[] */ private ViewerFilter[] createPortMapViewerFilter() { return new ViewerFilter[] { new ViewerFilter() { @Override public boolean select(final Viewer viewer, final Object parentElement, final Object element) { return element instanceof PortRepToGeneratorMap; } } }; } /** * Creates the port mapping viewer comparator. * * @return the viewer comparator */ private ViewerComparator createPortMapViewerComparator() { return new ViewerComparator() { @Override public int compare(final Viewer viewer, final Object e1, final Object e2) { if ((e1 == null) || !(e1 instanceof PortRepToGeneratorMap)) { return 1; } else if ((e2 == null) || !(e2 instanceof PortRepToGeneratorMap)) { return -1; } return ((PortRepToGeneratorMap) e1).getRepId().compareTo(((PortRepToGeneratorMap) e1).getRepId()); } }; } /** * @return the portMapViewer */ public TableViewer getPortMapViewer() { return this.portMapViewer; } /** * @return the addPropertyButton */ public Button getAddPropertyButton() { return this.addPropertyButton; } /** * @return the editPropertyButton */ public Button getEditPropertyButton() { return this.editPropertyButton; } /** * @return the removePropertyButton */ public Button getRemovePropertyButton() { return this.removePropertyButton; } /** * {@inheritDoc} */ @Override public void setEditable(final boolean canEdit) { this.portMapViewer.getTable().setEnabled(canEdit); } @Override public void setEnabled(final boolean enabled) { this.portMapViewer.getControl().setEnabled(enabled); super.setEnabled(enabled); } }