use of de.neemann.digital.core.element.Element in project Digital by hneemann.
the class InputShape method applyStateMonitor.
@Override
public Interactor applyStateMonitor(IOState ioState, Observer guiObserver) {
this.ioState = ioState;
ioState.getOutput(0).addObserverToValue(guiObserver);
return new Interactor() {
@Override
public boolean clicked(CircuitComponent cc, Point pos, IOState ioState, Element element, Sync modelSync) {
ObservableValue value = ioState.getOutput(0);
if (value.getBits() == 1) {
modelSync.access(() -> {
if (isHighZ) {
if (value.isHighZ())
value.setValue(0);
else if (value.getValue() == 0)
value.setValue(1);
else
value.setToHighZ();
} else
value.setValue(1 - value.getValue());
});
return true;
} else {
if (dialog == null || !dialog.isVisible()) {
Model model = ((In) element).getModel();
dialog = new SingleValueDialog(model.getWindowPosManager().getMainFrame(), pos, label, value, isHighZ, cc, model, modelSync);
dialog.setVisible(true);
} else
dialog.requestFocus();
return false;
}
}
};
}
use of de.neemann.digital.core.element.Element in project Digital by hneemann.
the class DipSwitchShape method applyStateMonitor.
@Override
public Interactor applyStateMonitor(IOState ioState, Observer guiObserver) {
this.ioState = ioState;
ioState.getOutput(0).addObserverToValue(guiObserver);
return new Interactor() {
@Override
public boolean clicked(CircuitComponent cc, Point pos, IOState ioState, Element element, Sync modelSync) {
ObservableValue value = ioState.getOutput(0);
modelSync.access(() -> value.setValue(1 - value.getValue()));
return true;
}
};
}
use of de.neemann.digital.core.element.Element in project Digital by hneemann.
the class DependencyAnalyserTest method testBacktrackCompleteness.
public void testBacktrackCompleteness() throws Exception {
ToBreakRunner toBreakRunner = new ToBreakRunner("dig/backtrack/AllComponents.dig", false);
// create a set of all components used in the circuit
Circuit circuit = toBreakRunner.getCircuit();
Set<String> set = new HashSet<>();
for (VisualElement e : circuit.getElements()) set.add(e.getElementName());
// ensure all available components are included in test circuit
for (ElementLibrary.ElementContainer c : toBreakRunner.getLibrary()) {
if (!set.contains(c.getDescription().getName())) {
// nodes with state are allowed to be missing
Element n = c.getDescription().createElement(new ElementAttributes());
boolean ok = (n instanceof Node) && ((Node) n).hasState();
assertTrue("component " + c.getDescription().getName() + " is missing in test/resources/dig/backtrack/AllComponents.dig!", ok);
}
}
// check if backtracking is ok at all components!
ModelAnalyser m = new ModelAnalyser(toBreakRunner.getModel());
new DependencyAnalyser(m);
}
Aggregations