Fleshed out LazyTableViewer; Rows can now be highlighted
authorFabian Stemmler <stemmler@in.tum.de>
Sat, 14 Sep 2019 23:57:44 +0000 (01:57 +0200)
committerFabian Stemmler <stemmler@in.tum.de>
Sat, 14 Sep 2019 23:57:44 +0000 (01:57 +0200)
net.mograsim.plugin.core/src/net/mograsim/plugin/tables/LazyTableViewer.java
net.mograsim.plugin.core/src/net/mograsim/plugin/tables/memory/MemoryView.java
net.mograsim.plugin.core/src/net/mograsim/plugin/tables/mi/InstructionView.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++)
                {
index 356428b..1bcc3bc 100644 (file)
@@ -46,7 +46,7 @@ public class MemoryView extends ViewPart implements ContextObserver
                createHeader(parent);
                createViewer(parent);
 
-               displaySettings.addObserver(() -> viewer.refreshLazy());
+               displaySettings.addObserver(() -> viewer.refresh());
 
                setupContextBinding();
        }
index 35b6933..68e8329 100644 (file)
@@ -40,6 +40,7 @@ public class InstructionView extends ViewPart implements ContextObserver
        private MicroInstructionMemory memory;
        private DisplaySettings displaySettings;
        private InstructionTableContentProvider provider;
+       private int highlighted = 0;
 
        @SuppressWarnings("unused")
        @Override
@@ -66,10 +67,17 @@ public class InstructionView extends ViewPart implements ContextObserver
                viewerData.horizontalSpan = 3;
                viewer.getTable().setLayoutData(viewerData);
 
-               displaySettings.addObserver(() -> viewer.refreshLazy());
+               displaySettings.addObserver(() -> viewer.refresh());
                MachineContext.getInstance().registerObserver(this);
        }
 
+       public void highlight(int index)
+       {
+               viewer.highlightRow(highlighted, false);
+               viewer.highlightRow(index, true);
+               viewer.getTable().setTopIndex(index);
+       }
+
        @SuppressWarnings("unused")
        private void setupMenuButtons(Composite parent)
        {
@@ -167,6 +175,7 @@ public class InstructionView extends ViewPart implements ContextObserver
                }
                col.setEditingSupport(support);
                col.setLabelProvider(provider);
+               col.getColumn().setToolTipText(miDef.getParameterDescription(index).orElse(""));
        }
 
        private TableViewerColumn createTableViewerColumn(String title, int bound)