package app.state; import com.google.common.eventbus.EventBus; import com.google.inject.Inject; import com.google.inject.Singleton; import domain.common.Mode; import domain.events.ImageChangedEvent; import domain.events.ModeChangedEvent; import domain.events.listeners.Listener; import domain.image.Image; import java.util.ArrayList; import java.util.List; /** * Represents the global state of the app */ @Singleton public class AppState extends State { private Mode mode; private Image rgbImage; private final List listeners = new ArrayList<>(); @Inject public AppState() {} public void subscribe(AppStateListener listener) { listeners.add(listener); } public void unsubscribe(AppStateListener listener) { listeners.remove(listener); } public void setMode(Mode mode) { this.mode = mode; listeners.forEach(listener -> listener.onModeChanged(mode)); } public void setImage(Image image) { this.rgbImage = image; listeners.forEach(listener -> listener.onImageChanged(image)); } public Image getImage() { return rgbImage; } public Mode getMode() { return mode; } }