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
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
35
36
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
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
62
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 }