MemoryEditor's Amount field defaults to 100
[Mograsim.git] / plugins / net.mograsim.plugin.core / src / net / mograsim / plugin / tables / memory / MemoryTableContentProvider.java
index aaecc75..a27f31f 100644 (file)
@@ -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)));
        }
 }