Added a constructor for ModelSplitterParams; added a TODO
[Mograsim.git] / plugins / net.mograsim.logic.model / src / net / mograsim / logic / model / model / components / ModelComponent.java
index ded6685..b8d9f14 100644 (file)
@@ -11,6 +11,7 @@ import net.haspamelodica.swt.helper.gcs.GeneralGC;
 import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle;
 import net.mograsim.logic.model.model.LogicModelModifiable;
 import net.mograsim.logic.model.model.wires.Pin;
+import net.mograsim.logic.model.preferences.RenderPreferences;
 import net.mograsim.logic.model.serializing.IdentifyParams;
 import net.mograsim.logic.model.serializing.JSONSerializable;
 import net.mograsim.logic.model.snippets.HighLevelStateHandler;
@@ -24,6 +25,7 @@ import net.mograsim.logic.model.snippets.highlevelstatehandlers.DefaultHighLevel
  * 
  * @author Daniel Kirschten
  */
+// TODO split into "blueprint" and "used component"
 public abstract class ModelComponent implements JSONSerializable
 {
        /**
@@ -98,13 +100,6 @@ public abstract class ModelComponent implements JSONSerializable
                model.componentCreated(this, this::destroyed);
        }
 
-       // basic getters
-
-       public String getName()
-       {
-               return name;
-       }
-
        /**
         * Destroys this component. This method is called from {@link LogicModelModifiable#componentDestroyed(ModelComponent)
         * destroyComponent()} of the model this component is a part of.<br>
@@ -117,6 +112,13 @@ public abstract class ModelComponent implements JSONSerializable
                pinsByName.values().forEach(this::removePinWithoutRedraw);
        }
 
+       // basic getters
+
+       public String getName()
+       {
+               return name;
+       }
+
        // pins
 
        /**
@@ -215,13 +217,13 @@ public abstract class ModelComponent implements JSONSerializable
         * See {@link HighLevelStateHandler} for an explanation of high-level state IDs.
         * 
         * @see #setHighLevelState(String, Object)
-        * @see HighLevelStateHandler#getHighLevelState(String)
+        * @see HighLevelStateHandler#get(String)
         * 
         * @author Daniel Kirschten
         */
        public final Object getHighLevelState(String stateID)
        {
-               return highLevelStateHandler.getHighLevelState(stateID);
+               return highLevelStateHandler.get(stateID);
        }
 
        /**
@@ -229,13 +231,23 @@ public abstract class ModelComponent implements JSONSerializable
         * See {@link HighLevelStateHandler} for an explanation of high-level state IDs.
         * 
         * @see #getHighLevelState(String)
-        * @see HighLevelStateHandler#setHighLevelState(String, Object)
+        * @see HighLevelStateHandler#set(String, Object)
         * 
         * @author Daniel Kirschten
         */
        public final void setHighLevelState(String stateID, Object newState)
        {
-               highLevelStateHandler.setHighLevelState(stateID, newState);
+               highLevelStateHandler.set(stateID, newState);
+       }
+
+       public final void addHighLevelStateListener(String stateID, Consumer<Object> stateChanged)
+       {
+               highLevelStateHandler.addListener(stateID, stateChanged);
+       }
+
+       public final void removeHighLevelStateListener(String stateID, Consumer<Object> stateChanged)
+       {
+               highLevelStateHandler.removeListener(stateID, stateChanged);
        }
 
        // "graphical" operations
@@ -334,7 +346,7 @@ public abstract class ModelComponent implements JSONSerializable
         * 
         * @author Daniel Kirschten
         */
-       public abstract void render(GeneralGC gc, Rectangle visibleRegion);
+       public abstract void render(GeneralGC gc, RenderPreferences renderPrefs, Rectangle visibleRegion);
 
        // serializing