X-Git-Url: https://mograsim.net/gitweb/?a=blobdiff_plain;f=net.mograsim.plugin.core%2Fsrc%2Fnet%2Fmograsim%2Fplugin%2Ftables%2Fmemory%2FMemoryView.java;h=09368807e2d086b140ce65fff8d750e63b81d44d;hb=8bed58cd47f4e53a0a83e066d38864aa6875502f;hp=7488ee90a4f30f05a46793f087a237ec75f56f5c;hpb=1e6eee9a46051c1e3f841b9675d3337ba3b72ac7;p=Mograsim.git diff --git a/net.mograsim.plugin.core/src/net/mograsim/plugin/tables/memory/MemoryView.java b/net.mograsim.plugin.core/src/net/mograsim/plugin/tables/memory/MemoryView.java index 7488ee90..09368807 100644 --- a/net.mograsim.plugin.core/src/net/mograsim/plugin/tables/memory/MemoryView.java +++ b/net.mograsim.plugin.core/src/net/mograsim/plugin/tables/memory/MemoryView.java @@ -1,9 +1,8 @@ package net.mograsim.plugin.tables.memory; import java.math.BigInteger; +import java.util.Optional; -import org.eclipse.jface.viewers.ColumnLabelProvider; -import org.eclipse.jface.viewers.TableViewer; import org.eclipse.jface.viewers.TableViewerColumn; import org.eclipse.swt.SWT; import org.eclipse.swt.events.VerifyListener; @@ -16,22 +15,25 @@ import org.eclipse.swt.widgets.TableColumn; import org.eclipse.swt.widgets.Text; import org.eclipse.ui.part.ViewPart; +import net.mograsim.machine.Machine; import net.mograsim.machine.MainMemory; import net.mograsim.machine.MainMemoryDefinition; import net.mograsim.machine.standard.memory.WordAddressableMemory; +import net.mograsim.plugin.MachineContext; +import net.mograsim.plugin.MachineContext.ContextObserver; import net.mograsim.plugin.asm.AsmNumberUtil; +import net.mograsim.plugin.tables.AddressLabelProvider; import net.mograsim.plugin.tables.DisplaySettings; +import net.mograsim.plugin.tables.LazyTableViewer; import net.mograsim.plugin.tables.NumberColumnLabelProvider; import net.mograsim.plugin.tables.RadixSelector; -public class MemoryView extends ViewPart +public class MemoryView extends ViewPart implements ContextObserver { - private TableViewer viewer; + private LazyTableViewer viewer; private MemoryTableContentProvider provider; private DisplaySettings displaySettings; - private String addressFormat; - @SuppressWarnings("unused") @Override public void createPartControl(Composite parent) { @@ -40,6 +42,18 @@ public class MemoryView extends ViewPart GridLayout layout = new GridLayout(6, false); parent.setLayout(layout); + + createHeader(parent); + createViewer(parent); + + displaySettings.addObserver(() -> viewer.refresh()); + + setupContextBinding(); + } + + @SuppressWarnings("unused") + private void createHeader(Composite parent) + { Label fromLabel = new Label(parent, SWT.NONE); fromLabel.setText("Address: "); Text fromText = new Text(parent, SWT.BORDER | SWT.SEARCH); @@ -79,21 +93,18 @@ public class MemoryView extends ViewPart } }); new RadixSelector(parent, displaySettings); - createViewer(parent); - - displaySettings.addObserver(() -> viewer.refresh()); } private void createViewer(Composite parent) { - viewer = new TableViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION | SWT.BORDER | SWT.VIRTUAL); + viewer = new LazyTableViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION | SWT.BORDER | SWT.VIRTUAL); createColumns(); Table table = viewer.getTable(); table.setHeaderVisible(true); table.setLinesVisible(true); viewer.setUseHashlookup(true); viewer.setContentProvider(provider); - setMemoryBinding(new WordAddressableMemory(MainMemoryDefinition.create(8, 8, 8L, Long.MAX_VALUE))); + bindMainMemory(new WordAddressableMemory(MainMemoryDefinition.create(8, 8, 8L, Long.MAX_VALUE))); getSite().setSelectionProvider(viewer); GridData gd = new GridData(); @@ -111,15 +122,7 @@ public class MemoryView extends ViewPart int[] bounds = { 100, 100 }; TableViewerColumn col = createTableViewerColumn(titles[0], bounds[0]); - col.setLabelProvider(new ColumnLabelProvider() - { - @Override - public String getText(Object element) - { - MemoryTableRow row = (MemoryTableRow) element; - return String.format(addressFormat, row.address); - } - }); + col.setLabelProvider(new AddressLabelProvider()); col = createTableViewerColumn(titles[1], bounds[1]); col.setLabelProvider(new NumberColumnLabelProvider(displaySettings) @@ -152,10 +155,21 @@ public class MemoryView extends ViewPart viewer.getControl().setFocus(); } - public void setMemoryBinding(MainMemory m) + private void bindMainMemory(MainMemory m) { - int hexAddressLength = Long.toUnsignedString(m.getDefinition().getMaximalAddress(), 16).length(); - addressFormat = "0x%0" + hexAddressLength + "X"; viewer.setInput(m); } + + private void setupContextBinding() + { + MachineContext.getInstance().registerObserver(this); + setMachine(Optional.ofNullable(MachineContext.getInstance().getMachine())); + } + + @Override + public void setMachine(Optional machine) + { + if (machine.isPresent()) + bindMainMemory(machine.get().getMainMemory()); + } }