1 package net.mograsim.plugin.tables;
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.graphics.Color;
8 import org.eclipse.swt.widgets.Composite;
9 import org.eclipse.swt.widgets.Display;
10 import org.eclipse.swt.widgets.Table;
12 public class LazyTableViewer extends TableViewer
14 public static Color highlightColor = Display.getDefault().getSystemColor(SWT.COLOR_YELLOW);
16 public LazyTableViewer(Composite parent, int style)
18 super(parent, style | SWT.VIRTUAL);
21 public LazyTableViewer(Composite parent)
26 public LazyTableViewer(Table table)
31 public void highlightRow(int index, boolean highlight)
33 Table table = getTable();
34 if (index < 0 || index >= table.getItemCount())
36 table.getItem(index).setBackground(highlight ? highlightColor : table.getBackground());
37 ((ILazyContentProvider) getContentProvider()).updateElement(index);
41 public void setContentProvider(IContentProvider provider)
43 if (!(provider instanceof ILazyContentProvider))
44 throw new IllegalArgumentException("Content provider must be an ILazyContentProvider");
45 super.setContentProvider(provider);
52 ILazyContentProvider provider = (ILazyContentProvider) getContentProvider();
54 int startIndex = t.getTopIndex();
55 int numRows = t.getBounds().height / t.getItemHeight();
56 int endIndex = Integer.min(startIndex + numRows + 5, doGetItemCount());
58 for (int i = startIndex; i < endIndex; i++)
60 provider.updateElement(i);