// Copyright (c) 2009-2010 by the projectusus.org contributors
// This software is released under the terms and conditions
// of the Eclipse Public License (EPL) 1.0.
// See http://www.eclipse.org/legal/epl-v10.html for details.
package org.projectusus.ui.viewer;
import org.eclipse.jface.layout.TableColumnLayout;
import org.eclipse.jface.viewers.ColumnWeightData;
import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.ui.part.ViewPart;
public abstract class TableViewPart<T> extends ViewPart {
protected TableViewer viewer;
protected abstract IColumnDesc<T>[] getColumns();
protected abstract IStructuredContentProvider getContentProvider();
protected abstract ColumnDescLabelProvider<T> getLabelProvider();
protected void createViewer( Composite parent ) {
Table table = createTable( parent );
viewer = new TableViewer( table );
viewer.setContentProvider( getContentProvider() );
viewer.setLabelProvider( getLabelProvider() );
}
protected Table createTable( Composite parent ) {
Composite comp = new Composite( parent, SWT.NONE );
int style = SWT.SINGLE | SWT.FULL_SELECTION | SWT.V_SCROLL;
Table result = new Table( comp, style );
TableColumnLayout layout = new TableColumnLayout();
comp.setLayout( layout );
result.setLayoutData( new GridData( SWT.FILL, SWT.FILL, true, true ) );
result.setLinesVisible( true );
result.setHeaderVisible( true );
createColumns( result, layout );
return result;
}
protected void createColumns( Table table, TableColumnLayout layout ) {
for( IColumnDesc<T> columnDesc : getColumns() ) {
UsusTreeColumn ususTreeColumn = new AnnotationReader( columnDesc ).compute();
TableColumn column = new TableColumn( table, ususTreeColumn.align().toSwtStyle() );
ColumnWeightData data = new ColumnWeightData( ususTreeColumn.weight() );
layout.setColumnData( column, data );
column.setText( ususTreeColumn.header() );
}
}
@Override
public void setFocus() {
Control control = viewer.getControl();
if( control != null && !control.isDisposed() ) {
control.setFocus();
}
}
}