/* * JBoss, Home of Professional Open Source. * * See the LEGAL.txt file distributed with this work for information regarding copyright ownership and licensing. * * See the AUTHORS.txt file distributed with this work for a full listing of individual contributors. */ package org.teiid.designer.ui.common.table; import org.eclipse.jface.layout.GridDataFactory; import org.eclipse.jface.layout.TableColumnLayout; import org.eclipse.jface.viewers.ColumnWeightData; import org.eclipse.jface.viewers.IBaseLabelProvider; import org.eclipse.jface.viewers.IContentProvider; import org.eclipse.jface.viewers.IDoubleClickListener; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.jface.viewers.TableViewerColumn; import org.eclipse.jface.viewers.ViewerComparator; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Table; /** * */ public class TableViewerBuilder { /* * Parent single composite for table viewer. Required by the TableColumnLayout */ private final Composite tableComposite; /* * Table column layout that proportions columns in its parent table allowing * the parent composite to be resized. */ private final TableColumnLayout tableColumnLayout; /* * Table Viewer built by this builder */ private final TableViewer tableViewer; /** * @param parent * @param tableViewerStyles */ public TableViewerBuilder(Composite parent, int tableViewerStyles) { // Required due to the use of TableColumnLayout for the child table's layout. tableComposite = new Composite(parent, SWT.NONE); if (parent.getLayout() instanceof GridLayout) GridDataFactory.fillDefaults().grab(true, true).applyTo(tableComposite); // Allows for % weighting of the columns so that Name column is slightly longer tableColumnLayout = new TableColumnLayout(); tableComposite.setLayout(tableColumnLayout); this.tableViewer = new TableViewer(tableComposite, tableViewerStyles); Table table = this.tableViewer.getTable(); table.setHeaderVisible(true); table.setLinesVisible(true); GridDataFactory.fillDefaults().grab(true, true).applyTo(table); } /** * @return the tableComposite */ public Composite getTableComposite() { return this.tableComposite; } /** * @return the tableViewer */ public TableViewer getTableViewer() { return this.tableViewer; } /** * @return table control */ public Table getTable() { return this.tableViewer.getTable(); } /** * @return table control */ public Table getControl() { return getTable(); } /** * @return table viewer's current selection */ public ISelection getSelection() { return this.tableViewer.getSelection(); } /** * Set the table viewer's selection * * @param selection */ public void setSelection(ISelection selection) { this.tableViewer.setSelection(selection); } /** * Set the table viewer's selection * * @param selection * @param reveal */ public void setSelection(ISelection selection, boolean reveal) { this.tableViewer.setSelection(selection, reveal); } /** * @param contentProvider */ public void setContentProvider(IContentProvider contentProvider) { tableViewer.setContentProvider(contentProvider); } /** * @param labelProvider */ public void setLabelProvider(IBaseLabelProvider labelProvider) { tableViewer.setLabelProvider(labelProvider); } /** * @param comparator */ public void setComparator(ViewerComparator comparator) { tableViewer.setComparator(comparator); } /** * @param selectionChangedListener */ public void addSelectionChangedListener(ISelectionChangedListener selectionChangedListener) { this.tableViewer.addSelectionChangedListener(selectionChangedListener); } /** * @param doubleClickListener */ public void addDoubleClickListener(IDoubleClickListener doubleClickListener) { this.tableViewer.addDoubleClickListener(doubleClickListener); } /** * @param columnStyle * @param weight * @param minSize * @param resizeable * @return new column added to the table viewer with the given weight and minimum size */ public TableViewerColumn createColumn(int columnStyle, int weight, int minSize, boolean resizeable) { TableViewerColumn column = new TableViewerColumn(this.tableViewer, columnStyle); this.tableColumnLayout.setColumnData(column.getColumn(), new ColumnWeightData(weight, minSize, resizeable)); return column; } /** * @param input */ public void setInput(Object input) { this.tableViewer.setInput(input); } /** * Refresh the table viewer */ public void refresh() { this.tableViewer.refresh(); } /** * Refresh the table viewer's element * * @param element */ public void refresh(Object element) { this.tableViewer.refresh(element); } /** * Add the given element to the table viewer * * @param element */ public void add(Object element) { this.tableViewer.add(element); } }