Now using high level state handlers in mi.nandbased (except GUI_rslatch)
[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 //TODO serialize handlers
15 public class DeserializedSubmodelComponent extends SubmodelComponent
16 {
17         /**
18          * If a DeserializedSubmodelComponent is part of another SubmodelComponent, when it it serialized, it should not return its internal
19          * structure, but rather the component ID used to create it.
20          * 
21          * @see SubmodelComponentSerializer#deserialize(ViewModelModifiable, SubmodelComponentParams, String, String, JsonElement)
22          *      SubmodelComponentSerializer.deserialize(...)
23          * @see SubmodelComponentSerializer#serialize(SubmodelComponent, java.util.function.Function) SubmodelComponentSerializer.serialize(...)
24          */
25         public final String idForSerializingOverride;
26         /**
27          * See {@link #idForSerializingOverride}
28          */
29         public final JsonElement paramsForSerializingOverride;
30
31         private Renderer outlineRenderer;
32         private Renderer symbolRenderer;
33         private HighLevelStateHandler highLevelStateHandler;
34
35         public DeserializedSubmodelComponent(ViewModelModifiable model, String name, String idForSerializingOverride,
36                         JsonElement paramsForSerializingOverride)
37         {
38                 super(model, name);
39                 this.idForSerializingOverride = idForSerializingOverride;
40                 this.paramsForSerializingOverride = paramsForSerializingOverride;
41         }
42
43         @Override
44         public void setHighLevelState(String stateID, Object newState)
45         {
46                 highLevelStateHandler.setHighLevelState(stateID, newState);
47         }
48
49         @Override
50         public Object getHighLevelState(String stateID)
51         {
52                 return highLevelStateHandler.getHighLevelState(stateID);
53         }
54
55         @Override
56         protected void renderOutline(GeneralGC gc, Rectangle visibleRegion)
57         {
58                 if (outlineRenderer != null)
59                         outlineRenderer.render(gc, visibleRegion);
60         }
61
62         @Override
63         protected void renderSymbol(GeneralGC gc, Rectangle visibleRegion)
64         {
65                 if (symbolRenderer != null)
66                         symbolRenderer.render(gc, visibleRegion);
67         }
68
69         public void setOutlineRenderer(Renderer outlineRenderer)
70         {
71                 this.outlineRenderer = outlineRenderer;
72         }
73
74         public void setSymbolRenderer(Renderer symbolRenderer)
75         {
76                 this.symbolRenderer = symbolRenderer;
77         }
78
79         public void setHighLevelStateHandler(HighLevelStateHandler highLevelStateHandler)
80         {
81                 this.highLevelStateHandler = highLevelStateHandler;
82         }
83
84         public ViewModelModifiable getSubmodelModifiable()
85         {
86                 return submodelModifiable;
87         }
88
89         @Override
90         public void setSubmodelScale(double submodelScale)
91         {
92                 super.setSubmodelScale(submodelScale);
93         }
94
95         @Override
96         public void setSize(double width, double height)
97         {
98                 super.setSize(width, height);
99         }
100
101         @Override
102         public Pin addSubmodelInterface(MovablePin supermodelPin)
103         {
104                 return super.addSubmodelInterface(supermodelPin);
105         }
106
107         // TODO static initializer
108 }