X-Git-Url: https://mograsim.net/gitweb/?a=blobdiff_plain;f=plugins%2Fnet.mograsim.plugin.core%2Fsrc%2Fnet%2Fmograsim%2Fplugin%2Fnature%2FMachineContext.java;h=2e02e31dff0c0dfb7914718aef1174851d4768a1;hb=15020b7263b6edd100d4b0a5de317e9eaff05c27;hp=b434ec9786505fa6bed9c30d92e937092dc1841d;hpb=f919efc362c3de5c94d894dc8fc7fe22c03fc865;p=Mograsim.git diff --git a/plugins/net.mograsim.plugin.core/src/net/mograsim/plugin/nature/MachineContext.java b/plugins/net.mograsim.plugin.core/src/net/mograsim/plugin/nature/MachineContext.java index b434ec97..2e02e31d 100644 --- a/plugins/net.mograsim.plugin.core/src/net/mograsim/plugin/nature/MachineContext.java +++ b/plugins/net.mograsim.plugin.core/src/net/mograsim/plugin/nature/MachineContext.java @@ -1,8 +1,10 @@ package net.mograsim.plugin.nature; import java.io.IOException; +import java.util.HashSet; import java.util.Objects; import java.util.Optional; +import java.util.Set; import org.eclipse.core.resources.IProject; import org.eclipse.jface.util.PropertyChangeEvent; @@ -11,6 +13,7 @@ import org.eclipse.ui.preferences.ScopedPreferenceStore; import net.mograsim.machine.Machine; import net.mograsim.machine.MachineDefinition; import net.mograsim.machine.MachineRegistry; +import net.mograsim.plugin.nature.ProjectContextEvent.ProjectContextEventType; public class MachineContext { @@ -20,6 +23,8 @@ public class MachineContext Optional machineDefinition; Optional activeMachine; + private final Set observers = new HashSet<>(); + public MachineContext(IProject owner) { this.owner = Objects.requireNonNull(owner); @@ -87,6 +92,7 @@ public class MachineContext public final void setActiveMachine(Machine machine) { activeMachine = Optional.ofNullable(machine); + notifyObservers(); } public final Optional getMachineId() @@ -107,6 +113,8 @@ public class MachineContext final void updateDefinition() { machineDefinition = machineId.map(MachineRegistry::getMachine); + machineDefinition.ifPresent(md -> setActiveMachine(md.createNew())); + ProjectMachineContext.notifyListeners(new ProjectContextEvent(this, ProjectContextEventType.MACHINE_DEFINITION_CHANGE)); } private void preferenceListener(PropertyChangeEvent changeEvent) @@ -117,4 +125,26 @@ public class MachineContext updateDefinition(); } } + + public void registerObserver(ActiveMachineListener ob) + { + observers.add(ob); + ob.setMachine(activeMachine); + } + + public void deregisterObserver(ActiveMachineListener ob) + { + observers.remove(ob); + } + + private void notifyObservers() + { + observers.forEach(ob -> ob.setMachine(activeMachine)); + } + + @FunctionalInterface + public static interface ActiveMachineListener + { + void setMachine(Optional machine); + } } \ No newline at end of file