private final List<Consumer<? super GUIComponent>> componentRemovedListeners;
private final List<Consumer<? super GUIWire>> wireAddedListeners;
private final List<Consumer<? super GUIWire>> wireRemovedListeners;
- private final List<Runnable> redrawListeners;
- private final Runnable redrawListenerForSubcomponents;
+ private Runnable redrawHandler;
protected ViewModel()
{
componentRemovedListeners = new ArrayList<>();
wireAddedListeners = new ArrayList<>();
wireRemovedListeners = new ArrayList<>();
- redrawListeners = new ArrayList<>();
-
- redrawListenerForSubcomponents = this::callRedrawListeners;
}
/**
throw new IllegalStateException("Don't add the same component twice!");
components.put(component.name, component);
callComponentAddedListeners(component);
- component.addRedrawListener(redrawListenerForSubcomponents);
- callRedrawListeners();
+ requestRedraw();
}
/**
throw new IllegalStateException("Don't remove the same component twice!");
components.remove(component.name);
callComponentRemovedListeners(component);
- component.removeRedrawListener(redrawListenerForSubcomponents);
- callRedrawListeners();
+ requestRedraw();
}
/**
throw new IllegalStateException("Don't add the same wire twice!");
wires.put(wire.name, wire);
callWireAddedListeners(wire);
- wire.addRedrawListener(redrawListenerForSubcomponents);
- callRedrawListeners();
+ requestRedraw();
}
/**
throw new IllegalStateException("Don't remove the same wire twice!");
wires.remove(wire.name);
callWireRemovedListeners(wire);
- wire.removeRedrawListener(redrawListenerForSubcomponents);
- callRedrawListeners();
+ requestRedraw();
}
public Map<String, GUIComponent> getComponentsByName()
public void addComponentRemovedListener (Consumer<? super GUIComponent> listener) {componentRemovedListeners.add (listener);}
public void addWireAddedListener (Consumer<? super GUIWire > listener) {wireAddedListeners .add (listener);}
public void addWireRemovedListener (Consumer<? super GUIWire > listener) {wireRemovedListeners .add (listener);}
- public void addRedrawListener (Runnable listener) {redrawListeners .add (listener);}
public void removeComponentAddedListener (Consumer<? super GUIComponent> listener) {componentAddedListeners .remove(listener);}
public void removeComponentRemovedListener(Consumer<? super GUIComponent> listener) {componentRemovedListeners.remove(listener);}
public void removeWireAddedListener (Consumer<? super GUIWire > listener) {wireAddedListeners .remove(listener);}
public void removeWireRemovedListener (Consumer<? super GUIWire > listener) {wireRemovedListeners .remove(listener);}
- public void removeRedrawListener (Runnable listener) {redrawListeners .remove(listener);}
private void callComponentAddedListeners (GUIComponent c) {componentAddedListeners .forEach(l -> l.accept(c));}
private void callComponentRemovedListeners(GUIComponent c) {componentRemovedListeners.forEach(l -> l.accept(c));}
private void callWireAddedListeners (GUIWire w ) {wireAddedListeners .forEach(l -> l.accept(w));}
private void callWireRemovedListeners (GUIWire w ) {wireRemovedListeners .forEach(l -> l.accept(w));}
- private void callRedrawListeners ( ) {redrawListeners .forEach(l -> l.run( ));}
// @formatter:on
+
+ public void setRedrawHandler(Runnable handler)
+ {
+ this.redrawHandler = handler;
+ }
+
+ public Runnable getRedrawHandler()
+ {
+ return redrawHandler;
+ }
+
+ public void requestRedraw()
+ {
+ if (redrawHandler != null)
+ redrawHandler.run();
+ }
}
\ No newline at end of file