X-Git-Url: https://mograsim.net/gitweb/?a=blobdiff_plain;f=net.mograsim.logic.ui%2Fsrc%2Fnet%2Fmograsim%2Flogic%2Fui%2FLogicUICanvas.java;fp=net.mograsim.logic.ui%2Fsrc%2Fnet%2Fmograsim%2Flogic%2Fui%2FLogicUICanvas.java;h=0000000000000000000000000000000000000000;hb=b5d8c2d71e27350ea7c9314e40df5bb0584271cd;hp=6b99b6b63b56f9035b2471467252229e5f3ed6b0;hpb=69cb6725ef670328959d55649257ded6ac924b33;p=Mograsim.git diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/LogicUICanvas.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/LogicUICanvas.java deleted file mode 100644 index 6b99b6b6..00000000 --- a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/LogicUICanvas.java +++ /dev/null @@ -1,177 +0,0 @@ -package net.mograsim.logic.ui; - -import java.util.ArrayList; -import java.util.List; - -import org.eclipse.swt.SWT; -import org.eclipse.swt.graphics.Color; -import org.eclipse.swt.layout.GridData; -import org.eclipse.swt.layout.GridLayout; -import org.eclipse.swt.widgets.Button; -import org.eclipse.swt.widgets.Combo; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Event; -import org.eclipse.swt.widgets.Label; -import org.eclipse.swt.widgets.Listener; -import org.eclipse.swt.widgets.Shell; -import org.eclipse.swt.widgets.Text; - -import net.haspamelodica.swt.helper.swtobjectwrappers.Point; -import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle; -import net.haspamelodica.swt.helper.zoomablecanvas.ZoomableCanvas; -import net.mograsim.logic.core.types.Bit; -import net.mograsim.logic.core.types.BitVector; -import net.mograsim.logic.ui.model.ViewModel; -import net.mograsim.logic.ui.model.components.GUIComponent; -import net.mograsim.logic.ui.model.components.submodels.SubmodelComponent; -import net.mograsim.logic.ui.model.components.submodels.SubmodelInterface; -import net.mograsim.logic.ui.model.wires.WireCrossPoint; -import net.mograsim.preferences.Preferences; - -/** - * Simulation visualizer canvas. - * - * @author Daniel Kirschten - */ -public class LogicUICanvas extends ZoomableCanvas -{ - private static final boolean OPEN_DEBUG_SETHIGHLEVELSTATE_SHELL = false; - - private final ViewModel model; - - public LogicUICanvas(Composite parent, int style, ViewModel model) - { - super(parent, style); - - this.model = model; - - LogicUIRenderer renderer = new LogicUIRenderer(model); - addZoomedRenderer(gc -> - { - Color background = Preferences.current().getColor("net.mograsim.logic.ui.color.background"); - if (background != null) - setBackground(background);// this.setBackground, not gc.setBackground to have the background fill the canvas - renderer.render(gc, new Rectangle(-offX / zoom, -offY / zoom, gW / zoom, gH / zoom)); - }); - model.addRedrawListener(this::redrawThreadsafe); - - addListener(SWT.MouseDown, this::mouseDown); - - if (OPEN_DEBUG_SETHIGHLEVELSTATE_SHELL) - openDebugSetHighLevelStateShell(model); - } - - private void mouseDown(Event e) - { - if (e.button == 1) - { - Point click = canvasToWorldCoords(e.x, e.y); - for (GUIComponent component : model.getComponentsByName().values()) - if (component.getBounds().contains(click) && component.clicked(click.x, click.y)) - { - redraw(); - break; - } - } - } - - private void openDebugSetHighLevelStateShell(ViewModel model) - { - Shell debugShell = new Shell(); - debugShell.setLayout(new GridLayout(2, false)); - new Label(debugShell, SWT.NONE).setText("Target component: "); - Combo componentSelector = new Combo(debugShell, SWT.DROP_DOWN | SWT.READ_ONLY); - componentSelector.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false)); - List componentsByItemIndex = new ArrayList<>(); - model.addComponentAddedListener(c -> recalculateComponentSelector(componentsByItemIndex, componentSelector, model)); - model.addComponentRemovedListener(c -> recalculateComponentSelector(componentsByItemIndex, componentSelector, model)); - recalculateComponentSelector(componentsByItemIndex, componentSelector, model); - new Label(debugShell, SWT.NONE).setText("Target state ID: "); - Text stateIDText = new Text(debugShell, SWT.SINGLE | SWT.LEAD | SWT.BORDER); - stateIDText.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false)); - new Label(debugShell, SWT.NONE).setText("Value type: "); - Composite radioGroup = new Composite(debugShell, SWT.NONE); - radioGroup.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false)); - GridLayout radioGroupLayout = new GridLayout(2, false); - radioGroupLayout.marginHeight = 0; - radioGroupLayout.marginWidth = 0; - radioGroup.setLayout(radioGroupLayout); - Button radioBit = new Button(radioGroup, SWT.RADIO); - radioBit.setText("Single bit"); - Button radioBitVector = new Button(radioGroup, SWT.RADIO); - radioBitVector.setText("Bitvector"); - new Label(debugShell, SWT.NONE).setText("Value string representation: \n(Bit vectors: MSBit...LSBit)"); - Text valueText = new Text(debugShell, SWT.SINGLE | SWT.LEAD | SWT.BORDER); - valueText.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false)); - Button send = new Button(debugShell, SWT.PUSH); - send.setText("Send!"); - Button get = new Button(debugShell, SWT.PUSH); - get.setText("Get!"); - Text output = new Text(debugShell, SWT.READ_ONLY); - output.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 2, 1)); - Listener sendAction = e -> - { - try - { - int componentIndex = componentSelector.getSelectionIndex(); - if (componentIndex < 0 || componentIndex >= componentsByItemIndex.size()) - throw new RuntimeException("No component selected"); - GUIComponent target = componentsByItemIndex.get(componentIndex); - String valueString = valueText.getText(); - Object value; - if (radioBit.getSelection()) - value = Bit.parse(valueString); - else if (radioBitVector.getSelection()) - value = BitVector.parseMSBFirst(valueString); - else - throw new RuntimeException("No value type selected"); - target.setHighLevelState(stateIDText.getText(), value); - output.setText("Success!"); - } - catch (Exception x) - { - output.setText(x.getClass().getSimpleName() + (x.getMessage() == null ? "" : ": " + x.getMessage())); - } - }; - Listener getAction = e -> - { - try - { - if (componentSelector.getSelectionIndex() >= componentsByItemIndex.size()) - throw new RuntimeException("No valid component selected"); - output.setText("Success! Value: \r\n" - + componentsByItemIndex.get(componentSelector.getSelectionIndex()).getHighLevelState(stateIDText.getText())); - } - catch (Exception x) - { - output.setText(x.getClass().getSimpleName() + (x.getMessage() == null ? "" : ": " + x.getMessage())); - } - }; - send.addListener(SWT.Selection, sendAction); - valueText.addListener(SWT.DefaultSelection, sendAction); - get.addListener(SWT.Selection, getAction); - stateIDText.addListener(SWT.DefaultSelection, getAction); - debugShell.open(); - } - - private void recalculateComponentSelector(List componentsByItemIndex, Combo componentSelector, ViewModel model) - { - componentsByItemIndex.clear(); - componentSelector.setItems(); - addComponentSelectorItems(componentsByItemIndex, "", componentSelector, model); - } - - private void addComponentSelectorItems(List componentsByItemIndex, String base, Combo componentSelector, ViewModel model) - { - for (GUIComponent c : model.getComponentsByName().values()) - if (!(c instanceof WireCrossPoint || c instanceof SubmodelInterface)) - { - String item = base + c.name; - componentsByItemIndex.add(c); - componentSelector.add(item); - if (c instanceof SubmodelComponent) - addComponentSelectorItems(componentsByItemIndex, item + " -> ", componentSelector, ((SubmodelComponent) c).submodel); - } - } - -} \ No newline at end of file