Merge branch 'development' of https://gitlab.lrz.de/lrr-tum/students/eragp-misim...
authorFabian Stemmler <stemmler@in.tum.de>
Fri, 5 Jul 2019 13:04:12 +0000 (15:04 +0200)
committerFabian Stemmler <stemmler@in.tum.de>
Fri, 5 Jul 2019 13:04:12 +0000 (15:04 +0200)
14 files changed:
net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/submodels/SimpleRectangularSubmodelComponent.java
net.mograsim.logic.ui/src/net/mograsim/logic/ui/serializing/CodeSnippetSupplier.java
net.mograsim.logic.ui/src/net/mograsim/logic/ui/serializing/snippets/Renderer.java
net.mograsim.logic.ui/src/net/mograsim/logic/ui/serializing/snippets/RendererProvider.java [deleted file]
net.mograsim.logic.ui/src/net/mograsim/logic/ui/serializing/snippets/SnippetSupplier.java [new file with mode: 0644]
net.mograsim.logic.ui/src/net/mograsim/logic/ui/serializing/snippets/outlinerenderers/DefaultOutlineRenderer.java [new file with mode: 0644]
net.mograsim.logic.ui/src/net/mograsim/logic/ui/serializing/snippets/outlinerenderers/DefaultOutlineRendererProvider.java [deleted file]
net.mograsim.logic.ui/src/net/mograsim/logic/ui/serializing/snippets/symbolrenderers/CenteredTextSymbolRenderer.java [new file with mode: 0644]
net.mograsim.logic.ui/src/net/mograsim/logic/ui/serializing/snippets/symbolrenderers/CenteredTextSymbolRendererProvider.java [deleted file]
net.mograsim.logic.ui/src/net/mograsim/logic/ui/serializing/snippets/symbolrenderers/DefaultSymbolRenderer.java [new file with mode: 0644]
net.mograsim.logic.ui/src/net/mograsim/logic/ui/serializing/snippets/symbolrenderers/DefaultSymbolRendererProvider.java [deleted file]
net.mograsim.logic.ui/src/net/mograsim/logic/ui/serializing/snippets/symbolrenderers/SimpleRectangularLikeSymbolRenderer.java [new file with mode: 0644]
net.mograsim.logic.ui/src/net/mograsim/logic/ui/serializing/snippets/symbolrenderers/SimpleRectangularLikeSymbolRendererProvider.java [deleted file]
net.mograsim.logic.ui/src/net/mograsim/logic/ui/serializing/standardSnippetIDMapping.json

index 529767e..d7ac643 100644 (file)
@@ -12,14 +12,15 @@ import org.eclipse.swt.graphics.Color;
 import com.google.gson.JsonObject;
 
 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.ui.model.ViewModelModifiable;
 import net.mograsim.logic.ui.model.components.GUIComponent;
 import net.mograsim.logic.ui.model.wires.MovablePin;
 import net.mograsim.logic.ui.model.wires.Pin;
 import net.mograsim.logic.ui.serializing.SubmodelComponentParams;
+import net.mograsim.logic.ui.serializing.snippets.Renderer;
+import net.mograsim.logic.ui.serializing.snippets.symbolrenderers.SimpleRectangularLikeSymbolRenderer;
+import net.mograsim.logic.ui.serializing.snippets.symbolrenderers.SimpleRectangularLikeSymbolRenderer.SimpleRectangularLikeParams;
 import net.mograsim.preferences.Preferences;
 
 public class SimpleRectangularSubmodelComponent extends SubmodelComponent
@@ -38,6 +39,8 @@ 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)
        {
                super(model);
@@ -47,6 +50,14 @@ public class SimpleRectangularSubmodelComponent extends SubmodelComponent
                this.inputPinNamesUnmodifiable = Collections.unmodifiableList(inputPinNames);
                this.outputPinNames = new ArrayList<>();
                this.outputPinNamesUnmodifiable = Collections.unmodifiableList(outputPinNames);
+
+               SimpleRectangularLikeParams rendererParams = new SimpleRectangularLikeParams();
+               rendererParams.centerText = label;
+               rendererParams.centerTextHeight = labelFontHeight;
+               rendererParams.horizontalComponentCenter = getWidth() / 2;
+               rendererParams.pinLabelHeight = pinNameFontHeight;
+               rendererParams.pinLabelMargin = pinNameMargin;
+               symbolRenderer = new SimpleRectangularLikeSymbolRenderer(this, rendererParams);
        }
 
        protected void setInputPins(String... pinNames)
