0e9be475f4c55e81e8822a5ff0eb3f4f7a2b413f
[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 Object getHighLevelState(String stateID)
47         {
48                 return highLevelStateHandler.getHighLevelState(stateID);
49         }
50
51         @Override
52         public void setHighLevelState(String stateID, Object newState)
53         {
54                 highLevelStateHandler.setHighLevelState(stateID, newState);
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 Renderer getOutlineRenderer()
77         {
78                 return outlineRenderer;
79         }
80
81         public void setSymbolRenderer(Renderer symbolRenderer)
82         {
83                 this.symbolRenderer = symbolRenderer;
84         }
85
86         public Renderer getSymbolRenderer()
87         {
88                 return symbolRenderer;
89         }
90
91         public void setHighLevelStateHandler(HighLevelStateHandler highLevelStateHandler)
92         {
93                 this.highLevelStateHandler = highLevelStateHandler;
94         }
95
96         public HighLevelStateHandler getHighLevelStateHandler()
97         {
98                 return highLevelStateHandler;
99         }
100
101         public ViewModelModifiable getSubmodelModifiable()
102         {
103                 return submodelModifiable;
104         }
105
106         @Override
107         public double getSubmodelScale()
108         {
109                 return super.getSubmodelScale();
110         }
111
112         @Override
113         public void setSubmodelScale(double submodelScale)
114         {
115                 super.setSubmodelScale(submodelScale);
116         }
117
118         @Override
119         public void setSize(double width, double height)
120         {
121                 super.setSize(width, height);
122         }
123
124         @Override
125         public Map<String, MovablePin> getSubmodelMovablePins()
126         {
127                 return super.getSubmodelMovablePins();
128         }
129
130         @Override
131         public Pin addSubmodelInterface(MovablePin supermodelPin)
132         {
133                 return super.addSubmodelInterface(supermodelPin);
134         }
135
136         @Override
137         public void removeSubmodelInterface(String name)
138         {
139                 super.removeSubmodelInterface(name);
140         }
141
142         // TODO static initializer
143 }