mirror of
https://github.com/hneemann/Digital.git
synced 2025-09-13 06:49:36 -04:00
basic refactoring of ModelEvent's
This commit is contained in:
parent
a08496b5b1
commit
b3ba581911
@ -221,7 +221,7 @@ public class Model implements Iterable<Node>, SyncAccess {
|
||||
for (ModelStateObserver ob : observersMicroStep)
|
||||
LOGGER.debug("Observer Micro: " + ob.getClass().getSimpleName());
|
||||
|
||||
fireEvent(ModelEvent.STOPPED);
|
||||
fireEvent(ModelEvent.CLOSED);
|
||||
}
|
||||
}
|
||||
|
||||
@ -429,9 +429,9 @@ public class Model implements Iterable<Node>, SyncAccess {
|
||||
* @param event the mandatory event
|
||||
* @param events more optional events
|
||||
*/
|
||||
public void addObserver(ModelStateObserver observer, ModelEvent event, ModelEvent... events) {
|
||||
public void addObserver(ModelStateObserver observer, ModelEventType event, ModelEventType... events) {
|
||||
addObserverForEvent(observer, event);
|
||||
for (ModelEvent ev : events)
|
||||
for (ModelEventType ev : events)
|
||||
addObserverForEvent(observer, ev);
|
||||
}
|
||||
|
||||
@ -441,18 +441,18 @@ public class Model implements Iterable<Node>, SyncAccess {
|
||||
* @param observer the observer to add
|
||||
*/
|
||||
public void addObserver(ModelStateObserverTyped observer) {
|
||||
for (ModelEvent ev : observer.getEvents())
|
||||
for (ModelEventType ev : observer.getEvents())
|
||||
addObserverForEvent(observer, ev);
|
||||
}
|
||||
|
||||
|
||||
private void addObserverForEvent(ModelStateObserver observer, ModelEvent event) {
|
||||
private void addObserverForEvent(ModelStateObserver observer, ModelEventType event) {
|
||||
ArrayList<ModelStateObserver> obs = observers;
|
||||
if (event == ModelEvent.STEP) {
|
||||
if (event == ModelEventType.STEP) {
|
||||
if (observersStep == null)
|
||||
observersStep = new ArrayList<>();
|
||||
obs = observersStep;
|
||||
} else if (event == ModelEvent.MICROSTEP) {
|
||||
} else if (event == ModelEventType.MICROSTEP) {
|
||||
if (observersMicroStep == null)
|
||||
observersMicroStep = new ArrayList<>();
|
||||
obs = observersMicroStep;
|
||||
@ -498,7 +498,7 @@ public class Model implements Iterable<Node>, SyncAccess {
|
||||
}
|
||||
|
||||
private void fireEvent(ModelEvent event) {
|
||||
switch (event) {
|
||||
switch (event.getType()) {
|
||||
case MICROSTEP:
|
||||
if (observersMicroStep != null)
|
||||
for (ModelStateObserver observer : observersMicroStep)
|
||||
|
@ -1,51 +1,90 @@
|
||||
/*
|
||||
* Copyright (c) 2016 Helmut Neemann
|
||||
* Copyright (c) 2020 Helmut Neemann.
|
||||
* Use of this source code is governed by the GPL v3 license
|
||||
* that can be found in the LICENSE file.
|
||||
*/
|
||||
package de.neemann.digital.core;
|
||||
|
||||
/**
|
||||
* A event fired by the model
|
||||
*/
|
||||
public enum ModelEvent {
|
||||
import java.util.Objects;
|
||||
|
||||
/**
|
||||
* Is fired after the model had became stable after first stabilization.
|
||||
* a model event
|
||||
*/
|
||||
STARTED,
|
||||
|
||||
public class ModelEvent {
|
||||
/**
|
||||
* The model has stopped.
|
||||
* Shorthand for a ModelEventType.STARTED event
|
||||
*/
|
||||
STOPPED,
|
||||
|
||||
public static final ModelEvent STARTED = new ModelEvent(ModelEventType.STARTED);
|
||||
/**
|
||||
* Is fired if the model had performed a full step.
|
||||
* This means a change is propagated through all nodes, and the model has
|
||||
* become stable again.
|
||||
* Shorthand for a ModelEventType.STOPPED event
|
||||
*/
|
||||
STEP,
|
||||
|
||||
public static final ModelEvent CLOSED = new ModelEvent(ModelEventType.CLOSED);
|
||||
/**
|
||||
* Fast run is started.
|
||||
* Shorthand for a ModelEventType.STEP event
|
||||
*/
|
||||
FASTRUN,
|
||||
|
||||
public static final ModelEvent STEP = new ModelEvent(ModelEventType.STEP);
|
||||
/**
|
||||
* A break is detected.
|
||||
* Shorthand for a ModelEventType.MICROSTEP event
|
||||
*/
|
||||
BREAK,
|
||||
|
||||
public static final ModelEvent MICROSTEP = new ModelEvent(ModelEventType.MICROSTEP);
|
||||
/**
|
||||
* Here was a manual change to the model by the user.
|
||||
* Shorthand for a ModelEventType.FASTRUN event
|
||||
*/
|
||||
EXTERNALCHANGE,
|
||||
|
||||
public static final ModelEvent FASTRUN = new ModelEvent(ModelEventType.FASTRUN);
|
||||
/**
|
||||
* If fired if a micro step is calculated.
|
||||
* This means the aktual nodes are calculated, but not the effected nodes.
|
||||
* Shorthand for a ModelEventType.BREAK event
|
||||
*/
|
||||
MICROSTEP
|
||||
public static final ModelEvent BREAK = new ModelEvent(ModelEventType.BREAK);
|
||||
/**
|
||||
* Shorthand for a ModelEventType.EXTERNALCHANGE event
|
||||
*/
|
||||
public static final ModelEvent EXTERNALCHANGE = new ModelEvent(ModelEventType.EXTERNALCHANGE);
|
||||
|
||||
private final ModelEventType type;
|
||||
private String message;
|
||||
private Exception cause;
|
||||
|
||||
private ModelEvent(ModelEventType type) {
|
||||
this.type = type;
|
||||
}
|
||||
|
||||
ModelEvent(String message, Exception cause) {
|
||||
this(ModelEventType.ERROR_OCCURRED);
|
||||
this.message = message;
|
||||
this.cause = cause;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the event type
|
||||
*/
|
||||
public ModelEventType getType() {
|
||||
return type;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the message
|
||||
*/
|
||||
public String getMessage() {
|
||||
return message;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the cause in case of an error
|
||||
*/
|
||||
public Exception getCause() {
|
||||
return cause;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
if (this == o) return true;
|
||||
if (o == null || getClass() != o.getClass()) return false;
|
||||
ModelEvent that = (ModelEvent) o;
|
||||
return type == that.type;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return Objects.hash(type);
|
||||
}
|
||||
}
|
||||
|
56
src/main/java/de/neemann/digital/core/ModelEventType.java
Normal file
56
src/main/java/de/neemann/digital/core/ModelEventType.java
Normal file
@ -0,0 +1,56 @@
|
||||
/*
|
||||
* Copyright (c) 2016 Helmut Neemann
|
||||
* Use of this source code is governed by the GPL v3 license
|
||||
* that can be found in the LICENSE file.
|
||||
*/
|
||||
package de.neemann.digital.core;
|
||||
|
||||
/**
|
||||
* A event fired by the model
|
||||
*/
|
||||
public enum ModelEventType {
|
||||
|
||||
/**
|
||||
* Is fired after the model had became stable after first stabilization.
|
||||
*/
|
||||
STARTED,
|
||||
|
||||
/**
|
||||
* The model has stopped.
|
||||
*/
|
||||
CLOSED,
|
||||
|
||||
/**
|
||||
* Is fired if the model had performed a full step.
|
||||
* This means a change is propagated through all nodes, and the model has
|
||||
* become stable again.
|
||||
*/
|
||||
STEP,
|
||||
|
||||
/**
|
||||
* Fast run is started.
|
||||
*/
|
||||
FASTRUN,
|
||||
|
||||
/**
|
||||
* A break is detected.
|
||||
*/
|
||||
BREAK,
|
||||
|
||||
/**
|
||||
* Here was a manual change to the model by the user.
|
||||
*/
|
||||
EXTERNALCHANGE,
|
||||
|
||||
/**
|
||||
* If fired if a micro step is calculated.
|
||||
* This means the aktual nodes are calculated, but not the effected nodes.
|
||||
*/
|
||||
MICROSTEP,
|
||||
|
||||
/**
|
||||
* Used to notify an error
|
||||
*/
|
||||
ERROR_OCCURRED
|
||||
|
||||
}
|
@ -13,6 +13,6 @@ public interface ModelStateObserverTyped extends ModelStateObserver {
|
||||
/**
|
||||
* @return the events on which this handler needs to be called
|
||||
*/
|
||||
ModelEvent[] getEvents();
|
||||
ModelEventType[] getEvents();
|
||||
|
||||
}
|
||||
|
@ -112,13 +112,13 @@ public class External extends Node implements Element {
|
||||
}
|
||||
|
||||
model.addObserver(event -> {
|
||||
if (event.equals(ModelEvent.STOPPED)) {
|
||||
if (event.equals(ModelEventType.CLOSED)) {
|
||||
try {
|
||||
processInterface.close();
|
||||
} catch (IOException e) {
|
||||
SwingUtilities.invokeLater(new ErrorMessage(Lang.get("msg_errorClosingExternalProcess")).addCause(e));
|
||||
}
|
||||
}
|
||||
}, ModelEvent.STOPPED);
|
||||
}, ModelEventType.CLOSED);
|
||||
}
|
||||
}
|
||||
|
@ -6,7 +6,7 @@
|
||||
package de.neemann.digital.core.io;
|
||||
|
||||
import de.neemann.digital.core.Model;
|
||||
import de.neemann.digital.core.ModelEvent;
|
||||
import de.neemann.digital.core.ModelEventType;
|
||||
import de.neemann.digital.core.NodeException;
|
||||
import de.neemann.digital.lang.Lang;
|
||||
import org.slf4j.Logger;
|
||||
@ -73,9 +73,9 @@ public final class MIDIHelper {
|
||||
isOpen = true;
|
||||
|
||||
model.addObserver(event -> {
|
||||
if (event.equals(ModelEvent.STOPPED))
|
||||
if (event.equals(ModelEventType.CLOSED))
|
||||
close();
|
||||
}, ModelEvent.STOPPED);
|
||||
}, ModelEventType.CLOSED);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -84,7 +84,7 @@ public class EEPROM extends Node implements Element, RAMInterface, ROMInterface
|
||||
super.registerNodes(model);
|
||||
|
||||
if (memory.isEmpty())
|
||||
model.addObserver(event -> attr.set(Keys.DATA, memory), ModelEvent.STOPPED);
|
||||
model.addObserver(event -> attr.set(Keys.DATA, memory), ModelEventType.CLOSED);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -6,7 +6,7 @@
|
||||
package de.neemann.digital.core.memory;
|
||||
|
||||
import de.neemann.digital.core.Model;
|
||||
import de.neemann.digital.core.ModelEvent;
|
||||
import de.neemann.digital.core.ModelEventType;
|
||||
import de.neemann.digital.core.element.ElementAttributes;
|
||||
import de.neemann.digital.core.element.ElementTypeDescription;
|
||||
import de.neemann.digital.core.element.Keys;
|
||||
@ -60,7 +60,7 @@ public class EEPROMDualPort extends RAMDualPort implements ROMInterface {
|
||||
super.registerNodes(model);
|
||||
|
||||
if (memory.isEmpty())
|
||||
model.addObserver(event -> attr.set(Keys.DATA, memory), ModelEvent.STOPPED);
|
||||
model.addObserver(event -> attr.set(Keys.DATA, memory), ModelEventType.CLOSED);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -72,11 +72,11 @@ public class TransGate extends Node implements Element {
|
||||
public void init(Model model) throws NodeException {
|
||||
aSwitch.init(model);
|
||||
model.addObserver(event -> {
|
||||
if (event.equals(ModelEvent.STEP)) {
|
||||
if (event.equals(ModelEventType.STEP)) {
|
||||
if (!s.isHighZ() && !ns.isHighZ() && (s.getBool() == ns.getBool()))
|
||||
throw new BurnException(Lang.get("err_invalidTransmissionGateState"), new ObservableValues(s, ns));
|
||||
}
|
||||
}, ModelEvent.STEP);
|
||||
}, ModelEventType.STEP);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -6,6 +6,7 @@
|
||||
package de.neemann.digital.core.wiring.bus;
|
||||
|
||||
import de.neemann.digital.core.ModelEvent;
|
||||
import de.neemann.digital.core.ModelEventType;
|
||||
import de.neemann.digital.core.ModelStateObserverTyped;
|
||||
import de.neemann.digital.core.switching.PlainSwitch;
|
||||
|
||||
@ -40,8 +41,8 @@ public final class BusModelStateObserver implements ModelStateObserverTyped {
|
||||
}
|
||||
|
||||
@Override
|
||||
public ModelEvent[] getEvents() {
|
||||
return new ModelEvent[]{ModelEvent.STEP};
|
||||
public ModelEventType[] getEvents() {
|
||||
return new ModelEventType[]{ModelEventType.STEP};
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -111,13 +111,13 @@ public class GifExporter extends JDialog implements ModelStateObserverTyped, Mod
|
||||
|
||||
@Override
|
||||
public void handleEvent(ModelEvent event) {
|
||||
if (event.equals(ModelEvent.STEP))
|
||||
if (event == ModelEvent.STEP)
|
||||
writeImage();
|
||||
}
|
||||
|
||||
@Override
|
||||
public ModelEvent[] getEvents() {
|
||||
return new ModelEvent[]{ModelEvent.STEP};
|
||||
public ModelEventType[] getEvents() {
|
||||
return new ModelEventType[]{ModelEventType.STEP};
|
||||
}
|
||||
|
||||
private void writeImage() {
|
||||
|
@ -5,10 +5,7 @@
|
||||
*/
|
||||
package de.neemann.digital.draw.model;
|
||||
|
||||
import de.neemann.digital.core.Model;
|
||||
import de.neemann.digital.core.ModelEvent;
|
||||
import de.neemann.digital.core.ModelStateObserverTyped;
|
||||
import de.neemann.digital.core.NodeException;
|
||||
import de.neemann.digital.core.*;
|
||||
import de.neemann.digital.core.wiring.AsyncSeq;
|
||||
import de.neemann.digital.gui.ErrorStopper;
|
||||
import de.neemann.digital.lang.Lang;
|
||||
@ -46,14 +43,14 @@ public class AsyncSequentialClock implements ModelStateObserverTyped {
|
||||
|
||||
@Override
|
||||
public void handleEvent(ModelEvent event) {
|
||||
switch (event) {
|
||||
switch (event.getType()) {
|
||||
case STARTED:
|
||||
int delayMuS = 1000000 / frequency;
|
||||
if (delayMuS < 100)
|
||||
delayMuS = 100;
|
||||
runner = new RealTimeRunner(delayMuS);
|
||||
break;
|
||||
case STOPPED:
|
||||
case CLOSED:
|
||||
if (runner != null)
|
||||
runner.stop();
|
||||
break;
|
||||
@ -61,8 +58,8 @@ public class AsyncSequentialClock implements ModelStateObserverTyped {
|
||||
}
|
||||
|
||||
@Override
|
||||
public ModelEvent[] getEvents() {
|
||||
return new ModelEvent[]{ModelEvent.STARTED, ModelEvent.STOPPED};
|
||||
public ModelEventType[] getEvents() {
|
||||
return new ModelEventType[]{ModelEventType.STARTED, ModelEventType.CLOSED};
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -55,7 +55,7 @@ public class RealTimeClock implements ModelStateObserverTyped {
|
||||
|
||||
@Override
|
||||
public void handleEvent(ModelEvent event) {
|
||||
switch (event) {
|
||||
switch (event.getType()) {
|
||||
case STARTED:
|
||||
int delayMuS = 500000 / frequency;
|
||||
if (delayMuS < 1)
|
||||
@ -63,7 +63,7 @@ public class RealTimeClock implements ModelStateObserverTyped {
|
||||
else
|
||||
runner = new RealTimeRunner(delayMuS);
|
||||
break;
|
||||
case STOPPED:
|
||||
case CLOSED:
|
||||
if (runner != null)
|
||||
runner.stop();
|
||||
break;
|
||||
@ -71,8 +71,8 @@ public class RealTimeClock implements ModelStateObserverTyped {
|
||||
}
|
||||
|
||||
@Override
|
||||
public ModelEvent[] getEvents() {
|
||||
return new ModelEvent[]{ModelEvent.STARTED, ModelEvent.STOPPED};
|
||||
public ModelEventType[] getEvents() {
|
||||
return new ModelEventType[]{ModelEventType.STARTED, ModelEventType.CLOSED};
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -459,9 +459,9 @@ public class FSMFrame extends JFrame implements ClosingWindowListener.ConfirmSav
|
||||
value.addObserverToValue(() -> setActiveState(value.getValue()));
|
||||
setActiveState(value.getValue());
|
||||
model.addObserver(event -> {
|
||||
if (event == ModelEvent.STOPPED)
|
||||
if (event == ModelEvent.CLOSED)
|
||||
setActiveState(-1);
|
||||
}, ModelEvent.STOPPED
|
||||
}, ModelEventType.CLOSED
|
||||
);
|
||||
}
|
||||
}
|
||||
|
@ -1060,9 +1060,9 @@ public final class Main extends JFrame implements ClosingWindowListener.ConfirmS
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent actionEvent) {
|
||||
if (model != null) {
|
||||
ModelEvent event = ModelEvent.STEP;
|
||||
ModelEventType event = ModelEventType.STEP;
|
||||
if (stateManager.isActive(runModelMicroState))
|
||||
event = ModelEvent.MICROSTEP;
|
||||
event = ModelEventType.MICROSTEP;
|
||||
showMeasurementDialog(event);
|
||||
}
|
||||
}
|
||||
@ -1072,9 +1072,9 @@ public final class Main extends JFrame implements ClosingWindowListener.ConfirmS
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent actionEvent) {
|
||||
if (model != null) {
|
||||
ModelEvent event = ModelEvent.STEP;
|
||||
ModelEventType event = ModelEventType.STEP;
|
||||
if (stateManager.isActive(runModelMicroState))
|
||||
event = ModelEvent.MICROSTEP;
|
||||
event = ModelEventType.MICROSTEP;
|
||||
showMeasurementGraph(event);
|
||||
}
|
||||
}
|
||||
@ -1286,7 +1286,7 @@ public final class Main extends JFrame implements ClosingWindowListener.ConfirmS
|
||||
showMeasurementGraph.setEnabled(true);
|
||||
stoppedState.getAction().setEnabled(true);
|
||||
runTests.setEnabled(false);
|
||||
createAndStartModel(false, ModelEvent.MICROSTEP, null);
|
||||
createAndStartModel(false, ModelEventType.MICROSTEP, null);
|
||||
}
|
||||
});
|
||||
stateManager.setActualState(stoppedState);
|
||||
@ -1323,7 +1323,7 @@ public final class Main extends JFrame implements ClosingWindowListener.ConfirmS
|
||||
showMeasurementDialog.setEnabled(true);
|
||||
showMeasurementGraph.setEnabled(true);
|
||||
runTests.setEnabled(false);
|
||||
createAndStartModel(runRealTime, ModelEvent.STEP, modelModifier);
|
||||
createAndStartModel(runRealTime, ModelEventType.STEP, modelModifier);
|
||||
}
|
||||
}
|
||||
|
||||
@ -1335,7 +1335,7 @@ public final class Main extends JFrame implements ClosingWindowListener.ConfirmS
|
||||
model = null;
|
||||
}
|
||||
|
||||
private void createAndStartModel(boolean globalRunClock, ModelEvent updateEvent, ModelModifier modelModifier) {
|
||||
private void createAndStartModel(boolean globalRunClock, ModelEventType updateEvent, ModelModifier modelModifier) {
|
||||
try {
|
||||
circuitComponent.removeHighLighted();
|
||||
|
||||
@ -1376,7 +1376,7 @@ public final class Main extends JFrame implements ClosingWindowListener.ConfirmS
|
||||
if (threadRunnerCount > 1)
|
||||
throw new RuntimeException(Lang.get("err_moreThanOneFastClock"));
|
||||
}
|
||||
if (!realTimeClockRunning && updateEvent == ModelEvent.MICROSTEP) {
|
||||
if (!realTimeClockRunning && updateEvent == ModelEventType.MICROSTEP) {
|
||||
// no real clock
|
||||
AsyncSeq ai = model.getAsyncInfos();
|
||||
if (ai != null) {
|
||||
@ -1399,7 +1399,7 @@ public final class Main extends JFrame implements ClosingWindowListener.ConfirmS
|
||||
|
||||
doMicroStep.setEnabled(false);
|
||||
if (!realTimeClockRunning && model.isRunToBreakAllowed()) {
|
||||
if (updateEvent == ModelEvent.MICROSTEP)
|
||||
if (updateEvent == ModelEventType.MICROSTEP)
|
||||
runToBreakMicroAction.setEnabled(true);
|
||||
else
|
||||
runToBreakAction.setEnabled(true);
|
||||
@ -1412,7 +1412,7 @@ public final class Main extends JFrame implements ClosingWindowListener.ConfirmS
|
||||
if (settings.get(Keys.SHOW_DATA_GRAPH) || windowPosManager.isVisible("dataSet"))
|
||||
showMeasurementGraph(updateEvent);
|
||||
if (settings.get(Keys.SHOW_DATA_GRAPH_MICRO))
|
||||
showMeasurementGraph(ModelEvent.MICROSTEP);
|
||||
showMeasurementGraph(ModelEventType.MICROSTEP);
|
||||
|
||||
if (modelModifier != null)
|
||||
modelModifier.preInit(model);
|
||||
@ -1421,10 +1421,10 @@ public final class Main extends JFrame implements ClosingWindowListener.ConfirmS
|
||||
new ProgramMemoryLoader(settings.get(Keys.PROGRAM_TO_PRELOAD)).preInit(model);
|
||||
}
|
||||
|
||||
if (updateEvent == ModelEvent.MICROSTEP) {
|
||||
if (updateEvent == ModelEventType.MICROSTEP) {
|
||||
checkMicroStepActions(model);
|
||||
model.addObserver(new MicroStepObserver(model));
|
||||
} else if (updateEvent == ModelEvent.STEP) {
|
||||
} else if (updateEvent == ModelEventType.STEP) {
|
||||
if (maxFrequency <= 50)
|
||||
model.addObserver(new FullStepObserver(model));
|
||||
else
|
||||
@ -1432,9 +1432,9 @@ public final class Main extends JFrame implements ClosingWindowListener.ConfirmS
|
||||
}
|
||||
|
||||
model.addObserver(event -> {
|
||||
if (event.equals(ModelEvent.STOPPED))
|
||||
if (event.equals(ModelEventType.CLOSED))
|
||||
SwingUtilities.invokeLater(this::ensureModelIsStopped);
|
||||
}, ModelEvent.STOPPED);
|
||||
}, ModelEventType.CLOSED);
|
||||
|
||||
model.init();
|
||||
|
||||
@ -1458,12 +1458,12 @@ public final class Main extends JFrame implements ClosingWindowListener.ConfirmS
|
||||
windowPosManager.register("keyboard_" + k.getLabel(), new KeyboardDialog(this, k, model));
|
||||
}
|
||||
|
||||
private void showMeasurementGraph(ModelEvent updateEvent) {
|
||||
private void showMeasurementGraph(ModelEventType updateEvent) {
|
||||
List<String> ordering = circuitComponent.getCircuit().getMeasurementOrdering();
|
||||
windowPosManager.register("dataSet", GraphDialog.createLiveDialog(this, model, updateEvent == ModelEvent.MICROSTEP, ordering)).setVisible(true);
|
||||
windowPosManager.register("dataSet", GraphDialog.createLiveDialog(this, model, updateEvent == ModelEventType.MICROSTEP, ordering)).setVisible(true);
|
||||
}
|
||||
|
||||
private void showMeasurementDialog(ModelEvent updateEvent) {
|
||||
private void showMeasurementDialog(ModelEventType updateEvent) {
|
||||
List<String> ordering = circuitComponent.getCircuit().getMeasurementOrdering();
|
||||
windowPosManager.register("probe", new ProbeDialog(this, model, updateEvent, ordering)).setVisible(true);
|
||||
}
|
||||
@ -1649,7 +1649,7 @@ public final class Main extends JFrame implements ClosingWindowListener.ConfirmS
|
||||
@Override
|
||||
public void handleEvent(ModelEvent event) {
|
||||
try {
|
||||
switch (event) {
|
||||
switch (event.getType()) {
|
||||
case EXTERNALCHANGE:
|
||||
model.doStep();
|
||||
circuitComponent.graphicHasChanged();
|
||||
@ -1664,8 +1664,8 @@ public final class Main extends JFrame implements ClosingWindowListener.ConfirmS
|
||||
}
|
||||
|
||||
@Override
|
||||
public ModelEvent[] getEvents() {
|
||||
return new ModelEvent[]{ModelEvent.EXTERNALCHANGE, ModelEvent.BREAK};
|
||||
public ModelEventType[] getEvents() {
|
||||
return new ModelEventType[]{ModelEventType.EXTERNALCHANGE, ModelEventType.BREAK};
|
||||
}
|
||||
}
|
||||
|
||||
@ -1681,11 +1681,11 @@ public final class Main extends JFrame implements ClosingWindowListener.ConfirmS
|
||||
|
||||
@Override
|
||||
public void handleEvent(ModelEvent event) {
|
||||
switch (event) {
|
||||
switch (event.getType()) {
|
||||
case STARTED:
|
||||
timer.start();
|
||||
break;
|
||||
case STOPPED:
|
||||
case CLOSED:
|
||||
case BREAK:
|
||||
timer.stop();
|
||||
circuitComponent.graphicHasChanged();
|
||||
@ -1694,8 +1694,8 @@ public final class Main extends JFrame implements ClosingWindowListener.ConfirmS
|
||||
}
|
||||
|
||||
@Override
|
||||
public ModelEvent[] getEvents() {
|
||||
return new ModelEvent[]{ModelEvent.STOPPED, ModelEvent.BREAK};
|
||||
public ModelEventType[] getEvents() {
|
||||
return new ModelEventType[]{ModelEventType.CLOSED, ModelEventType.BREAK};
|
||||
}
|
||||
}
|
||||
|
||||
@ -1711,7 +1711,7 @@ public final class Main extends JFrame implements ClosingWindowListener.ConfirmS
|
||||
|
||||
@Override
|
||||
public void handleEvent(ModelEvent event) {
|
||||
switch (event) {
|
||||
switch (event.getType()) {
|
||||
case EXTERNALCHANGE:
|
||||
case MICROSTEP:
|
||||
case BREAK:
|
||||
@ -1727,8 +1727,8 @@ public final class Main extends JFrame implements ClosingWindowListener.ConfirmS
|
||||
}
|
||||
|
||||
@Override
|
||||
public ModelEvent[] getEvents() {
|
||||
return new ModelEvent[]{ModelEvent.EXTERNALCHANGE, ModelEvent.MICROSTEP, ModelEvent.BREAK};
|
||||
public ModelEventType[] getEvents() {
|
||||
return new ModelEventType[]{ModelEventType.EXTERNALCHANGE, ModelEventType.MICROSTEP, ModelEventType.BREAK};
|
||||
}
|
||||
}
|
||||
|
||||
@ -1839,7 +1839,7 @@ public final class Main extends JFrame implements ClosingWindowListener.ConfirmS
|
||||
runModelState.enter(false, new ProgramMemoryLoader(romHex));
|
||||
circuitComponent.graphicHasChanged();
|
||||
if (model != null)
|
||||
showMeasurementDialog(ModelEvent.STEP);
|
||||
showMeasurementDialog(ModelEventType.STEP);
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -231,9 +231,9 @@ public class DataEditor extends JDialog {
|
||||
if (model != null) {
|
||||
model.getWindowPosManager().register("RAM_DATA_" + label, this);
|
||||
model.addObserver(event -> {
|
||||
if (event.equals(ModelEvent.STOPPED))
|
||||
if (event.equals(ModelEventType.CLOSED))
|
||||
detachFromRunningModel();
|
||||
}, ModelEvent.STOPPED);
|
||||
}, ModelEventType.CLOSED);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -27,7 +27,7 @@ import java.util.concurrent.atomic.AtomicBoolean;
|
||||
*/
|
||||
public class ProbeDialog extends JDialog implements ModelStateObserverTyped {
|
||||
|
||||
private final ModelEvent type;
|
||||
private final ModelEventType type;
|
||||
private final SignalTableModel tableModel;
|
||||
private boolean tableUpdateEnable = true;
|
||||
|
||||
@ -39,7 +39,7 @@ public class ProbeDialog extends JDialog implements ModelStateObserverTyped {
|
||||
* @param type the event type which fires a dialog repaint
|
||||
* @param ordering the names list used to order the measurement values
|
||||
*/
|
||||
public ProbeDialog(Frame owner, Model model, ModelEvent type, List<String> ordering) {
|
||||
public ProbeDialog(Frame owner, Model model, ModelEventType type, List<String> ordering) {
|
||||
super(owner, Lang.get("win_measures"), false);
|
||||
setDefaultCloseOperation(DISPOSE_ON_CLOSE);
|
||||
this.type = type;
|
||||
@ -109,7 +109,7 @@ public class ProbeDialog extends JDialog implements ModelStateObserverTyped {
|
||||
|
||||
@Override
|
||||
public void handleEvent(ModelEvent event) {
|
||||
if (event == type || event == ModelEvent.EXTERNALCHANGE) {
|
||||
if (event.getType() == type || event == ModelEvent.EXTERNALCHANGE) {
|
||||
if (tableUpdateEnable) {
|
||||
if (paintPending.compareAndSet(false, true)) {
|
||||
SwingUtilities.invokeLater(() -> {
|
||||
@ -119,12 +119,12 @@ public class ProbeDialog extends JDialog implements ModelStateObserverTyped {
|
||||
}
|
||||
}
|
||||
}
|
||||
switch (event) {
|
||||
switch (event.getType()) {
|
||||
case FASTRUN:
|
||||
tableUpdateEnable = false;
|
||||
break;
|
||||
case BREAK:
|
||||
case STOPPED:
|
||||
case CLOSED:
|
||||
tableUpdateEnable = true;
|
||||
SwingUtilities.invokeLater(tableModel::fireChanged);
|
||||
break;
|
||||
@ -132,8 +132,8 @@ public class ProbeDialog extends JDialog implements ModelStateObserverTyped {
|
||||
}
|
||||
|
||||
@Override
|
||||
public ModelEvent[] getEvents() {
|
||||
return new ModelEvent[]{type, ModelEvent.EXTERNALCHANGE, ModelEvent.FASTRUN, ModelEvent.BREAK, ModelEvent.STOPPED};
|
||||
public ModelEventType[] getEvents() {
|
||||
return new ModelEventType[]{type, ModelEventType.EXTERNALCHANGE, ModelEventType.FASTRUN, ModelEventType.BREAK, ModelEventType.CLOSED};
|
||||
}
|
||||
|
||||
private static class SignalTableModel implements TableModel {
|
||||
|
@ -180,13 +180,13 @@ public final class SingleValueDialog extends JDialog implements ModelStateObserv
|
||||
|
||||
@Override
|
||||
public void handleEvent(ModelEvent event) {
|
||||
if (event.equals(ModelEvent.STOPPED))
|
||||
if (event.equals(ModelEvent.CLOSED))
|
||||
dispose();
|
||||
}
|
||||
|
||||
@Override
|
||||
public ModelEvent[] getEvents() {
|
||||
return new ModelEvent[]{ModelEvent.STOPPED};
|
||||
public ModelEventType[] getEvents() {
|
||||
return new ModelEventType[]{ModelEventType.CLOSED};
|
||||
}
|
||||
|
||||
private JPanel createCheckBoxPanel(int bits, long value) {
|
||||
|
@ -6,6 +6,7 @@
|
||||
package de.neemann.digital.gui.components.data;
|
||||
|
||||
import de.neemann.digital.core.ModelEvent;
|
||||
import de.neemann.digital.core.ModelEventType;
|
||||
import de.neemann.digital.core.ModelStateObserverTyped;
|
||||
import de.neemann.digital.core.Signal;
|
||||
import de.neemann.digital.data.Value;
|
||||
@ -20,7 +21,7 @@ import java.util.ArrayList;
|
||||
public class ValueTableObserver implements ModelStateObserverTyped {
|
||||
|
||||
private final ValueTable logData;
|
||||
private final ModelEvent type;
|
||||
private final ModelEventType type;
|
||||
private final ArrayList<Signal> signals;
|
||||
|
||||
private Value[] manualSample;
|
||||
@ -35,9 +36,9 @@ public class ValueTableObserver implements ModelStateObserverTyped {
|
||||
public ValueTableObserver(boolean microStep, ArrayList<Signal> signals, int maxSize) {
|
||||
this.signals = signals;
|
||||
if (microStep)
|
||||
this.type = ModelEvent.MICROSTEP;
|
||||
this.type = ModelEventType.MICROSTEP;
|
||||
else
|
||||
this.type = ModelEvent.STEP;
|
||||
this.type = ModelEventType.STEP;
|
||||
|
||||
String[] names = new String[signals.size()];
|
||||
for (int i = 0; i < signals.size(); i++)
|
||||
@ -50,14 +51,14 @@ public class ValueTableObserver implements ModelStateObserverTyped {
|
||||
if (event == ModelEvent.STARTED)
|
||||
logData.clear();
|
||||
|
||||
if (event == ModelEvent.EXTERNALCHANGE && type == ModelEvent.MICROSTEP) {
|
||||
if (event == ModelEvent.EXTERNALCHANGE && type == ModelEventType.MICROSTEP) {
|
||||
if (manualSample == null)
|
||||
manualSample = new Value[logData.getColumns()];
|
||||
for (int i = 0; i < logData.getColumns(); i++)
|
||||
manualSample[i] = new Value(signals.get(i).getValue());
|
||||
}
|
||||
|
||||
if (event == type) {
|
||||
if (event.getType() == type) {
|
||||
if (manualSample != null) {
|
||||
logData.add(new TestRow(manualSample));
|
||||
manualSample = null;
|
||||
@ -70,8 +71,8 @@ public class ValueTableObserver implements ModelStateObserverTyped {
|
||||
}
|
||||
|
||||
@Override
|
||||
public ModelEvent[] getEvents() {
|
||||
return new ModelEvent[]{type, ModelEvent.STARTED, ModelEvent.EXTERNALCHANGE};
|
||||
public ModelEventType[] getEvents() {
|
||||
return new ModelEventType[]{type, ModelEventType.STARTED, ModelEventType.EXTERNALCHANGE};
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -227,8 +227,8 @@ public class InitialTutorial extends JDialog implements CircuitComponent.Tutoria
|
||||
}
|
||||
|
||||
@Override
|
||||
public ModelEvent[] getEvents() {
|
||||
return new ModelEvent[]{ModelEvent.EXTERNALCHANGE};
|
||||
public ModelEventType[] getEvents() {
|
||||
return new ModelEventType[]{ModelEventType.EXTERNALCHANGE};
|
||||
}
|
||||
|
||||
@Override
|
||||
|
Loading…
x
Reference in New Issue
Block a user