Switched MemoryView Content Provider to allow for a bigger table
[Mograsim.git] / net.mograsim.plugin.core / src / net / mograsim / plugin / memory / MemoryTableContentProvider.java
1 package net.mograsim.plugin.memory;
2
3 import org.eclipse.jface.viewers.ILazyContentProvider;
4 import org.eclipse.jface.viewers.TableViewer;
5 import org.eclipse.jface.viewers.Viewer;
6
7 import net.mograsim.machine.MainMemory;
8
9 public class MemoryTableContentProvider implements ILazyContentProvider
10 {
11         private long lower;
12         private TableViewer viewer;
13         private final static int limit = 10_000;
14         private int amount = 0;
15         private MainMemory memory;
16
17         public void setLowerBound(long lower)
18         {
19                 if (memory != null)
20                         this.lower = Long.min(memory.getDefinition().getMaximalAddress(), Long.max(memory.getDefinition().getMinimalAddress(), lower));
21                 else
22                         this.lower = lower;
23                 updateItemCount();
24         }
25
26         public void updateItemCount()
27         {
28                 if (memory != null)
29                 {
30                         long size = memory.getDefinition().getMaximalAddress() - lower;
31                         viewer.setItemCount(size > amount ? amount : (int) size);
32                 } else
33                         viewer.setItemCount(0);
34         }
35
36         public long getLowerBound()
37         {
38                 return lower;
39         }
40
41         public void setAmount(int amount)
42         {
43                 this.amount = Integer.min(amount, limit);
44                 updateItemCount();
45         }
46
47         public int getAmount()
48         {
49                 return amount;
50         }
51
52         @Override
53         public void updateElement(int index)
54         {
55                 long address = lower + index;
56                 if (address <= memory.getDefinition().getMaximalAddress())
57                         viewer.replace(new MemoryTableRow(address, memory), index);
58         }
59
60         @Override
61         public void inputChanged(Viewer viewer, Object oldInput, Object newInput)
62         {
63                 this.viewer = (TableViewer) viewer;
64                 this.memory = (MainMemory) newInput;
65                 setLowerBound(0L);
66         }
67 }