// Copyright (c) 2003-2005 by Leif Frenzel - see http://leiffrenzel.de
package net.sf.eclipsefp.haskell.ui.properties.viewerpart;
import org.eclipse.jface.viewers.CheckStateChangedEvent;
import org.eclipse.jface.viewers.CheckboxTableViewer;
import org.eclipse.jface.viewers.ICheckStateListener;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.StructuredViewer;
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;
public abstract class CheckboxTablePart extends SharedPart {
private StructuredViewer viewer;
private Point minSize = null;
public CheckboxTablePart( 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 StructuredViewer createStructuredViewer( final Composite parent,
final int style ) {
int extendedStyle = style | SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER;
CheckboxTableViewer tableViewer
= CheckboxTableViewer.newCheckList( parent, extendedStyle );
tableViewer.addSelectionChangedListener( new ISelectionChangedListener() {
@Override
public void selectionChanged( final SelectionChangedEvent evt ) {
IStructuredSelection ssel = ( IStructuredSelection )evt.getSelection();
CheckboxTablePart.this.selectionChanged( ssel );
}
} );
tableViewer.addCheckStateListener( new ICheckStateListener() {
@Override
public void checkStateChanged( final CheckStateChangedEvent event ) {
Object element = event.getElement();
elementChecked( element, event.getChecked() );
}
} );
return tableViewer;
}
@Override
protected void updateEnabledState() {
getControl().setEnabled( isEnabled() );
super.updateEnabledState();
}
public CheckboxTableViewer getTableViewer() {
return ( CheckboxTableViewer )viewer;
}
// template methods
///////////////////
protected abstract void elementChecked( Object element, boolean checked );
protected abstract void selectionChanged( IStructuredSelection selection );
}