Fleshed out LazyTableViewer; Rows can now be highlighted
[Mograsim.git] / net.mograsim.plugin.core / src / net / mograsim / plugin / tables / LazyTableViewer.java
index e00742f..1b371e2 100644 (file)
@@ -4,11 +4,14 @@ import org.eclipse.jface.viewers.IContentProvider;
 import org.eclipse.jface.viewers.ILazyContentProvider;
 import org.eclipse.jface.viewers.TableViewer;
 import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.Color;
 import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Display;
 import org.eclipse.swt.widgets.Table;
 
 public class LazyTableViewer extends TableViewer
 {
+       public static Color highlightColor = Display.getDefault().getSystemColor(SWT.COLOR_YELLOW);
 
        public LazyTableViewer(Composite parent, int style)
        {
@@ -25,6 +28,16 @@ public class LazyTableViewer extends TableViewer
                super(table);
        }
 
+       public void highlightRow(int index, boolean highlight)
+       {
+               Table table = getTable();
+               if (index < 0 || index >= table.getItemCount())
+                       return;
+               table.getItem(index).setBackground(highlight ? highlightColor : table.getBackground());
+               System.out.println("Infinite loop!!!");
+               ((ILazyContentProvider) getContentProvider()).updateElement(index);
+       }
+
        @Override
        public void setContentProvider(IContentProvider provider)
        {
@@ -33,14 +46,15 @@ public class LazyTableViewer extends TableViewer
                super.setContentProvider(provider);
        }
 
-       public void refreshLazy()
+       @Override
+       public void refresh()
        {
                Table t = getTable();
                ILazyContentProvider provider = (ILazyContentProvider) getContentProvider();
                doClearAll();
                int startIndex = t.getTopIndex();
                int numRows = t.getBounds().height / t.getItemHeight();
-               int endIndex = startIndex + numRows + 5;
+               int endIndex = Integer.min(startIndex + numRows + 5, doGetItemCount());
 
                for (int i = startIndex; i < endIndex; i++)
                {