From 227b60111a67be1f268d89033ddbbf6768131704 Mon Sep 17 00:00:00 2001 From: Fabian Stemmler Date: Sun, 15 Sep 2019 01:57:44 +0200 Subject: [PATCH] Fleshed out LazyTableViewer; Rows can now be highlighted --- .../plugin/tables/LazyTableViewer.java | 18 ++++++++++++++++-- .../plugin/tables/memory/MemoryView.java | 2 +- .../plugin/tables/mi/InstructionView.java | 11 ++++++++++- 3 files changed, 27 insertions(+), 4 deletions(-) diff --git a/net.mograsim.plugin.core/src/net/mograsim/plugin/tables/LazyTableViewer.java b/net.mograsim.plugin.core/src/net/mograsim/plugin/tables/LazyTableViewer.java index e00742f9..1b371e28 100644 --- a/net.mograsim.plugin.core/src/net/mograsim/plugin/tables/LazyTableViewer.java +++ b/net.mograsim.plugin.core/src/net/mograsim/plugin/tables/LazyTableViewer.java @@ -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++) { diff --git a/net.mograsim.plugin.core/src/net/mograsim/plugin/tables/memory/MemoryView.java b/net.mograsim.plugin.core/src/net/mograsim/plugin/tables/memory/MemoryView.java index 356428b4..1bcc3bc1 100644 --- a/net.mograsim.plugin.core/src/net/mograsim/plugin/tables/memory/MemoryView.java +++ b/net.mograsim.plugin.core/src/net/mograsim/plugin/tables/memory/MemoryView.java @@ -46,7 +46,7 @@ public class MemoryView extends ViewPart implements ContextObserver createHeader(parent); createViewer(parent); - displaySettings.addObserver(() -> viewer.refreshLazy()); + displaySettings.addObserver(() -> viewer.refresh()); setupContextBinding(); } diff --git a/net.mograsim.plugin.core/src/net/mograsim/plugin/tables/mi/InstructionView.java b/net.mograsim.plugin.core/src/net/mograsim/plugin/tables/mi/InstructionView.java index 35b6933f..68e83298 100644 --- a/net.mograsim.plugin.core/src/net/mograsim/plugin/tables/mi/InstructionView.java +++ b/net.mograsim.plugin.core/src/net/mograsim/plugin/tables/mi/InstructionView.java @@ -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) -- 2.17.1