/******************************************************************************* * 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.sad.internal.ui.composite; import mil.jpeojtrs.sca.sad.Port; import mil.jpeojtrs.sca.sad.SadPackage; import mil.jpeojtrs.sca.sad.provider.SadItemProviderAdapterFactory; import org.eclipse.emf.common.command.Command; import org.eclipse.emf.common.notify.AdapterFactory; import org.eclipse.emf.edit.command.SetCommand; import org.eclipse.emf.edit.provider.IDisposable; import org.eclipse.emf.edit.ui.provider.AdapterFactoryContentProvider; import org.eclipse.emf.edit.ui.provider.AdapterFactoryLabelProvider; import org.eclipse.emf.transaction.TransactionalEditingDomain; import org.eclipse.emf.transaction.util.TransactionUtil; import org.eclipse.jface.layout.GridDataFactory; import org.eclipse.jface.viewers.CellEditor; import org.eclipse.jface.viewers.ColumnWeightData; import org.eclipse.jface.viewers.EditingSupport; import org.eclipse.jface.viewers.TableLayout; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.jface.viewers.TableViewerColumn; import org.eclipse.jface.viewers.TextCellEditor; import org.eclipse.jface.viewers.Viewer; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Table; import org.eclipse.ui.IActionBars; import org.eclipse.ui.forms.widgets.FormToolkit; import gov.redhawk.ui.editor.IScaComposite; /** * */ public class ExternalPortsComposite extends Composite implements IScaComposite { private final AdapterFactory adapterFactory; private final FormToolkit toolkit; private final IActionBars actionBars; private TableViewer tableViewer; private Button addButton; private Button removeButton; public ExternalPortsComposite(final Composite parent, final int style, final FormToolkit toolkit, final IActionBars actionBars) { super(parent, style); this.adapterFactory = createAdapterFactory(); this.toolkit = toolkit; this.actionBars = actionBars; this.setLayout(new GridLayout(2, false)); createTable(this); createAddButton(this); createRemoveButton(this); createVerticalSpacer(this); } private void createVerticalSpacer(final ExternalPortsComposite externalPortsComposite) { this.toolkit.createLabel(this, "").setLayoutData(GridDataFactory.fillDefaults().grab(false, true).create()); } private void createRemoveButton(final Composite parent) { this.removeButton = this.toolkit.createButton(parent, "Remove", SWT.PUSH); this.removeButton.setLayoutData(GridDataFactory.fillDefaults().create()); } private void createAddButton(final Composite parent) { this.addButton = this.toolkit.createButton(parent, "Add", SWT.PUSH); this.addButton.setLayoutData(GridDataFactory.fillDefaults().create()); } private void createTable(final Composite parent) { final Table portTable = this.toolkit.createTable(parent, SWT.SINGLE | SWT.FULL_SELECTION); portTable.setHeaderVisible(true); portTable.setLayoutData(GridDataFactory.fillDefaults().grab(true, true).span(1, 3).create()); // SUPPRESS CHECKSTYLE MagicNumber final TableLayout tableLayout = new TableLayout(); tableLayout.addColumnData(new ColumnWeightData(40, 10, true)); // SUPPRESS CHECKSTYLE MagicNumber tableLayout.addColumnData(new ColumnWeightData(30, 10, true)); // SUPPRESS CHECKSTYLE MagicNumber tableLayout.addColumnData(new ColumnWeightData(30, 10, true)); // SUPPRESS CHECKSTYLE MagicNumber portTable.setLayout(tableLayout); this.tableViewer = new TableViewer(portTable); final TableViewerColumn column1 = new TableViewerColumn(this.tableViewer, SWT.LEFT); column1.getColumn().setText("Component"); column1.getColumn().setResizable(true); final TableViewerColumn column2 = new TableViewerColumn(this.tableViewer, SWT.LEFT); column2.getColumn().setText("Port"); column2.getColumn().setResizable(true); final TableViewerColumn column3 = new TableViewerColumn(this.tableViewer, SWT.LEFT); column3.getColumn().setText("External Name"); column3.getColumn().setResizable(true); column3.setEditingSupport(new EditingSupport(tableViewer) { @Override protected void setValue(Object element, Object value) { if (element instanceof Port) { Port port = (Port) element; String newValue = null; if (value instanceof String && ((String) value).length() > 0) { newValue = (String) value; } TransactionalEditingDomain ed = TransactionUtil.getEditingDomain(port); if (ed != null) { Command command = SetCommand.create(ed, port, SadPackage.Literals.PORT__EXTERNAL_NAME, newValue); ed.getCommandStack().execute(command); } else { port.setExternalName(newValue); } } } @Override protected Object getValue(Object element) { if (element instanceof Port) { Port port = (Port) element; return (port.getExternalName() == null) ? "" : port.getExternalName(); } return ""; } @Override protected CellEditor getCellEditor(Object element) { return new TextCellEditor(tableViewer.getTable(), SWT.None); } @Override protected boolean canEdit(Object element) { return true; } }); this.tableViewer.setContentProvider(new AdapterFactoryContentProvider(this.adapterFactory)); this.tableViewer.setLabelProvider(new AdapterFactoryLabelProvider(this.adapterFactory)); } @Override public void dispose() { super.dispose(); if (this.adapterFactory instanceof IDisposable) { ((IDisposable) this.adapterFactory).dispose(); } } private AdapterFactory createAdapterFactory() { return new SadItemProviderAdapterFactory(); } public Viewer getPortViewer() { return this.tableViewer; } public Button getAddButton() { return this.addButton; } public Button getRemoveButton() { return this.removeButton; } public void setEditable(boolean canEdit) { addButton.setEnabled(canEdit); removeButton.setEnabled(canEdit); } }