Restructured serializing/deserializing
[Mograsim.git] / net.mograsim.logic.model / src / net / mograsim / logic / model / serializing / DeserializedSubmodelComponent.java
1 package net.mograsim.logic.model.serializing;
2
3 import com.google.gson.JsonElement;
4
5 import net.haspamelodica.swt.helper.gcs.GeneralGC;
6 import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle;
7 import net.mograsim.logic.model.model.ViewModelModifiable;
8 import net.mograsim.logic.model.model.components.submodels.SubmodelComponent;
9 import net.mograsim.logic.model.model.wires.MovablePin;
10 import net.mograsim.logic.model.model.wires.Pin;
11 import net.mograsim.logic.model.snippets.HighLevelStateHandler;
12 import net.mograsim.logic.model.snippets.Renderer;
13
14 public class DeserializedSubmodelComponent extends SubmodelComponent
15 {
16         /**
17          * If a DeserializedSubmodelComponent is part of another SubmodelComponent, when it it serialized, it should not return its internal
18          * structure, but rather the component ID used to create it.
19          * 
20          * @see SubmodelComponentSerializer#deserialize(ViewModelModifiable, SubmodelComponentParams, String, String, JsonElement)
21          *      SubmodelComponentSerializer.deserialize(...)
22          * @see SubmodelComponentSerializer#serialize(SubmodelComponent, java.util.function.Function) SubmodelComponentSerializer.serialize(...)
23          */
24         public final String idForSerializingOverride;
25         /**
26          * See {@link #idForSerializingOverride}
27          */
28         public final JsonElement paramsForSerializingOverride;
29
30         private Renderer outlineRenderer;
31         private Renderer symbolRenderer;
32         private HighLevelStateHandler highLevelStateHandler;
33
34         public DeserializedSubmodelComponent(ViewModelModifiable model, String name, String idForSerializingOverride, JsonElement paramsForSerializingOverride)
35         {
36                 super(model, name);
37                 this.idForSerializingOverride = idForSerializingOverride;
38                 this.paramsForSerializingOverride = paramsForSerializingOverride;
39         }
40
41         @Override
42         public void setHighLevelState(String stateID, Object newState)
43         {
44                 highLevelStateHandler.setHighLevelState(stateID, newState);
45         }
46
47         @Override
48         public Object getHighLevelState(String stateID)
49         {
50                 return highLevelStateHandler.getHighLevelState(stateID);
51         }
52
53         @Override
54         protected void renderOutline(GeneralGC gc, Rectangle visibleRegion)
55         {
56                 if (outlineRenderer != null)
57                         outlineRenderer.render(gc, visibleRegion);
58         }
59
60         @Override
61         protected void renderSymbol(GeneralGC gc, Rectangle visibleRegion)
62         {
63                 if (symbolRenderer != null)
64                         symbolRenderer.render(gc, visibleRegion);
65         }
66
67         public void setOutlineRenderer(Renderer outlineRenderer)
68         {
69                 this.outlineRenderer = outlineRenderer;
70         }
71
72         public void setSymbolRenderer(Renderer symbolRenderer)
73         {
74                 this.symbolRenderer = symbolRenderer;
75         }
76
77         public void setHighLevelStateHandler(HighLevelStateHandler highLevelStateHandler)
78         {
79                 this.highLevelStateHandler = highLevelStateHandler;
80         }
81
82         public ViewModelModifiable getSubmodelModifiable()
83         {
84                 return submodelModifiable;
85         }
86
87         @Override
88         public void setSubmodelScale(double submodelScale)
89         {
90                 super.setSubmodelScale(submodelScale);
91         }
92
93         @Override
94         public void setSize(double width, double height)
95         {
96                 super.setSize(width, height);
97         }
98
99         @Override
100         public Pin addSubmodelInterface(MovablePin supermodelPin)
101         {
102                 return super.addSubmodelInterface(supermodelPin);
103         }
104
105         // TODO static initializer
106 }