@@ -98,29 +109,7 @@ public class SimpleRectangularSubmodelComponent extends SubmodelComponent
        @Override
        protected void renderSymbol(GeneralGC gc, Rectangle visibleRegion)
        {
-               // TODO code duplication: see SimpleRectagularLikeSymbolRendererProvider
-               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.ui.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 (int i = 0; i < inputPinNames.size(); i++)
-               {
-                       String pinName = inputPinNames.get(i);
-                       textExtent = gc.textExtent(pinName);
-                       gc.drawText(pinName, getPosX() + pinNameMargin, getPosY() + i * pinDistance + (pinDistance - textExtent.y) / 2, true);
-               }
-               for (int i = 0; i < outputPinNames.size(); i++)
-               {
-                       String pinName = outputPinNames.get(i);
-                       textExtent = gc.textExtent(pinName);
-                       gc.drawText(pinName, getPosX() + width - textExtent.x - pinNameMargin,
-                                       getPosY() + i * pinDistance + (pinDistance - textExtent.y) / 2, true);
-               }
-               gc.setFont(oldFont);
+               symbolRenderer.render(gc, visibleRegion);
        }
 
        @Override
index 453e2ac..d6bdbb4 100644 (file)
@@ -5,30 +5,31 @@ import java.io.InputStream;
 import java.util.HashMap;
 import java.util.Map;
 
-import net.mograsim.logic.ui.serializing.snippets.RendererProvider;
-import net.mograsim.logic.ui.serializing.snippets.outlinerenderers.DefaultOutlineRendererProvider;
-import net.mograsim.logic.ui.serializing.snippets.symbolrenderers.DefaultSymbolRendererProvider;
+import net.mograsim.logic.ui.serializing.snippets.Renderer;
+import net.mograsim.logic.ui.serializing.snippets.SnippetSupplier;
+import net.mograsim.logic.ui.serializing.snippets.outlinerenderers.DefaultOutlineRenderer;
+import net.mograsim.logic.ui.serializing.snippets.symbolrenderers.DefaultSymbolRenderer;
 import net.mograsim.logic.ui.util.JsonHandler;
 
 public class CodeSnippetSupplier<S>
 {
        // public static members
-       public static final CodeSnippetSupplier<RendererProvider> symbolRendererProviderSupplier;
-       public static final CodeSnippetSupplier<RendererProvider> outlineRendererProviderSupplier;
+       public static final CodeSnippetSupplier<Renderer> symbolRendererProviderSupplier;
+       public static final CodeSnippetSupplier<Renderer> outlineRendererProviderSupplier;
 
        static
        {
-               symbolRendererProviderSupplier = new CodeSnippetSupplier<>(new DefaultSymbolRendererProvider());
-               outlineRendererProviderSupplier = new CodeSnippetSupplier<>(new DefaultOutlineRendererProvider());
+               symbolRendererProviderSupplier = new CodeSnippetSupplier<>(SnippetSupplier.create(Void.class, DefaultSymbolRenderer::new));
+               outlineRendererProviderSupplier = new CodeSnippetSupplier<>(SnippetSupplier.create(Void.class, DefaultOutlineRenderer::new));
        }
 
        // per-instance members
 
        private final Map<String, String> standardSnippetIDClassNames = new HashMap<>();
-       private final Map<String, S> snippetProvidersForClassNames = new HashMap<>();
-       private final S defaultSnippetProvider;
+       private final Map<String, SnippetSupplier<?, S>> snippetProvidersForClassNames = new HashMap<>();
+       private final SnippetSupplier<?, S> defaultSnippetProvider;
 
-       private CodeSnippetSupplier(S defaultSnippetProvider)
+       private CodeSnippetSupplier(SnippetSupplier<?, S> defaultSnippetProvider)
        {
                this.defaultSnippetProvider = defaultSnippetProvider;
        }
@@ -38,13 +39,13 @@ public class CodeSnippetSupplier<S>
                standardSnippetIDClassNames.put(standardSnippetID, associatedSnippetClassName);
        }
 
