From 020445ceb5c54ee5ff384a7e6b529ee350575b12 Mon Sep 17 00:00:00 2001 From: Daniel Kirschten Date: Mon, 15 Jul 2019 21:32:25 +0200 Subject: [PATCH] Restructured Snippet support: -GUIComponent now supports setting HighLevelStateHandlers -SubmodelComponent supports setting SymbolRenderers / OutlineRenderers --- .../components/mi/nandbased/GUI_rsLatch.java | 17 +--- .../model/components/mi/nandbased/GUIdff.java | 17 +--- .../components/mi/nandbased/GUIdlatch.java | 17 +--- .../components/mi/nandbased/GUIdlatch4.java | 17 +--- .../components/mi/nandbased/GUIram2.java | 17 +--- .../components/mi/nandbased/GUIram4.java | 17 +--- .../mi/nandbased/am2901/GUIAm2901.java | 17 +--- .../mi/nandbased/am2901/GUIAm2901QReg.java | 17 +--- .../editor/EditableSubmodelComponent.java | 69 ++++------------ .../model/model/components/GUIComponent.java | 17 +++- .../SimpleRectangularSubmodelComponent.java | 27 +------ .../submodels/SubmodelComponent.java | 69 ++++++++++++++-- .../DeserializedSubmodelComponent.java | 81 ++++--------------- .../serializing/SubmodelComponentParams.java | 6 +- .../SubmodelComponentSerializer.java | 4 +- .../SubmodelComponentSnippetSuppliers.java | 4 +- 16 files changed, 132 insertions(+), 281 deletions(-) diff --git a/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/model/components/mi/nandbased/GUI_rsLatch.java b/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/model/components/mi/nandbased/GUI_rsLatch.java index 004aa50b..ba61eda4 100644 --- a/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/model/components/mi/nandbased/GUI_rsLatch.java +++ b/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/model/components/mi/nandbased/GUI_rsLatch.java @@ -15,8 +15,6 @@ import net.mograsim.logic.model.snippets.highlevelstatehandlers.standard.atomic. public class GUI_rsLatch extends SimpleRectangularSubmodelComponent { - private StandardHighLevelStateHandler highLevelStateHandler; - public GUI_rsLatch(ViewModelModifiable model) { this(model, null); @@ -60,21 +58,10 @@ public class GUI_rsLatch extends SimpleRectangularSubmodelComponent new Point(65, 12.5)); GUIWire wire_Q = new GUIWire(submodelModifiable, "_q", cp2, _Q, new Point[0]); - highLevelStateHandler = new StandardHighLevelStateHandler(this); + StandardHighLevelStateHandler highLevelStateHandler = new StandardHighLevelStateHandler(this); highLevelStateHandler.addAtomicHighLevelState("q", WireForcingAtomicHighLevelStateHandler::new).set(Arrays.asList(wireQ), Arrays.asList(wire_Q)); - } - - @Override - public Object getHighLevelState(String stateID) - { - return highLevelStateHandler.getHighLevelState(stateID); - } - - @Override - public void setHighLevelState(String stateID, Object newState) - { - highLevelStateHandler.setHighLevelState(stateID, newState); + setHighLevelStateHandler(highLevelStateHandler); } static diff --git a/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/model/components/mi/nandbased/GUIdff.java b/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/model/components/mi/nandbased/GUIdff.java index 9a17bde9..22d013fc 100644 --- a/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/model/components/mi/nandbased/GUIdff.java +++ b/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/model/components/mi/nandbased/GUIdff.java @@ -13,8 +13,6 @@ import net.mograsim.logic.model.snippets.highlevelstatehandlers.standard.atomic. public class GUIdff extends SimpleRectangularSubmodelComponent { - private StandardHighLevelStateHandler highLevelStateHandler; - public GUIdff(ViewModelModifiable model) { this(model, null); @@ -72,20 +70,9 @@ public class GUIdff extends SimpleRectangularSubmodelComponent new GUIWire(submodelModifiable, _rsLatch2.getPin("Q"), Q); new GUIWire(submodelModifiable, _rsLatch2.getPin("_Q"), _Q); - highLevelStateHandler = new StandardHighLevelStateHandler(this); + StandardHighLevelStateHandler highLevelStateHandler = new StandardHighLevelStateHandler(this); highLevelStateHandler.addAtomicHighLevelState("q", DelegatingAtomicHighLevelStateHandler::new).set(_rsLatch2, "q"); - } - - @Override - public Object getHighLevelState(String stateID) - { - return highLevelStateHandler.getHighLevelState(stateID); - } - - @Override - public void setHighLevelState(String stateID, Object newState) - { - highLevelStateHandler.setHighLevelState(stateID, newState); + setHighLevelStateHandler(highLevelStateHandler); } static diff --git a/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/model/components/mi/nandbased/GUIdlatch.java b/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/model/components/mi/nandbased/GUIdlatch.java index c9c93256..e24c4789 100644 --- a/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/model/components/mi/nandbased/GUIdlatch.java +++ b/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/model/components/mi/nandbased/GUIdlatch.java @@ -13,8 +13,6 @@ import net.mograsim.logic.model.snippets.highlevelstatehandlers.standard.atomic. public class GUIdlatch extends SimpleRectangularSubmodelComponent { - private StandardHighLevelStateHandler highLevelStateHandler; - public GUIdlatch(ViewModelModifiable model) { this(model, null); @@ -61,20 +59,9 @@ public class GUIdlatch extends SimpleRectangularSubmodelComponent new GUIWire(submodelModifiable, _rsLatch.getPin("Q"), Q, new Point[0]); new GUIWire(submodelModifiable, _rsLatch.getPin("_Q"), _Q); - highLevelStateHandler = new StandardHighLevelStateHandler(this); + StandardHighLevelStateHandler highLevelStateHandler = new StandardHighLevelStateHandler(this); highLevelStateHandler.addAtomicHighLevelState("q", DelegatingAtomicHighLevelStateHandler::new).set(_rsLatch, "q"); - } - - @Override - public Object getHighLevelState(String stateID) - { - return highLevelStateHandler.getHighLevelState(stateID); - } - - @Override - public void setHighLevelState(String stateID, Object newState) - { - highLevelStateHandler.setHighLevelState(stateID, newState); + setHighLevelStateHandler(highLevelStateHandler); } static diff --git a/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/model/components/mi/nandbased/GUIdlatch4.java b/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/model/components/mi/nandbased/GUIdlatch4.java index 5f41e6a8..acca4ab2 100644 --- a/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/model/components/mi/nandbased/GUIdlatch4.java +++ b/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/model/components/mi/nandbased/GUIdlatch4.java @@ -15,8 +15,6 @@ import net.mograsim.logic.model.snippets.highlevelstatehandlers.standard.atomic. public class GUIdlatch4 extends SimpleRectangularSubmodelComponent { - private StandardHighLevelStateHandler highLevelStateHandler; - public GUIdlatch4(ViewModelModifiable model) { this(model, null); @@ -77,25 +75,14 @@ public class GUIdlatch4 extends SimpleRectangularSubmodelComponent new GUIWire(submodelModifiable, dlatch3.getPin("Q"), Q3, new Point[0]); new GUIWire(submodelModifiable, dlatch4.getPin("Q"), Q4, new Point[0]); - highLevelStateHandler = new StandardHighLevelStateHandler(this); + StandardHighLevelStateHandler highLevelStateHandler = new StandardHighLevelStateHandler(this); highLevelStateHandler.addAtomicHighLevelState("q1", DelegatingAtomicHighLevelStateHandler::new).set(dlatch1, "q"); highLevelStateHandler.addAtomicHighLevelState("q2", DelegatingAtomicHighLevelStateHandler::new).set(dlatch2, "q"); highLevelStateHandler.addAtomicHighLevelState("q3", DelegatingAtomicHighLevelStateHandler::new).set(dlatch3, "q"); highLevelStateHandler.addAtomicHighLevelState("q4", DelegatingAtomicHighLevelStateHandler::new).set(dlatch4, "q"); highLevelStateHandler.addAtomicHighLevelState("q", BitVectorSplittingAtomicHighLevelStateHandler::new) .set(Arrays.asList("q1", "q2", "q3", "q4"), Arrays.asList(1, 1, 1, 1)); - } - - @Override - public Object getHighLevelState(String stateID) - { - return highLevelStateHandler.getHighLevelState(stateID); - } - - @Override - public void setHighLevelState(String stateID, Object newState) - { - highLevelStateHandler.setHighLevelState(stateID, newState); + setHighLevelStateHandler(highLevelStateHandler); } static diff --git a/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/model/components/mi/nandbased/GUIram2.java b/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/model/components/mi/nandbased/GUIram2.java index ee82f0e7..afd42ae9 100644 --- a/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/model/components/mi/nandbased/GUIram2.java +++ b/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/model/components/mi/nandbased/GUIram2.java @@ -15,8 +15,6 @@ import net.mograsim.logic.model.snippets.highlevelstatehandlers.standard.subcomp public class GUIram2 extends SimpleRectangularSubmodelComponent { - private StandardHighLevelStateHandler highLevelStateHandler; - public GUIram2(ViewModelModifiable model) { this(model, null); @@ -285,25 +283,14 @@ public class GUIram2 extends SimpleRectangularSubmodelComponent new GUIWire(submodelModifiable, andorB11.getPin("Y4"), QB4 , new Point(175, 770), new Point(175, 895), new Point(340, 895), new Point(340, 750)); //@formatter:on - highLevelStateHandler = new StandardHighLevelStateHandler(this); + StandardHighLevelStateHandler highLevelStateHandler = new StandardHighLevelStateHandler(this); highLevelStateHandler.addSubcomponentHighLevelState("c00", DelegatingSubcomponentHighLevelStateHandler::new).set(cell00, null); highLevelStateHandler.addSubcomponentHighLevelState("c01", DelegatingSubcomponentHighLevelStateHandler::new).set(cell01, null); highLevelStateHandler.addSubcomponentHighLevelState("c10", DelegatingSubcomponentHighLevelStateHandler::new).set(cell10, null); highLevelStateHandler.addSubcomponentHighLevelState("c11", DelegatingSubcomponentHighLevelStateHandler::new).set(cell11, null); highLevelStateHandler.addAtomicHighLevelState("q", BitVectorSplittingAtomicHighLevelStateHandler::new) .set(Arrays.asList("c00.q", "c01.q", "c10.q", "c11.q"), Arrays.asList(4, 4, 4, 4)); - } - - @Override - public Object getHighLevelState(String stateID) - { - return highLevelStateHandler.getHighLevelState(stateID); - } - - @Override - public void setHighLevelState(String stateID, Object newState) - { - highLevelStateHandler.setHighLevelState(stateID, newState); + setHighLevelStateHandler(highLevelStateHandler); } static diff --git a/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/model/components/mi/nandbased/GUIram4.java b/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/model/components/mi/nandbased/GUIram4.java index 396e6dbc..a792f5bc 100644 --- a/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/model/components/mi/nandbased/GUIram4.java +++ b/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/model/components/mi/nandbased/GUIram4.java @@ -15,8 +15,6 @@ import net.mograsim.logic.model.snippets.highlevelstatehandlers.standard.subcomp public class GUIram4 extends SimpleRectangularSubmodelComponent { - private StandardHighLevelStateHandler highLevelStateHandler; - public GUIram4(ViewModelModifiable model) { this(model, null); @@ -293,7 +291,7 @@ public class GUIram4 extends SimpleRectangularSubmodelComponent new GUIWire(submodelModifiable, andorA11.getPin("Y4"), QA4 , new Point(195, 770), new Point(195, 895), new Point(325, 895), new Point(325, 350)); //@formatter:on - highLevelStateHandler = new StandardHighLevelStateHandler(this); + StandardHighLevelStateHandler highLevelStateHandler = new StandardHighLevelStateHandler(this); highLevelStateHandler.addSubcomponentHighLevelState("c00", DelegatingSubcomponentHighLevelStateHandler::new).set(cell00, null); highLevelStateHandler.addSubcomponentHighLevelState("c01", DelegatingSubcomponentHighLevelStateHandler::new).set(cell01, null); highLevelStateHandler.addSubcomponentHighLevelState("c10", DelegatingSubcomponentHighLevelStateHandler::new).set(cell10, null); @@ -318,18 +316,7 @@ public class GUIram4 extends SimpleRectangularSubmodelComponent highLevelStateHandler.addAtomicHighLevelState("q", BitVectorSplittingAtomicHighLevelStateHandler::new) .set(Arrays.asList("c00.q", "c01.q", "c10.q", "c11.q"), Arrays.asList(16, 16, 16, 16)); - } - - @Override - public Object getHighLevelState(String stateID) - { - return highLevelStateHandler.getHighLevelState(stateID); - } - - @Override - public void setHighLevelState(String stateID, Object newState) - { - highLevelStateHandler.setHighLevelState(stateID, newState); + setHighLevelStateHandler(highLevelStateHandler); } static diff --git a/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/model/components/mi/nandbased/am2901/GUIAm2901.java b/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/model/components/mi/nandbased/am2901/GUIAm2901.java index 34ae4d7d..418f5f93 100644 --- a/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/model/components/mi/nandbased/am2901/GUIAm2901.java +++ b/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/model/components/mi/nandbased/am2901/GUIAm2901.java @@ -19,8 +19,6 @@ import net.mograsim.logic.model.snippets.highlevelstatehandlers.standard.subcomp public class GUIAm2901 extends SimpleRectangularSubmodelComponent { - private StandardHighLevelStateHandler highLevelStateHandler; - public GUIAm2901(ViewModelModifiable model) { this(model, null); @@ -350,21 +348,10 @@ public class GUIAm2901 extends SimpleRectangularSubmodelComponent new GUIWire(submodelModifiable, cpFneq0, notFneq0.getPin("B"), new Point(315, 455)); new GUIWire(submodelModifiable, notFneq0.getPin("Y"), Feq0, new Point[0]); - highLevelStateHandler = new StandardHighLevelStateHandler(this); + StandardHighLevelStateHandler highLevelStateHandler = new StandardHighLevelStateHandler(this); highLevelStateHandler.addSubcomponentHighLevelState("regs", DelegatingSubcomponentHighLevelStateHandler::new).set(ram, null); highLevelStateHandler.addSubcomponentHighLevelState("qreg", DelegatingSubcomponentHighLevelStateHandler::new).set(qreg, null); - } - - @Override - public Object getHighLevelState(String stateID) - { - return highLevelStateHandler.getHighLevelState(stateID); - } - - @Override - public void setHighLevelState(String stateID, Object newState) - { - highLevelStateHandler.setHighLevelState(stateID, newState); + setHighLevelStateHandler(highLevelStateHandler); } static diff --git a/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/model/components/mi/nandbased/am2901/GUIAm2901QReg.java b/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/model/components/mi/nandbased/am2901/GUIAm2901QReg.java index fcad449f..f4ce8690 100644 --- a/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/model/components/mi/nandbased/am2901/GUIAm2901QReg.java +++ b/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/model/components/mi/nandbased/am2901/GUIAm2901QReg.java @@ -17,8 +17,6 @@ import net.mograsim.logic.model.snippets.highlevelstatehandlers.standard.atomic. public class GUIAm2901QReg extends SimpleRectangularSubmodelComponent { - private StandardHighLevelStateHandler highLevelStateHandler; - public GUIAm2901QReg(ViewModelModifiable model) { this(model, null); @@ -85,25 +83,14 @@ public class GUIAm2901QReg extends SimpleRectangularSubmodelComponent new GUIWire(submodelModifiable, dff3.getPin("Q"), Q3, new Point[0]); new GUIWire(submodelModifiable, dff4.getPin("Q"), Q4, new Point[0]); - highLevelStateHandler = new StandardHighLevelStateHandler(this); + StandardHighLevelStateHandler highLevelStateHandler = new StandardHighLevelStateHandler(this); highLevelStateHandler.addAtomicHighLevelState("q1", DelegatingAtomicHighLevelStateHandler::new).set(dff1, "q"); highLevelStateHandler.addAtomicHighLevelState("q2", DelegatingAtomicHighLevelStateHandler::new).set(dff2, "q"); highLevelStateHandler.addAtomicHighLevelState("q3", DelegatingAtomicHighLevelStateHandler::new).set(dff3, "q"); highLevelStateHandler.addAtomicHighLevelState("q4", DelegatingAtomicHighLevelStateHandler::new).set(dff4, "q"); highLevelStateHandler.addAtomicHighLevelState("q", BitVectorSplittingAtomicHighLevelStateHandler::new) .set(Arrays.asList("q1", "q2", "q3", "q4"), Arrays.asList(1, 1, 1, 1)); - } - - @Override - public Object getHighLevelState(String stateID) - { - return highLevelStateHandler.getHighLevelState(stateID); - } - - @Override - public void setHighLevelState(String stateID, Object newState) - { - highLevelStateHandler.setHighLevelState(stateID, newState); + setHighLevelStateHandler(highLevelStateHandler); } static diff --git a/net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/EditableSubmodelComponent.java b/net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/EditableSubmodelComponent.java index 0dfa4cab..baa02f3f 100644 --- a/net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/EditableSubmodelComponent.java +++ b/net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/EditableSubmodelComponent.java @@ -1,16 +1,11 @@ package net.mograsim.logic.model.editor; -import org.eclipse.swt.graphics.Color; - -import net.haspamelodica.swt.helper.gcs.GeneralGC; -import net.haspamelodica.swt.helper.swtobjectwrappers.Font; -import net.haspamelodica.swt.helper.swtobjectwrappers.Point; -import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle; import net.mograsim.logic.model.model.ViewModelModifiable; import net.mograsim.logic.model.model.wires.MovablePin; -import net.mograsim.logic.model.model.wires.Pin; import net.mograsim.logic.model.serializing.DeserializedSubmodelComponent; -import net.mograsim.preferences.Preferences; +import net.mograsim.logic.model.snippets.outlinerenderers.DefaultOutlineRenderer; +import net.mograsim.logic.model.snippets.symbolrenderers.SimpleRectangularLikeSymbolRenderer; +import net.mograsim.logic.model.snippets.symbolrenderers.SimpleRectangularLikeSymbolRenderer.SimpleRectangularLikeParams; public class EditableSubmodelComponent extends DeserializedSubmodelComponent { @@ -24,56 +19,19 @@ public class EditableSubmodelComponent extends DeserializedSubmodelComponent this.label = label; setSubmodelScale(0.2); addSubmodelInterface(new MovablePin(this, "A Pin", 1, 0, 10)); - - } - - public ViewModelModifiable getSubmodelModifiable() - { - return submodelModifiable; - } - - @Override - protected void renderOutline(GeneralGC gc, Rectangle visibleRegion) - { - Color foreground = Preferences.current().getColor("net.mograsim.logic.model.color.foreground"); - if (foreground != null) - gc.setForeground(foreground); - gc.drawRectangle(getBounds()); - } - - @Override - protected void renderSymbol(GeneralGC gc, Rectangle visibleRegion) - { - Font oldFont = gc.getFont(); - gc.setFont(new Font(oldFont.getName(), labelFontHeight, oldFont.getStyle())); - Point textExtent = gc.textExtent(label); - Color textColor = Preferences.current().getColor("net.mograsim.logic.model.color.text"); - if (textColor != null) - gc.setForeground(textColor); - gc.drawText(label, getPosX() + (getWidth() - textExtent.x) / 2, getPosY() + (getHeight() - textExtent.y) / 2, true); - gc.setFont(new Font(oldFont.getName(), pinNameFontHeight, oldFont.getStyle())); - for (String name : pinsUnmodifiable.keySet()) - { - Pin p = pinsUnmodifiable.get(name); - Point pos = p.getPos(); - gc.drawText(name, pos.x, pos.y, true); - } - gc.setFont(oldFont); - } - - public void setSubmodelScale(double scale) - { - super.setSubmodelScale(scale); - } - - public double getSubmodelScale() - { - return super.getSubmodelScale(); + updateSymbolRenderer(); + setOutlineRenderer(new DefaultOutlineRenderer(this)); } - public void setSize(double width, double height) + private void updateSymbolRenderer() { - super.setSize(width, height); + SimpleRectangularLikeParams rendererParams = new SimpleRectangularLikeParams(); + rendererParams.centerText = label; + rendererParams.centerTextHeight = labelFontHeight; + rendererParams.horizontalComponentCenter = getWidth() / 2; + rendererParams.pinLabelHeight = pinNameFontHeight; + rendererParams.pinLabelMargin = 0; + setSymbolRenderer(new SimpleRectangularLikeSymbolRenderer(this, rendererParams)); } public String getLabel() @@ -84,5 +42,6 @@ public class EditableSubmodelComponent extends DeserializedSubmodelComponent public void setLabel(String label) { this.label = label; + updateSymbolRenderer(); } } diff --git a/net.mograsim.logic.model/src/net/mograsim/logic/model/model/components/GUIComponent.java b/net.mograsim.logic.model/src/net/mograsim/logic/model/model/components/GUIComponent.java index 382d7e37..1cf7460f 100644 --- a/net.mograsim.logic.model/src/net/mograsim/logic/model/model/components/GUIComponent.java +++ b/net.mograsim.logic.model/src/net/mograsim/logic/model/model/components/GUIComponent.java @@ -51,6 +51,9 @@ public abstract class GUIComponent private final List redrawListeners; private final Runnable redrawListenerForSubcomponents; + + private HighLevelStateHandler highLevelStateHandler; + // creation and destruction public GUIComponent(ViewModelModifiable model, String name) @@ -148,6 +151,14 @@ public abstract class GUIComponent // high-level access + /** + * @author Daniel Kirschten + */ + protected void setHighLevelStateHandler(HighLevelStateHandler highLevelStateHandler) + { + this.highLevelStateHandler = highLevelStateHandler; + } + /** * Gets the current value of the given high-level state.
* See {@link HighLevelStateHandler} for an explanation of high-level state IDs. @@ -157,10 +168,9 @@ public abstract class GUIComponent * * @author Daniel Kirschten */ - @SuppressWarnings("static-method") // this method is intended to be overridden public Object getHighLevelState(String stateID) { - throw new IllegalArgumentException("No high level state with ID " + stateID); + return highLevelStateHandler.getHighLevelState(stateID); } /** @@ -172,10 +182,9 @@ public abstract class GUIComponent * * @author Daniel Kirschten */ - @SuppressWarnings({ "static-method", "unused" }) // this method is intended to be overridden public void setHighLevelState(String stateID, Object newState) { - throw new IllegalArgumentException("No high level state with ID " + stateID); + highLevelStateHandler.setHighLevelState(stateID, newState); } // "graphical" operations diff --git a/net.mograsim.logic.model/src/net/mograsim/logic/model/model/components/submodels/SimpleRectangularSubmodelComponent.java b/net.mograsim.logic.model/src/net/mograsim/logic/model/model/components/submodels/SimpleRectangularSubmodelComponent.java index aae72e29..c04e7ae5 100644 --- a/net.mograsim.logic.model/src/net/mograsim/logic/model/model/components/submodels/SimpleRectangularSubmodelComponent.java +++ b/net.mograsim.logic.model/src/net/mograsim/logic/model/model/components/submodels/SimpleRectangularSubmodelComponent.java @@ -6,17 +6,12 @@ import java.util.Collections; import java.util.HashSet; import java.util.List; -import org.eclipse.swt.graphics.Color; - -import net.haspamelodica.swt.helper.gcs.GeneralGC; -import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle; import net.mograsim.logic.model.model.ViewModelModifiable; import net.mograsim.logic.model.model.wires.MovablePin; import net.mograsim.logic.model.model.wires.Pin; -import net.mograsim.logic.model.snippets.Renderer; +import net.mograsim.logic.model.snippets.outlinerenderers.DefaultOutlineRenderer; import net.mograsim.logic.model.snippets.symbolrenderers.SimpleRectangularLikeSymbolRenderer; import net.mograsim.logic.model.snippets.symbolrenderers.SimpleRectangularLikeSymbolRenderer.SimpleRectangularLikeParams; -import net.mograsim.preferences.Preferences; public class SimpleRectangularSubmodelComponent extends SubmodelComponent { @@ -34,8 +29,6 @@ public class SimpleRectangularSubmodelComponent extends SubmodelComponent private final List outputPinNames; private final List outputPinNamesUnmodifiable; - private Renderer symbolRenderer; - public SimpleRectangularSubmodelComponent(ViewModelModifiable model, int logicWidth, String label) { this(model, logicWidth, label, null); @@ -57,7 +50,8 @@ public class SimpleRectangularSubmodelComponent extends SubmodelComponent rendererParams.horizontalComponentCenter = getWidth() / 2; rendererParams.pinLabelHeight = pinNameFontHeight; rendererParams.pinLabelMargin = pinNameMargin; - symbolRenderer = new SimpleRectangularLikeSymbolRenderer(this, rendererParams); + setSymbolRenderer(new SimpleRectangularLikeSymbolRenderer(this, rendererParams)); + setOutlineRenderer(new DefaultOutlineRenderer(this)); } protected void setInputPins(String... pinNames) @@ -106,21 +100,6 @@ public class SimpleRectangularSubmodelComponent extends SubmodelComponent return outputPinNamesUnmodifiable; } - @Override - protected void renderSymbol(GeneralGC gc, Rectangle visibleRegion) - { - symbolRenderer.render(gc, visibleRegion); - } - - @Override - protected void renderOutline(GeneralGC gc, Rectangle visibleRegion) - { - Color foreground = Preferences.current().getColor("net.mograsim.logic.model.color.foreground"); - if (foreground != null) - gc.setForeground(foreground); - gc.drawRectangle(getBounds()); - } - @Override protected Pin addSubmodelInterface(MovablePin supermodelPin) { diff --git a/net.mograsim.logic.model/src/net/mograsim/logic/model/model/components/submodels/SubmodelComponent.java b/net.mograsim.logic.model/src/net/mograsim/logic/model/model/components/submodels/SubmodelComponent.java index b5c1762b..4c1fec7a 100644 --- a/net.mograsim.logic.model/src/net/mograsim/logic/model/model/components/submodels/SubmodelComponent.java +++ b/net.mograsim.logic.model/src/net/mograsim/logic/model/model/components/submodels/SubmodelComponent.java @@ -15,6 +15,7 @@ import net.mograsim.logic.model.model.ViewModelModifiable; import net.mograsim.logic.model.model.components.GUIComponent; import net.mograsim.logic.model.model.wires.MovablePin; import net.mograsim.logic.model.model.wires.Pin; +import net.mograsim.logic.model.snippets.Renderer; /** * A {@link GUIComponent} consisting of another model. A SubmodelComponent can have so-called "interface pins" connecting the @@ -80,6 +81,15 @@ public abstract class SubmodelComponent extends GUIComponent */ private final LogicUIRenderer renderer; + /** + * The {@link Renderer} used to render the symbol of this SubmodelCoponent. + */ + private Renderer symbolRenderer; + /** + * The {@link Renderer} used to render the outline of this SubmodelCoponent. + */ + private Renderer outlineRenderer; + // creation and destruction public SubmodelComponent(ViewModelModifiable model, String name) @@ -269,6 +279,48 @@ public abstract class SubmodelComponent extends GUIComponent return submodelScale; } + /** + * @see #renderSymbol(GeneralGC, Rectangle) + * + * @author Daniel Kirschten + */ + protected void setSymbolRenderer(Renderer symbolRenderer) + { + this.symbolRenderer = symbolRenderer; + requestRedraw(); + } + + /** + * @see #renderSymbol(GeneralGC, Rectangle) + * + * @author Daniel Kirschten + */ + protected Renderer getSymbolRenderer() + { + return symbolRenderer; + } + + /** + * @see #renderOutline(GeneralGC, Rectangle) + * + * @author Daniel Kirschten + */ + protected void setOutlineRenderer(Renderer outlineRenderer) + { + this.outlineRenderer = outlineRenderer; + requestRedraw(); + } + + /** + * @see #renderOutline(GeneralGC, Rectangle) + * + * @author Daniel Kirschten + */ + protected Renderer getOutlineRenderer() + { + return outlineRenderer; + } + @Override public void render(GeneralGC gc, Rectangle visibleRegion) { @@ -297,20 +349,27 @@ public abstract class SubmodelComponent extends GUIComponent renderOutline(gc, visibleRegion); } - // TODO make this a path /** - * Render the outline of this {@link SubmodelComponent}, e.g. the graphical elements that should stay visible if the submodel is drawn. + * Render the symbol of this {@link SubmodelComponent}, e.g. the things that should be hidden if the submodel is drawn. * * @author Daniel Kirschten */ - protected abstract void renderOutline(GeneralGC gc, Rectangle visibleRegion); + protected void renderSymbol(GeneralGC gc, Rectangle visibleRegion) + { + if (symbolRenderer != null) + symbolRenderer.render(gc, visibleRegion); + } /** - * Render the symbol of this {@link SubmodelComponent}, e.g. the things that should be hidden if the submodel is drawn. + * Render the outline of this {@link SubmodelComponent}, e.g. the graphical elements that should stay visible if the submodel is drawn. * * @author Daniel Kirschten */ - protected abstract void renderSymbol(GeneralGC gc, Rectangle visibleRegion); + protected void renderOutline(GeneralGC gc, Rectangle visibleRegion) + { + if (outlineRenderer != null) + outlineRenderer.render(gc, visibleRegion); + } private static double map(double val, double valMin, double valMax, double mapMin, double mapMax) { diff --git a/net.mograsim.logic.model/src/net/mograsim/logic/model/serializing/DeserializedSubmodelComponent.java b/net.mograsim.logic.model/src/net/mograsim/logic/model/serializing/DeserializedSubmodelComponent.java index 0e9be475..8d0016cc 100644 --- a/net.mograsim.logic.model/src/net/mograsim/logic/model/serializing/DeserializedSubmodelComponent.java +++ b/net.mograsim.logic.model/src/net/mograsim/logic/model/serializing/DeserializedSubmodelComponent.java @@ -1,11 +1,7 @@ package net.mograsim.logic.model.serializing; -import java.util.Map; - import com.google.gson.JsonElement; -import net.haspamelodica.swt.helper.gcs.GeneralGC; -import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle; import net.mograsim.logic.model.model.ViewModelModifiable; import net.mograsim.logic.model.model.components.submodels.SubmodelComponent; import net.mograsim.logic.model.model.wires.MovablePin; @@ -13,7 +9,6 @@ import net.mograsim.logic.model.model.wires.Pin; import net.mograsim.logic.model.snippets.HighLevelStateHandler; import net.mograsim.logic.model.snippets.Renderer; -//TODO serialize handlers public class DeserializedSubmodelComponent extends SubmodelComponent { /** @@ -30,10 +25,6 @@ public class DeserializedSubmodelComponent extends SubmodelComponent */ public final JsonElement paramsForSerializingOverride; - private Renderer outlineRenderer; - private Renderer symbolRenderer; - private HighLevelStateHandler highLevelStateHandler; - public DeserializedSubmodelComponent(ViewModelModifiable model, String name, String idForSerializingOverride, JsonElement paramsForSerializingOverride) { @@ -43,59 +34,22 @@ public class DeserializedSubmodelComponent extends SubmodelComponent } @Override - public Object getHighLevelState(String stateID) - { - return highLevelStateHandler.getHighLevelState(stateID); - } - - @Override - public void setHighLevelState(String stateID, Object newState) - { - highLevelStateHandler.setHighLevelState(stateID, newState); - } - - @Override - protected void renderOutline(GeneralGC gc, Rectangle visibleRegion) + public void setSymbolRenderer(Renderer symbolRenderer) { - if (outlineRenderer != null) - outlineRenderer.render(gc, visibleRegion); + super.setSymbolRenderer(symbolRenderer); } @Override - protected void renderSymbol(GeneralGC gc, Rectangle visibleRegion) - { - if (symbolRenderer != null) - symbolRenderer.render(gc, visibleRegion); - } - public void setOutlineRenderer(Renderer outlineRenderer) { - this.outlineRenderer = outlineRenderer; - } - - public Renderer getOutlineRenderer() - { - return outlineRenderer; - } - - public void setSymbolRenderer(Renderer symbolRenderer) - { - this.symbolRenderer = symbolRenderer; - } - - public Renderer getSymbolRenderer() - { - return symbolRenderer; + super.setOutlineRenderer(outlineRenderer); + requestRedraw(); } - public void setHighLevelStateHandler(HighLevelStateHandler highLevelStateHandler) - { - this.highLevelStateHandler = highLevelStateHandler; - } - - public HighLevelStateHandler getHighLevelStateHandler() + @Override + public void setHighLevelStateHandler(HighLevelStateHandler handler) { - return highLevelStateHandler; + super.setHighLevelStateHandler(handler); } public ViewModelModifiable getSubmodelModifiable() @@ -103,12 +57,6 @@ public class DeserializedSubmodelComponent extends SubmodelComponent return submodelModifiable; } - @Override - public double getSubmodelScale() - { - return super.getSubmodelScale(); - } - @Override public void setSubmodelScale(double submodelScale) { @@ -121,12 +69,6 @@ public class DeserializedSubmodelComponent extends SubmodelComponent super.setSize(width, height); } - @Override - public Map getSubmodelMovablePins() - { - return super.getSubmodelMovablePins(); - } - @Override public Pin addSubmodelInterface(MovablePin supermodelPin) { @@ -139,5 +81,12 @@ public class DeserializedSubmodelComponent extends SubmodelComponent super.removeSubmodelInterface(name); } - // TODO static initializer + // TODO only used in EditorCanvas. Replace with setting maxVisibleRegionFillRatioForAlpha0 / min...1. + @Override + public Renderer getOutlineRenderer() + { + return super.getOutlineRenderer(); + } + + // TODO static initializer? } \ No newline at end of file diff --git a/net.mograsim.logic.model/src/net/mograsim/logic/model/serializing/SubmodelComponentParams.java b/net.mograsim.logic.model/src/net/mograsim/logic/model/serializing/SubmodelComponentParams.java index aa7a5fb7..d47b2d98 100644 --- a/net.mograsim.logic.model/src/net/mograsim/logic/model/serializing/SubmodelComponentParams.java +++ b/net.mograsim.logic.model/src/net/mograsim/logic/model/serializing/SubmodelComponentParams.java @@ -19,12 +19,12 @@ public class SubmodelComponentParams public SubmodelParameters submodel; // functionality that needs to be expressed in Java code - public String outlineRendererSnippetID; - public JsonElement outlineRendererParams; - public String symbolRendererSnippetID; public JsonElement symbolRendererParams; + public String outlineRendererSnippetID; + public JsonElement outlineRendererParams; + public String highLevelStateHandlerSnippetID; public JsonElement highLevelStateHandlerParams; diff --git a/net.mograsim.logic.model/src/net/mograsim/logic/model/serializing/SubmodelComponentSerializer.java b/net.mograsim.logic.model/src/net/mograsim/logic/model/serializing/SubmodelComponentSerializer.java index dfcb47a6..3701d9c2 100644 --- a/net.mograsim.logic.model/src/net/mograsim/logic/model/serializing/SubmodelComponentSerializer.java +++ b/net.mograsim.logic.model/src/net/mograsim/logic/model/serializing/SubmodelComponentSerializer.java @@ -170,10 +170,10 @@ public final class SubmodelComponentSerializer DeserializedSubmodelComponent comp = new DeserializedSubmodelComponent(model, name, idForSerializingOverride, paramsForSerializingOverride); comp.setSubmodelScale(params.submodel.innerScale); - comp.setOutlineRenderer(SubmodelComponentSnippetSuppliers.outlineRendererSupplier - .getSnippetSupplier(params.outlineRendererSnippetID).create(comp, params.outlineRendererParams)); comp.setSymbolRenderer(SubmodelComponentSnippetSuppliers.symbolRendererSupplier.getSnippetSupplier(params.symbolRendererSnippetID) .create(comp, params.symbolRendererParams)); + comp.setOutlineRenderer(SubmodelComponentSnippetSuppliers.outlineRendererSupplier + .getSnippetSupplier(params.outlineRendererSnippetID).create(comp, params.outlineRendererParams)); comp.setHighLevelStateHandler(SubmodelComponentSnippetSuppliers.highLevelStateHandlerSupplier .getSnippetSupplier(params.highLevelStateHandlerSnippetID).create(comp, params.highLevelStateHandlerParams)); comp.setSize(params.width, params.height); diff --git a/net.mograsim.logic.model/src/net/mograsim/logic/model/snippets/SubmodelComponentSnippetSuppliers.java b/net.mograsim.logic.model/src/net/mograsim/logic/model/snippets/SubmodelComponentSnippetSuppliers.java index ff6e5549..c6404086 100644 --- a/net.mograsim.logic.model/src/net/mograsim/logic/model/snippets/SubmodelComponentSnippetSuppliers.java +++ b/net.mograsim.logic.model/src/net/mograsim/logic/model/snippets/SubmodelComponentSnippetSuppliers.java @@ -30,8 +30,8 @@ public class SubmodelComponentSnippetSuppliers if (s == null) throw new IOException("Resource not found"); SnippetIDClassNames tmp = JsonHandler.readJson(s, SnippetIDClassNames.class); - tmp.standardOutlineRendererSuppliers.forEach(outlineRendererSupplier::addStandardSnippetID); tmp.standardSymbolRendererSuppliers.forEach(symbolRendererSupplier::addStandardSnippetID); + tmp.standardOutlineRendererSuppliers.forEach(outlineRendererSupplier::addStandardSnippetID); tmp.standardHighLevelStateHandlerSuppliers.forEach(highLevelStateHandlerSupplier::addStandardSnippetID); } catch (Exception e) @@ -43,8 +43,8 @@ public class SubmodelComponentSnippetSuppliers private static class SnippetIDClassNames { - public Map standardOutlineRendererSuppliers; public Map standardSymbolRendererSuppliers; + public Map standardOutlineRendererSuppliers; public Map standardHighLevelStateHandlerSuppliers; } -- 2.17.1