X-Git-Url: https://mograsim.net/gitweb/?a=blobdiff_plain;f=plugins%2Fnet.mograsim.plugin.core%2Fsrc%2Fnet%2Fmograsim%2Fplugin%2Ftables%2Fmi%2FInstructionTable.java;h=6ffc93e28abadf3348ad840271542385a041d264;hb=925846da463235961d749c2bd4615e0cb83f4f24;hp=2a3ad6c06e7d58489721170bc3ec97a492836118;hpb=424226156a244e05c560248efeabdf6f8eccc181;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 2a3ad6c0..6ffc93e2 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 @@ -12,11 +12,14 @@ import org.eclipse.jface.viewers.TableViewerColumn; import org.eclipse.jface.viewers.TableViewerEditor; import org.eclipse.jface.viewers.TableViewerFocusCellManager; import org.eclipse.swt.SWT; +import org.eclipse.swt.graphics.Color; +import org.eclipse.swt.graphics.Font; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.TableColumn; +import org.eclipse.ui.themes.IThemeManager; import net.mograsim.machine.mi.MicroInstructionDefinition; import net.mograsim.machine.mi.MicroInstructionMemory; @@ -28,22 +31,27 @@ import net.mograsim.plugin.tables.LazyTableViewer; public class InstructionTable { - protected DisplaySettings displaySettings; - protected LazyTableViewer viewer; + protected final DisplaySettings displaySettings; + protected final LazyTableViewer viewer; private TableViewerColumn[] columns = new TableViewerColumn[0]; private MicroInstructionDefinition miDef; private MicroInstructionMemory memory; private InstructionTableContentProvider provider; + private final RowHighlighter highlighter; + private final FontAndColorHelper cProv; - public InstructionTable(Composite parent, DisplaySettings displaySettings) + public InstructionTable(Composite parent, DisplaySettings displaySettings, IThemeManager themeManager) { viewer = new LazyTableViewer(parent, SWT.FULL_SELECTION | SWT.BORDER | SWT.VIRTUAL); this.displaySettings = displaySettings; + this.cProv = new FontAndColorHelper(viewer, themeManager); + this.highlighter = new RowHighlighter(viewer, cProv); 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)); @@ -77,12 +85,33 @@ public class InstructionTable private void createColumns() { + viewer.getTable().setVisible(false); + int size = miDef.size(); columns = new TableViewerColumn[size + 1]; TableViewerColumn col = createTableViewerColumn("Address"); columns[0] = col; - col.setLabelProvider(new AddressLabelProvider()); + col.setLabelProvider(new AddressLabelProvider() + { + @Override + public Color getBackground(Object element) + { + return cProv.getBackground(element, -1); + } + + @Override + public Color getForeground(Object element) + { + return cProv.getForeground(element, -1); + } + + @Override + public Font getFont(Object element) + { + return cProv.getFont(element, -1); + } + }); String[] columnTitles = new String[size]; @@ -120,6 +149,8 @@ public class InstructionTable } calculateOptimalColumnSize(i + 1, columnTitles[i], longestPossibleContents); } + + viewer.getTable().setVisible(true); } private static String calculateColumnTitle(int startBit, int endBit) @@ -153,15 +184,15 @@ public class InstructionTable { case BOOLEAN_IMMEDIATE: support = new BooleanEditingSupport(viewer, miDef, index); - provider = new ParameterLabelProvider(index); + provider = new ParameterLabelProvider(cProv, index); break; case INTEGER_IMMEDIATE: support = new IntegerEditingSupport(viewer, miDef, index, displaySettings, this.provider); - provider = new IntegerColumnLabelProvider(displaySettings, index); + provider = new IntegerColumnLabelProvider(displaySettings, cProv, index); break; case MNEMONIC: support = new MnemonicEditingSupport(viewer, miDef, index, this.provider); - provider = new ParameterLabelProvider(index); + provider = new ParameterLabelProvider(cProv, index); break; default: throw new IllegalStateException( @@ -226,4 +257,15 @@ public class InstructionTable { Display.getDefault().asyncExec(() -> viewer.refresh()); } + + private void dispose() + { + cProv.dispose(); + viewer.getTable().dispose(); + } + + public void highlight(int row) + { + highlighter.highlight(row); + } }