X-Git-Url: https://mograsim.net/gitweb/?a=blobdiff_plain;f=plugins%2Fnet.mograsim.plugin.core%2Fsrc%2Fnet%2Fmograsim%2Fplugin%2Ftables%2Fmemory%2FMemoryTableContentProvider.java;h=983e822c493c34600acb6c13a264ed1ed1fa5829;hb=14537617db2bdf3f41c82d724871d9f9c0f8e40e;hp=90ad7885c172640b26e70f24022730685868d5c2;hpb=41292b984ee229deb329c83b525006fd2840becb;p=Mograsim.git diff --git a/plugins/net.mograsim.plugin.core/src/net/mograsim/plugin/tables/memory/MemoryTableContentProvider.java b/plugins/net.mograsim.plugin.core/src/net/mograsim/plugin/tables/memory/MemoryTableContentProvider.java index 90ad7885..983e822c 100644 --- a/plugins/net.mograsim.plugin.core/src/net/mograsim/plugin/tables/memory/MemoryTableContentProvider.java +++ b/plugins/net.mograsim.plugin.core/src/net/mograsim/plugin/tables/memory/MemoryTableContentProvider.java @@ -6,33 +6,35 @@ import org.eclipse.jface.viewers.Viewer; import org.eclipse.swt.widgets.Display; import net.mograsim.machine.MainMemory; +import net.mograsim.machine.MainMemoryDefinition; import net.mograsim.machine.Memory.MemoryCellModifiedListener; public class MemoryTableContentProvider implements ILazyContentProvider, MemoryCellModifiedListener { - private long lower; + private long lower, upper; private TableViewer viewer; - private final static int limit = 10_000; - private int amount = 0; + public final static int MAX_VISIBLE_ROWS = 1_000; private MainMemory memory; - public void setLowerBound(long lower) + public void setBounds(long lower, long upper) { if (memory != null) - this.lower = Long.min(memory.getDefinition().getMaximalAddress(), Long.max(memory.getDefinition().getMinimalAddress(), lower)); - else + { + MainMemoryDefinition definition = memory.getDefinition(); + this.lower = Long.min(definition.getMaximalAddress(), Long.max(definition.getMinimalAddress(), lower)); + this.upper = Long.max(this.lower, Long.min(definition.getMaximalAddress(), upper)); + } else + { this.lower = lower; + this.upper = Long.max(this.lower, upper); + } updateItemCount(); } public void updateItemCount() { - if (memory != null) - { - long size = memory.getDefinition().getMaximalAddress() - lower; - viewer.setItemCount(size > amount ? amount : (int) size); - } else - viewer.setItemCount(0); + if (viewer != null) + viewer.setItemCount(getAmount()); } public long getLowerBound() @@ -40,23 +42,25 @@ public class MemoryTableContentProvider implements ILazyContentProvider, MemoryC return lower; } - public void setAmount(int amount) + public long getUpperBound() { - this.amount = Integer.min(amount, limit); - updateItemCount(); + return upper; } public int getAmount() { - return amount; + return (int) (upper - lower); } @Override public void updateElement(int index) { - long address = lower + index; - if (address <= memory.getDefinition().getMaximalAddress()) - viewer.replace(new MemoryTableRow(address, memory), index); + if (index < getAmount()) + { + long address = lower + index; + if (address <= memory.getDefinition().getMaximalAddress()) + viewer.replace(new MemoryTableRow(address, memory), index); + } } @Override @@ -68,7 +72,7 @@ public class MemoryTableContentProvider implements ILazyContentProvider, MemoryC ((MainMemory) oldInput).deregisterCellModifiedListener(this); if (memory != null) memory.registerCellModifiedListener(this); - setLowerBound(0L); + setBounds(0, MAX_VISIBLE_ROWS); } @Override