mirror of
https://github.com/hneemann/Digital.git
synced 2025-09-13 14:56:29 -04:00
made the model events a simple enum.
This commit is contained in:
parent
831c5068fe
commit
198fecea32
@ -1,27 +1,43 @@
|
||||
package de.neemann.digital.core;
|
||||
|
||||
/**
|
||||
* A event fired by the model
|
||||
*
|
||||
* @author hneemann
|
||||
*/
|
||||
public class ModelEvent {
|
||||
public enum ModelEvent {
|
||||
|
||||
public static final ModelEvent STEP = new ModelEvent(Event.STEP);
|
||||
public static final ModelEvent MICROSTEP = new ModelEvent(Event.MICROSTEP);
|
||||
public static final ModelEvent STARTED = new ModelEvent(Event.STARTED);
|
||||
public static final ModelEvent BREAK = new ModelEvent(Event.BREAK);
|
||||
public static final ModelEvent STOPPED = new ModelEvent(Event.STOPPED);
|
||||
public static final ModelEvent MANUALCHANGE = new ModelEvent(Event.MANUALCHANGE);
|
||||
/**
|
||||
* Is fired after the model had became stable after first stabilization.
|
||||
*/
|
||||
STARTED,
|
||||
|
||||
public enum Event {STARTED, STOPPED, STEP, BREAK, MANUALCHANGE, MICROSTEP}
|
||||
/**
|
||||
* The model had stopped.
|
||||
*/
|
||||
STOPPED,
|
||||
|
||||
private final Event event;
|
||||
/**
|
||||
* 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,
|
||||
|
||||
private ModelEvent(Event event) {
|
||||
this.event = event;
|
||||
}
|
||||
/**
|
||||
* A break is detected.
|
||||
*/
|
||||
BREAK,
|
||||
|
||||
public Event getType() {
|
||||
return event;
|
||||
}
|
||||
/**
|
||||
* Here was a manual change to the model by the user.
|
||||
*/
|
||||
MANUALCHANGE,
|
||||
|
||||
/**
|
||||
* If fired if a micro step is calculated.
|
||||
* This means the aktual nodes are calculated, but not the effected nodes.
|
||||
*/
|
||||
MICROSTEP;
|
||||
|
||||
}
|
||||
|
@ -1,10 +1,17 @@
|
||||
package de.neemann.digital.core;
|
||||
|
||||
/**
|
||||
* Interface to implement observers of the model.
|
||||
*
|
||||
* @author hneemann
|
||||
*/
|
||||
public interface ModelStateObserver {
|
||||
|
||||
/**
|
||||
* called if a event was detected.
|
||||
*
|
||||
* @param event the event
|
||||
*/
|
||||
void handleEvent(ModelEvent event);
|
||||
|
||||
}
|
||||
|
@ -41,7 +41,7 @@ public class RealTimeClock implements ModelStateObserver {
|
||||
|
||||
@Override
|
||||
public void handleEvent(ModelEvent event) {
|
||||
switch (event.getType()) {
|
||||
switch (event) {
|
||||
case STARTED:
|
||||
if (frequency > 50) // if frequency is high it is not necessary to update the GUI at every clock
|
||||
output.removeObserver(GuiModelObserver.class);
|
||||
|
@ -23,14 +23,14 @@ import java.util.ArrayList;
|
||||
*/
|
||||
public class DataShape implements Shape {
|
||||
|
||||
private final ModelEvent.Event type;
|
||||
private final ModelEvent type;
|
||||
private DataSet dataSet;
|
||||
|
||||
public DataShape(ElementAttributes attr) {
|
||||
if (attr.get(AttributeKey.MicroStep))
|
||||
type = ModelEvent.Event.MICROSTEP;
|
||||
type = ModelEvent.MICROSTEP;
|
||||
else
|
||||
type = ModelEvent.Event.STEP;
|
||||
type = ModelEvent.STEP;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -16,7 +16,7 @@ import de.neemann.digital.gui.components.CircuitComponent;
|
||||
*/
|
||||
public class GuiModelObserver implements Observer, ModelStateObserver {
|
||||
private final CircuitComponent component;
|
||||
private final ModelEvent.Event type;
|
||||
private final ModelEvent type;
|
||||
private boolean changed = false;
|
||||
|
||||
/**
|
||||
@ -25,7 +25,7 @@ public class GuiModelObserver implements Observer, ModelStateObserver {
|
||||
* @param component the component to update
|
||||
* @param type the event type which triggers a repainting
|
||||
*/
|
||||
public GuiModelObserver(CircuitComponent component, ModelEvent.Event type) {
|
||||
public GuiModelObserver(CircuitComponent component, ModelEvent type) {
|
||||
this.component = component;
|
||||
this.type = type;
|
||||
}
|
||||
@ -37,7 +37,7 @@ public class GuiModelObserver implements Observer, ModelStateObserver {
|
||||
|
||||
@Override
|
||||
public void handleEvent(ModelEvent event) {
|
||||
if (changed && event.getType() == type) {
|
||||
if (changed && event == type) {
|
||||
component.paintImmediately(0, 0, component.getWidth(), component.getHeight());
|
||||
changed = false;
|
||||
}
|
||||
|
@ -374,7 +374,7 @@ public class Main extends JFrame implements ClosingWindowListener.ConfirmSave, E
|
||||
@Override
|
||||
public void enter() {
|
||||
super.enter();
|
||||
if (createAndStartModel(settings.get(AttributeKey.StartTimer), ModelEvent.Event.STEP))
|
||||
if (createAndStartModel(settings.get(AttributeKey.StartTimer), ModelEvent.STEP))
|
||||
circuitComponent.setManualChangeObserver(new FullStepObserver(model));
|
||||
}
|
||||
});
|
||||
@ -382,7 +382,7 @@ public class Main extends JFrame implements ClosingWindowListener.ConfirmSave, E
|
||||
@Override
|
||||
public void enter() {
|
||||
super.enter();
|
||||
if (createAndStartModel(false, ModelEvent.Event.MICROSTEP))
|
||||
if (createAndStartModel(false, ModelEvent.MICROSTEP))
|
||||
circuitComponent.setManualChangeObserver(new MicroStepObserver(model));
|
||||
}
|
||||
});
|
||||
@ -416,7 +416,7 @@ public class Main extends JFrame implements ClosingWindowListener.ConfirmSave, E
|
||||
}
|
||||
|
||||
|
||||
private boolean createAndStartModel(boolean runClock, ModelEvent.Event updateEvent) {
|
||||
private boolean createAndStartModel(boolean runClock, ModelEvent updateEvent) {
|
||||
try {
|
||||
circuitComponent.removeHighLighted();
|
||||
circuitComponent.setModeAndReset(true);
|
||||
|
@ -20,10 +20,10 @@ import java.util.List;
|
||||
*/
|
||||
public class ProbeDialog extends JDialog implements ModelStateObserver {
|
||||
|
||||
private final ModelEvent.Event type;
|
||||
private final ModelEvent type;
|
||||
private final SignalTableModel tableModel;
|
||||
|
||||
public ProbeDialog(Frame owner, Model model, ModelEvent.Event type, List<String> ordering) {
|
||||
public ProbeDialog(Frame owner, Model model, ModelEvent type, List<String> ordering) {
|
||||
super(owner, Lang.get("win_measures"), false);
|
||||
setDefaultCloseOperation(DISPOSE_ON_CLOSE);
|
||||
this.type = type;
|
||||
@ -61,7 +61,7 @@ public class ProbeDialog extends JDialog implements ModelStateObserver {
|
||||
|
||||
@Override
|
||||
public void handleEvent(ModelEvent event) {
|
||||
if (event.getType() == type || event.getType() == ModelEvent.Event.MANUALCHANGE) {
|
||||
if (event == type || event == ModelEvent.MANUALCHANGE) {
|
||||
tableModel.fireChanged();
|
||||
}
|
||||
}
|
||||
|
@ -32,7 +32,7 @@ public class DataSetDialog extends JDialog implements ModelStateObserver {
|
||||
* @param type the event type which triggers a new DataSample
|
||||
* @param ordering
|
||||
*/
|
||||
public DataSetDialog(Frame owner, Model model, ModelEvent.Event type, List<String> ordering) {
|
||||
public DataSetDialog(Frame owner, Model model, ModelEvent type, List<String> ordering) {
|
||||
super(owner, Lang.get("win_measures"), false);
|
||||
setDefaultCloseOperation(DISPOSE_ON_CLOSE);
|
||||
setAlwaysOnTop(true);
|
||||
|
@ -9,29 +9,29 @@ import de.neemann.digital.core.ModelStateObserver;
|
||||
public class DataSetObserver implements ModelStateObserver {
|
||||
|
||||
private final DataSet dataSet;
|
||||
private final ModelEvent.Event type;
|
||||
private final ModelEvent type;
|
||||
|
||||
private DataSample manualSample;
|
||||
private int maintime;
|
||||
|
||||
public DataSetObserver(ModelEvent.Event type, DataSet dataSet) {
|
||||
public DataSetObserver(ModelEvent type, DataSet dataSet) {
|
||||
this.type = type;
|
||||
this.dataSet = dataSet;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handleEvent(ModelEvent event) {
|
||||
if (event.getType() == ModelEvent.Event.STARTED) {
|
||||
if (event == ModelEvent.STARTED) {
|
||||
dataSet.clear();
|
||||
maintime = 0;
|
||||
}
|
||||
if (event.getType() == ModelEvent.Event.MANUALCHANGE) {
|
||||
if (event == ModelEvent.MANUALCHANGE) {
|
||||
if (manualSample == null)
|
||||
manualSample = new DataSample(maintime, dataSet.signalSize());
|
||||
manualSample.fillWith(dataSet.getSignals());
|
||||
}
|
||||
|
||||
if (event.getType() == type) {
|
||||
if (event == type) {
|
||||
if (manualSample != null) {
|
||||
dataSet.add(manualSample);
|
||||
manualSample = null;
|
||||
|
Loading…
x
Reference in New Issue
Block a user