-       public void setSnippetProvider(String id, S snippetProvider)
+       public void setSnippetProvider(String id, SnippetSupplier<?, S> snippetProvider)
        {
                snippetProvidersForClassNames.put(id, snippetProvider);
        }
 
        // TODO report errors
-       public S getSnippetProvider(String id)
+       public SnippetSupplier<?, S> getSnippetProvider(String id)
        {
                if (id != null)
                {
@@ -56,7 +57,7 @@ public class CodeSnippetSupplier<S>
                        if (snippetProviderClassName != null)
                        {
                                tryLoadSnippetClass(snippetProviderClassName);
-                               S snippetProvider = snippetProvidersForClassNames.get(snippetProviderClassName);
+                               SnippetSupplier<?, S> snippetProvider = snippetProvidersForClassNames.get(snippetProviderClassName);
                                if (snippetProvider != null)
                                        return snippetProvider;
                        }
index 82e2492..bc0f393 100644 (file)
@@ -5,5 +5,5 @@ import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle;
 
 public interface Renderer
 {
-       public void render(GeneralGC t, Rectangle u);
+       public void render(GeneralGC gc, Rectangle visibleRegion);
 }
\ No newline at end of file
diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/serializing/snippets/RendererProvider.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/serializing/snippets/RendererProvider.java
deleted file mode 100644 (file)
index a178e71..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-package net.mograsim.logic.ui.serializing.snippets;
-
-import com.google.gson.JsonElement;
-
-import net.mograsim.logic.ui.serializing.DeserializedSubmodelComponent;
-
-public interface RendererProvider
-{
-       public Renderer create(DeserializedSubmodelComponent component, JsonElement params);
-}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/serializing/snippets/SnippetSupplier.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/serializing/snippets/SnippetSupplier.java
new file mode 100644 (file)
index 0000000..3adb9e8
--- /dev/null
@@ -0,0 +1,38 @@
+package net.mograsim.logic.ui.serializing.snippets;
+
+import java.util.function.BiFunction;
+
+import com.google.gson.Gson;
+import com.google.gson.JsonElement;
+
+import net.mograsim.logic.ui.model.components.submodels.SubmodelComponent;
+
+public interface SnippetSupplier<P, S>
+{
+       public Class<P> getParamClass();
+
+       public S create(SubmodelComponent component, P params);
+
+       public default S create(SubmodelComponent component, JsonElement params)
+       {
+               return create(component, new Gson().fromJson(params, getParamClass()));
+       }
+
+       public static <P, S> SnippetSupplier<P, S> create(Class<P> paramClass, BiFunction<SubmodelComponent, P, S> supplier)
+       {
+               return new SnippetSupplier<>()
+               {
+                       @Override
+                       public Class<P> getParamClass()
+                       {
+                               return paramClass;
+                       }
+
+                       @Override
+                       public S create(SubmodelComponent component, P params)
+                       {
+                               return supplier.apply(component, params);
+                       }
+               };
+       }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/serializing/snippets/outlinerenderers/DefaultOutlineRenderer.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/serializing/snippets/outlinerenderers/DefaultOutlineRenderer.java
new file mode 100644 (file)
index 0000000..8fe41c6
--- /dev/null
@@ -0,0 +1,37 @@
+package net.mograsim.logic.ui.serializing.snippets.outlinerenderers;
+
+import net.haspamelodica.swt.helper.gcs.GeneralGC;
+import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle;
+import net.mograsim.logic.ui.model.components.GUIComponent;
+import net.mograsim.logic.ui.model.components.submodels.SubmodelComponent;
+import net.mograsim.logic.ui.serializing.CodeSnippetSupplier;
+import net.mograsim.logic.ui.serializing.snippets.Renderer;
+import net.mograsim.logic.ui.serializing.snippets.SnippetSupplier;
+import net.mograsim.preferences.ColorDefinition;
+import net.mograsim.preferences.ColorManager;
+import net.mograsim.preferences.Preferences;
+
+public class DefaultOutlineRenderer implements Renderer
+{
+       private final GUIComponent component;
+
+       public DefaultOutlineRenderer(SubmodelComponent component, @SuppressWarnings("unused") Void params)
+       {
+               this.component = component;
+       }
+
+       @Override
+       public void render(GeneralGC gc, Rectangle visibleRegion)
+       {
+               ColorDefinition fg = Preferences.current().getColorDefinition("net.mograsim.logic.ui.color.foreground");
+               if (fg != null)
+                       gc.setForeground(ColorManager.current().toColor(fg));
+               gc.drawRectangle(component.getBounds());
+       }
+
+       static
+       {
+               CodeSnippetSupplier.outlineRendererProviderSupplier.setSnippetProvider(DefaultOutlineRenderer.class.getCanonicalName(),
+                               SnippetSupplier.create(Void.class, DefaultOutlineRenderer::new));
+       }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/serializing/snippets/outlinerenderers/DefaultOutlineRendererProvider.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/serializing/snippets/outlinerenderers/DefaultOutlineRendererProvider.java
deleted file mode 100644 (file)
index b236aa8..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-package net.mograsim.logic.ui.serializing.snippets.outlinerenderers;
-
-import com.google.gson.JsonElement;
-
-import net.mograsim.logic.ui.serializing.DeserializedSubmodelComponent;
-import net.mograsim.logic.ui.serializing.snippets.Renderer;
-import net.mograsim.logic.ui.serializing.snippets.RendererProvider;
-import net.mograsim.preferences.ColorDefinition;
-import net.mograsim.preferences.ColorManager;
-import net.mograsim.preferences.Preferences;
-
-public class DefaultOutlineRendererProvider implements RendererProvider
-{
-       @Override
-       public Renderer create(DeserializedSubmodelComponent component, JsonElement params)
-       {
-               return (gc, visReg) ->
-               {
-                       ColorDefinition fg = Preferences.current().getColorDefinition("net.mograsim.logic.ui.color.foreground");
-                       if (fg != null)
-                               gc.setForeground(ColorManager.current().toColor(fg));
-                       gc.drawRectangle(component.getBounds());
-               };
-
-       }
-}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/serializing/snippets/symbolrenderers/CenteredTextSymbolRenderer.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/serializing/snippets/symbolrenderers/CenteredTextSymbolRenderer.java
new file mode 100644 (file)
index 0000000..2309f14
--- /dev/null
@@ -0,0 +1,58 @@
+package net.mograsim.logic.ui.serializing.snippets.symbolrenderers;
+
+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.ui.model.components.GUIComponent;
+import net.mograsim.logic.ui.model.components.submodels.SubmodelComponent;
+import net.mograsim.logic.ui.serializing.CodeSnippetSupplier;
+import net.mograsim.logic.ui.serializing.snippets.Renderer;
+import net.mograsim.logic.ui.serializing.snippets.SnippetSupplier;
+import net.mograsim.preferences.ColorDefinition;
+import net.mograsim.preferences.ColorManager;
+import net.mograsim.preferences.Preferences;
+
+/**
+ * Renders a text (<code>"text"</code>) with a given font height (<code>"height"</code>) in the center of the component.
+ * 
+ * @author Daniel Kirschten
+ */
+public class CenteredTextSymbolRenderer implements Renderer
+{
+       private final GUIComponent component;
+       private final CenteredTextParams params;
+
+       public CenteredTextSymbolRenderer(SubmodelComponent component, CenteredTextParams params)
+       {
+               this.component = component;
+               this.params = params;
+
+       }
+
+       @Override
+       public void render(GeneralGC gc, Rectangle visibleRegion)
+       {
+               Font oldFont = gc.getFont();
+               gc.setFont(new Font(oldFont.getName(), params.fontHeight, oldFont.getStyle()));
+               ColorDefinition fg = Preferences.current().getColorDefinition("net.mograsim.logic.ui.color.text");
+               if (fg != null)
+                       gc.setForeground(ColorManager.current().toColor(fg));
+               Point idSize = gc.textExtent(params.text);
+               Rectangle bounds = component.getBounds();
+               gc.drawText(params.text, bounds.x + (bounds.width - idSize.x) / 2, bounds.y + (bounds.height - idSize.y) / 2, true);
+               gc.setFont(oldFont);
+       }
+
+       public static class CenteredTextParams
+       {
+               public String text;
+               public double fontHeight;
+       }
+
+       static
+       {
+               CodeSnippetSupplier.symbolRendererProviderSupplier.setSnippetProvider(CenteredTextSymbolRenderer.class.getCanonicalName(),
+                               SnippetSupplier.create(CenteredTextParams.class, CenteredTextSymbolRenderer::new));
+       }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/serializing/snippets/symbolrenderers/CenteredTextSymbolRendererProvider.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/serializing/snippets/symbolrenderers/CenteredTextSymbolRendererProvider.java
deleted file mode 100644 (file)
index 98e6c43..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-package net.mograsim.logic.ui.serializing.snippets.symbolrenderers;
-
-import com.google.gson.JsonElement;
-import com.google.gson.JsonObject;
-
-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.ui.serializing.CodeSnippetSupplier;
-import net.mograsim.logic.ui.serializing.DeserializedSubmodelComponent;
-import net.mograsim.logic.ui.serializing.snippets.Renderer;
-import net.mograsim.logic.ui.serializing.snippets.RendererProvider;
-import net.mograsim.preferences.ColorDefinition;
-import net.mograsim.preferences.ColorManager;
-import net.mograsim.preferences.Preferences;
-
-/**
- * Renders a text (<code>"text"</code>) with a given font height (<code>"height"</code>) in the center of the component.<br>
- * Parameter format:
- * 
- * <pre>
- * {
- *   "text": [String]
- *   "height": [int]
- * }
- * </pre>
- * 
- * @author Daniel Kirschten
- */
-public class CenteredTextSymbolRendererProvider implements RendererProvider
-{
-       @Override
-       public Renderer create(DeserializedSubmodelComponent component, JsonElement params)
-       {
-               JsonObject asJsonObject = params.getAsJsonObject();
-               String text = asJsonObject.getAsJsonPrimitive("text").getAsString();
-               int fontHeight = asJsonObject.getAsJsonPrimitive("height").getAsInt();
-               return (gc, visReg) ->
-               {
-                       Font oldFont = gc.getFont();
-                       gc.setFont(new Font(oldFont.getName(), fontHeight, oldFont.getStyle()));
-                       ColorDefinition fg = Preferences.current().getColorDefinition("net.mograsim.logic.ui.color.text");
-                       if (fg != null)
-                               gc.setForeground(ColorManager.current().toColor(fg));
-                       Point idSize = gc.textExtent(text);
-                       Rectangle bounds = component.getBounds();
-                       gc.drawText(text, bounds.x + (bounds.width - idSize.x) / 2, bounds.y + (bounds.height - idSize.y) / 2, true);
-                       gc.setFont(oldFont);
-               };
-       }
-
-       static
-       {
-               CodeSnippetSupplier.symbolRendererProviderSupplier.setSnippetProvider(CenteredTextSymbolRendererProvider.class.getCanonicalName(),
-                               new CenteredTextSymbolRendererProvider());
-       }
-}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/serializing/snippets/symbolrenderers/DefaultSymbolRenderer.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/serializing/snippets/symbolrenderers/DefaultSymbolRenderer.java
new file mode 100644 (file)
index 0000000..4600531
--- /dev/null
@@ -0,0 +1,42 @@
+package net.mograsim.logic.ui.serializing.snippets.symbolrenderers;
+
+import net.haspamelodica.swt.helper.gcs.GeneralGC;
+import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
+import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle;
+import net.mograsim.logic.ui.model.components.GUIComponent;
+import net.mograsim.logic.ui.model.components.submodels.SubmodelComponent;
+import net.mograsim.logic.ui.serializing.CodeSnippetSupplier;
+import net.mograsim.logic.ui.serializing.snippets.Renderer;
+import net.mograsim.logic.ui.serializing.snippets.SnippetSupplier;
+import net.mograsim.preferences.ColorDefinition;
+import net.mograsim.preferences.ColorManager;
+import net.mograsim.preferences.Preferences;
+
+public class DefaultSymbolRenderer implements Renderer
+{
+       private static final String id = "<Symbol\nunknown>";
+
+       private final GUIComponent component;
+
+       public DefaultSymbolRenderer(SubmodelComponent component, @SuppressWarnings("unused") Void params)
+       {
+               this.component = component;
+       }
+
+       @Override
+       public void render(GeneralGC gc, Rectangle visibleRegion)
+       {
+               ColorDefinition fg = Preferences.current().getColorDefinition("net.mograsim.logic.ui.color.text");
+               if (fg != null)
+                       gc.setForeground(ColorManager.current().toColor(fg));
+               Point idSize = gc.textExtent(id);
+               Rectangle bounds = component.getBounds();
+               gc.drawText(id, bounds.x + (bounds.width - idSize.x) / 2, bounds.y + (bounds.height - idSize.y) / 2, true);
+       }
+
+       static
+       {
+               CodeSnippetSupplier.symbolRendererProviderSupplier.setSnippetProvider(DefaultSymbolRenderer.class.getCanonicalName(),
+                               SnippetSupplier.create(Void.class, DefaultSymbolRenderer::new));
+       }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/serializing/snippets/symbolrenderers/DefaultSymbolRendererProvider.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/serializing/snippets/symbolrenderers/DefaultSymbolRendererProvider.java
deleted file mode 100644 (file)
index 4d445d6..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-package net.mograsim.logic.ui.serializing.snippets.symbolrenderers;
-
-import com.google.gson.JsonElement;
-
-import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
-import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle;
-import net.mograsim.logic.ui.serializing.DeserializedSubmodelComponent;
-import net.mograsim.logic.ui.serializing.snippets.Renderer;
-import net.mograsim.logic.ui.serializing.snippets.RendererProvider;
-import net.mograsim.preferences.ColorDefinition;
-import net.mograsim.preferences.ColorManager;
-import net.mograsim.preferences.Preferences;
-
-public class DefaultSymbolRendererProvider implements RendererProvider
-{
-       private static final String id = "<Symbol\nunknown>";
-
-       @Override
-       public Renderer create(DeserializedSubmodelComponent component, JsonElement params)
-       {
-               return (gc, visReg) ->
-               {
-                       ColorDefinition fg = Preferences.current().getColorDefinition("net.mograsim.logic.ui.color.text");
-                       if (fg != null)
-                               gc.setForeground(ColorManager.current().toColor(fg));
-                       Point idSize = gc.textExtent(id);
-                       Rectangle bounds = component.getBounds();
-                       gc.drawText(id, bounds.x + (bounds.width - idSize.x) / 2, bounds.y + (bounds.height - idSize.y) / 2, true);
-               };
-       }
-}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/serializing/snippets/symbolrenderers/SimpleRectangularLikeSymbolRenderer.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/serializing/snippets/symbolrenderers/SimpleRectangularLikeSymbolRenderer.java
new file mode 100644 (file)
index 0000000..515c9c4
--- /dev/null
@@ -0,0 +1,82 @@
+package net.mograsim.logic.ui.serializing.snippets.symbolrenderers;
+
+import java.util.Map.Entry;
+
+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.ui.model.components.GUIComponent;
+import net.mograsim.logic.ui.model.components.submodels.SubmodelComponent;
+import net.mograsim.logic.ui.model.wires.Pin;
+import net.mograsim.logic.ui.serializing.CodeSnippetSupplier;
+import net.mograsim.logic.ui.serializing.snippets.Renderer;
+import net.mograsim.logic.ui.serializing.snippets.SnippetSupplier;
+import net.mograsim.preferences.Preferences;
+
+/**
+ * Renders a text (<code>"centerText"</code>) with a given font height (<code>"centerTextHeight"</code>) in the center of the component and
+ * draws a label for each pin with a given font height (<code>"pinLabelHeight"</code>). The labels of pins to the left of a given x
+ * coordinate (<code>"horizontalComponentCenter"</code>) are drawn to the right of the respective pin; labels of pins to the right are drawn
+ * left. A margin (<code>"pinLabelMargin"</code>) is applied for pin label drawing.
+ * 
+ * @author Daniel Kirschten
+ */
+public class SimpleRectangularLikeSymbolRenderer implements Renderer
+{
+       private final GUIComponent component;
+       private final SimpleRectangularLikeParams params;
+
+       public SimpleRectangularLikeSymbolRenderer(SubmodelComponent component, SimpleRectangularLikeParams params)
+       {
+               this.component = component;
+               this.params = params;
+       }
+
+       @Override
+       public void render(GeneralGC gc, Rectangle visibleRegion)
+       {
+               double posX = component.getPosX();
+               double posY = component.getPosY();
+               double width = component.getWidth();
+               double height = component.getHeight();
+
+               Font oldFont = gc.getFont();
+               gc.setFont(new Font(oldFont.getName(), params.centerTextHeight, oldFont.getStyle()));
+               Point textExtent = gc.textExtent(params.centerText);
+               Color textColor = Preferences.current().getColor("net.mograsim.logic.ui.color.text");
+               if (textColor != null)
+                       gc.setForeground(textColor);
+               gc.drawText(params.centerText, posX + (width - textExtent.x) / 2, posY + (height - textExtent.y) / 2, true);
+               gc.setFont(new Font(oldFont.getName(), params.pinLabelHeight, oldFont.getStyle()));
+               for (Entry<String, Pin> pinEntry : component.getPins().entrySet())
+               {
+                       String pinName = pinEntry.getKey();
+                       Pin pin = pinEntry.getValue();
+                       double pinX = pin.getRelX();
+                       double pinY = posY + pin.getRelY();
+                       textExtent = gc.textExtent(pinName);
+                       gc.drawText(pinName,
+                                       posX + pinX + (pinX > params.horizontalComponentCenter ? -textExtent.x - params.pinLabelMargin : params.pinLabelMargin),
+                                       pinY - textExtent.y / 2, true);
+               }
+               gc.setFont(oldFont);
+       }
+
+       public static class SimpleRectangularLikeParams
+       {
+               public String centerText;
+               public double centerTextHeight;
+               public double horizontalComponentCenter;
+               public double pinLabelHeight;
+               public double pinLabelMargin;
+       }
+
+       static
+       {
+               CodeSnippetSupplier.symbolRendererProviderSupplier.setSnippetProvider(SimpleRectangularLikeSymbolRenderer.class.getCanonicalName(),
+                               SnippetSupplier.create(SimpleRectangularLikeParams.class, SimpleRectangularLikeSymbolRenderer::new));
+       }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/serializing/snippets/symbolrenderers/SimpleRectangularLikeSymbolRendererProvider.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/serializing/snippets/symbolrenderers/SimpleRectangularLikeSymbolRendererProvider.java
deleted file mode 100644 (file)
index c7a8fa1..0000000
+++ /dev/null
@@ -1,83 +0,0 @@
-package net.mograsim.logic.ui.serializing.snippets.symbolrenderers;
-
-import java.util.Map.Entry;
-
-import org.eclipse.swt.graphics.Color;
-
-import com.google.gson.JsonElement;
-import com.google.gson.JsonObject;
-
-import net.haspamelodica.swt.helper.swtobjectwrappers.Font;
-import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
-import net.mograsim.logic.ui.model.wires.Pin;
-import net.mograsim.logic.ui.serializing.CodeSnippetSupplier;
-import net.mograsim.logic.ui.serializing.DeserializedSubmodelComponent;
-import net.mograsim.logic.ui.serializing.snippets.Renderer;
-import net.mograsim.logic.ui.serializing.snippets.RendererProvider;
-import net.mograsim.preferences.Preferences;
-
-/**
- * Renders a text (<code>"centerText"</code>) with a given font height (<code>"centerTextHeight"</code>) in the center of the component and
- * draws a label for each pin with a given font height (<code>"pinLabelHeight"</code>). The labels of pins to the left of a given x
- * coordinate (<code>"horizontalComponentCenter"</code>) are drawn to the right of the respective pin; labels of pins to the right are drawn
- * left. A margin (<code>"pinLabelMargin"</code>) is applied for pin label drawing.<br>
- * Parameter format:
- * 
- * <pre>
- * {
- *   "centerText": [String]
- *   "centerTextHeight": [double]
- *   "horizontalComponentCenter": [double]
- *   "pinLabelHeight": [double]
- *   "pinLabelMargin": [double]
- * }
- * </pre>
- * 
- * @author Daniel Kirschten
- */
-public class SimpleRectangularLikeSymbolRendererProvider implements RendererProvider
-{
-       @Override
-       public Renderer create(DeserializedSubmodelComponent component, JsonElement params)
-       {
-               JsonObject asJsonObject = params.getAsJsonObject();
-               String centerText = asJsonObject.getAsJsonPrimitive("centerText").getAsString();
-               double centerTextHeight = asJsonObject.getAsJsonPrimitive("centerTextHeight").getAsDouble();
-               double horizontalComponentCenter = asJsonObject.getAsJsonPrimitive("horizontalComponentCenter").getAsDouble();
-               double pinLabelHeight = asJsonObject.getAsJsonPrimitive("pinLabelHeight").getAsDouble();
-               double pinLabelMargin = asJsonObject.getAsJsonPrimitive("pinLabelMargin").getAsDouble();
-               return (gc, visReg) ->
-               {
-                       double posX = component.getPosX();
-                       double posY = component.getPosY();
-                       double width = component.getWidth();
-                       double height = component.getHeight();
-
-                       Font oldFont = gc.getFont();
-                       gc.setFont(new Font(oldFont.getName(), centerTextHeight, oldFont.getStyle()));
-                       Point textExtent = gc.textExtent(centerText);
-                       Color textColor = Preferences.current().getColor("net.mograsim.logic.ui.color.text");
-                       if (textColor != null)
-                               gc.setForeground(textColor);
-                       gc.drawText(centerText, posX + (width - textExtent.x) / 2, posY + (height - textExtent.y) / 2, true);
-                       gc.setFont(new Font(oldFont.getName(), pinLabelHeight, oldFont.getStyle()));
-                       for (Entry<String, Pin> pinEntry : component.getPins().entrySet())
-                       {
-                               String pinName = pinEntry.getKey();
-                               Pin pin = pinEntry.getValue();
-                               double pinX = pin.getRelX();
-                               double pinY = posY + pin.getRelY();
-                               textExtent = gc.textExtent(pinName);
-                               gc.drawText(pinName, posX + pinX + (pinX > horizontalComponentCenter ? -textExtent.x - pinLabelMargin : pinLabelMargin),
-                                               pinY - textExtent.y / 2, true);
-                       }
-                       gc.setFont(oldFont);
-               };
-       }
-
-       static
-       {
-               CodeSnippetSupplier.symbolRendererProviderSupplier.setSnippetProvider(
-                               SimpleRectangularLikeSymbolRendererProvider.class.getCanonicalName(), new SimpleRectangularLikeSymbolRendererProvider());
-       }
-}
\ No newline at end of file
index 30976a0..7cdc9f3 100644 (file)
@@ -2,7 +2,7 @@ mograsim version: 0.1.3
 {
   "standardOutlineRendererProviders": {},
   "standardSymbolRendererProviders": {
-    "CenteredTextSymbolRenderer": "net.mograsim.logic.ui.serializing.snippets.symbolrenderers.CenteredTextSymbolRendererProvider",
-    "SimpleRectangularLikeSymbolRenderer": "net.mograsim.logic.ui.serializing.snippets.symbolrenderers.SimpleRectangularLikeSymbolRendererProvider"
+    "CenteredTextSymbolRenderer": "net.mograsim.logic.ui.serializing.snippets.symbolrenderers.CenteredTextSymbolRenderer",
+    "SimpleRectangularLikeSymbolRenderer": "net.mograsim.logic.ui.serializing.snippets.symbolrenderers.SimpleRectangularLikeSymbolRenderer"
   }
 }
\ No newline at end of file