X-Git-Url: https://mograsim.net/gitweb/?a=blobdiff_plain;f=plugins%2Fnet.mograsim.logic.model%2Fsrc%2Fnet%2Fmograsim%2Flogic%2Fmodel%2Fmodel%2Fcomponents%2FModelComponent.java;h=b8d9f14d7d687a77c4048097541cf3f3b84bebb6;hb=HEAD;hp=d543c543ebc2050f044e8cd309e6b07a36f98e1a;hpb=58babf45ae7d259a296656451d796dbe601377a4;p=Mograsim.git
diff --git a/plugins/net.mograsim.logic.model/src/net/mograsim/logic/model/model/components/ModelComponent.java b/plugins/net.mograsim.logic.model/src/net/mograsim/logic/model/model/components/ModelComponent.java
index d543c543..b8d9f14d 100644
--- a/plugins/net.mograsim.logic.model/src/net/mograsim/logic/model/model/components/ModelComponent.java
+++ b/plugins/net.mograsim.logic.model/src/net/mograsim/logic/model/model/components/ModelComponent.java
@@ -11,9 +11,11 @@ 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;
+import net.mograsim.logic.model.snippets.highlevelstatehandlers.DefaultHighLevelStateHandler;
/**
* The base class for all model components.
@@ -23,6 +25,7 @@ import net.mograsim.logic.model.snippets.HighLevelStateHandler;
*
* @author Daniel Kirschten
*/
+// TODO split into "blueprint" and "used component"
public abstract class ModelComponent implements JSONSerializable
{
/**
@@ -77,6 +80,8 @@ public abstract class ModelComponent implements JSONSerializable
this.pinAddedListeners = new ArrayList<>();
this.pinRemovedListeners = new ArrayList<>();
+ this.highLevelStateHandler = new DefaultHighLevelStateHandler();
+
if (callInit)
init();
}
@@ -95,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.
@@ -114,6 +112,13 @@ public abstract class ModelComponent implements JSONSerializable
pinsByName.values().forEach(this::removePinWithoutRedraw);
}
+ // basic getters
+
+ public String getName()
+ {
+ return name;
+ }
+
// pins
/**
@@ -212,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 Object getHighLevelState(String stateID)
+ public final Object getHighLevelState(String stateID)
{
- return highLevelStateHandler.getHighLevelState(stateID);
+ return highLevelStateHandler.get(stateID);
}
/**
@@ -226,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 void setHighLevelState(String stateID, Object newState)
+ public final void setHighLevelState(String stateID, Object newState)
+ {
+ highLevelStateHandler.set(stateID, newState);
+ }
+
+ public final void addHighLevelStateListener(String stateID, Consumer