mirror of
https://github.com/hneemann/Digital.git
synced 2025-09-13 23:06:22 -04:00
removed the observer from the applyStateMonitor method
This commit is contained in:
parent
dfd9fb8ac7
commit
395c3dd47d
@ -333,7 +333,7 @@ public class VisualElement implements Drawable, Movable, AttributeListener {
|
|||||||
interactor = null;
|
interactor = null;
|
||||||
resetShape();
|
resetShape();
|
||||||
} else
|
} else
|
||||||
interactor = getShape().applyStateMonitor(ioState, null);
|
interactor = getShape().applyStateMonitor(ioState);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -344,13 +344,10 @@ public class VisualElement implements Drawable, Movable, AttributeListener {
|
|||||||
* @param pos the position
|
* @param pos the position
|
||||||
* @param posInComponent position in CircuitComponent
|
* @param posInComponent position in CircuitComponent
|
||||||
* @param modelSync used to access the running model
|
* @param modelSync used to access the running model
|
||||||
* @return true if model is changed
|
|
||||||
*/
|
*/
|
||||||
public boolean elementClicked(CircuitComponent cc, Point pos, Vector posInComponent, SyncAccess modelSync) {
|
public void elementClicked(CircuitComponent cc, Point pos, Vector posInComponent, SyncAccess modelSync) {
|
||||||
if (interactor != null)
|
if (interactor != null)
|
||||||
return interactor.clicked(cc, pos, ioState, element, modelSync);
|
interactor.clicked(cc, pos, ioState, element, modelSync);
|
||||||
else
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -361,13 +358,10 @@ public class VisualElement implements Drawable, Movable, AttributeListener {
|
|||||||
* @param pos the position
|
* @param pos the position
|
||||||
* @param posInComponent position in CircuitComponent
|
* @param posInComponent position in CircuitComponent
|
||||||
* @param modelSync used to access the running model
|
* @param modelSync used to access the running model
|
||||||
* @return true if model is changed
|
|
||||||
*/
|
*/
|
||||||
public boolean elementPressed(CircuitComponent cc, Point pos, Vector posInComponent, SyncAccess modelSync) {
|
public void elementPressed(CircuitComponent cc, Point pos, Vector posInComponent, SyncAccess modelSync) {
|
||||||
if (interactor != null)
|
if (interactor != null)
|
||||||
return interactor.pressed(cc, pos, ioState, element, modelSync);
|
interactor.pressed(cc, pos, ioState, element, modelSync);
|
||||||
else
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -378,13 +372,10 @@ public class VisualElement implements Drawable, Movable, AttributeListener {
|
|||||||
* @param pos the position
|
* @param pos the position
|
||||||
* @param posInComponent position in CircuitComponent
|
* @param posInComponent position in CircuitComponent
|
||||||
* @param modelSync used to access the running model
|
* @param modelSync used to access the running model
|
||||||
* @return true if model is changed
|
|
||||||
*/
|
*/
|
||||||
public boolean elementReleased(CircuitComponent cc, Point pos, Vector posInComponent, SyncAccess modelSync) {
|
public void elementReleased(CircuitComponent cc, Point pos, Vector posInComponent, SyncAccess modelSync) {
|
||||||
if (interactor != null)
|
if (interactor != null)
|
||||||
return interactor.released(cc, pos, ioState, element, modelSync);
|
interactor.released(cc, pos, ioState, element, modelSync);
|
||||||
else
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -395,13 +386,10 @@ public class VisualElement implements Drawable, Movable, AttributeListener {
|
|||||||
* @param pos the position
|
* @param pos the position
|
||||||
* @param posInComponent position in CircuitComponent
|
* @param posInComponent position in CircuitComponent
|
||||||
* @param modelSync used to access the running model
|
* @param modelSync used to access the running model
|
||||||
* @return true if model is changed
|
|
||||||
*/
|
*/
|
||||||
public boolean elementDragged(CircuitComponent cc, Point pos, Vector posInComponent, SyncAccess modelSync) {
|
public void elementDragged(CircuitComponent cc, Point pos, Vector posInComponent, SyncAccess modelSync) {
|
||||||
if (interactor != null)
|
if (interactor != null)
|
||||||
return interactor.dragged(cc, pos, posInComponent, getTransform(), ioState, element, modelSync);
|
interactor.dragged(cc, pos, posInComponent, getTransform(), ioState, element, modelSync);
|
||||||
else
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -5,7 +5,6 @@
|
|||||||
*/
|
*/
|
||||||
package de.neemann.digital.draw.shapes;
|
package de.neemann.digital.draw.shapes;
|
||||||
|
|
||||||
import de.neemann.digital.core.Observer;
|
|
||||||
import de.neemann.digital.core.element.ElementAttributes;
|
import de.neemann.digital.core.element.ElementAttributes;
|
||||||
import de.neemann.digital.core.element.PinDescriptions;
|
import de.neemann.digital.core.element.PinDescriptions;
|
||||||
import de.neemann.digital.draw.elements.IOState;
|
import de.neemann.digital.draw.elements.IOState;
|
||||||
@ -43,7 +42,7 @@ public class AsyncClockShape implements Shape {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public InteractorInterface applyStateMonitor(IOState ioState, Observer guiObserver) {
|
public InteractorInterface applyStateMonitor(IOState ioState) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5,7 +5,6 @@
|
|||||||
*/
|
*/
|
||||||
package de.neemann.digital.draw.shapes;
|
package de.neemann.digital.draw.shapes;
|
||||||
|
|
||||||
import de.neemann.digital.core.Observer;
|
|
||||||
import de.neemann.digital.core.element.ElementAttributes;
|
import de.neemann.digital.core.element.ElementAttributes;
|
||||||
import de.neemann.digital.core.element.Keys;
|
import de.neemann.digital.core.element.Keys;
|
||||||
import de.neemann.digital.core.element.PinDescriptions;
|
import de.neemann.digital.core.element.PinDescriptions;
|
||||||
@ -50,7 +49,7 @@ public class BitSelShape implements Shape {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Interactor applyStateMonitor(IOState ioState, Observer guiObserver) {
|
public Interactor applyStateMonitor(IOState ioState) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5,7 +5,6 @@
|
|||||||
*/
|
*/
|
||||||
package de.neemann.digital.draw.shapes;
|
package de.neemann.digital.draw.shapes;
|
||||||
|
|
||||||
import de.neemann.digital.core.Observer;
|
|
||||||
import de.neemann.digital.core.element.ElementAttributes;
|
import de.neemann.digital.core.element.ElementAttributes;
|
||||||
import de.neemann.digital.core.element.Keys;
|
import de.neemann.digital.core.element.Keys;
|
||||||
import de.neemann.digital.core.element.PinDescriptions;
|
import de.neemann.digital.core.element.PinDescriptions;
|
||||||
@ -51,7 +50,7 @@ public class BreakShape implements Shape {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Interactor applyStateMonitor(IOState ioState, Observer guiObserver) {
|
public Interactor applyStateMonitor(IOState ioState) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -6,7 +6,6 @@
|
|||||||
package de.neemann.digital.draw.shapes;
|
package de.neemann.digital.draw.shapes;
|
||||||
|
|
||||||
import de.neemann.digital.core.BitsException;
|
import de.neemann.digital.core.BitsException;
|
||||||
import de.neemann.digital.core.Observer;
|
|
||||||
import de.neemann.digital.core.element.ElementAttributes;
|
import de.neemann.digital.core.element.ElementAttributes;
|
||||||
import de.neemann.digital.core.element.Keys;
|
import de.neemann.digital.core.element.Keys;
|
||||||
import de.neemann.digital.core.element.PinDescriptions;
|
import de.neemann.digital.core.element.PinDescriptions;
|
||||||
@ -56,7 +55,7 @@ public class BusSplitterShape implements Shape {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Interactor applyStateMonitor(IOState ioState, Observer guiObserver) {
|
public Interactor applyStateMonitor(IOState ioState) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -6,7 +6,6 @@
|
|||||||
package de.neemann.digital.draw.shapes;
|
package de.neemann.digital.draw.shapes;
|
||||||
|
|
||||||
import de.neemann.digital.core.ObservableValue;
|
import de.neemann.digital.core.ObservableValue;
|
||||||
import de.neemann.digital.core.Observer;
|
|
||||||
import de.neemann.digital.core.Value;
|
import de.neemann.digital.core.Value;
|
||||||
import de.neemann.digital.core.element.ElementAttributes;
|
import de.neemann.digital.core.element.ElementAttributes;
|
||||||
import de.neemann.digital.core.element.Keys;
|
import de.neemann.digital.core.element.Keys;
|
||||||
@ -56,10 +55,10 @@ public class ButtonLEDShape extends ButtonShape {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public InteractorInterface applyStateMonitor(IOState ioState, Observer guiObserver) {
|
public InteractorInterface applyStateMonitor(IOState ioState) {
|
||||||
inputValue = ioState.getInput(0);
|
inputValue = ioState.getInput(0);
|
||||||
button = (ButtonLED) ioState.getElement();
|
button = (ButtonLED) ioState.getElement();
|
||||||
return super.applyStateMonitor(ioState, guiObserver);
|
return super.applyStateMonitor(ioState);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -5,7 +5,6 @@
|
|||||||
*/
|
*/
|
||||||
package de.neemann.digital.draw.shapes;
|
package de.neemann.digital.draw.shapes;
|
||||||
|
|
||||||
import de.neemann.digital.core.Observer;
|
|
||||||
import de.neemann.digital.core.SyncAccess;
|
import de.neemann.digital.core.SyncAccess;
|
||||||
import de.neemann.digital.core.element.Element;
|
import de.neemann.digital.core.element.Element;
|
||||||
import de.neemann.digital.core.element.ElementAttributes;
|
import de.neemann.digital.core.element.ElementAttributes;
|
||||||
@ -51,30 +50,25 @@ public class ButtonShape implements Shape {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public InteractorInterface applyStateMonitor(IOState ioState, Observer guiObserver) {
|
public InteractorInterface applyStateMonitor(IOState ioState) {
|
||||||
this.button = (Button) ioState.getElement();
|
this.button = (Button) ioState.getElement();
|
||||||
ioState.getOutput(0).addObserverToValue(guiObserver);
|
|
||||||
return new InteractorInterface() {
|
return new InteractorInterface() {
|
||||||
@Override
|
@Override
|
||||||
public boolean clicked(CircuitComponent cc, Point pos, IOState ioState, Element element, SyncAccess modelSync) {
|
public void clicked(CircuitComponent cc, Point pos, IOState ioState, Element element, SyncAccess modelSync) {
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean pressed(CircuitComponent cc, Point pos, IOState ioState, Element element, SyncAccess modelSync) {
|
public void pressed(CircuitComponent cc, Point pos, IOState ioState, Element element, SyncAccess modelSync) {
|
||||||
modelSync.modify(() -> button.setPressed(true));
|
modelSync.modify(() -> button.setPressed(true));
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean released(CircuitComponent cc, Point pos, IOState ioState, Element element, SyncAccess modelSync) {
|
public void released(CircuitComponent cc, Point pos, IOState ioState, Element element, SyncAccess modelSync) {
|
||||||
modelSync.modify(() -> button.setPressed(false));
|
modelSync.modify(() -> button.setPressed(false));
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean dragged(CircuitComponent cc, Point posOnScreen, Vector pos, Transform trans, IOState ioState, Element element, SyncAccess modelSync) {
|
public void dragged(CircuitComponent cc, Point posOnScreen, Vector pos, Transform trans, IOState ioState, Element element, SyncAccess modelSync) {
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -6,7 +6,6 @@
|
|||||||
package de.neemann.digital.draw.shapes;
|
package de.neemann.digital.draw.shapes;
|
||||||
|
|
||||||
import de.neemann.digital.core.ObservableValue;
|
import de.neemann.digital.core.ObservableValue;
|
||||||
import de.neemann.digital.core.Observer;
|
|
||||||
import de.neemann.digital.core.SyncAccess;
|
import de.neemann.digital.core.SyncAccess;
|
||||||
import de.neemann.digital.core.element.Element;
|
import de.neemann.digital.core.element.Element;
|
||||||
import de.neemann.digital.core.element.ElementAttributes;
|
import de.neemann.digital.core.element.ElementAttributes;
|
||||||
@ -56,17 +55,13 @@ public class ClockShape implements Shape {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Interactor applyStateMonitor(IOState ioState, Observer guiObserver) {
|
public Interactor applyStateMonitor(IOState ioState) {
|
||||||
ioState.getOutput(0).addObserverToValue(guiObserver); // necessary to replot wires also if component itself does not depend on state
|
|
||||||
return new Interactor() {
|
return new Interactor() {
|
||||||
@Override
|
@Override
|
||||||
public boolean clicked(CircuitComponent cc, Point pos, IOState ioState, Element element, SyncAccess modelSync) {
|
public void clicked(CircuitComponent cc, Point pos, IOState ioState, Element element, SyncAccess modelSync) {
|
||||||
ObservableValue value = ioState.getOutput(0);
|
ObservableValue value = ioState.getOutput(0);
|
||||||
if (value.getBits() == 1) {
|
if (value.getBits() == 1)
|
||||||
modelSync.modify(() -> value.setValue(1 - value.getValue()));
|
modelSync.modify(() -> value.setValue(1 - value.getValue()));
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -5,7 +5,6 @@
|
|||||||
*/
|
*/
|
||||||
package de.neemann.digital.draw.shapes;
|
package de.neemann.digital.draw.shapes;
|
||||||
|
|
||||||
import de.neemann.digital.core.Observer;
|
|
||||||
import de.neemann.digital.core.Value;
|
import de.neemann.digital.core.Value;
|
||||||
import de.neemann.digital.core.element.ElementAttributes;
|
import de.neemann.digital.core.element.ElementAttributes;
|
||||||
import de.neemann.digital.core.element.Keys;
|
import de.neemann.digital.core.element.Keys;
|
||||||
@ -47,7 +46,7 @@ public class ConstShape implements Shape {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Interactor applyStateMonitor(IOState ioState, Observer guiObserver) {
|
public Interactor applyStateMonitor(IOState ioState) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5,7 +5,6 @@
|
|||||||
*/
|
*/
|
||||||
package de.neemann.digital.draw.shapes;
|
package de.neemann.digital.draw.shapes;
|
||||||
|
|
||||||
import de.neemann.digital.core.Observer;
|
|
||||||
import de.neemann.digital.core.element.ElementAttributes;
|
import de.neemann.digital.core.element.ElementAttributes;
|
||||||
import de.neemann.digital.core.element.Keys;
|
import de.neemann.digital.core.element.Keys;
|
||||||
import de.neemann.digital.core.element.PinDescription;
|
import de.neemann.digital.core.element.PinDescription;
|
||||||
@ -66,7 +65,7 @@ public class DILShape implements Shape {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public InteractorInterface applyStateMonitor(IOState ioState, Observer guiObserver) {
|
public InteractorInterface applyStateMonitor(IOState ioState) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -6,7 +6,6 @@
|
|||||||
package de.neemann.digital.draw.shapes;
|
package de.neemann.digital.draw.shapes;
|
||||||
|
|
||||||
import de.neemann.digital.core.Model;
|
import de.neemann.digital.core.Model;
|
||||||
import de.neemann.digital.core.Observer;
|
|
||||||
import de.neemann.digital.core.Signal;
|
import de.neemann.digital.core.Signal;
|
||||||
import de.neemann.digital.core.element.ElementAttributes;
|
import de.neemann.digital.core.element.ElementAttributes;
|
||||||
import de.neemann.digital.core.element.Keys;
|
import de.neemann.digital.core.element.Keys;
|
||||||
@ -54,7 +53,7 @@ public class DataShape implements Shape {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Interactor applyStateMonitor(IOState ioState, Observer guiObserver) {
|
public Interactor applyStateMonitor(IOState ioState) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5,7 +5,6 @@
|
|||||||
*/
|
*/
|
||||||
package de.neemann.digital.draw.shapes;
|
package de.neemann.digital.draw.shapes;
|
||||||
|
|
||||||
import de.neemann.digital.core.Observer;
|
|
||||||
import de.neemann.digital.draw.elements.IOState;
|
import de.neemann.digital.draw.elements.IOState;
|
||||||
import de.neemann.digital.draw.elements.Pin;
|
import de.neemann.digital.draw.elements.Pin;
|
||||||
import de.neemann.digital.draw.elements.Pins;
|
import de.neemann.digital.draw.elements.Pins;
|
||||||
@ -39,7 +38,7 @@ public class DelayShape implements Shape {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Interactor applyStateMonitor(IOState ioState, Observer guiObserver) {
|
public Interactor applyStateMonitor(IOState ioState) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5,7 +5,6 @@
|
|||||||
*/
|
*/
|
||||||
package de.neemann.digital.draw.shapes;
|
package de.neemann.digital.draw.shapes;
|
||||||
|
|
||||||
import de.neemann.digital.core.Observer;
|
|
||||||
import de.neemann.digital.core.element.ElementAttributes;
|
import de.neemann.digital.core.element.ElementAttributes;
|
||||||
import de.neemann.digital.core.element.Keys;
|
import de.neemann.digital.core.element.Keys;
|
||||||
import de.neemann.digital.core.element.PinDescriptions;
|
import de.neemann.digital.core.element.PinDescriptions;
|
||||||
@ -63,7 +62,7 @@ public class DemuxerShape implements Shape {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Interactor applyStateMonitor(IOState ioState, Observer guiObserver) {
|
public Interactor applyStateMonitor(IOState ioState) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5,7 +5,6 @@
|
|||||||
*/
|
*/
|
||||||
package de.neemann.digital.draw.shapes;
|
package de.neemann.digital.draw.shapes;
|
||||||
|
|
||||||
import de.neemann.digital.core.Observer;
|
|
||||||
import de.neemann.digital.core.element.ElementAttributes;
|
import de.neemann.digital.core.element.ElementAttributes;
|
||||||
import de.neemann.digital.core.element.Keys;
|
import de.neemann.digital.core.element.Keys;
|
||||||
import de.neemann.digital.core.element.PinDescriptions;
|
import de.neemann.digital.core.element.PinDescriptions;
|
||||||
@ -50,7 +49,7 @@ public class DiodeBackwardShape implements Shape {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public InteractorInterface applyStateMonitor(IOState ioState, Observer guiObserver) {
|
public InteractorInterface applyStateMonitor(IOState ioState) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5,7 +5,6 @@
|
|||||||
*/
|
*/
|
||||||
package de.neemann.digital.draw.shapes;
|
package de.neemann.digital.draw.shapes;
|
||||||
|
|
||||||
import de.neemann.digital.core.Observer;
|
|
||||||
import de.neemann.digital.core.element.ElementAttributes;
|
import de.neemann.digital.core.element.ElementAttributes;
|
||||||
import de.neemann.digital.core.element.Keys;
|
import de.neemann.digital.core.element.Keys;
|
||||||
import de.neemann.digital.core.element.PinDescriptions;
|
import de.neemann.digital.core.element.PinDescriptions;
|
||||||
@ -50,7 +49,7 @@ public class DiodeForewardShape implements Shape {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public InteractorInterface applyStateMonitor(IOState ioState, Observer guiObserver) {
|
public InteractorInterface applyStateMonitor(IOState ioState) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5,7 +5,6 @@
|
|||||||
*/
|
*/
|
||||||
package de.neemann.digital.draw.shapes;
|
package de.neemann.digital.draw.shapes;
|
||||||
|
|
||||||
import de.neemann.digital.core.Observer;
|
|
||||||
import de.neemann.digital.core.element.ElementAttributes;
|
import de.neemann.digital.core.element.ElementAttributes;
|
||||||
import de.neemann.digital.core.element.Keys;
|
import de.neemann.digital.core.element.Keys;
|
||||||
import de.neemann.digital.core.element.PinDescriptions;
|
import de.neemann.digital.core.element.PinDescriptions;
|
||||||
@ -48,7 +47,7 @@ public class DiodeShape implements Shape {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public InteractorInterface applyStateMonitor(IOState ioState, Observer guiObserver) {
|
public InteractorInterface applyStateMonitor(IOState ioState) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -6,7 +6,6 @@
|
|||||||
package de.neemann.digital.draw.shapes;
|
package de.neemann.digital.draw.shapes;
|
||||||
|
|
||||||
import de.neemann.digital.core.ObservableValue;
|
import de.neemann.digital.core.ObservableValue;
|
||||||
import de.neemann.digital.core.Observer;
|
|
||||||
import de.neemann.digital.core.SyncAccess;
|
import de.neemann.digital.core.SyncAccess;
|
||||||
import de.neemann.digital.core.Value;
|
import de.neemann.digital.core.Value;
|
||||||
import de.neemann.digital.core.element.Element;
|
import de.neemann.digital.core.element.Element;
|
||||||
@ -75,15 +74,13 @@ public class DipSwitchShape implements Shape {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Interactor applyStateMonitor(IOState ioState, Observer guiObserver) {
|
public Interactor applyStateMonitor(IOState ioState) {
|
||||||
this.ioState = ioState;
|
this.ioState = ioState;
|
||||||
ioState.getOutput(0).addObserverToValue(guiObserver);
|
|
||||||
return new Interactor() {
|
return new Interactor() {
|
||||||
@Override
|
@Override
|
||||||
public boolean clicked(CircuitComponent cc, Point pos, IOState ioState, Element element, SyncAccess modelSync) {
|
public void clicked(CircuitComponent cc, Point pos, IOState ioState, Element element, SyncAccess modelSync) {
|
||||||
ObservableValue value = ioState.getOutput(0);
|
ObservableValue value = ioState.getOutput(0);
|
||||||
modelSync.modify(() -> value.setValue(1 - value.getValue()));
|
modelSync.modify(() -> value.setValue(1 - value.getValue()));
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -5,7 +5,6 @@
|
|||||||
*/
|
*/
|
||||||
package de.neemann.digital.draw.shapes;
|
package de.neemann.digital.draw.shapes;
|
||||||
|
|
||||||
import de.neemann.digital.core.Observer;
|
|
||||||
import de.neemann.digital.core.element.ElementAttributes;
|
import de.neemann.digital.core.element.ElementAttributes;
|
||||||
import de.neemann.digital.core.element.Keys;
|
import de.neemann.digital.core.element.Keys;
|
||||||
import de.neemann.digital.core.element.PinDescriptions;
|
import de.neemann.digital.core.element.PinDescriptions;
|
||||||
@ -68,7 +67,7 @@ public class DriverShape implements Shape {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Interactor applyStateMonitor(IOState ioState, Observer guiObserver) {
|
public Interactor applyStateMonitor(IOState ioState) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5,7 +5,6 @@
|
|||||||
*/
|
*/
|
||||||
package de.neemann.digital.draw.shapes;
|
package de.neemann.digital.draw.shapes;
|
||||||
|
|
||||||
import de.neemann.digital.core.Observer;
|
|
||||||
import de.neemann.digital.core.element.ElementAttributes;
|
import de.neemann.digital.core.element.ElementAttributes;
|
||||||
import de.neemann.digital.core.element.PinDescriptions;
|
import de.neemann.digital.core.element.PinDescriptions;
|
||||||
import de.neemann.digital.core.switching.NFET;
|
import de.neemann.digital.core.switching.NFET;
|
||||||
@ -49,9 +48,8 @@ public abstract class FETShape implements Shape {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public InteractorInterface applyStateMonitor(IOState ioState, Observer guiObserver) {
|
public InteractorInterface applyStateMonitor(IOState ioState) {
|
||||||
fet = (NFET) ioState.getElement();
|
fet = (NFET) ioState.getElement();
|
||||||
ioState.getInput(0).addObserverToValue(guiObserver);
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5,7 +5,6 @@
|
|||||||
*/
|
*/
|
||||||
package de.neemann.digital.draw.shapes;
|
package de.neemann.digital.draw.shapes;
|
||||||
|
|
||||||
import de.neemann.digital.core.Observer;
|
|
||||||
import de.neemann.digital.core.element.ElementAttributes;
|
import de.neemann.digital.core.element.ElementAttributes;
|
||||||
import de.neemann.digital.core.element.Keys;
|
import de.neemann.digital.core.element.Keys;
|
||||||
import de.neemann.digital.core.element.PinDescriptions;
|
import de.neemann.digital.core.element.PinDescriptions;
|
||||||
@ -63,7 +62,7 @@ public class FuseShape implements Shape {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public InteractorInterface applyStateMonitor(IOState ioState, Observer guiObserver) {
|
public InteractorInterface applyStateMonitor(IOState ioState) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5,7 +5,6 @@
|
|||||||
*/
|
*/
|
||||||
package de.neemann.digital.draw.shapes;
|
package de.neemann.digital.draw.shapes;
|
||||||
|
|
||||||
import de.neemann.digital.core.Observer;
|
|
||||||
import de.neemann.digital.core.element.PinDescriptions;
|
import de.neemann.digital.core.element.PinDescriptions;
|
||||||
import de.neemann.digital.draw.elements.IOState;
|
import de.neemann.digital.draw.elements.IOState;
|
||||||
import de.neemann.digital.draw.elements.Pin;
|
import de.neemann.digital.draw.elements.Pin;
|
||||||
@ -195,7 +194,7 @@ public class GenericShape implements Shape {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Interactor applyStateMonitor(IOState ioState, Observer guiObserver) {
|
public Interactor applyStateMonitor(IOState ioState) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5,7 +5,6 @@
|
|||||||
*/
|
*/
|
||||||
package de.neemann.digital.draw.shapes;
|
package de.neemann.digital.draw.shapes;
|
||||||
|
|
||||||
import de.neemann.digital.core.Observer;
|
|
||||||
import de.neemann.digital.core.element.ElementAttributes;
|
import de.neemann.digital.core.element.ElementAttributes;
|
||||||
import de.neemann.digital.core.element.PinDescriptions;
|
import de.neemann.digital.core.element.PinDescriptions;
|
||||||
import de.neemann.digital.draw.elements.IOState;
|
import de.neemann.digital.draw.elements.IOState;
|
||||||
@ -41,7 +40,7 @@ public class GroundShape implements Shape {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Interactor applyStateMonitor(IOState ioState, Observer guiObserver) {
|
public Interactor applyStateMonitor(IOState ioState) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -82,9 +82,8 @@ public class InputShape implements Shape {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Interactor applyStateMonitor(IOState ioState, Observer guiObserver) {
|
public Interactor applyStateMonitor(IOState ioState) {
|
||||||
this.ioState = ioState;
|
this.ioState = ioState;
|
||||||
ioState.getOutput(0).addObserverToValue(guiObserver);
|
|
||||||
return new InputInteractor();
|
return new InputInteractor();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -148,7 +147,7 @@ public class InputShape implements Shape {
|
|||||||
private long lastValueSet;
|
private long lastValueSet;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean clicked(CircuitComponent cc, Point pos, IOState ioState, Element element, SyncAccess modelSync) {
|
public void clicked(CircuitComponent cc, Point pos, IOState ioState, Element element, SyncAccess modelSync) {
|
||||||
ObservableValue value = ioState.getOutput(0);
|
ObservableValue value = ioState.getOutput(0);
|
||||||
if (bits == 1) {
|
if (bits == 1) {
|
||||||
modelSync.modify(() -> {
|
modelSync.modify(() -> {
|
||||||
@ -163,7 +162,6 @@ public class InputShape implements Shape {
|
|||||||
} else
|
} else
|
||||||
value.setValue(1 - value.getValue());
|
value.setValue(1 - value.getValue());
|
||||||
});
|
});
|
||||||
return true;
|
|
||||||
} else {
|
} else {
|
||||||
if (dialog == null || !dialog.isVisible()) {
|
if (dialog == null || !dialog.isVisible()) {
|
||||||
Model model = ((In) element).getModel();
|
Model model = ((In) element).getModel();
|
||||||
@ -172,18 +170,16 @@ public class InputShape implements Shape {
|
|||||||
} else
|
} else
|
||||||
dialog.requestFocus();
|
dialog.requestFocus();
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean pressed(CircuitComponent cc, Point pos, IOState ioState, Element element, SyncAccess modelSync) {
|
public void pressed(CircuitComponent cc, Point pos, IOState ioState, Element element, SyncAccess modelSync) {
|
||||||
isDrag = false;
|
isDrag = false;
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean dragged(CircuitComponent cc, Point posOnScreen, Vector pos, Transform transform, IOState ioState, Element element, SyncAccess modelSync) {
|
public void dragged(CircuitComponent cc, Point posOnScreen, Vector pos, Transform transform, IOState ioState, Element element, SyncAccess modelSync) {
|
||||||
ObservableValue value = ioState.getOutput(0);
|
ObservableValue value = ioState.getOutput(0);
|
||||||
if (bits > 1 && !value.isHighZ()) {
|
if (bits > 1 && !value.isHighZ()) {
|
||||||
if (!isDrag) {
|
if (!isDrag) {
|
||||||
@ -198,11 +194,9 @@ public class InputShape implements Shape {
|
|||||||
if (val != lastValueSet) {
|
if (val != lastValueSet) {
|
||||||
modelSync.modify(() -> value.setValue(val));
|
modelSync.modify(() -> value.setValue(val));
|
||||||
lastValueSet = val;
|
lastValueSet = val;
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -23,17 +23,14 @@ import java.awt.*;
|
|||||||
public abstract class Interactor implements InteractorInterface {
|
public abstract class Interactor implements InteractorInterface {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean pressed(CircuitComponent cc, Point pos, IOState ioState, Element element, SyncAccess modelSync) {
|
public void pressed(CircuitComponent cc, Point pos, IOState ioState, Element element, SyncAccess modelSync) {
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean released(CircuitComponent cc, Point pos, IOState ioState, Element element, SyncAccess modelSync) {
|
public void released(CircuitComponent cc, Point pos, IOState ioState, Element element, SyncAccess modelSync) {
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean dragged(CircuitComponent cc, Point posOnScreen, Vector pos, Transform transform, IOState ioState, Element element, SyncAccess modelSync) {
|
public void dragged(CircuitComponent cc, Point posOnScreen, Vector pos, Transform transform, IOState ioState, Element element, SyncAccess modelSync) {
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -30,9 +30,8 @@ public interface InteractorInterface {
|
|||||||
* @param ioState the state of the element
|
* @param ioState the state of the element
|
||||||
* @param element the element which is clicked
|
* @param element the element which is clicked
|
||||||
* @param modelSync used to sync model access
|
* @param modelSync used to sync model access
|
||||||
* @return true if model is changed
|
|
||||||
*/
|
*/
|
||||||
boolean clicked(CircuitComponent cc, Point pos, IOState ioState, Element element, SyncAccess modelSync);
|
void clicked(CircuitComponent cc, Point pos, IOState ioState, Element element, SyncAccess modelSync);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Called if mouse is pressed on running model
|
* Called if mouse is pressed on running model
|
||||||
@ -42,9 +41,8 @@ public interface InteractorInterface {
|
|||||||
* @param ioState the state of the element
|
* @param ioState the state of the element
|
||||||
* @param element the element on which the mouse is pressed
|
* @param element the element on which the mouse is pressed
|
||||||
* @param modelSync used to sync model access
|
* @param modelSync used to sync model access
|
||||||
* @return true if model is changed
|
|
||||||
*/
|
*/
|
||||||
boolean pressed(CircuitComponent cc, Point pos, IOState ioState, Element element, SyncAccess modelSync);
|
void pressed(CircuitComponent cc, Point pos, IOState ioState, Element element, SyncAccess modelSync);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Called if mouse is released on running model
|
* Called if mouse is released on running model
|
||||||
@ -54,9 +52,8 @@ public interface InteractorInterface {
|
|||||||
* @param ioState the state of the element
|
* @param ioState the state of the element
|
||||||
* @param element the element on which the mouse is released
|
* @param element the element on which the mouse is released
|
||||||
* @param modelSync used to sync model access
|
* @param modelSync used to sync model access
|
||||||
* @return true if model is changed
|
|
||||||
*/
|
*/
|
||||||
boolean released(CircuitComponent cc, Point pos, IOState ioState, Element element, SyncAccess modelSync);
|
void released(CircuitComponent cc, Point pos, IOState ioState, Element element, SyncAccess modelSync);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Called if mouse is dragged on running model
|
* Called if mouse is dragged on running model
|
||||||
@ -68,8 +65,7 @@ public interface InteractorInterface {
|
|||||||
* @param ioState the state of the element
|
* @param ioState the state of the element
|
||||||
* @param element the element on which the mouse is dragged
|
* @param element the element on which the mouse is dragged
|
||||||
* @param modelSync used to sync model access
|
* @param modelSync used to sync model access
|
||||||
* @return true if model is changed
|
|
||||||
*/
|
*/
|
||||||
boolean dragged(CircuitComponent cc, Point posOnScreen, Vector pos, Transform transform, IOState ioState, Element element, SyncAccess modelSync);
|
void dragged(CircuitComponent cc, Point posOnScreen, Vector pos, Transform transform, IOState ioState, Element element, SyncAccess modelSync);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -5,7 +5,6 @@
|
|||||||
*/
|
*/
|
||||||
package de.neemann.digital.draw.shapes;
|
package de.neemann.digital.draw.shapes;
|
||||||
|
|
||||||
import de.neemann.digital.core.Observer;
|
|
||||||
import de.neemann.digital.core.Value;
|
import de.neemann.digital.core.Value;
|
||||||
import de.neemann.digital.core.element.ElementAttributes;
|
import de.neemann.digital.core.element.ElementAttributes;
|
||||||
import de.neemann.digital.core.element.Keys;
|
import de.neemann.digital.core.element.Keys;
|
||||||
@ -53,9 +52,8 @@ public class LEDShape implements Shape {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Interactor applyStateMonitor(IOState ioState, Observer guiObserver) {
|
public Interactor applyStateMonitor(IOState ioState) {
|
||||||
this.ioState = ioState;
|
this.ioState = ioState;
|
||||||
ioState.getInput(0).addObserverToValue(guiObserver);
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -6,7 +6,6 @@
|
|||||||
package de.neemann.digital.draw.shapes;
|
package de.neemann.digital.draw.shapes;
|
||||||
|
|
||||||
import de.neemann.digital.core.NodeException;
|
import de.neemann.digital.core.NodeException;
|
||||||
import de.neemann.digital.core.Observer;
|
|
||||||
import de.neemann.digital.core.element.ElementAttributes;
|
import de.neemann.digital.core.element.ElementAttributes;
|
||||||
import de.neemann.digital.core.element.Keys;
|
import de.neemann.digital.core.element.Keys;
|
||||||
import de.neemann.digital.core.element.PinDescription;
|
import de.neemann.digital.core.element.PinDescription;
|
||||||
@ -131,7 +130,7 @@ public class LayoutShape implements Shape {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public InteractorInterface applyStateMonitor(IOState ioState, Observer guiObserver) {
|
public InteractorInterface applyStateMonitor(IOState ioState) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -6,7 +6,6 @@
|
|||||||
package de.neemann.digital.draw.shapes;
|
package de.neemann.digital.draw.shapes;
|
||||||
|
|
||||||
import de.neemann.digital.core.ObservableValue;
|
import de.neemann.digital.core.ObservableValue;
|
||||||
import de.neemann.digital.core.Observer;
|
|
||||||
import de.neemann.digital.core.Value;
|
import de.neemann.digital.core.Value;
|
||||||
import de.neemann.digital.core.element.ElementAttributes;
|
import de.neemann.digital.core.element.ElementAttributes;
|
||||||
import de.neemann.digital.core.element.Keys;
|
import de.neemann.digital.core.element.Keys;
|
||||||
@ -54,9 +53,9 @@ public class LightBulbShape implements Shape {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public InteractorInterface applyStateMonitor(IOState ioState, Observer guiObserver) {
|
public InteractorInterface applyStateMonitor(IOState ioState) {
|
||||||
aValue = ioState.getInput(0).addObserverToValue(guiObserver);
|
aValue = ioState.getInput(0);
|
||||||
bValue = ioState.getInput(1).addObserverToValue(guiObserver);
|
bValue = ioState.getInput(1);
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5,7 +5,6 @@
|
|||||||
*/
|
*/
|
||||||
package de.neemann.digital.draw.shapes;
|
package de.neemann.digital.draw.shapes;
|
||||||
|
|
||||||
import de.neemann.digital.core.Observer;
|
|
||||||
import de.neemann.digital.draw.elements.IOState;
|
import de.neemann.digital.draw.elements.IOState;
|
||||||
import de.neemann.digital.draw.elements.Pins;
|
import de.neemann.digital.draw.elements.Pins;
|
||||||
import de.neemann.digital.draw.graphics.Graphic;
|
import de.neemann.digital.draw.graphics.Graphic;
|
||||||
@ -40,7 +39,7 @@ public class MissingShape implements Shape {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Interactor applyStateMonitor(IOState ioState, Observer guiObserver) {
|
public Interactor applyStateMonitor(IOState ioState) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5,7 +5,6 @@
|
|||||||
*/
|
*/
|
||||||
package de.neemann.digital.draw.shapes;
|
package de.neemann.digital.draw.shapes;
|
||||||
|
|
||||||
import de.neemann.digital.core.Observer;
|
|
||||||
import de.neemann.digital.core.element.ElementAttributes;
|
import de.neemann.digital.core.element.ElementAttributes;
|
||||||
import de.neemann.digital.core.element.Keys;
|
import de.neemann.digital.core.element.Keys;
|
||||||
import de.neemann.digital.core.element.PinDescriptions;
|
import de.neemann.digital.core.element.PinDescriptions;
|
||||||
@ -58,7 +57,7 @@ public class MuxerShape implements Shape {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Interactor applyStateMonitor(IOState ioState, Observer guiObserver) {
|
public Interactor applyStateMonitor(IOState ioState) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5,7 +5,6 @@
|
|||||||
*/
|
*/
|
||||||
package de.neemann.digital.draw.shapes;
|
package de.neemann.digital.draw.shapes;
|
||||||
|
|
||||||
import de.neemann.digital.core.Observer;
|
|
||||||
import de.neemann.digital.core.Value;
|
import de.neemann.digital.core.Value;
|
||||||
import de.neemann.digital.core.element.ElementAttributes;
|
import de.neemann.digital.core.element.ElementAttributes;
|
||||||
import de.neemann.digital.core.element.Keys;
|
import de.neemann.digital.core.element.Keys;
|
||||||
@ -70,9 +69,8 @@ public class OutputShape implements Shape {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Interactor applyStateMonitor(IOState ioState, Observer guiObserver) {
|
public Interactor applyStateMonitor(IOState ioState) {
|
||||||
this.ioState = ioState;
|
this.ioState = ioState;
|
||||||
ioState.getInput(0).addObserverToValue(guiObserver);
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5,7 +5,6 @@
|
|||||||
*/
|
*/
|
||||||
package de.neemann.digital.draw.shapes;
|
package de.neemann.digital.draw.shapes;
|
||||||
|
|
||||||
import de.neemann.digital.core.Observer;
|
|
||||||
import de.neemann.digital.core.element.ElementAttributes;
|
import de.neemann.digital.core.element.ElementAttributes;
|
||||||
import de.neemann.digital.core.element.PinDescriptions;
|
import de.neemann.digital.core.element.PinDescriptions;
|
||||||
import de.neemann.digital.draw.elements.IOState;
|
import de.neemann.digital.draw.elements.IOState;
|
||||||
@ -48,7 +47,7 @@ public class PinControlShape implements Shape {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public InteractorInterface applyStateMonitor(IOState ioState, Observer guiObserver) {
|
public InteractorInterface applyStateMonitor(IOState ioState) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -6,7 +6,6 @@
|
|||||||
package de.neemann.digital.draw.shapes;
|
package de.neemann.digital.draw.shapes;
|
||||||
|
|
||||||
import de.neemann.digital.core.ObservableValue;
|
import de.neemann.digital.core.ObservableValue;
|
||||||
import de.neemann.digital.core.Observer;
|
|
||||||
import de.neemann.digital.core.Value;
|
import de.neemann.digital.core.Value;
|
||||||
import de.neemann.digital.core.element.ElementAttributes;
|
import de.neemann.digital.core.element.ElementAttributes;
|
||||||
import de.neemann.digital.core.element.Keys;
|
import de.neemann.digital.core.element.Keys;
|
||||||
@ -60,9 +59,9 @@ public class PolarityAwareLEDShape implements Shape {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public InteractorInterface applyStateMonitor(IOState ioState, Observer guiObserver) {
|
public InteractorInterface applyStateMonitor(IOState ioState) {
|
||||||
aValue = ioState.getInput(0).addObserverToValue(guiObserver);
|
aValue = ioState.getInput(0);
|
||||||
cValue = ioState.getInput(1).addObserverToValue(guiObserver);
|
cValue = ioState.getInput(1);
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -7,7 +7,6 @@ package de.neemann.digital.draw.shapes;
|
|||||||
|
|
||||||
import de.neemann.digital.core.IntFormat;
|
import de.neemann.digital.core.IntFormat;
|
||||||
import de.neemann.digital.core.ObservableValue;
|
import de.neemann.digital.core.ObservableValue;
|
||||||
import de.neemann.digital.core.Observer;
|
|
||||||
import de.neemann.digital.core.Value;
|
import de.neemann.digital.core.Value;
|
||||||
import de.neemann.digital.core.element.ElementAttributes;
|
import de.neemann.digital.core.element.ElementAttributes;
|
||||||
import de.neemann.digital.core.element.Keys;
|
import de.neemann.digital.core.element.Keys;
|
||||||
@ -52,9 +51,8 @@ public class ProbeShape implements Shape {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Interactor applyStateMonitor(IOState ioState, Observer guiObserver) {
|
public Interactor applyStateMonitor(IOState ioState) {
|
||||||
inValue = ioState.getInput(0);
|
inValue = ioState.getInput(0);
|
||||||
inValue.addObserverToValue(guiObserver);
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5,7 +5,6 @@
|
|||||||
*/
|
*/
|
||||||
package de.neemann.digital.draw.shapes;
|
package de.neemann.digital.draw.shapes;
|
||||||
|
|
||||||
import de.neemann.digital.core.Observer;
|
|
||||||
import de.neemann.digital.core.element.ElementAttributes;
|
import de.neemann.digital.core.element.ElementAttributes;
|
||||||
import de.neemann.digital.core.element.PinDescriptions;
|
import de.neemann.digital.core.element.PinDescriptions;
|
||||||
import de.neemann.digital.draw.elements.IOState;
|
import de.neemann.digital.draw.elements.IOState;
|
||||||
@ -52,7 +51,7 @@ public class PullDownShape implements Shape {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public InteractorInterface applyStateMonitor(IOState ioState, Observer guiObserver) {
|
public InteractorInterface applyStateMonitor(IOState ioState) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5,7 +5,6 @@
|
|||||||
*/
|
*/
|
||||||
package de.neemann.digital.draw.shapes;
|
package de.neemann.digital.draw.shapes;
|
||||||
|
|
||||||
import de.neemann.digital.core.Observer;
|
|
||||||
import de.neemann.digital.core.element.ElementAttributes;
|
import de.neemann.digital.core.element.ElementAttributes;
|
||||||
import de.neemann.digital.core.element.PinDescriptions;
|
import de.neemann.digital.core.element.PinDescriptions;
|
||||||
import de.neemann.digital.draw.elements.IOState;
|
import de.neemann.digital.draw.elements.IOState;
|
||||||
@ -46,7 +45,7 @@ public class PullUpShape implements Shape {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public InteractorInterface applyStateMonitor(IOState ioState, Observer guiObserver) {
|
public InteractorInterface applyStateMonitor(IOState ioState) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -7,7 +7,6 @@ package de.neemann.digital.draw.shapes;
|
|||||||
|
|
||||||
import de.neemann.digital.core.Model;
|
import de.neemann.digital.core.Model;
|
||||||
import de.neemann.digital.core.NodeException;
|
import de.neemann.digital.core.NodeException;
|
||||||
import de.neemann.digital.core.Observer;
|
|
||||||
import de.neemann.digital.core.SyncAccess;
|
import de.neemann.digital.core.SyncAccess;
|
||||||
import de.neemann.digital.core.element.*;
|
import de.neemann.digital.core.element.*;
|
||||||
import de.neemann.digital.core.memory.DataField;
|
import de.neemann.digital.core.memory.DataField;
|
||||||
@ -66,17 +65,16 @@ public class RAMShape extends GenericShape {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Interactor applyStateMonitor(IOState ioState, Observer guiObserver) {
|
public Interactor applyStateMonitor(IOState ioState) {
|
||||||
return new Interactor() {
|
return new Interactor() {
|
||||||
@Override
|
@Override
|
||||||
public boolean clicked(CircuitComponent cc, Point pos, IOState ioState, Element element, SyncAccess modelSync) {
|
public void clicked(CircuitComponent cc, Point pos, IOState ioState, Element element, SyncAccess modelSync) {
|
||||||
if (element instanceof RAMInterface) {
|
if (element instanceof RAMInterface) {
|
||||||
RAMInterface ram = (RAMInterface) element;
|
RAMInterface ram = (RAMInterface) element;
|
||||||
DataField dataField = ram.getMemory();
|
DataField dataField = ram.getMemory();
|
||||||
DataEditor dataEditor = new DataEditor(cc, dataField, dataBits, addrBits, true, modelSync, ram.getIntFormat());
|
DataEditor dataEditor = new DataEditor(cc, dataField, dataBits, addrBits, true, modelSync, ram.getIntFormat());
|
||||||
dataEditor.showDialog(dialogTitle, model);
|
dataEditor.showDialog(dialogTitle, model);
|
||||||
}
|
}
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -6,7 +6,6 @@
|
|||||||
package de.neemann.digital.draw.shapes;
|
package de.neemann.digital.draw.shapes;
|
||||||
|
|
||||||
import de.neemann.digital.core.Bits;
|
import de.neemann.digital.core.Bits;
|
||||||
import de.neemann.digital.core.Observer;
|
|
||||||
import de.neemann.digital.core.element.ElementAttributes;
|
import de.neemann.digital.core.element.ElementAttributes;
|
||||||
import de.neemann.digital.core.element.Keys;
|
import de.neemann.digital.core.element.Keys;
|
||||||
import de.neemann.digital.core.element.PinDescriptions;
|
import de.neemann.digital.core.element.PinDescriptions;
|
||||||
@ -60,11 +59,8 @@ public class RGBLEDShape implements Shape {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Interactor applyStateMonitor(IOState ioState, Observer guiObserver) {
|
public Interactor applyStateMonitor(IOState ioState) {
|
||||||
this.ioState = ioState;
|
this.ioState = ioState;
|
||||||
ioState.getInput(0).addObserverToValue(guiObserver);
|
|
||||||
ioState.getInput(1).addObserverToValue(guiObserver);
|
|
||||||
ioState.getInput(2).addObserverToValue(guiObserver);
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5,7 +5,6 @@
|
|||||||
*/
|
*/
|
||||||
package de.neemann.digital.draw.shapes;
|
package de.neemann.digital.draw.shapes;
|
||||||
|
|
||||||
import de.neemann.digital.core.Observer;
|
|
||||||
import de.neemann.digital.core.element.ElementAttributes;
|
import de.neemann.digital.core.element.ElementAttributes;
|
||||||
import de.neemann.digital.core.element.Keys;
|
import de.neemann.digital.core.element.Keys;
|
||||||
import de.neemann.digital.core.element.PinDescriptions;
|
import de.neemann.digital.core.element.PinDescriptions;
|
||||||
@ -58,7 +57,7 @@ public class RectShape implements Shape {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Interactor applyStateMonitor(IOState ioState, Observer guiObserver) {
|
public Interactor applyStateMonitor(IOState ioState) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5,7 +5,6 @@
|
|||||||
*/
|
*/
|
||||||
package de.neemann.digital.draw.shapes;
|
package de.neemann.digital.draw.shapes;
|
||||||
|
|
||||||
import de.neemann.digital.core.Observer;
|
|
||||||
import de.neemann.digital.core.element.ElementAttributes;
|
import de.neemann.digital.core.element.ElementAttributes;
|
||||||
import de.neemann.digital.core.element.Keys;
|
import de.neemann.digital.core.element.Keys;
|
||||||
import de.neemann.digital.core.element.PinDescriptions;
|
import de.neemann.digital.core.element.PinDescriptions;
|
||||||
@ -63,10 +62,8 @@ public class RelayDTShape implements Shape {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public InteractorInterface applyStateMonitor(IOState ioState, Observer guiObserver) {
|
public InteractorInterface applyStateMonitor(IOState ioState) {
|
||||||
relay = (RelayDT) ioState.getElement();
|
relay = (RelayDT) ioState.getElement();
|
||||||
ioState.getInput(0).addObserverToValue(guiObserver);
|
|
||||||
ioState.getInput(1).addObserverToValue(guiObserver);
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5,7 +5,6 @@
|
|||||||
*/
|
*/
|
||||||
package de.neemann.digital.draw.shapes;
|
package de.neemann.digital.draw.shapes;
|
||||||
|
|
||||||
import de.neemann.digital.core.Observer;
|
|
||||||
import de.neemann.digital.core.element.ElementAttributes;
|
import de.neemann.digital.core.element.ElementAttributes;
|
||||||
import de.neemann.digital.core.element.Keys;
|
import de.neemann.digital.core.element.Keys;
|
||||||
import de.neemann.digital.core.element.PinDescriptions;
|
import de.neemann.digital.core.element.PinDescriptions;
|
||||||
@ -65,10 +64,8 @@ public class RelayShape implements Shape {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public InteractorInterface applyStateMonitor(IOState ioState, Observer guiObserver) {
|
public InteractorInterface applyStateMonitor(IOState ioState) {
|
||||||
relay = (Relay) ioState.getElement();
|
relay = (Relay) ioState.getElement();
|
||||||
ioState.getInput(0).addObserverToValue(guiObserver);
|
|
||||||
ioState.getInput(1).addObserverToValue(guiObserver);
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5,7 +5,6 @@
|
|||||||
*/
|
*/
|
||||||
package de.neemann.digital.draw.shapes;
|
package de.neemann.digital.draw.shapes;
|
||||||
|
|
||||||
import de.neemann.digital.core.Observer;
|
|
||||||
import de.neemann.digital.core.element.ElementAttributes;
|
import de.neemann.digital.core.element.ElementAttributes;
|
||||||
import de.neemann.digital.core.element.Keys;
|
import de.neemann.digital.core.element.Keys;
|
||||||
import de.neemann.digital.core.element.PinDescriptions;
|
import de.neemann.digital.core.element.PinDescriptions;
|
||||||
@ -45,7 +44,7 @@ public class ResetShape implements Shape {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Interactor applyStateMonitor(IOState ioState, Observer guiObserver) {
|
public Interactor applyStateMonitor(IOState ioState) {
|
||||||
//ioState.getOutput(0).addObserverToValue(guiObserver);
|
//ioState.getOutput(0).addObserverToValue(guiObserver);
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
@ -5,7 +5,6 @@
|
|||||||
*/
|
*/
|
||||||
package de.neemann.digital.draw.shapes;
|
package de.neemann.digital.draw.shapes;
|
||||||
|
|
||||||
import de.neemann.digital.core.Observer;
|
|
||||||
import de.neemann.digital.core.SyncAccess;
|
import de.neemann.digital.core.SyncAccess;
|
||||||
import de.neemann.digital.core.element.Element;
|
import de.neemann.digital.core.element.Element;
|
||||||
import de.neemann.digital.core.element.ElementAttributes;
|
import de.neemann.digital.core.element.ElementAttributes;
|
||||||
@ -54,31 +53,27 @@ public class RotEncoderShape implements Shape {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public InteractorInterface applyStateMonitor(IOState ioState, Observer guiObserver) {
|
public InteractorInterface applyStateMonitor(IOState ioState) {
|
||||||
ioState.getOutput(0).addObserverToValue(guiObserver);
|
|
||||||
return new InteractorInterface() {
|
return new InteractorInterface() {
|
||||||
|
|
||||||
private int initialState;
|
private int initialState;
|
||||||
private boolean initial;
|
private boolean initial;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean clicked(CircuitComponent cc, Point pos, IOState ioState, Element element, SyncAccess modelSync) {
|
public void clicked(CircuitComponent cc, Point pos, IOState ioState, Element element, SyncAccess modelSync) {
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean pressed(CircuitComponent cc, Point pos, IOState ioState, Element element, SyncAccess modelSync) {
|
public void pressed(CircuitComponent cc, Point pos, IOState ioState, Element element, SyncAccess modelSync) {
|
||||||
initial = true;
|
initial = true;
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean released(CircuitComponent cc, Point pos, IOState ioState, Element element, SyncAccess modelSync) {
|
public void released(CircuitComponent cc, Point pos, IOState ioState, Element element, SyncAccess modelSync) {
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean dragged(CircuitComponent cc, Point posOnScreen, Vector pos, Transform trans, IOState ioState, Element element, SyncAccess modelSync) {
|
public void dragged(CircuitComponent cc, Point posOnScreen, Vector pos, Transform trans, IOState ioState, Element element, SyncAccess modelSync) {
|
||||||
if (ioState != null) {
|
if (ioState != null) {
|
||||||
Vector p = pos.sub(trans.transform(CENTER));
|
Vector p = pos.sub(trans.transform(CENTER));
|
||||||
final int dist = p.x * p.x + p.y * p.y;
|
final int dist = p.x * p.x + p.y * p.y;
|
||||||
@ -97,13 +92,11 @@ public class RotEncoderShape implements Shape {
|
|||||||
ioState.getOutput(0).setBool(a);
|
ioState.getOutput(0).setBool(a);
|
||||||
ioState.getOutput(1).setBool(b);
|
ioState.getOutput(1).setBool(b);
|
||||||
});
|
});
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else
|
} else
|
||||||
initial = true;
|
initial = true;
|
||||||
}
|
}
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -5,7 +5,6 @@
|
|||||||
*/
|
*/
|
||||||
package de.neemann.digital.draw.shapes;
|
package de.neemann.digital.draw.shapes;
|
||||||
|
|
||||||
import de.neemann.digital.core.Observer;
|
|
||||||
import de.neemann.digital.core.Value;
|
import de.neemann.digital.core.Value;
|
||||||
import de.neemann.digital.core.element.ElementAttributes;
|
import de.neemann.digital.core.element.ElementAttributes;
|
||||||
import de.neemann.digital.core.element.PinDescriptions;
|
import de.neemann.digital.core.element.PinDescriptions;
|
||||||
@ -72,10 +71,8 @@ public class SevenSegHexShape extends SevenShape {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Interactor applyStateMonitor(IOState ioState, Observer guiObserver) {
|
public Interactor applyStateMonitor(IOState ioState) {
|
||||||
this.ioState = ioState;
|
this.ioState = ioState;
|
||||||
ioState.getInput(0).addObserverToValue(guiObserver);
|
|
||||||
ioState.getInput(1).addObserverToValue(guiObserver);
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -5,9 +5,7 @@
|
|||||||
*/
|
*/
|
||||||
package de.neemann.digital.draw.shapes;
|
package de.neemann.digital.draw.shapes;
|
||||||
|
|
||||||
import de.neemann.digital.core.ObservableValue;
|
|
||||||
import de.neemann.digital.core.ObservableValues;
|
import de.neemann.digital.core.ObservableValues;
|
||||||
import de.neemann.digital.core.Observer;
|
|
||||||
import de.neemann.digital.core.Value;
|
import de.neemann.digital.core.Value;
|
||||||
import de.neemann.digital.core.element.ElementAttributes;
|
import de.neemann.digital.core.element.ElementAttributes;
|
||||||
import de.neemann.digital.core.element.Keys;
|
import de.neemann.digital.core.element.Keys;
|
||||||
@ -72,10 +70,8 @@ public class SevenSegShape extends SevenShape {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Interactor applyStateMonitor(IOState ioState, Observer guiObserver) {
|
public Interactor applyStateMonitor(IOState ioState) {
|
||||||
inputValues = ioState.getInputs();
|
inputValues = ioState.getInputs();
|
||||||
for (ObservableValue o : inputValues)
|
|
||||||
o.addObserverToValue(guiObserver);
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -6,7 +6,6 @@
|
|||||||
package de.neemann.digital.draw.shapes;
|
package de.neemann.digital.draw.shapes;
|
||||||
|
|
||||||
import de.neemann.digital.core.Model;
|
import de.neemann.digital.core.Model;
|
||||||
import de.neemann.digital.core.Observer;
|
|
||||||
import de.neemann.digital.draw.elements.IOState;
|
import de.neemann.digital.draw.elements.IOState;
|
||||||
import de.neemann.digital.draw.elements.Pins;
|
import de.neemann.digital.draw.elements.Pins;
|
||||||
import de.neemann.digital.draw.model.ModelCreator;
|
import de.neemann.digital.draw.model.ModelCreator;
|
||||||
@ -29,20 +28,15 @@ public interface Shape extends Drawable, ObservableValueReader {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* This method call connects the created model element to the shape which represents the model node.
|
* This method call connects the created model element to the shape which represents the model node.
|
||||||
* If the look of the shape depends on an inputs state, the shape has to register the guiObserver
|
|
||||||
* to all of the inputs ObservableValues it depends on.
|
|
||||||
* To access the actual state while drawing, the Shape needs to store the IOState or the needed inputs
|
* To access the actual state while drawing, the Shape needs to store the IOState or the needed inputs
|
||||||
* in a member variable.
|
* in a member variable.
|
||||||
* If the shape returns an interactor, this interactors clicked method is called if the
|
* If the shape returns an interactor, this interactors clicked method is called if the
|
||||||
* shape is clicked in running mode. If the shape is not interactive simply return null.
|
* shape is clicked in running mode. If the shape is not interactive simply return null.
|
||||||
*
|
*
|
||||||
* @param ioState the state of the element, never null
|
* @param ioState the state of the element, never null
|
||||||
* @param guiObserver can be used to update the GUI by calling hasChanged, Is maybe null.
|
|
||||||
* If the shape depends on a signal value, you can add this observer to
|
|
||||||
* the signal. In this case a repaint is initiated, if the signal changes.
|
|
||||||
* @return The interactor which is used to interact with the shape while the simulation runs.
|
* @return The interactor which is used to interact with the shape while the simulation runs.
|
||||||
*/
|
*/
|
||||||
InteractorInterface applyStateMonitor(IOState ioState, Observer guiObserver);
|
InteractorInterface applyStateMonitor(IOState ioState);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Allows the shape to make its drawing dependent of the model by registering a Observer to the model.
|
* Allows the shape to make its drawing dependent of the model by registering a Observer to the model.
|
||||||
|
@ -6,7 +6,6 @@
|
|||||||
package de.neemann.digital.draw.shapes;
|
package de.neemann.digital.draw.shapes;
|
||||||
|
|
||||||
import de.neemann.digital.core.ObservableValue;
|
import de.neemann.digital.core.ObservableValue;
|
||||||
import de.neemann.digital.core.Observer;
|
|
||||||
import de.neemann.digital.core.Value;
|
import de.neemann.digital.core.Value;
|
||||||
import de.neemann.digital.core.element.ElementAttributes;
|
import de.neemann.digital.core.element.ElementAttributes;
|
||||||
import de.neemann.digital.core.element.Keys;
|
import de.neemann.digital.core.element.Keys;
|
||||||
@ -80,9 +79,9 @@ public class SixteenShape implements Shape {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public InteractorInterface applyStateMonitor(IOState ioState, Observer guiObserver) {
|
public InteractorInterface applyStateMonitor(IOState ioState) {
|
||||||
input = ioState.getInput(0).addObserverToValue(guiObserver);
|
input = ioState.getInput(0);
|
||||||
dp = ioState.getInput(1).addObserverToValue(guiObserver);
|
dp = ioState.getInput(1);
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -6,7 +6,6 @@
|
|||||||
package de.neemann.digital.draw.shapes;
|
package de.neemann.digital.draw.shapes;
|
||||||
|
|
||||||
import de.neemann.digital.core.BitsException;
|
import de.neemann.digital.core.BitsException;
|
||||||
import de.neemann.digital.core.Observer;
|
|
||||||
import de.neemann.digital.core.element.ElementAttributes;
|
import de.neemann.digital.core.element.ElementAttributes;
|
||||||
import de.neemann.digital.core.element.Keys;
|
import de.neemann.digital.core.element.Keys;
|
||||||
import de.neemann.digital.core.element.PinDescriptions;
|
import de.neemann.digital.core.element.PinDescriptions;
|
||||||
@ -56,7 +55,7 @@ public class SplitterShape implements Shape {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Interactor applyStateMonitor(IOState ioState, Observer guiObserver) {
|
public Interactor applyStateMonitor(IOState ioState) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5,7 +5,6 @@
|
|||||||
*/
|
*/
|
||||||
package de.neemann.digital.draw.shapes;
|
package de.neemann.digital.draw.shapes;
|
||||||
|
|
||||||
import de.neemann.digital.core.Observer;
|
|
||||||
import de.neemann.digital.core.element.ElementAttributes;
|
import de.neemann.digital.core.element.ElementAttributes;
|
||||||
import de.neemann.digital.core.element.PinDescriptions;
|
import de.neemann.digital.core.element.PinDescriptions;
|
||||||
import de.neemann.digital.core.io.StepperMotorUnipolar;
|
import de.neemann.digital.core.io.StepperMotorUnipolar;
|
||||||
@ -57,9 +56,7 @@ public class StepperMotorShape implements Shape {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public InteractorInterface applyStateMonitor(IOState ioState, Observer guiObserver) {
|
public InteractorInterface applyStateMonitor(IOState ioState) {
|
||||||
for (int i = 0; i < 4; i++)
|
|
||||||
ioState.getInput(i).addObserver(guiObserver);
|
|
||||||
motor = (StepperMotorUnipolar) ioState.getElement();
|
motor = (StepperMotorUnipolar) ioState.getElement();
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
@ -5,7 +5,6 @@
|
|||||||
*/
|
*/
|
||||||
package de.neemann.digital.draw.shapes;
|
package de.neemann.digital.draw.shapes;
|
||||||
|
|
||||||
import de.neemann.digital.core.Observer;
|
|
||||||
import de.neemann.digital.core.SyncAccess;
|
import de.neemann.digital.core.SyncAccess;
|
||||||
import de.neemann.digital.core.element.Element;
|
import de.neemann.digital.core.element.Element;
|
||||||
import de.neemann.digital.core.element.ElementAttributes;
|
import de.neemann.digital.core.element.ElementAttributes;
|
||||||
@ -64,16 +63,14 @@ public class SwitchDTShape implements Shape {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public InteractorInterface applyStateMonitor(IOState ioState, Observer guiObserver) {
|
public InteractorInterface applyStateMonitor(IOState ioState) {
|
||||||
return new Interactor() {
|
return new Interactor() {
|
||||||
@Override
|
@Override
|
||||||
public boolean clicked(CircuitComponent cc, Point pos, IOState ioState, Element element, SyncAccess modelSync) {
|
public void clicked(CircuitComponent cc, Point pos, IOState ioState, Element element, SyncAccess modelSync) {
|
||||||
closed = !closed;
|
closed = !closed;
|
||||||
if (ioState != null) {
|
if (ioState != null)
|
||||||
modelSync.modify(() -> ((SwitchDT) element).setClosed(closed));
|
modelSync.modify(() -> ((SwitchDT) element).setClosed(closed));
|
||||||
}
|
}
|
||||||
return true;
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5,7 +5,6 @@
|
|||||||
*/
|
*/
|
||||||
package de.neemann.digital.draw.shapes;
|
package de.neemann.digital.draw.shapes;
|
||||||
|
|
||||||
import de.neemann.digital.core.Observer;
|
|
||||||
import de.neemann.digital.core.SyncAccess;
|
import de.neemann.digital.core.SyncAccess;
|
||||||
import de.neemann.digital.core.element.Element;
|
import de.neemann.digital.core.element.Element;
|
||||||
import de.neemann.digital.core.element.ElementAttributes;
|
import de.neemann.digital.core.element.ElementAttributes;
|
||||||
@ -63,16 +62,14 @@ public class SwitchShape implements Shape {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public InteractorInterface applyStateMonitor(IOState ioState, Observer guiObserver) {
|
public InteractorInterface applyStateMonitor(IOState ioState) {
|
||||||
return new Interactor() {
|
return new Interactor() {
|
||||||
@Override
|
@Override
|
||||||
public boolean clicked(CircuitComponent cc, Point pos, IOState ioState, Element element, SyncAccess modelSync) {
|
public void clicked(CircuitComponent cc, Point pos, IOState ioState, Element element, SyncAccess modelSync) {
|
||||||
closed = !closed;
|
closed = !closed;
|
||||||
if (ioState != null) {
|
if (ioState != null)
|
||||||
modelSync.modify(() -> ((Switch) element).setClosed(closed));
|
modelSync.modify(() -> ((Switch) element).setClosed(closed));
|
||||||
}
|
}
|
||||||
return true;
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5,7 +5,6 @@
|
|||||||
*/
|
*/
|
||||||
package de.neemann.digital.draw.shapes;
|
package de.neemann.digital.draw.shapes;
|
||||||
|
|
||||||
import de.neemann.digital.core.Observer;
|
|
||||||
import de.neemann.digital.core.element.ElementAttributes;
|
import de.neemann.digital.core.element.ElementAttributes;
|
||||||
import de.neemann.digital.core.element.PinDescriptions;
|
import de.neemann.digital.core.element.PinDescriptions;
|
||||||
import de.neemann.digital.draw.elements.IOState;
|
import de.neemann.digital.draw.elements.IOState;
|
||||||
@ -43,7 +42,7 @@ public class TestCaseShape implements Shape {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public InteractorInterface applyStateMonitor(IOState ioState, Observer guiObserver) {
|
public InteractorInterface applyStateMonitor(IOState ioState) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5,7 +5,6 @@
|
|||||||
*/
|
*/
|
||||||
package de.neemann.digital.draw.shapes;
|
package de.neemann.digital.draw.shapes;
|
||||||
|
|
||||||
import de.neemann.digital.core.Observer;
|
|
||||||
import de.neemann.digital.core.element.ElementAttributes;
|
import de.neemann.digital.core.element.ElementAttributes;
|
||||||
import de.neemann.digital.core.element.Keys;
|
import de.neemann.digital.core.element.Keys;
|
||||||
import de.neemann.digital.core.element.PinDescriptions;
|
import de.neemann.digital.core.element.PinDescriptions;
|
||||||
@ -57,7 +56,7 @@ public class TextShape implements Shape {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Interactor applyStateMonitor(IOState ioState, Observer guiObserver) {
|
public Interactor applyStateMonitor(IOState ioState) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5,7 +5,6 @@
|
|||||||
*/
|
*/
|
||||||
package de.neemann.digital.draw.shapes;
|
package de.neemann.digital.draw.shapes;
|
||||||
|
|
||||||
import de.neemann.digital.core.Observer;
|
|
||||||
import de.neemann.digital.core.element.ElementAttributes;
|
import de.neemann.digital.core.element.ElementAttributes;
|
||||||
import de.neemann.digital.core.element.PinDescriptions;
|
import de.neemann.digital.core.element.PinDescriptions;
|
||||||
import de.neemann.digital.core.switching.TransGate;
|
import de.neemann.digital.core.switching.TransGate;
|
||||||
@ -65,7 +64,7 @@ public class TransGateShape implements Shape {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public InteractorInterface applyStateMonitor(IOState ioState, Observer guiObserver) {
|
public InteractorInterface applyStateMonitor(IOState ioState) {
|
||||||
transGate = (TransGate) ioState.getElement();
|
transGate = (TransGate) ioState.getElement();
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
@ -5,7 +5,6 @@
|
|||||||
*/
|
*/
|
||||||
package de.neemann.digital.draw.shapes;
|
package de.neemann.digital.draw.shapes;
|
||||||
|
|
||||||
import de.neemann.digital.core.Observer;
|
|
||||||
import de.neemann.digital.core.element.ElementAttributes;
|
import de.neemann.digital.core.element.ElementAttributes;
|
||||||
import de.neemann.digital.core.element.Keys;
|
import de.neemann.digital.core.element.Keys;
|
||||||
import de.neemann.digital.core.element.PinDescription;
|
import de.neemann.digital.core.element.PinDescription;
|
||||||
@ -46,7 +45,7 @@ public class TunnelShape implements Shape {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public InteractorInterface applyStateMonitor(IOState ioState, Observer guiObserver) {
|
public InteractorInterface applyStateMonitor(IOState ioState) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5,7 +5,6 @@
|
|||||||
*/
|
*/
|
||||||
package de.neemann.digital.draw.shapes;
|
package de.neemann.digital.draw.shapes;
|
||||||
|
|
||||||
import de.neemann.digital.core.Observer;
|
|
||||||
import de.neemann.digital.core.element.ElementAttributes;
|
import de.neemann.digital.core.element.ElementAttributes;
|
||||||
import de.neemann.digital.core.element.PinDescriptions;
|
import de.neemann.digital.core.element.PinDescriptions;
|
||||||
import de.neemann.digital.draw.elements.IOState;
|
import de.neemann.digital.draw.elements.IOState;
|
||||||
@ -43,7 +42,7 @@ public class VDDShape implements Shape {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Interactor applyStateMonitor(IOState ioState, Observer guiObserver) {
|
public Interactor applyStateMonitor(IOState ioState) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5,7 +5,6 @@
|
|||||||
*/
|
*/
|
||||||
package de.neemann.digital.draw.shapes.custom;
|
package de.neemann.digital.draw.shapes.custom;
|
||||||
|
|
||||||
import de.neemann.digital.core.Observer;
|
|
||||||
import de.neemann.digital.core.element.PinDescription;
|
import de.neemann.digital.core.element.PinDescription;
|
||||||
import de.neemann.digital.core.element.PinDescriptions;
|
import de.neemann.digital.core.element.PinDescriptions;
|
||||||
import de.neemann.digital.draw.elements.IOState;
|
import de.neemann.digital.draw.elements.IOState;
|
||||||
@ -61,7 +60,7 @@ public class CustomShape implements Shape {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public InteractorInterface applyStateMonitor(IOState ioState, Observer guiObserver) {
|
public InteractorInterface applyStateMonitor(IOState ioState) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5,7 +5,6 @@
|
|||||||
*/
|
*/
|
||||||
package de.neemann.digital.draw.shapes.ieee;
|
package de.neemann.digital.draw.shapes.ieee;
|
||||||
|
|
||||||
import de.neemann.digital.core.Observer;
|
|
||||||
import de.neemann.digital.core.element.ElementAttributes;
|
import de.neemann.digital.core.element.ElementAttributes;
|
||||||
import de.neemann.digital.core.element.Keys;
|
import de.neemann.digital.core.element.Keys;
|
||||||
import de.neemann.digital.core.element.PinDescriptions;
|
import de.neemann.digital.core.element.PinDescriptions;
|
||||||
@ -57,7 +56,7 @@ public abstract class IEEEGenericShape implements Shape {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public InteractorInterface applyStateMonitor(IOState ioState, Observer guiObserver) {
|
public InteractorInterface applyStateMonitor(IOState ioState) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5,7 +5,6 @@
|
|||||||
*/
|
*/
|
||||||
package de.neemann.digital.draw.shapes.ieee;
|
package de.neemann.digital.draw.shapes.ieee;
|
||||||
|
|
||||||
import de.neemann.digital.core.Observer;
|
|
||||||
import de.neemann.digital.core.element.ElementAttributes;
|
import de.neemann.digital.core.element.ElementAttributes;
|
||||||
import de.neemann.digital.core.element.Keys;
|
import de.neemann.digital.core.element.Keys;
|
||||||
import de.neemann.digital.core.element.PinDescriptions;
|
import de.neemann.digital.core.element.PinDescriptions;
|
||||||
@ -58,7 +57,7 @@ public class IEEENotShape implements Shape {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Interactor applyStateMonitor(IOState ioState, Observer guiObserver) {
|
public Interactor applyStateMonitor(IOState ioState) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -34,7 +34,7 @@ public class SevenSegShapeTest extends TestCase {
|
|||||||
PinDescriptions inputs = new PinDescriptions(observableValues);
|
PinDescriptions inputs = new PinDescriptions(observableValues);
|
||||||
SevenSegShape ss = new SevenSegShape(attr, inputs, new PinDescriptions());
|
SevenSegShape ss = new SevenSegShape(attr, inputs, new PinDescriptions());
|
||||||
IOState state = new IOState(observableValues, null, null);
|
IOState state = new IOState(observableValues, null, null);
|
||||||
ss.applyStateMonitor(state, null);
|
ss.applyStateMonitor(state);
|
||||||
|
|
||||||
checkValue(false, ss, 0, a, 0, 1, cc, 0, 1);
|
checkValue(false, ss, 0, a, 0, 1, cc, 0, 1);
|
||||||
checkValue(false, ss, 0, a, 0, 1, cc, 1, 1);
|
checkValue(false, ss, 0, a, 0, 1, cc, 1, 1);
|
||||||
@ -95,7 +95,7 @@ public class SevenSegShapeTest extends TestCase {
|
|||||||
PinDescriptions inputs = new PinDescriptions(observableValues);
|
PinDescriptions inputs = new PinDescriptions(observableValues);
|
||||||
SevenSegShape ss = new SevenSegShape(attr, inputs, new PinDescriptions());
|
SevenSegShape ss = new SevenSegShape(attr, inputs, new PinDescriptions());
|
||||||
IOState state = new IOState(observableValues, null, null);
|
IOState state = new IOState(observableValues, null, null);
|
||||||
ss.applyStateMonitor(state, null);
|
ss.applyStateMonitor(state);
|
||||||
|
|
||||||
checkValue(false, ss, 0, a, 0, 1, cc, 0, 1);
|
checkValue(false, ss, 0, a, 0, 1, cc, 0, 1);
|
||||||
checkValue(false, ss, 0, a, 0, 1, cc, 1, 1);
|
checkValue(false, ss, 0, a, 0, 1, cc, 1, 1);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user