From: Fabian Stemmler Date: Mon, 26 Aug 2019 11:10:53 +0000 (+0200) Subject: Switched MemoryView Content Provider to allow for a bigger table X-Git-Url: https://mograsim.net/gitweb/?a=commitdiff_plain;h=7d47064f8673a2ba642118750fa93612d8e63ea7;p=Mograsim.git Switched MemoryView Content Provider to allow for a bigger table --- diff --git a/net.mograsim.plugin.core/src/net/mograsim/plugin/memory/MemoryTableContentProvider.java b/net.mograsim.plugin.core/src/net/mograsim/plugin/memory/MemoryTableContentProvider.java index 1d553e23..3ddb32f4 100644 --- a/net.mograsim.plugin.core/src/net/mograsim/plugin/memory/MemoryTableContentProvider.java +++ b/net.mograsim.plugin.core/src/net/mograsim/plugin/memory/MemoryTableContentProvider.java @@ -1,57 +1,67 @@ package net.mograsim.plugin.memory; -import org.eclipse.jface.viewers.IStructuredContentProvider; +import org.eclipse.jface.viewers.ILazyContentProvider; +import org.eclipse.jface.viewers.TableViewer; +import org.eclipse.jface.viewers.Viewer; import net.mograsim.machine.MainMemory; -public class MemoryTableContentProvider implements IStructuredContentProvider +public class MemoryTableContentProvider implements ILazyContentProvider { private long lower; - private int amount; - public final static int limit = 128; + private TableViewer viewer; + private final static int limit = 10_000; + private int amount = 0; + private MainMemory memory; - @Override - public Object[] getElements(Object arg0) + public void setLowerBound(long lower) { - if (arg0 == null) - return new Object[0]; - MainMemory memory = (MainMemory) arg0; - lower = Long.max(lower, memory.getDefinition().getMinimalAddress()); - Object[] rows = new Object[amount]; - for (int i = 0; i < amount; i++) - rows[i] = new MemoryTableRow(lower + i, memory); - return rows; + if (memory != null) + this.lower = Long.min(memory.getDefinition().getMaximalAddress(), Long.max(memory.getDefinition().getMinimalAddress(), lower)); + else + this.lower = lower; + updateItemCount(); } - /** - * Sets the bounds for the addresses in memory to be provided to the table. - * - * @param lower lower bound for address (inclusive) - * @param amount amount of cells to show; limited to {@link MemoryTableContentProvider#limit} - */ - public void setAddressRange(long lower, int amount) + public void updateItemCount() { - this.lower = lower; - this.amount = Integer.min(Integer.max(amount, 0), limit); + if (memory != null) + { + long size = memory.getDefinition().getMaximalAddress() - lower; + viewer.setItemCount(size > amount ? amount : (int) size); + } else + viewer.setItemCount(0); } - public void setLowerBound(long lower) + public long getLowerBound() { - setAddressRange(lower, amount); + return lower; } public void setAmount(int amount) { - setAddressRange(lower, amount); + this.amount = Integer.min(amount, limit); + updateItemCount(); } - public long getLowerBound() + public int getAmount() { - return lower; + return amount; } - public int getAmount() + @Override + public void updateElement(int index) { - return amount; + long address = lower + index; + if (address <= memory.getDefinition().getMaximalAddress()) + viewer.replace(new MemoryTableRow(address, memory), index); + } + + @Override + public void inputChanged(Viewer viewer, Object oldInput, Object newInput) + { + this.viewer = (TableViewer) viewer; + this.memory = (MainMemory) newInput; + setLowerBound(0L); } } diff --git a/net.mograsim.plugin.core/src/net/mograsim/plugin/memory/MemoryView.java b/net.mograsim.plugin.core/src/net/mograsim/plugin/memory/MemoryView.java index dc03e45e..f00f1c95 100644 --- a/net.mograsim.plugin.core/src/net/mograsim/plugin/memory/MemoryView.java +++ b/net.mograsim.plugin.core/src/net/mograsim/plugin/memory/MemoryView.java @@ -33,7 +33,6 @@ public class MemoryView extends ViewPart @Override public void createPartControl(Composite parent) { - // TODO: externalize Strings! provider = new MemoryTableContentProvider(); displaySettings = new DisplaySettings(); displaySettings.setDataNumberType(NumberType.HEXADECIMAL); @@ -120,13 +119,14 @@ public class MemoryView extends ViewPart private void createViewer(Composite parent) { - viewer = new TableViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION | SWT.BORDER); + viewer = new TableViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION | SWT.BORDER | SWT.VIRTUAL); createColumns(); Table table = viewer.getTable(); table.setHeaderVisible(true); table.setLinesVisible(true); + viewer.setUseHashlookup(true); viewer.setContentProvider(provider); - setMemoryBinding(new WordAddressableMemory(new DefaultMainMemoryDefinition(8, 8, 8L, 256L))); + setMemoryBinding(new WordAddressableMemory(new DefaultMainMemoryDefinition(8, 8, 8L, Long.MAX_VALUE))); getSite().setSelectionProvider(viewer); GridData gd = new GridData();