Added active instruction preview to LogicUIPart
[Mograsim.git] / plugins / 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.graphics.Color;
8 import org.eclipse.swt.widgets.Composite;
9 import org.eclipse.swt.widgets.Display;
10 import org.eclipse.swt.widgets.Table;
11
12 public class LazyTableViewer extends TableViewer
13 {
14         public static Color highlightColor = Display.getDefault().getSystemColor(SWT.COLOR_YELLOW);
15
16         public LazyTableViewer(Composite parent, int style)
17         {
18                 super(parent, style | SWT.VIRTUAL);
19         }
20
21         public LazyTableViewer(Composite parent)
22         {
23                 super(parent);
24         }
25
26         public LazyTableViewer(Table table)
27         {
28                 super(table);
29         }
30
31         public void highlightRow(int index, boolean highlight)
32         {
33                 Table table = getTable();
34                 if (index < 0 || index >= table.getItemCount())
35                         return;
36                 table.getItem(index).setBackground(highlight ? highlightColor : table.getBackground());
37                 ((ILazyContentProvider) getContentProvider()).updateElement(index);
38         }
39
40         @Override
41         public void setContentProvider(IContentProvider provider)
42         {
43                 if (!(provider instanceof ILazyContentProvider))
44                         throw new IllegalArgumentException("Content provider must be an ILazyContentProvider");
45                 super.setContentProvider(provider);
46         }
47
48         @Override
49         public void refresh()
50         {
51                 Table t = getTable();
52                 ILazyContentProvider provider = (ILazyContentProvider) getContentProvider();
53                 doClearAll();
54                 int startIndex = t.getTopIndex();
55                 int numRows = t.getBounds().height / t.getItemHeight();
56                 int endIndex = Integer.min(startIndex + numRows + 5, doGetItemCount());
57
58                 for (int i = startIndex; i < endIndex; i++)
59                 {
60                         provider.updateElement(i);
61                 }
62         }
63 }