Merge 'transportdelay' into development
[Mograsim.git] / net.mograsim.plugin.core / src / net / mograsim / plugin / tables / LazyTableViewer.java
1 package net.mograsim.plugin.tables;
2
3 import org.eclipse.jface.viewers.IContentProvider;
4 import org.eclipse.jface.viewers.ILazyContentProvider;
5 import org.eclipse.jface.viewers.TableViewer;
6 import org.eclipse.swt.SWT;
7 import org.eclipse.swt.widgets.Composite;
8 import org.eclipse.swt.widgets.Table;
9
10 public class LazyTableViewer extends TableViewer
11 {
12
13         public LazyTableViewer(Composite parent, int style)
14         {
15                 super(parent, style | SWT.VIRTUAL);
16         }
17
18         public LazyTableViewer(Composite parent)
19         {
20                 super(parent);
21         }
22
23         public LazyTableViewer(Table table)
24         {
25                 super(table);
26         }
27
28         @Override
29         public void setContentProvider(IContentProvider provider)
30         {
31                 if (!(provider instanceof ILazyContentProvider))
32                         throw new IllegalArgumentException("Content provider must be an ILazyContentProvider");
33                 super.setContentProvider(provider);
34         }
35
36         public void refreshLazy()
37         {
38                 Table t = getTable();
39                 ILazyContentProvider provider = (ILazyContentProvider) getContentProvider();
40                 doClearAll();
41                 int startIndex = t.getTopIndex();
42                 int numRows = t.getBounds().height / t.getItemHeight();
43                 int endIndex = startIndex + numRows + 5;
44
45                 for (int i = startIndex; i < endIndex; i++)
46                 {
47                         provider.updateElement(i);
48                 }
49         }
50 }