X-Git-Url: https://mograsim.net/gitweb/?a=blobdiff_plain;f=net.mograsim.logic.model%2Fsrc%2Fnet%2Fmograsim%2Flogic%2Fmodel%2Fmodel%2Fcomponents%2Fsubmodels%2FSubmodelComponent.java;h=bcf85aeed0684b487a8c1fc91604739987a2339b;hb=4b580a621ec0b174c70b1d9e3937f46394656aef;hp=aff42277290a1c163f7aeabf16b52455af9e1f53;hpb=6b55c363dc1479a6e8ee58b11e6ad65841b47770;p=Mograsim.git
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 aff42277..bcf85aee 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
@@ -17,13 +17,17 @@ 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.model.wires.PinUsage;
+import net.mograsim.logic.model.serializing.IdentifierGetter;
+import net.mograsim.logic.model.serializing.IndirectGUIComponentCreator;
+import net.mograsim.logic.model.serializing.SubmodelComponentParams;
+import net.mograsim.logic.model.serializing.SubmodelComponentSerializer;
import net.mograsim.logic.model.snippets.Renderer;
+import net.mograsim.logic.model.util.JsonHandler;
/**
* A {@link GUIComponent} consisting of another model. A SubmodelComponent
can have so-called "interface pins" connecting the
* inner and outer models.
*/
-//TODO override getParams
public abstract class SubmodelComponent extends GUIComponent
{
public static final String SUBMODEL_INTERFACE_NAME = "_submodelinterface";
@@ -108,8 +112,8 @@ public abstract class SubmodelComponent extends GUIComponent
this.submodelInterface = new SubmodelInterface(submodelModifiable, SUBMODEL_INTERFACE_NAME);
this.submodelScale = 1;
- this.maxVisibleRegionFillRatioForAlpha0 = 0.0;
- this.minVisibleRegionFillRatioForAlpha1 = 0.0;
+ this.maxVisibleRegionFillRatioForAlpha0 = 0.8;
+ this.minVisibleRegionFillRatioForAlpha1 = 0.9;
this.renderer = new LogicUIRenderer(submodelModifiable);
Consumer redrawHandlerChangedListener = submodelModifiable::setRedrawHandler;
@@ -346,6 +350,17 @@ public abstract class SubmodelComponent extends GUIComponent
return outlineRenderer;
}
+ @Override
+ public boolean clicked(double x, double y)
+ {
+ double scaledX = (x - getPosX()) / submodelScale;
+ double scaledY = (y - getPosY()) / submodelScale;
+ for (GUIComponent component : submodel.getComponentsByName().values())
+ if (component.getBounds().contains(scaledX, scaledY) && component.clicked(scaledX, scaledY))
+ return true;
+ return false;
+ }
+
@Override
public void render(GeneralGC gc, Rectangle visibleRegion)
{
@@ -401,15 +416,12 @@ public abstract class SubmodelComponent extends GUIComponent
return mapMin + (val - valMin) * (mapMax - mapMin) / (valMax - valMin);
}
+ // serializing
+
@Override
- public boolean clicked(double x, double y)
+ public SubmodelComponentParams getParamsForSerializing(IdentifierGetter idGetter)
{
- double scaledX = (x - getPosX()) / submodelScale;
- double scaledY = (y - getPosY()) / submodelScale;
- for (GUIComponent component : submodel.getComponentsByName().values())
- if (component.getBounds().contains(scaledX, scaledY) && component.clicked(scaledX, scaledY))
- return true;
- return false;
+ return SubmodelComponentSerializer.serialize(this, idGetter);
}
// operations no longer supported
@@ -425,4 +437,10 @@ public abstract class SubmodelComponent extends GUIComponent
{
throw new UnsupportedOperationException("Can't remove pins of a SubmodelComponent directly, call removeSubmodelInterface instead");
}
+
+ static
+ {
+ IndirectGUIComponentCreator.setComponentSupplier(SubmodelComponent.class.getCanonicalName(),
+ (m, p, n) -> SubmodelComponentSerializer.deserialize(m, JsonHandler.fromJsonTree(p, SubmodelComponentParams.class), n));
+ }
}
\ No newline at end of file