1 package net.mograsim.plugin.tables.mi;
3 import org.eclipse.jface.viewers.TableViewer;
4 import org.eclipse.jface.viewers.Viewer;
6 import net.mograsim.machine.Machine;
7 import net.mograsim.machine.Machine.ActiveMicroInstructionChangedListener;
8 import net.mograsim.machine.mi.MicroInstructionMemory;
9 import net.mograsim.plugin.util.SingleSWTRequest;
11 public class ActiveInstructionPreviewContentProvider implements InstructionTableContentProvider
13 private TableViewer viewer;
14 private MicroInstructionMemory memory;
15 private InstructionTableRow activeRow;
16 private Machine machine;
17 private SingleSWTRequest requester = new SingleSWTRequest();
19 private ActiveMicroInstructionChangedListener instChanged = (oldAddress, newAddress) ->
21 activeRow = new InstructionTableRow(Long.max(0, newAddress), memory);
22 requester.request(() -> updateElement(0));
25 public ActiveInstructionPreviewContentProvider(TableViewer viewer)
28 viewer.setItemCount(1);
32 public void update(long address)
38 public void inputChanged(Viewer viewer, Object oldInput, Object newInput)
40 memory = (MicroInstructionMemory) newInput;
43 public void setMachine(Machine newMachine)
46 machine.removeActiveMicroInstructionChangedListener(instChanged);
51 instChanged.instructionChanged(-1, 0);
52 machine.addActiveMicroInstructionChangedListener(instChanged);
57 public void updateElement(int index)
59 if (activeRow != null && !viewer.getControl().isDisposed())
60 viewer.replace(activeRow, index);