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=a27f31f33ae02381b37ffb7193f6f2a51a946102;hb=a0fae260c3294a22c172845de26b44b3efb24ee4;hp=aaecc754fcdbd6f08ee510be6b5f568f3ba66f88;hpb=7d05144c25daa53e60fc9ed9fd503546a86567f8;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 aaecc754..a27f31f3 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,9 +6,9 @@ import org.eclipse.jface.viewers.Viewer; import org.eclipse.swt.widgets.Display; import net.mograsim.machine.MainMemory; -import net.mograsim.machine.MemoryObserver; +import net.mograsim.machine.Memory.MemoryCellModifiedListener; -public class MemoryTableContentProvider implements ILazyContentProvider, MemoryObserver +public class MemoryTableContentProvider implements ILazyContentProvider, MemoryCellModifiedListener { private long lower; private TableViewer viewer; @@ -27,12 +27,13 @@ public class MemoryTableContentProvider implements ILazyContentProvider, MemoryO 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) + if (memory != null) + { + long size = memory.getDefinition().getMaximalAddress() - lower; + viewer.setItemCount(size > amount ? amount : (int) size); + } else + viewer.setItemCount(0); } public long getLowerBound() @@ -54,9 +55,12 @@ public class MemoryTableContentProvider implements ILazyContentProvider, MemoryO @Override public void updateElement(int index) { - long address = lower + index; - if (address <= memory.getDefinition().getMaximalAddress()) - viewer.replace(new MemoryTableRow(address, memory), index); + if (index < amount) + { + long address = lower + index; + if (address <= memory.getDefinition().getMaximalAddress()) + viewer.replace(new MemoryTableRow(address, memory), index); + } } @Override @@ -65,15 +69,16 @@ public class MemoryTableContentProvider implements ILazyContentProvider, MemoryO this.viewer = (TableViewer) viewer; this.memory = (MainMemory) newInput; if (oldInput != null) - ((MainMemory) oldInput).deregisterObserver(this); + ((MainMemory) oldInput).deregisterCellModifiedListener(this); if (memory != null) - memory.registerObserver(this); + memory.registerCellModifiedListener(this); setLowerBound(0L); } @Override public void update(long address) { - Display.getDefault().asyncExec(() -> updateElement((int) (address - lower))); + // TODO check if viewer.refresh() does what we expect + Display.getDefault().asyncExec(address == -1 ? viewer::refresh : () -> updateElement((int) (address - lower))); } }