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;
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()
@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
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)));
}
}