From 3568533e10c7bea628050350e88c0e806c09a85e Mon Sep 17 00:00:00 2001 From: Fabian Stemmler Date: Sat, 31 Aug 2019 16:51:33 +0200 Subject: [PATCH] Refactored MemoryView for extensibility --- .../NumberCellEditingSupport.java} | 30 ++++++++-------- .../NumberCellEditorValidator.java | 2 +- .../tables/NumberColumnLabelProvider.java | 26 ++++++++++++++ .../plugin/tables/memory/DisplaySettings.java | 23 ++++++++++++ .../memory/MemoryCellEditingSupport.java | 29 +++++++++++++++ .../memory/MemoryTableContentProvider.java | 2 +- .../{ => tables}/memory/MemoryTableRow.java | 2 +- .../{ => tables}/memory/MemoryView.java | 36 +++++++------------ .../memory/NumberVerifyListener.java | 2 +- 9 files changed, 110 insertions(+), 42 deletions(-) rename net.mograsim.plugin.core/src/net/mograsim/plugin/{memory/MemoryCellEditingSupport.java => tables/NumberCellEditingSupport.java} (50%) rename net.mograsim.plugin.core/src/net/mograsim/plugin/{memory => tables}/NumberCellEditorValidator.java (91%) create mode 100644 net.mograsim.plugin.core/src/net/mograsim/plugin/tables/NumberColumnLabelProvider.java create mode 100644 net.mograsim.plugin.core/src/net/mograsim/plugin/tables/memory/DisplaySettings.java create mode 100644 net.mograsim.plugin.core/src/net/mograsim/plugin/tables/memory/MemoryCellEditingSupport.java rename net.mograsim.plugin.core/src/net/mograsim/plugin/{ => tables}/memory/MemoryTableContentProvider.java (97%) rename net.mograsim.plugin.core/src/net/mograsim/plugin/{ => tables}/memory/MemoryTableRow.java (87%) rename net.mograsim.plugin.core/src/net/mograsim/plugin/{ => tables}/memory/MemoryView.java (85%) rename net.mograsim.plugin.core/src/net/mograsim/plugin/{ => tables}/memory/NumberVerifyListener.java (94%) diff --git a/net.mograsim.plugin.core/src/net/mograsim/plugin/memory/MemoryCellEditingSupport.java b/net.mograsim.plugin.core/src/net/mograsim/plugin/tables/NumberCellEditingSupport.java similarity index 50% rename from net.mograsim.plugin.core/src/net/mograsim/plugin/memory/MemoryCellEditingSupport.java rename to net.mograsim.plugin.core/src/net/mograsim/plugin/tables/NumberCellEditingSupport.java index 10498f65..7bba426d 100644 --- a/net.mograsim.plugin.core/src/net/mograsim/plugin/memory/MemoryCellEditingSupport.java +++ b/net.mograsim.plugin.core/src/net/mograsim/plugin/tables/NumberCellEditingSupport.java @@ -1,4 +1,4 @@ -package net.mograsim.plugin.memory; +package net.mograsim.plugin.tables; import java.math.BigInteger; @@ -8,15 +8,15 @@ import org.eclipse.jface.viewers.TableViewer; import org.eclipse.jface.viewers.TextCellEditor; import net.mograsim.plugin.asm.AsmNumberUtil; -import net.mograsim.plugin.memory.MemoryView.DisplaySettings; +import net.mograsim.plugin.tables.memory.DisplaySettings; -public class MemoryCellEditingSupport extends EditingSupport +public abstract class NumberCellEditingSupport extends EditingSupport { private final TableViewer viewer; private final CellEditor editor; private final DisplaySettings displaySettings; - public MemoryCellEditingSupport(TableViewer viewer, DisplaySettings displaySettings) + public NumberCellEditingSupport(TableViewer viewer, DisplaySettings displaySettings) { super(viewer); this.viewer = viewer; @@ -26,36 +26,38 @@ public class MemoryCellEditingSupport extends EditingSupport } @Override - protected boolean canEdit(Object element) + final protected boolean canEdit(Object element) { return true; } @Override - protected CellEditor getCellEditor(Object element) + final protected CellEditor getCellEditor(Object element) { return editor; } @Override - protected Object getValue(Object element) + final protected Object getValue(Object element) { - MemoryTableRow row = (MemoryTableRow) element; - return AsmNumberUtil.toString(row.getMemory().getCellAsBigInteger(row.address), displaySettings.getDataNumberType()); + return AsmNumberUtil.toString(getAsBigInteger(element), displaySettings.getDataNumberType()); } @Override - protected void setValue(Object element, Object userInput) + final protected void setValue(Object element, Object userInput) { - MemoryTableRow row = (MemoryTableRow) element; try { - row.getMemory().setCellAsBigInteger(row.address, AsmNumberUtil.valueOf((String) userInput)); + setAsBigInteger(element, AsmNumberUtil.valueOf((String) userInput)); } catch (@SuppressWarnings("unused") NumberFormatException e) { - row.getMemory().setCellAsBigInteger(row.address, BigInteger.valueOf(0)); + setAsBigInteger(element, BigInteger.valueOf(0)); } viewer.update(element, null); } -} \ No newline at end of file + + protected abstract void setAsBigInteger(Object element, BigInteger value); + + protected abstract BigInteger getAsBigInteger(Object element); +} diff --git a/net.mograsim.plugin.core/src/net/mograsim/plugin/memory/NumberCellEditorValidator.java b/net.mograsim.plugin.core/src/net/mograsim/plugin/tables/NumberCellEditorValidator.java similarity index 91% rename from net.mograsim.plugin.core/src/net/mograsim/plugin/memory/NumberCellEditorValidator.java rename to net.mograsim.plugin.core/src/net/mograsim/plugin/tables/NumberCellEditorValidator.java index 236eaa06..e0b445dd 100644 --- a/net.mograsim.plugin.core/src/net/mograsim/plugin/memory/NumberCellEditorValidator.java +++ b/net.mograsim.plugin.core/src/net/mograsim/plugin/tables/NumberCellEditorValidator.java @@ -1,4 +1,4 @@ -package net.mograsim.plugin.memory; +package net.mograsim.plugin.tables; import org.eclipse.jface.viewers.ICellEditorValidator; diff --git a/net.mograsim.plugin.core/src/net/mograsim/plugin/tables/NumberColumnLabelProvider.java b/net.mograsim.plugin.core/src/net/mograsim/plugin/tables/NumberColumnLabelProvider.java new file mode 100644 index 00000000..35f032ac --- /dev/null +++ b/net.mograsim.plugin.core/src/net/mograsim/plugin/tables/NumberColumnLabelProvider.java @@ -0,0 +1,26 @@ +package net.mograsim.plugin.tables; + +import java.math.BigInteger; + +import org.eclipse.jface.viewers.ColumnLabelProvider; + +import net.mograsim.plugin.asm.AsmNumberUtil; +import net.mograsim.plugin.tables.memory.DisplaySettings; + +public abstract class NumberColumnLabelProvider extends ColumnLabelProvider +{ + private DisplaySettings displaySettings; + + public NumberColumnLabelProvider(DisplaySettings displaySettings) + { + this.displaySettings = displaySettings; + } + + @Override + public String getText(Object element) + { + return AsmNumberUtil.toString(getAsBigInteger(element), displaySettings.getDataNumberType()); + } + + public abstract BigInteger getAsBigInteger(Object element); +} \ No newline at end of file diff --git a/net.mograsim.plugin.core/src/net/mograsim/plugin/tables/memory/DisplaySettings.java b/net.mograsim.plugin.core/src/net/mograsim/plugin/tables/memory/DisplaySettings.java new file mode 100644 index 00000000..8816a526 --- /dev/null +++ b/net.mograsim.plugin.core/src/net/mograsim/plugin/tables/memory/DisplaySettings.java @@ -0,0 +1,23 @@ +package net.mograsim.plugin.tables.memory; + +import net.mograsim.plugin.asm.AsmNumberUtil.NumberType; + +public class DisplaySettings +{ + private NumberType dataNumberType; + + public DisplaySettings(NumberType dataNumberType) + { + this.dataNumberType = dataNumberType; + } + + public NumberType getDataNumberType() + { + return dataNumberType; + } + + public void setDataNumberType(NumberType dataNumberType) + { + this.dataNumberType = dataNumberType; + } +} \ No newline at end of file diff --git a/net.mograsim.plugin.core/src/net/mograsim/plugin/tables/memory/MemoryCellEditingSupport.java b/net.mograsim.plugin.core/src/net/mograsim/plugin/tables/memory/MemoryCellEditingSupport.java new file mode 100644 index 00000000..94f1821e --- /dev/null +++ b/net.mograsim.plugin.core/src/net/mograsim/plugin/tables/memory/MemoryCellEditingSupport.java @@ -0,0 +1,29 @@ +package net.mograsim.plugin.tables.memory; + +import java.math.BigInteger; + +import org.eclipse.jface.viewers.TableViewer; + +import net.mograsim.plugin.tables.NumberCellEditingSupport; + +public class MemoryCellEditingSupport extends NumberCellEditingSupport +{ + public MemoryCellEditingSupport(TableViewer viewer, DisplaySettings displaySettings) + { + super(viewer, displaySettings); + } + + @Override + protected void setAsBigInteger(Object element, BigInteger value) + { + MemoryTableRow row = (MemoryTableRow) element; + row.getMemory().setCellAsBigInteger(row.address, value); + } + + @Override + protected BigInteger getAsBigInteger(Object element) + { + MemoryTableRow row = (MemoryTableRow) element; + return row.getMemory().getCellAsBigInteger(row.address); + } +} \ No newline at end of file diff --git a/net.mograsim.plugin.core/src/net/mograsim/plugin/memory/MemoryTableContentProvider.java b/net.mograsim.plugin.core/src/net/mograsim/plugin/tables/memory/MemoryTableContentProvider.java similarity index 97% rename from net.mograsim.plugin.core/src/net/mograsim/plugin/memory/MemoryTableContentProvider.java rename to net.mograsim.plugin.core/src/net/mograsim/plugin/tables/memory/MemoryTableContentProvider.java index 9f2a9e13..aaecc754 100644 --- a/net.mograsim.plugin.core/src/net/mograsim/plugin/memory/MemoryTableContentProvider.java +++ b/net.mograsim.plugin.core/src/net/mograsim/plugin/tables/memory/MemoryTableContentProvider.java @@ -1,4 +1,4 @@ -package net.mograsim.plugin.memory; +package net.mograsim.plugin.tables.memory; import org.eclipse.jface.viewers.ILazyContentProvider; import org.eclipse.jface.viewers.TableViewer; diff --git a/net.mograsim.plugin.core/src/net/mograsim/plugin/memory/MemoryTableRow.java b/net.mograsim.plugin.core/src/net/mograsim/plugin/tables/memory/MemoryTableRow.java similarity index 87% rename from net.mograsim.plugin.core/src/net/mograsim/plugin/memory/MemoryTableRow.java rename to net.mograsim.plugin.core/src/net/mograsim/plugin/tables/memory/MemoryTableRow.java index fa5b6264..6f1c3530 100644 --- a/net.mograsim.plugin.core/src/net/mograsim/plugin/memory/MemoryTableRow.java +++ b/net.mograsim.plugin.core/src/net/mograsim/plugin/tables/memory/MemoryTableRow.java @@ -1,4 +1,4 @@ -package net.mograsim.plugin.memory; +package net.mograsim.plugin.tables.memory; import net.mograsim.machine.MainMemory; diff --git a/net.mograsim.plugin.core/src/net/mograsim/plugin/memory/MemoryView.java b/net.mograsim.plugin.core/src/net/mograsim/plugin/tables/memory/MemoryView.java similarity index 85% rename from net.mograsim.plugin.core/src/net/mograsim/plugin/memory/MemoryView.java rename to net.mograsim.plugin.core/src/net/mograsim/plugin/tables/memory/MemoryView.java index 52547453..98983a66 100644 --- a/net.mograsim.plugin.core/src/net/mograsim/plugin/memory/MemoryView.java +++ b/net.mograsim.plugin.core/src/net/mograsim/plugin/tables/memory/MemoryView.java @@ -1,4 +1,6 @@ -package net.mograsim.plugin.memory; +package net.mograsim.plugin.tables.memory; + +import java.math.BigInteger; import org.eclipse.jface.viewers.ColumnLabelProvider; import org.eclipse.jface.viewers.TableViewer; @@ -17,11 +19,12 @@ import org.eclipse.swt.widgets.TableColumn; import org.eclipse.swt.widgets.Text; import org.eclipse.ui.part.ViewPart; -import net.mograsim.machine.DefaultMainMemoryDefinition; import net.mograsim.machine.MainMemory; +import net.mograsim.machine.MainMemoryDefinition; import net.mograsim.machine.standard.memory.WordAddressableMemory; import net.mograsim.plugin.asm.AsmNumberUtil; import net.mograsim.plugin.asm.AsmNumberUtil.NumberType; +import net.mograsim.plugin.tables.NumberColumnLabelProvider; public class MemoryView extends ViewPart { @@ -34,8 +37,7 @@ public class MemoryView extends ViewPart public void createPartControl(Composite parent) { provider = new MemoryTableContentProvider(); - displaySettings = new DisplaySettings(); - displaySettings.setDataNumberType(NumberType.HEXADECIMAL); + displaySettings = new DisplaySettings(NumberType.HEXADECIMAL); GridLayout layout = new GridLayout(6, false); parent.setLayout(layout); @@ -124,7 +126,7 @@ public class MemoryView extends ViewPart table.setLinesVisible(true); viewer.setUseHashlookup(true); viewer.setContentProvider(provider); - setMemoryBinding(new WordAddressableMemory(new DefaultMainMemoryDefinition(8, 8, 8L, Long.MAX_VALUE))); + setMemoryBinding(new WordAddressableMemory(MainMemoryDefinition.create(8, 8, 8L, Long.MAX_VALUE))); getSite().setSelectionProvider(viewer); GridData gd = new GridData(); @@ -148,19 +150,20 @@ public class MemoryView extends ViewPart public String getText(Object element) { MemoryTableRow row = (MemoryTableRow) element; - return String.format(addressFormat, row.address);// TODO: make the string length dependent on memory address length + return String.format(addressFormat, row.address); } }); col = createTableViewerColumn(titles[1], bounds[1]); - col.setLabelProvider(new ColumnLabelProvider() + col.setLabelProvider(new NumberColumnLabelProvider(displaySettings) { @Override - public String getText(Object element) + public BigInteger getAsBigInteger(Object element) { MemoryTableRow row = (MemoryTableRow) element; - return AsmNumberUtil.toString(row.getMemory().getCellAsBigInteger(row.address), displaySettings.getDataNumberType()); + return row.getMemory().getCellAsBigInteger(row.address); } + }); col.setEditingSupport(new MemoryCellEditingSupport(viewer, displaySettings)); } @@ -188,19 +191,4 @@ public class MemoryView extends ViewPart addressFormat = "0x%0" + hexAddressLength + "X"; viewer.setInput(m); } - - public static class DisplaySettings - { - private AsmNumberUtil.NumberType dataNumberType; - - public AsmNumberUtil.NumberType getDataNumberType() - { - return dataNumberType; - } - - public void setDataNumberType(AsmNumberUtil.NumberType dataNumberType) - { - this.dataNumberType = dataNumberType; - } - } } diff --git a/net.mograsim.plugin.core/src/net/mograsim/plugin/memory/NumberVerifyListener.java b/net.mograsim.plugin.core/src/net/mograsim/plugin/tables/memory/NumberVerifyListener.java similarity index 94% rename from net.mograsim.plugin.core/src/net/mograsim/plugin/memory/NumberVerifyListener.java rename to net.mograsim.plugin.core/src/net/mograsim/plugin/tables/memory/NumberVerifyListener.java index 4e5d11c8..54d71762 100644 --- a/net.mograsim.plugin.core/src/net/mograsim/plugin/memory/NumberVerifyListener.java +++ b/net.mograsim.plugin.core/src/net/mograsim/plugin/tables/memory/NumberVerifyListener.java @@ -1,4 +1,4 @@ -package net.mograsim.plugin.memory; +package net.mograsim.plugin.tables.memory; import org.eclipse.swt.events.VerifyEvent; import org.eclipse.swt.events.VerifyListener; -- 2.17.1