X-Git-Url: https://mograsim.net/gitweb/?a=blobdiff_plain;f=net.mograsim.plugin.core%2Fsrc%2Fnet%2Fmograsim%2Fplugin%2Ftables%2Fmemory%2FMemoryView.java;fp=net.mograsim.plugin.core%2Fsrc%2Fnet%2Fmograsim%2Fplugin%2Ftables%2Fmemory%2FMemoryView.java;h=ef685f4c8a57370c245bd39df7940ea058b6518a;hb=259c5b8d38b6ed641fd9b5d78fe20969c67015dc;hp=7488ee90a4f30f05a46793f087a237ec75f56f5c;hpb=2fe86b9ccd64afbe485b8290db9f11b93d9943bf;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..ef685f4c 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,6 +1,7 @@ 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; @@ -16,22 +17,24 @@ 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.DisplaySettings; 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 MemoryTableContentProvider provider; private DisplaySettings displaySettings; private String addressFormat; - @SuppressWarnings("unused") @Override public void createPartControl(Composite parent) { @@ -40,6 +43,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,9 +94,6 @@ public class MemoryView extends ViewPart } }); new RadixSelector(parent, displaySettings); - createViewer(parent); - - displaySettings.addObserver(() -> viewer.refresh()); } private void createViewer(Composite parent) @@ -93,7 +105,7 @@ public class MemoryView extends ViewPart 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(); @@ -152,10 +164,22 @@ 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); + } + + @Override + public void setMachine(Optional machine) + { + if (machine.isPresent()) + bindMainMemory(machine.get().getMainMemory()); + } }