package net.sf.eclipsefp.haskell.ui.properties.viewerpart;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.ui.model.WorkbenchViewerComparator;
public abstract class TablePart extends SharedPart {
private TableViewer viewer;
private Point minSize = null;
public TablePart( final String[] buttonLabels ) {
super( buttonLabels );
}
public Control getControl() {
return viewer.getControl();
}
@Override
protected void createMainControl( final Composite parent,
final int style,
final int span ) {
viewer = createStructuredViewer( parent, style );
Control control = viewer.getControl();
GridData gd = new GridData( GridData.FILL_BOTH );
gd.horizontalSpan = span;
control.setLayoutData( gd );
applyMinimumSize();
}
public void setMinimumSize( final int width, final int height ) {
minSize = new Point( width, height );
if( viewer != null ) {
applyMinimumSize();
}
}
private void applyMinimumSize() {
if( minSize != null ) {
GridData gd = ( GridData )viewer.getControl().getLayoutData();
gd.widthHint = minSize.x;
gd.heightHint = minSize.y;
}
}
protected TableViewer createStructuredViewer( final Composite parent,
final int style ) {
int extendedStyle = style | SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER | SWT.MULTI;
TableViewer tableViewer=new TableViewer( parent, extendedStyle );
tableViewer.addSelectionChangedListener( new ISelectionChangedListener() {
@Override
public void selectionChanged( final SelectionChangedEvent evt ) {
IStructuredSelection ssel = ( IStructuredSelection )evt.getSelection();
TablePart.this.selectionChanged( ssel );
}
} );
tableViewer.setComparator( new WorkbenchViewerComparator() );
return tableViewer;
}
@Override
protected void updateEnabledState() {
getControl().setEnabled( isEnabled() );
super.updateEnabledState();
}
public TableViewer getTableViewer() {
return viewer;
}
// template methods
///////////////////
protected abstract void selectionChanged( IStructuredSelection selection );
}