package org.testng.eclipse.launch.components; import org.testng.eclipse.util.JDTUtil; import java.util.Iterator; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IFolder; import org.eclipse.core.resources.IResource; import org.eclipse.jface.viewers.CheckboxTableViewer; import org.eclipse.jface.viewers.IContentProvider; import org.eclipse.jface.viewers.IStructuredContentProvider; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.ITableColorProvider; import org.eclipse.jface.viewers.ITableLabelProvider; import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.jface.viewers.Viewer; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.TableColumn; public class SelectionTableComposite { private static final int DEFAULT_WIDTH = 50; protected CheckboxTableViewer m_viewer; protected AbstractSelectionTableProvider m_labelProvider; protected IStructuredContentProvider m_contentProvider; protected Object m_content; protected TableColumn[] m_columns; protected boolean[] m_packableColumns; public SelectionTableComposite(final Composite parent, final String[] colNames, final boolean[] packable, final AbstractSelectionTableProvider tableProvider) { Table table = new Table(parent, SWT.CHECK | SWT.HIDE_SELECTION); table.setHeaderVisible(true); table.setRedraw(false); m_packableColumns = packable; m_columns = new TableColumn[colNames.length]; for(int i = 0; i < colNames.length; i++) { m_columns[i] = new TableColumn(table, SWT.LEFT); m_columns[i].setResizable(true); m_columns[i].setText(colNames[i]); } table.setRedraw(true); m_viewer = new CheckboxTableViewer(table); m_labelProvider = tableProvider; m_contentProvider = new SelectionTableContentProvider(); m_viewer.setLabelProvider(m_labelProvider); m_viewer.setContentProvider(m_contentProvider); } public Table getTable() { return m_viewer.getTable(); } public void setInput(Object input) { m_content = input; try { m_viewer.getTable().setRedraw(false); m_viewer.setInput(input); m_viewer.setAllChecked(true); int maxWidth = m_viewer.getTable().getSize().x; int nonPackable = 0; for(int i = 0; i < m_columns.length; i++) { if(!m_packableColumns[i]) { nonPackable++; } } int colWidth = nonPackable != 0 ? maxWidth/nonPackable : DEFAULT_WIDTH; for(int i = 0; i < m_columns.length; i++) { if(m_packableColumns[i]) { m_columns[i].pack(); } else { m_columns[i].setWidth(colWidth); } } } finally { m_viewer.getTable().setRedraw(true); } } public Object[] getCheckedElements() { return m_viewer.getCheckedElements(); } public static abstract class AbstractSelectionTableProvider extends LabelProvider implements ITableLabelProvider { public Image getColumnImage(Object element, int columnIndex) { return null; } protected String getResourceType(IResource resource) { return JDTUtil.getResourceType(resource); } } public static class SelectionTableContentProvider implements IStructuredContentProvider { public Object[] getElements(Object inputElement) { IResource[] rows = new IResource[0]; if(inputElement instanceof IStructuredSelection) { IStructuredSelection elements = (IStructuredSelection) inputElement; rows = new IResource[elements.size()]; int i = 0; for(Iterator it = elements.iterator(); it.hasNext(); ) { rows[i++] = (IResource) it.next(); } } return rows; } public void dispose() { } public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { } } }