View Javadoc
1   package org.argeo.tracker.ui;
2   
3   import org.argeo.cms.util.CmsUtils;
4   import org.argeo.connect.ui.util.JcrViewerDClickListener;
5   import org.eclipse.jface.layout.TableColumnLayout;
6   import org.eclipse.jface.viewers.ColumnWeightData;
7   import org.eclipse.jface.viewers.ILabelProvider;
8   import org.eclipse.jface.viewers.ILazyContentProvider;
9   import org.eclipse.jface.viewers.TableViewer;
10  import org.eclipse.jface.viewers.Viewer;
11  import org.eclipse.swt.SWT;
12  import org.eclipse.swt.widgets.Composite;
13  import org.eclipse.swt.widgets.Table;
14  import org.eclipse.swt.widgets.TableColumn;
15  
16  /** Canonical task list composite */
17  public class TaskVirtualListComposite extends Composite {
18  	private static final long serialVersionUID = 7277540413496825697L;
19  
20  	private TableViewer tableViewer;
21  	private final int rowHeight;
22  
23  	public TaskVirtualListComposite(Composite parent, int style, ILabelProvider labelProvider, int rowHeight) {
24  		super(parent, style);
25  		this.rowHeight = rowHeight;
26  		tableViewer = createListPart(this, labelProvider);
27  	}
28  
29  	public TableViewer getTableViewer() {
30  		return tableViewer;
31  	}
32  
33  	private TableViewer createListPart(Composite parent, ILabelProvider labelProvider) {
34  //		parent.setLayout(EclipseUiUtils.noSpaceGridLayout());
35  //		Composite tableComposite = new Composite(parent, SWT.NO_FOCUS);
36  //		tableComposite.setLayoutData(EclipseUiUtils.fillAll());
37  
38  		int style = SWT.VIRTUAL | SWT.H_SCROLL | SWT.V_SCROLL;
39  		final TableViewer v = new TableViewer(parent, style);
40  		v.setLabelProvider(labelProvider);
41  
42  		TableColumn singleColumn = new TableColumn(v.getTable(), SWT.V_SCROLL);
43  		TableColumnLayout tableColumnLayout = new TableColumnLayout();
44  		tableColumnLayout.setColumnData(singleColumn, new ColumnWeightData(85));
45  		parent.setLayout(tableColumnLayout);
46  
47  		// Corresponding table & style
48  		Table table = v.getTable();
49  		table.setLinesVisible(true);
50  		table.setHeaderVisible(false);
51  		CmsUtils.markup(table);
52  		CmsUtils.setItemHeight(table, rowHeight);
53  
54  		v.setContentProvider(new ILazyContentProvider() {
55  
56  			private static final long serialVersionUID = -3133493667354601923L;
57  			private Object[] elements;
58  
59  			@Override
60  			public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
61  				// IMPORTANT: don't forget this: an exception will be thrown if
62  				// a selected object is not part of the results anymore.
63  				viewer.setSelection(null);
64  				elements = (Object[]) newInput;
65  				int count = newInput != null ? elements.length : 0;
66  				((TableViewer) viewer).setItemCount(count);
67  				viewer.refresh();
68  			}
69  
70  			@Override
71  			public void dispose() {
72  			}
73  
74  			@Override
75  			public void updateElement(int index) {
76  				v.replace(elements[index], index);
77  			}
78  		});
79  		v.addDoubleClickListener(new JcrViewerDClickListener());
80  		return v;
81  	}
82  }