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=7d05144c25daa53e60fc9ed9fd503546a86567f8;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 stateChanged) + { + highLevelStateHandler.addListener(stateID, stateChanged); + } + + public final void removeHighLevelStateListener(String stateID, Consumer stateChanged) { - highLevelStateHandler.setHighLevelState(stateID, newState); + highLevelStateHandler.removeListener(stateID, stateChanged); } // "graphical" operations @@ -331,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