GUIComponents now serialize and deserialize parameters (where needed)
[Mograsim.git] / net.mograsim.logic.ui / src / net / mograsim / logic / ui / model / components / GUIComponent.java
index f961caf..58c725d 100644 (file)
@@ -5,9 +5,10 @@ import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
-import java.util.TreeMap;
 import java.util.function.Consumer;
-import java.util.function.Supplier;
+
+import com.google.gson.JsonElement;
+import com.google.gson.JsonNull;
 
 import net.haspamelodica.swt.helper.gcs.GeneralGC;
 import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle;
@@ -42,8 +43,6 @@ public abstract class GUIComponent
        private final List<Runnable> redrawListeners;
 
        private final Runnable redrawListenerForSubcomponents;
-       // Defines how the GUIComponent is referenced in SubmodelComponentParams
-       protected Supplier<String> identifierDelegate = () -> getClass().getSimpleName();
 
        // creation and destruction
 
@@ -142,7 +141,13 @@ public abstract class GUIComponent
 
        /**
         * Sets the given high-level state to the given value. <br>
-        * TODO more documentation!
+        * A high level state ID consists of parts separated by dots ('.').<br>
+        * The last part (the part after the last dot) is called "atomic high level state ID". The parts before that part are called
+        * "subcomponent ID"s.<br>
+        * If there is no dot in a high level state ID, the whole high level state ID is called atomic.<br>
+        * Note that subcomponent IDs don't have to correspond to actual subcomponents. For example, a RAM component may supply subcomponent IDs
+        * "c0000", "c0001" ... "cFFFF" without actually having a subcomponent for each cell. It also is allowed for an atomic high level state
+        * ID to be delegated to a subcomponent.
         * 
         * @author Daniel Kirschten
         */
@@ -154,7 +159,7 @@ public abstract class GUIComponent
 
        /**
         * Gets the current value of the given high-level state. <br>
-        * TODO more documentation!
+        * See {@link #setHighLevelState(String, Object)} for an explanation of high-level state IDs.
         * 
         * @author Daniel Kirschten
         */
@@ -197,7 +202,7 @@ public abstract class GUIComponent
         * 
         * @author Daniel Kirschten
         */
-       public Rectangle getBounds()
+       public final Rectangle getBounds()
        {
                return new Rectangle(bounds.x, bounds.y, bounds.width, bounds.height);
        }
@@ -263,18 +268,10 @@ public abstract class GUIComponent
 
        // serializing
 
-       /**
-        * @return an identifier used to reference this GUIComponent inside of {@link SubmodelComponentParams}
-        */
-       public String getIdentifier()
-       {
-               return identifierDelegate.get();
-       }
-
-       @SuppressWarnings("static-method")
-       public Map<String, Object> getInstantiationParameters()
+       @SuppressWarnings("static-method") // this method is intended to be overridden
+       public JsonElement getParams()
        {
-               return new TreeMap<>();
+               return JsonNull.INSTANCE;
        }
 
        // listeners