X-Git-Url: https://mograsim.net/gitweb/?a=blobdiff_plain;f=net.mograsim.logic.ui%2Fsrc%2Fnet%2Fmograsim%2Flogic%2Fui%2Fmodel%2FViewModel.java;h=4d1f21b25cc44da8bcd7c15f8d414914d3728ee0;hb=5ece0acf049bf9af2933f513fe0206565681f622;hp=7f9b113fd83ec836042f095623b8061181505806;hpb=e7193d1fb16edc79e9cc3d8adcfb71caecd8463b;p=Mograsim.git diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/ViewModel.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/ViewModel.java index 7f9b113f..4d1f21b2 100644 --- a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/ViewModel.java +++ b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/ViewModel.java @@ -2,7 +2,9 @@ package net.mograsim.logic.ui.model; import java.util.ArrayList; import java.util.Collections; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.function.Consumer; import net.mograsim.logic.ui.model.components.GUIComponent; @@ -10,8 +12,8 @@ import net.mograsim.logic.ui.model.wires.GUIWire; public class ViewModel { - private final List components; - private final List componentsUnmodifiable; + private final Map components; + private final Map componentsUnmodifiable; private final List wires; private final List wiresUnmodifiable; @@ -23,10 +25,10 @@ public class ViewModel private final Runnable redrawListenerForSubcomponents; - public ViewModel() + protected ViewModel() { - components = new ArrayList<>(); - componentsUnmodifiable = Collections.unmodifiableList(components); + components = new HashMap<>(); + componentsUnmodifiable = Collections.unmodifiableMap(components); wires = new ArrayList<>(); wiresUnmodifiable = Collections.unmodifiableList(wires); @@ -41,13 +43,13 @@ public class ViewModel /** * Adds the given component to the list of components and calls all componentAddedListeners. Don't call this method from application - * code as it is automatically called in GUIComponent::new. + * code as it is automatically called in {@link GUIComponent}'s constructor. */ - public void componentCreated(GUIComponent component) + protected void componentCreated(GUIComponent component) { - if (components.contains(component)) + if (components.containsKey(component.name)) throw new IllegalStateException("Don't add the same component twice!"); - components.add(component); + components.put(component.name, component); callComponentAddedListeners(component); component.addRedrawListener(redrawListenerForSubcomponents); callRedrawListeners(); @@ -55,23 +57,23 @@ public class ViewModel /** * Removes the given component from the list of components and calls all componentRemovedListeners. Don't call this method from - * application code as it is automatically called in GUIComponent::destroy. + * application code as it is automatically called in {@link GUIComponent#destroy()}. */ - public void componentDestroyed(GUIComponent component) + protected void componentDestroyed(GUIComponent component) { - if (!components.contains(component)) + if (!components.containsKey(component.name)) throw new IllegalStateException("Don't remove the same component twice!"); - components.remove(component); + components.remove(component.name); callComponentRemovedListeners(component); component.removeRedrawListener(redrawListenerForSubcomponents); callRedrawListeners(); } /** - * Adds the given component to the list of components and calls all componentAddedListeners. Don't call this method from application - * code as it is automatically called in GUIComponent::new. + * Adds the given wire to the list of wires and calls all wireAddedListeners. Don't call this method from application code as it is + * automatically called in {@link GUIWire}'s constructor(s). */ - public void wireCreated(GUIWire wire) + protected void wireCreated(GUIWire wire) { if (wires.contains(wire)) throw new IllegalStateException("Don't add the same wire twice!"); @@ -82,10 +84,10 @@ public class ViewModel } /** - * Removes the given component from the list of components and calls all componentRemovedListeners. Don't call this method from - * application code as it is automatically called in GUIComponent::destroy. + * Removes the given wire from the list of wires and calls all wireRemovedListeners. Don't call this method from application code as it + * is automatically called in {@link GUIWire#destroy()}. */ - public void wireDestroyed(GUIWire wire) + protected void wireDestroyed(GUIWire wire) { if (!wires.contains(wire)) throw new IllegalStateException("Don't remove the same wire twice!"); @@ -95,7 +97,7 @@ public class ViewModel callRedrawListeners(); } - public List getComponents() + public Map getComponentsByName() { return componentsUnmodifiable; } @@ -105,11 +107,6 @@ public class ViewModel return wiresUnmodifiable; } -// public void requestRedraw() -// { -// callRedrawListeners(); -// } - // @formatter:off public void addComponentAddedListener (Consumer listener) {componentAddedListeners .add (listener);} public void addComponentRemovedListener (Consumer listener) {componentRemovedListeners.add (listener);}