X-Git-Url: https://mograsim.net/gitweb/?a=blobdiff_plain;f=LogicUI%2Fsrc%2Fera%2Fmi%2Fgui%2Fmodel%2FViewModel.java;h=7eb55c18166f9e3bac2e22f037dabf4b2f8457e1;hb=80bfbd8ebf0ad8a7ad98584544a0c73f43e6f3b6;hp=5a41d0ea35e43bb9f12de9741ec46154fe580c0d;hpb=4a6a0a2c85c1a16112efaf7ca6d2b5fba3c9b466;p=Mograsim.git diff --git a/LogicUI/src/era/mi/gui/model/ViewModel.java b/LogicUI/src/era/mi/gui/model/ViewModel.java index 5a41d0ea..7eb55c18 100644 --- a/LogicUI/src/era/mi/gui/model/ViewModel.java +++ b/LogicUI/src/era/mi/gui/model/ViewModel.java @@ -1,6 +1,7 @@ package era.mi.gui.model; import java.util.ArrayList; +import java.util.Collections; import java.util.List; import java.util.function.Consumer; @@ -10,17 +11,21 @@ import era.mi.gui.model.wires.GUIWire; public class ViewModel { private final List components; + private final List componentsUnmodifiable; private final List wires; + private final List wiresUnmodifiable; - private final List> componentAddedListeners; - private final List> componentRemovedListeners; - private final List> wireAddedListeners; - private final List> wireRemovedListeners; + private final List> componentAddedListeners; + private final List> componentRemovedListeners; + private final List> wireAddedListeners; + private final List> wireRemovedListeners; public ViewModel() { components = new ArrayList<>(); + componentsUnmodifiable = Collections.unmodifiableList(components); wires = new ArrayList<>(); + wiresUnmodifiable = Collections.unmodifiableList(wires); componentAddedListeners = new ArrayList<>(); componentRemovedListeners = new ArrayList<>(); @@ -32,7 +37,7 @@ 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. */ - public void addComponent(GUIComponent component) + public void componentCreated(GUIComponent component) { if (components.contains(component)) throw new IllegalStateException("Don't add the same component twice!"); @@ -44,7 +49,7 @@ 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. */ - public void removeComponent(GUIComponent component) + public void componentDestroyed(GUIComponent component) { if (!components.contains(component)) throw new IllegalStateException("Don't remove the same component twice!"); @@ -52,16 +57,50 @@ public class ViewModel callComponentRemovedListeners(component); } + /** + * 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. + */ + public void wireCreated(GUIWire wire) + { + if (wires.contains(wire)) + throw new IllegalStateException("Don't add the same wire twice!"); + wires.add(wire); + callWireAddedListeners(wire); + } + + /** + * 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. + */ + public void wireDestroyed(GUIWire wire) + { + if (!wires.contains(wire)) + throw new IllegalStateException("Don't remove the same wire twice!"); + wires.remove(wire); + callWireRemovedListeners(wire); + } + + public List getComponents() + { + return componentsUnmodifiable; + } + + public List getWires() + { + return wiresUnmodifiable; + } + // @formatter:off - public void addComponentAddedListener (Consumer listener){componentAddedListeners .add (listener);} - public void addComponentRemovedListener (Consumer listener){componentRemovedListeners.add (listener);} - public void addWireAddedListener (Consumer listener){wireAddedListeners .add (listener);} - public void addWireRemovedListener (Consumer listener){wireRemovedListeners .add (listener);} + public void addComponentAddedListener (Consumer listener){componentAddedListeners .add (listener);} + public void addComponentRemovedListener (Consumer listener){componentRemovedListeners.add (listener);} + public void addWireAddedListener (Consumer listener){wireAddedListeners .add (listener);} + public void addWireRemovedListener (Consumer listener){wireRemovedListeners .add (listener);} - public void removeComponentAddedListener (Consumer listener){componentAddedListeners .remove(listener);} - public void removeComponentRemovedListener(Consumer listener){componentRemovedListeners.remove(listener);} - public void removeWireAddedListener (Consumer listener){wireAddedListeners .remove(listener);} - public void removeWireRemovedListener (Consumer listener){wireRemovedListeners .remove(listener);} + public void removeComponentAddedListener (Consumer listener){componentAddedListeners .remove(listener);} + public void removeComponentRemovedListener(Consumer listener){componentRemovedListeners.remove(listener);} + public void removeWireAddedListener (Consumer listener){wireAddedListeners .remove(listener);} + public void removeWireRemovedListener (Consumer listener){wireRemovedListeners .remove(listener);} private void callComponentAddedListeners (GUIComponent c) {componentAddedListeners .forEach(l -> l.accept(c));} private void callComponentRemovedListeners(GUIComponent c) {componentRemovedListeners.forEach(l -> l.accept(c));}