Restructured Snippet support:
authorDaniel Kirschten <daniel.kirschten@gmx.de>
Mon, 15 Jul 2019 19:32:25 +0000 (21:32 +0200)
committerDaniel Kirschten <daniel.kirschten@gmx.de>
Mon, 15 Jul 2019 19:32:25 +0000 (21:32 +0200)
-GUIComponent now supports setting HighLevelStateHandlers
-SubmodelComponent supports setting SymbolRenderers / OutlineRenderers

16 files changed:
net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/model/components/mi/nandbased/GUI_rsLatch.java
net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/model/components/mi/nandbased/GUIdff.java
net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/model/components/mi/nandbased/GUIdlatch.java
net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/model/components/mi/nandbased/GUIdlatch4.java
net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/model/components/mi/nandbased/GUIram2.java
net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/model/components/mi/nandbased/GUIram4.java
net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/model/components/mi/nandbased/am2901/GUIAm2901.java
net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/model/components/mi/nandbased/am2901/GUIAm2901QReg.java
net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/EditableSubmodelComponent.java
net.mograsim.logic.model/src/net/mograsim/logic/model/model/components/GUIComponent.java
net.mograsim.logic.model/src/net/mograsim/logic/model/model/components/submodels/SimpleRectangularSubmodelComponent.java
net.mograsim.logic.model/src/net/mograsim/logic/model/model/components/submodels/SubmodelComponent.java
net.mograsim.logic.model/src/net/mograsim/logic/model/serializing/DeserializedSubmodelComponent.java
net.mograsim.logic.model/src/net/mograsim/logic/model/serializing/SubmodelComponentParams.java
net.mograsim.logic.model/src/net/mograsim/logic/model/serializing/SubmodelComponentSerializer.java
net.mograsim.logic.model/src/net/mograsim/logic/model/snippets/SubmodelComponentSnippetSuppliers.java

index 004aa50..ba61eda 100644 (file)
@@ -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
index 9a17bde..22d013f 100644 (file)
@@ -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
index c9c9325..e24c478 100644 (file)
@@ -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
index 5f41e6a..acca4ab 100644 (file)
@@ -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
index ee82f0e..afd42ae 100644 (file)
@@ -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
index 396e6db..a792f5b 100644 (file)
@@ -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
index 34ae4d7..418f5f9 100644 (file)
@@ -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
index fcad449..f4ce869 100644 (file)
@@ -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
index 0dfa4ca..baa02f3 100644 (file)
@@ -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();
        }
 }
index 382d7e3..1cf7460 100644 (file)
@@ -51,6 +51,9 @@ public abstract class GUIComponent
        private final List<Runnable> 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. <br>
         * 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
index aae72e2..c04e7ae 100644 (file)
@@ -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<String> outputPinNames;
        private final List<String> 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)
        {
index b5c1762..4c1fec7 100644 (file)
@@ -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 <code>SubmodelComponent</code> 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)
        {
index 0e9be47..8d0016c 100644 (file)
@@ -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<String, MovablePin> 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
index aa7a5fb..d47b2d9 100644 (file)
@@ -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;
 
index dfcb47a..3701d9c 100644 (file)
@@ -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);
index ff6e554..c640408 100644 (file)
@@ -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<String, String> standardOutlineRendererSuppliers;
                public Map<String, String> standardSymbolRendererSuppliers;
+               public Map<String, String> standardOutlineRendererSuppliers;
                public Map<String, String> standardHighLevelStateHandlerSuppliers;
        }