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