package rtt.ui.editors; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.edit.provider.AdapterFactoryItemDelegator; import org.eclipse.emf.edit.provider.ComposedAdapterFactory; import org.eclipse.emf.edit.provider.IItemPropertyDescriptor; import org.eclipse.jface.layout.TableColumnLayout; import org.eclipse.jface.viewers.ArrayContentProvider; import org.eclipse.jface.viewers.ColumnLabelProvider; import org.eclipse.jface.viewers.ColumnPixelData; import org.eclipse.jface.viewers.ColumnWeightData; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.jface.viewers.TableViewerColumn; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.FillLayout; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; 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.IDetailsPage; import org.eclipse.ui.forms.IFormPart; import org.eclipse.ui.forms.IManagedForm; import org.eclipse.ui.forms.widgets.ExpandableComposite; import org.eclipse.ui.forms.widgets.FormToolkit; import org.eclipse.ui.forms.widgets.Section; import rtt.ui.utils.RttPluginUtil; /** * This {@link IDetailsPage} displays all properties from an * {@link EObject} within a {@link TableViewer}. * @author Christian Oelsner <C.Oelsner@gmail.com> */ public class PropertyDescriptorDetailsPage implements IDetailsPage { private ComposedAdapterFactory adapterFactory; private AdapterFactoryItemDelegator itemDelegator; private FormToolkit toolkit; private TableViewer tableViewer; private EObject currentObject; @Override public void initialize(IManagedForm form) { this.toolkit = form.getToolkit(); if (this.adapterFactory == null) { this.adapterFactory = RttPluginUtil.createFactory(); } if (this.itemDelegator == null) { this.itemDelegator = new AdapterFactoryItemDelegator(adapterFactory); } } @Override public void dispose() { if (this.itemDelegator != null) { itemDelegator = null; } if (this.adapterFactory != null) { adapterFactory.dispose(); adapterFactory = null; } if (tableViewer != null) { tableViewer.getControl().dispose(); tableViewer = null; } } @Override public boolean isDirty() { return false; } @Override public void commit(boolean onSave) { } @Override public boolean setFormInput(Object input) { return false; } @Override public void setFocus() { } @Override public boolean isStale() { return false; } @Override public void refresh() { } @Override public void selectionChanged(IFormPart part, ISelection selection) { if (selection instanceof IStructuredSelection) { IStructuredSelection sSelection = (IStructuredSelection) selection; Object o = sSelection.getFirstElement(); if (o instanceof EObject) { currentObject = (EObject) o; tableViewer.setInput( itemDelegator.getPropertyDescriptors(currentObject)); } } } /** * */ @Override public void createContents(Composite parent) { parent.setLayout(new FillLayout(SWT.HORIZONTAL)); // Section section = toolkit.createSection(parent, ExpandableComposite.EXPANDED | ExpandableComposite.TITLE_BAR); section.setText("Details"); // Composite composite = toolkit.createComposite(section, SWT.NONE); toolkit.paintBordersFor(composite); section.setClient(composite); composite.setLayout(new GridLayout(1, false)); Label explainLabel = toolkit.createLabel(composite, "This table contains additional details of the selected element.", SWT.WRAP); explainLabel.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1)); Composite composite_1 = new Composite(composite, SWT.NONE); composite_1.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1)); composite_1.setBounds(10, 10, 64, 64); TableColumnLayout tclLayout = new TableColumnLayout(); composite_1.setLayout(tclLayout); toolkit.adapt(composite_1); toolkit.paintBordersFor(composite_1); // create a table for displaying data tableViewer = new TableViewer(composite_1, SWT.BORDER | SWT.FULL_SELECTION); Table table = tableViewer.getTable(); table.setHeaderVisible(true); table.setLinesVisible(true); toolkit.paintBordersFor(table); tableViewer.setContentProvider(ArrayContentProvider.getInstance()); // column 1: displaying the id/key of the property TableViewerColumn idViewerColumn = new TableViewerColumn(tableViewer, SWT.NONE); TableColumn keyColumn = idViewerColumn.getColumn(); tclLayout.setColumnData(keyColumn, new ColumnPixelData(100, true, true)); keyColumn.setText("Key"); idViewerColumn.setLabelProvider(new ColumnLabelProvider() { @Override public String getText(Object element) { if (element instanceof IItemPropertyDescriptor) { IItemPropertyDescriptor ipd = (IItemPropertyDescriptor) element; return ipd.getId(currentObject); } return super.getText(element); } }); // column 2: display the value of the property TableViewerColumn valueViewerColumn = new TableViewerColumn(tableViewer, SWT.NONE); TableColumn valueColumn = valueViewerColumn.getColumn(); tclLayout.setColumnData(valueColumn, new ColumnWeightData(1, 150, true)); valueColumn.setText("Value"); valueViewerColumn.setLabelProvider(new ColumnLabelProvider() { @Override public String getText(Object element) { if (element instanceof IItemPropertyDescriptor) { IItemPropertyDescriptor ipd = (IItemPropertyDescriptor) element; return itemDelegator.getText(ipd.getPropertyValue(currentObject)); } return super.getText(element); } }); } }