Skip to content
Snippets Groups Projects
Commit 1a52da72 authored by Christian Meyer's avatar Christian Meyer
Browse files

expanded GuiListener interface

GuiListener.java
    renamed method onGuiStart to started
    renamed method onGuiFinish to finished
    added methods inited, loaded, quit
ZmtGuiState.java
    moved nested interface GuiListener to new file
    notifies GuiListener objects according to added methods
parent 42e7589a
No related branches found
Tags 0.11.0
No related merge requests found
package sim.display;
import sim.engine.SimState;
import sim.engine.ZmtSimState;
public interface GuiListener {
/**
* @see GUIState#init(Controller)
* @param controller
* the simulation controller
*/
default void inited(Controller controller) {
}
/**
* Called right after the simulation has started.
*
* @param state
* the started simulation state
*
* @see GUIState#start()
*/
default void started(ZmtSimState state) {
}
/**
* Called right after a new simulation state was loaded.
*
* @param oldState
* the old state replaced by the loaded one
* @param loadedState
* the loaded simulation state
*
* @see GUIState#load(SimState)
*/
default void loaded(ZmtSimState oldState, ZmtSimState loadedState) {
}
/**
* Called right after the simulation is finished.
*
* @param state
* the finished simulation state
* @see GUIState#finish()
*/
default void finished(ZmtSimState state) {
}
/**
* Called right after the {@link GUIState} quit.
*
* @see GUIState#quit()
*/
default void quit() {
}
}
\ No newline at end of file
......@@ -2,10 +2,9 @@ package sim.display;
import java.util.ArrayList;
import java.util.Collection;
import java.util.EventListener;
import java.util.List;
import de.zmt.params.SimParams;
import sim.engine.SimState;
import sim.engine.ZmtSimState;
import sim.portrayal.Inspector;
......@@ -17,19 +16,20 @@ import sim.portrayal.Inspector;
*
*/
public abstract class ZmtGUIState extends GUIState {
private final List<GuiListener> guiListeners = new ArrayList<>(1);
private final Collection<GuiListener> guiListeners = new ArrayList<>(0);
public ZmtGUIState(ZmtSimState state) {
super(state);
}
/**
* Adds a {@link GuiListener} to be notified on gui events.
* Adds a {@link GuiListener} to be notified on GUI events.
*
* @param listener
* the listener to add
* @return <tt>true</tt> (as specified by {@link Collection#add})
*/
public final boolean addGuiListener(GuiListener listener) {
public final boolean addListener(GuiListener listener) {
return guiListeners.add(listener);
}
......@@ -37,32 +37,42 @@ public abstract class ZmtGUIState extends GUIState {
* Removes a {@link GuiListener}, which is no longer notified on GUI events.
*
* @param listener
* the listener to remove
* @return <tt>true</tt> if specified listener was removed
*/
public final boolean removeGuiListener(Object listener) {
public final boolean removeListener(GuiListener listener) {
return guiListeners.remove(listener);
}
@Override
public void init(Controller controller) {
super.init(controller);
guiListeners.stream().forEach(listener -> listener.inited(controller));
}
@Override
public void start() {
for (GuiListener listener : guiListeners) {
listener.onGuiStart();
}
super.start();
guiListeners.stream().forEach(listener -> listener.started((ZmtSimState) state));
}
@Override
public void load(SimState state) {
ZmtSimState oldState = (ZmtSimState) state;
super.load(state);
guiListeners.stream().forEach(listener -> listener.loaded(oldState, (ZmtSimState) state));
}
@Override
public void finish() {
for (GuiListener listener : guiListeners) {
listener.onGuiFinish();
}
super.finish();
guiListeners.stream().forEach(listener -> listener.finished((ZmtSimState) state));
}
@Override
public void quit() {
super.quit();
guiListeners.clear();
guiListeners.stream().forEach(listener -> listener.quit());
}
/** Returns a {@link Inspector} displaying {@link SimParams}. */
......@@ -70,12 +80,4 @@ public abstract class ZmtGUIState extends GUIState {
public Inspector getInspector() {
return Inspector.getInspector(((ZmtSimState) state).getParams(), this, null);
}
public static interface GuiListener extends EventListener {
/** Called on {@link GUIState#start()}. */
void onGuiStart();
/** Called on {@link GUIState#finish()}. */
void onGuiFinish();
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment