/******************************************************************************* * 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.graphiti.ui.properties; import org.eclipse.emf.common.command.Command; import org.eclipse.emf.ecore.EAttribute; import org.eclipse.emf.edit.command.SetCommand; import org.eclipse.emf.transaction.TransactionalEditingDomain; import org.eclipse.emf.transaction.util.TransactionUtil; import org.eclipse.jface.layout.GridDataFactory; import org.eclipse.jface.layout.TreeColumnLayout; import org.eclipse.jface.viewers.CellEditor; import org.eclipse.jface.viewers.ColumnPixelData; import org.eclipse.jface.viewers.EditingSupport; import org.eclipse.jface.viewers.ITableLabelProvider; import org.eclipse.jface.viewers.TextCellEditor; import org.eclipse.jface.viewers.TreeColumnViewerLabelProvider; import org.eclipse.jface.viewers.TreeViewer; import org.eclipse.jface.viewers.TreeViewerColumn; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Tree; import mil.jpeojtrs.sca.partitioning.PartitioningPackage; import mil.jpeojtrs.sca.partitioning.Requires; /** * Create the tree viewer for the {@link AbstractRequirementsPropertySection} */ public class RequirementsPropertyComposite extends Composite { private TreeViewer treeViewer; private TreeColumnLayout treeColumnLayout; private static final String KEY_COLUMN_LABEL = "ID"; private static final String VALUE_COLUMN_LABEL = "Value"; public RequirementsPropertyComposite(Composite parent, int style, int treeStyle) { super(parent, style); this.setLayout(new GridLayout()); this.setLayoutData(GridDataFactory.fillDefaults().grab(true, true).create()); init(this, treeStyle); } private void init(Composite parent, int treeStyle) { treeColumnLayout = new TreeColumnLayout(); parent.setLayout(treeColumnLayout); treeViewer = createTreeViewer(parent, treeStyle); treeViewer.setContentProvider(new RequirementsContentProvider()); ITableLabelProvider labelProvider = new RequirementsLabelProvider(); treeViewer.setLabelProvider(labelProvider); createColumn(labelProvider, KEY_COLUMN_LABEL); createColumn(labelProvider, VALUE_COLUMN_LABEL); } private TreeViewer createTreeViewer(Composite parent, int style) { final Tree tree = new Tree(parent, style | SWT.FULL_SELECTION); tree.setHeaderVisible(true); tree.setLinesVisible(true); return new TreeViewer(tree); } private void createColumn(ITableLabelProvider labelProvider, String columnLabel) { TreeViewerColumn column = new TreeViewerColumn(treeViewer, SWT.None); treeViewer.getTree().setSortColumn(column.getColumn()); column.getColumn().setMoveable(false); column.getColumn().setResizable(true); column.getColumn().setText(columnLabel); treeColumnLayout.setColumnData(column.getColumn(), new ColumnPixelData(250, column.getColumn().getResizable())); column.setLabelProvider(new TreeColumnViewerLabelProvider(labelProvider)); column.setEditingSupport(createColumnEditingSupport(columnLabel)); } private EditingSupport createColumnEditingSupport(final String columnLabel) { final TextCellEditor cellEditor = new TextCellEditor(treeViewer.getTree()); EditingSupport editingSupport = new EditingSupport(treeViewer) { @Override protected void setValue(Object element, Object value) { Requires requires = (Requires) element; TransactionalEditingDomain editingDomain = TransactionUtil.getEditingDomain(requires); if (editingDomain != null) { EAttribute eAttribute = columnLabel.equals(KEY_COLUMN_LABEL) ? PartitioningPackage.Literals.REQUIRES__ID : PartitioningPackage.Literals.REQUIRES__VALUE; Command command = SetCommand.create(editingDomain, requires, eAttribute, value.toString()); editingDomain.getCommandStack().execute(command); treeViewer.refresh(); } } @Override protected Object getValue(Object element) { if (columnLabel.equals(KEY_COLUMN_LABEL)) { return ((Requires) element).getId(); } return ((Requires) element).getValue(); } @Override protected CellEditor getCellEditor(Object element) { return cellEditor; } @Override protected boolean canEdit(Object element) { return true; } }; return editingSupport; } public TreeViewer getTreeViewer() { return treeViewer; } }