X-Git-Url: https://mograsim.net/gitweb/?a=blobdiff_plain;ds=sidebyside;f=plugins%2Fnet.mograsim.plugin.core%2Fsrc%2Fnet%2Fmograsim%2Fplugin%2Ftables%2Fmi%2FInstructionTable.java;h=d7c232728942037fe61a40c654f4b5ad93da9207;hb=278fa8f97a6ba31f3cbdd0c65d370563b943eca9;hp=7b17f2404d2f05cd697896de09583cedd28651c3;hpb=a4ef021616f9bf3b6a7778c7b5b6a22d5a7d1c20;p=Mograsim.git diff --git a/plugins/net.mograsim.plugin.core/src/net/mograsim/plugin/tables/mi/InstructionTable.java b/plugins/net.mograsim.plugin.core/src/net/mograsim/plugin/tables/mi/InstructionTable.java index 7b17f240..d7c23272 100644 --- a/plugins/net.mograsim.plugin.core/src/net/mograsim/plugin/tables/mi/InstructionTable.java +++ b/plugins/net.mograsim.plugin.core/src/net/mograsim/plugin/tables/mi/InstructionTable.java @@ -38,19 +38,28 @@ public class InstructionTable private MicroInstructionMemory memory; private InstructionTableContentProvider provider; private final RowHighlighter highlighter; - private final ColorProvider cProv; + private final FontAndColorHelper cProv; + + private final boolean isEditable; public InstructionTable(Composite parent, DisplaySettings displaySettings, IThemeManager themeManager) + { + this(parent, displaySettings, themeManager, true); + } + + public InstructionTable(Composite parent, DisplaySettings displaySettings, IThemeManager themeManager, boolean allowEditing) { viewer = new LazyTableViewer(parent, SWT.FULL_SELECTION | SWT.BORDER | SWT.VIRTUAL); this.displaySettings = displaySettings; - this.cProv = new ColorProvider(viewer, themeManager); + this.cProv = new FontAndColorHelper(viewer, themeManager); this.highlighter = new RowHighlighter(viewer, cProv); + this.isEditable = allowEditing; Table table = viewer.getTable(); table.setHeaderVisible(true); table.setLinesVisible(true); viewer.setUseHashlookup(true); + table.addDisposeListener(e -> dispose()); TableViewerFocusCellManager focusCellManager = new TableViewerFocusCellManager(viewer, new FocusCellOwnerDrawHighlighter(viewer)); @@ -182,22 +191,23 @@ public class InstructionTable switch (parameterClassification.getExpectedType()) { case BOOLEAN_IMMEDIATE: - support = new BooleanEditingSupport(viewer, miDef, index); + support = isEditable ? new BooleanEditingSupport(viewer, miDef, index) : null; provider = new ParameterLabelProvider(cProv, index); break; case INTEGER_IMMEDIATE: - support = new IntegerEditingSupport(viewer, miDef, index, displaySettings, this.provider); + support = isEditable ? new IntegerEditingSupport(viewer, miDef, index, displaySettings, this.provider) : null; provider = new IntegerColumnLabelProvider(displaySettings, cProv, index); break; case MNEMONIC: - support = new MnemonicEditingSupport(viewer, miDef, index, this.provider); + support = isEditable ? new MnemonicEditingSupport(viewer, miDef, index, this.provider) : null; provider = new ParameterLabelProvider(cProv, index); break; default: throw new IllegalStateException( "Unable to create EditingSupport for unknown ParameterType " + parameterClassification.getExpectedType()); } - col.setEditingSupport(support); + if (isEditable) + col.setEditingSupport(support); col.setLabelProvider(provider); col.getColumn().setToolTipText(miDef.getParameterDescription(index).orElse("")); } @@ -257,7 +267,7 @@ public class InstructionTable Display.getDefault().asyncExec(() -> viewer.refresh()); } - public void dispose() + private void dispose() { cProv.dispose(); viewer.getTable().dispose();