made the model events a simple enum.

This commit is contained in:
hneemann 2016-04-10 15:50:34 +02:00
parent 831c5068fe
commit 198fecea32
9 changed files with 57 additions and 34 deletions

View File

@ -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;
}

View File

@ -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);
}

View File

@ -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);

View File

@ -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

View File

@ -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;
}

View File

@ -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);

View File

@ -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();
}
}

View File

@ -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);

View File

@ -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;