mirror of
https://github.com/hneemann/Digital.git
synced 2025-09-16 16:34:47 -04:00
added a description to signals
This commit is contained in:
parent
f4a23ced0e
commit
dc95600749
@ -5,6 +5,7 @@ import de.neemann.digital.analyse.quinemc.BoolTableIntArray;
|
||||
import de.neemann.digital.core.Model;
|
||||
import de.neemann.digital.core.NodeException;
|
||||
import de.neemann.digital.core.ObservableValue;
|
||||
import de.neemann.digital.core.Signal;
|
||||
import de.neemann.digital.core.flipflops.FlipflopD;
|
||||
import de.neemann.digital.lang.Lang;
|
||||
|
||||
@ -20,8 +21,8 @@ import java.util.List;
|
||||
public class ModelAnalyser {
|
||||
|
||||
private final Model model;
|
||||
private final ArrayList<Model.Signal> inputs;
|
||||
private final ArrayList<Model.Signal> outputs;
|
||||
private final ArrayList<Signal> inputs;
|
||||
private final ArrayList<Signal> outputs;
|
||||
private final int rows;
|
||||
|
||||
/**
|
||||
@ -46,10 +47,10 @@ public class ModelAnalyser {
|
||||
if (!label.endsWith("n"))
|
||||
label += "n";
|
||||
|
||||
outputs.add(i++, new Model.Signal(label + "+1", ff.getDInput()));
|
||||
outputs.add(i++, new Signal(label + "+1", ff.getDInput()));
|
||||
|
||||
ObservableValue q = ff.getOutputs().get(0);
|
||||
inputs.add(new Model.Signal(label, q));
|
||||
inputs.add(new Signal(label, q));
|
||||
|
||||
ObservableValue notQ = ff.getOutputs().get(1);
|
||||
if (notQ.observerCount() > 0)
|
||||
@ -65,8 +66,8 @@ public class ModelAnalyser {
|
||||
rows = 1 << inputs.size();
|
||||
}
|
||||
|
||||
private ArrayList<Model.Signal> checkBinary(ArrayList<Model.Signal> list) throws AnalyseException {
|
||||
for (Model.Signal s : list)
|
||||
private ArrayList<Signal> checkBinary(ArrayList<Signal> list) throws AnalyseException {
|
||||
for (Signal s : list)
|
||||
if (s.getValue().getBits() != 1)
|
||||
throw new AnalyseException(Lang.get("err_analyseValue_N_IsNotBinary", s.getName()));
|
||||
return list;
|
||||
@ -88,11 +89,11 @@ public class ModelAnalyser {
|
||||
};
|
||||
|
||||
TruthTable tt = new TruthTable();
|
||||
for (Model.Signal s : inputs)
|
||||
for (Signal s : inputs)
|
||||
tt.addVariable(s.getName());
|
||||
|
||||
ArrayList<BoolTableIntArray> data = new ArrayList<>();
|
||||
for (Model.Signal s : outputs) {
|
||||
for (Signal s : outputs) {
|
||||
BoolTableIntArray e = new BoolTableIntArray(rows);
|
||||
data.add(e);
|
||||
tt.addResult(s.getName(), e);
|
||||
|
@ -372,27 +372,20 @@ public class Model {
|
||||
/**
|
||||
* registers a Signal to the model
|
||||
*
|
||||
* @param name the signals name
|
||||
* @param value the signals value
|
||||
* @param signal the signal
|
||||
*/
|
||||
public void addSignal(String name, ObservableValue value) {
|
||||
if (isSignal(name, value))
|
||||
signals.add(new Signal(name, value));
|
||||
}
|
||||
|
||||
private static boolean isSignal(String name, ObservableValue value) {
|
||||
return name != null && name.length() > 0 && value != null;
|
||||
public void addSignal(Signal signal) {
|
||||
if (signal.isValid())
|
||||
signals.add(signal);
|
||||
}
|
||||
|
||||
/**
|
||||
* registers a input to the model
|
||||
*
|
||||
* @param name the signals name
|
||||
* @param value the signals value
|
||||
* @param signal the signal
|
||||
*/
|
||||
public void addInput(String name, ObservableValue value) {
|
||||
if (isSignal(name, value)) {
|
||||
Signal signal = new Signal(name, value);
|
||||
public void addInput(Signal signal) {
|
||||
if (signal.isValid()) {
|
||||
signals.add(signal);
|
||||
inputs.add(signal);
|
||||
}
|
||||
@ -408,12 +401,10 @@ public class Model {
|
||||
/**
|
||||
* registers a output to the model
|
||||
*
|
||||
* @param name the signals name
|
||||
* @param value the signals value
|
||||
* @param signal the signal
|
||||
*/
|
||||
public void addOutput(String name, ObservableValue value) {
|
||||
if (isSignal(name, value)) {
|
||||
Signal signal = new Signal(name, value);
|
||||
public void addOutput(Signal signal) {
|
||||
if (signal.isValid()) {
|
||||
signals.add(signal);
|
||||
outputs.add(signal);
|
||||
}
|
||||
@ -473,65 +464,6 @@ public class Model {
|
||||
return nodes.size();
|
||||
}
|
||||
|
||||
/**
|
||||
* A simple storage bean for signals
|
||||
*/
|
||||
public static final class Signal implements Comparable<Signal> {
|
||||
private final String name;
|
||||
private final ObservableValue value;
|
||||
|
||||
/**
|
||||
* Creates a new Instance
|
||||
*
|
||||
* @param name the name of the Signal
|
||||
* @param value the signals value
|
||||
*/
|
||||
public Signal(String name, ObservableValue value) {
|
||||
this.name = name;
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the name
|
||||
*/
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the value
|
||||
*/
|
||||
public ObservableValue getValue() {
|
||||
return value;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int compareTo(Signal o) {
|
||||
return name.compareTo(o.name);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
if (this == o) return true;
|
||||
if (o == null || getClass() != o.getClass()) return false;
|
||||
|
||||
Signal signal = (Signal) o;
|
||||
|
||||
return name.equals(signal.name);
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return name.hashCode();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return name;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns all nodes of the given class
|
||||
*
|
||||
|
89
src/main/java/de/neemann/digital/core/Signal.java
Normal file
89
src/main/java/de/neemann/digital/core/Signal.java
Normal file
@ -0,0 +1,89 @@
|
||||
package de.neemann.digital.core;
|
||||
|
||||
/**
|
||||
* A simple storage bean for signals
|
||||
*/
|
||||
public final class Signal implements Comparable<Signal> {
|
||||
private final String name;
|
||||
private final ObservableValue value;
|
||||
private String description;
|
||||
|
||||
/**
|
||||
* Creates a new Instance
|
||||
*
|
||||
* @param name the name of the Signal
|
||||
* @param value the signals value
|
||||
*/
|
||||
public Signal(String name, ObservableValue value) {
|
||||
this.name = name;
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the name
|
||||
*/
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the signals description
|
||||
*/
|
||||
public String getDescription() {
|
||||
return description;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the description
|
||||
*
|
||||
* @param description the description
|
||||
* @return this for chained calls
|
||||
*/
|
||||
public Signal setDescription(String description) {
|
||||
this.description = description;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the value
|
||||
*/
|
||||
public ObservableValue getValue() {
|
||||
return value;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int compareTo(Signal o) {
|
||||
return name.compareTo(o.name);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
if (this == o) return true;
|
||||
if (o == null || getClass() != o.getClass()) return false;
|
||||
|
||||
Signal signal = (Signal) o;
|
||||
|
||||
return name.equals(signal.name);
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return name.hashCode();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return name;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns true if this signal is a valid signal.
|
||||
* Valid means there is a name and the value is non null
|
||||
*
|
||||
* @return true if signal is valid
|
||||
*/
|
||||
public boolean isValid() {
|
||||
return name != null && name.length() > 0 && value != null;
|
||||
}
|
||||
}
|
@ -84,7 +84,7 @@ public class FlipflopD extends Node implements Element {
|
||||
public void registerNodes(Model model) {
|
||||
super.registerNodes(model);
|
||||
if (isProbe)
|
||||
model.addSignal(label, q);
|
||||
model.addSignal(new Signal(label, q));
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -90,7 +90,7 @@ public class FlipflopJK extends Node implements Element {
|
||||
public void registerNodes(Model model) {
|
||||
super.registerNodes(model);
|
||||
if (isProbe)
|
||||
model.addSignal(label, q);
|
||||
model.addSignal(new Signal(label, q));
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -84,7 +84,7 @@ public class FlipflopRS extends Node implements Element {
|
||||
public void registerNodes(Model model) {
|
||||
super.registerNodes(model);
|
||||
if (isProbe)
|
||||
model.addSignal(label, q);
|
||||
model.addSignal(new Signal(label, q));
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -76,7 +76,7 @@ public class FlipflopT extends Node implements Element {
|
||||
public void registerNodes(Model model) {
|
||||
super.registerNodes(model);
|
||||
if (isProbe)
|
||||
model.addSignal(label, q);
|
||||
model.addSignal(new Signal(label, q));
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -1,9 +1,6 @@
|
||||
package de.neemann.digital.core.io;
|
||||
|
||||
import de.neemann.digital.core.Model;
|
||||
import de.neemann.digital.core.NodeException;
|
||||
import de.neemann.digital.core.ObservableValue;
|
||||
import de.neemann.digital.core.ObservableValues;
|
||||
import de.neemann.digital.core.*;
|
||||
import de.neemann.digital.core.element.Element;
|
||||
import de.neemann.digital.core.element.ElementAttributes;
|
||||
import de.neemann.digital.core.element.ElementTypeDescription;
|
||||
@ -49,6 +46,6 @@ public class Button implements Element {
|
||||
|
||||
@Override
|
||||
public void registerNodes(Model model) {
|
||||
model.addSignal(label, output);
|
||||
model.addSignal(new Signal(label, output));
|
||||
}
|
||||
}
|
||||
|
@ -1,9 +1,6 @@
|
||||
package de.neemann.digital.core.io;
|
||||
|
||||
import de.neemann.digital.core.Model;
|
||||
import de.neemann.digital.core.NodeException;
|
||||
import de.neemann.digital.core.ObservableValue;
|
||||
import de.neemann.digital.core.ObservableValues;
|
||||
import de.neemann.digital.core.*;
|
||||
import de.neemann.digital.core.element.Element;
|
||||
import de.neemann.digital.core.element.ElementAttributes;
|
||||
import de.neemann.digital.core.element.ElementTypeDescription;
|
||||
@ -39,6 +36,7 @@ public class In implements Element {
|
||||
|
||||
private final ObservableValue output;
|
||||
private final String label;
|
||||
private final String description;
|
||||
|
||||
/**
|
||||
* Create a new instance
|
||||
@ -50,6 +48,7 @@ public class In implements Element {
|
||||
output = new ObservableValue("out", attributes.get(Keys.BITS), highZ);
|
||||
output.setValue(attributes.get(Keys.DEFAULT));
|
||||
label = attributes.getCleanLabel();
|
||||
description = attributes.get(Keys.DESCRIPTION);
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -64,6 +63,6 @@ public class In implements Element {
|
||||
|
||||
@Override
|
||||
public void registerNodes(Model model) {
|
||||
model.addInput(label, output);
|
||||
model.addInput(new Signal(label, output).setDescription(description));
|
||||
}
|
||||
}
|
||||
|
@ -1,9 +1,6 @@
|
||||
package de.neemann.digital.core.io;
|
||||
|
||||
import de.neemann.digital.core.Model;
|
||||
import de.neemann.digital.core.NodeException;
|
||||
import de.neemann.digital.core.ObservableValue;
|
||||
import de.neemann.digital.core.ObservableValues;
|
||||
import de.neemann.digital.core.*;
|
||||
import de.neemann.digital.core.element.Element;
|
||||
import de.neemann.digital.core.element.ElementAttributes;
|
||||
import de.neemann.digital.core.element.ElementTypeDescription;
|
||||
@ -27,7 +24,7 @@ public class Out implements Element {
|
||||
@Override
|
||||
public String getDescription(ElementAttributes elementAttributes) {
|
||||
String d = elementAttributes.get(Keys.DESCRIPTION);
|
||||
if (d.length()>0)
|
||||
if (d.length() > 0)
|
||||
return d;
|
||||
else
|
||||
return Lang.get("elem_Out");
|
||||
@ -72,6 +69,7 @@ public class Out implements Element {
|
||||
|
||||
private final int[] bits;
|
||||
private final String label;
|
||||
private final String description;
|
||||
private ObservableValue value;
|
||||
|
||||
/**
|
||||
@ -82,6 +80,7 @@ public class Out implements Element {
|
||||
public Out(ElementAttributes attributes) {
|
||||
bits = new int[]{attributes.getBits()};
|
||||
label = attributes.getCleanLabel();
|
||||
description = attributes.get(Keys.DESCRIPTION);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -92,6 +91,7 @@ public class Out implements Element {
|
||||
public Out(int... bits) {
|
||||
this.bits = bits;
|
||||
label = null;
|
||||
description = null;
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -110,6 +110,6 @@ public class Out implements Element {
|
||||
|
||||
@Override
|
||||
public void registerNodes(Model model) {
|
||||
model.addOutput(label, value);
|
||||
model.addOutput(new Signal(label, value).setDescription(description));
|
||||
}
|
||||
}
|
||||
|
@ -1,9 +1,6 @@
|
||||
package de.neemann.digital.core.io;
|
||||
|
||||
import de.neemann.digital.core.Model;
|
||||
import de.neemann.digital.core.NodeException;
|
||||
import de.neemann.digital.core.ObservableValue;
|
||||
import de.neemann.digital.core.ObservableValues;
|
||||
import de.neemann.digital.core.*;
|
||||
import de.neemann.digital.core.element.Element;
|
||||
import de.neemann.digital.core.element.ElementAttributes;
|
||||
import de.neemann.digital.core.element.ElementTypeDescription;
|
||||
@ -51,7 +48,7 @@ public class Probe implements Element {
|
||||
|
||||
@Override
|
||||
public void registerNodes(Model model) {
|
||||
model.addSignal(label, value);
|
||||
model.addSignal(new Signal(label, value));
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -78,6 +78,6 @@ public class Register extends Node implements Element {
|
||||
public void registerNodes(Model model) {
|
||||
super.registerNodes(model);
|
||||
if (isProbe)
|
||||
model.addSignal(label, q);
|
||||
model.addSignal(new Signal(label, q));
|
||||
}
|
||||
}
|
||||
|
@ -1,9 +1,6 @@
|
||||
package de.neemann.digital.core.wiring;
|
||||
|
||||
import de.neemann.digital.core.Model;
|
||||
import de.neemann.digital.core.NodeException;
|
||||
import de.neemann.digital.core.ObservableValue;
|
||||
import de.neemann.digital.core.ObservableValues;
|
||||
import de.neemann.digital.core.*;
|
||||
import de.neemann.digital.core.element.Element;
|
||||
import de.neemann.digital.core.element.ElementAttributes;
|
||||
import de.neemann.digital.core.element.ElementTypeDescription;
|
||||
@ -57,7 +54,7 @@ public class Clock implements Element {
|
||||
@Override
|
||||
public void registerNodes(Model model) {
|
||||
model.addClock(this);
|
||||
model.addSignal(label, output);
|
||||
model.addSignal(new Signal(label, output));
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -2,6 +2,7 @@ package de.neemann.digital.draw.shapes;
|
||||
|
||||
import de.neemann.digital.core.Model;
|
||||
import de.neemann.digital.core.Observer;
|
||||
import de.neemann.digital.core.Signal;
|
||||
import de.neemann.digital.core.element.Element;
|
||||
import de.neemann.digital.core.element.ElementAttributes;
|
||||
import de.neemann.digital.core.element.Keys;
|
||||
@ -68,10 +69,10 @@ public class DataShape implements Shape {
|
||||
|
||||
@Override
|
||||
public void registerModel(ModelDescription modelDescription, Model model, ModelEntry element) {
|
||||
ArrayList<Model.Signal> signals = model.getSignalsCopy();
|
||||
new OrderMerger<String, Model.Signal>(modelDescription.getCircuit().getMeasurementOrdering()) {
|
||||
ArrayList<Signal> signals = model.getSignalsCopy();
|
||||
new OrderMerger<String, Signal>(modelDescription.getCircuit().getMeasurementOrdering()) {
|
||||
@Override
|
||||
public boolean equals(Model.Signal a, String b) {
|
||||
public boolean equals(Signal a, String b) {
|
||||
return a.getName().equals(b);
|
||||
}
|
||||
}.order(signals);
|
||||
|
@ -513,7 +513,7 @@ public class Main extends JFrame implements ClosingWindowListener.ConfirmSave, E
|
||||
Model m = new ModelDescription(circuitComponent.getCircuit(), library).createModel(false);
|
||||
elementState.activate();
|
||||
ArrayList<String> names = new ArrayList<>();
|
||||
for (Model.Signal s : m.getSignals())
|
||||
for (Signal s : m.getSignals())
|
||||
names.add(s.getName());
|
||||
new OrderMerger<String, String>(circuitComponent.getCircuit().getMeasurementOrdering()).order(names);
|
||||
ElementOrderer.ListOrder<String> o = new ElementOrderer.ListOrder<>(names);
|
||||
|
@ -3,6 +3,7 @@ package de.neemann.digital.gui.components;
|
||||
import de.neemann.digital.core.Model;
|
||||
import de.neemann.digital.core.ModelEvent;
|
||||
import de.neemann.digital.core.ModelStateObserver;
|
||||
import de.neemann.digital.core.Signal;
|
||||
import de.neemann.digital.lang.Lang;
|
||||
|
||||
import javax.swing.*;
|
||||
@ -36,10 +37,10 @@ public class ProbeDialog extends JDialog implements ModelStateObserver {
|
||||
setDefaultCloseOperation(DISPOSE_ON_CLOSE);
|
||||
this.type = type;
|
||||
|
||||
ArrayList<Model.Signal> signals = model.getSignalsCopy();
|
||||
new OrderMerger<String, Model.Signal>(ordering) {
|
||||
ArrayList<Signal> signals = model.getSignalsCopy();
|
||||
new OrderMerger<String, Signal>(ordering) {
|
||||
@Override
|
||||
public boolean equals(Model.Signal a, String b) {
|
||||
public boolean equals(Signal a, String b) {
|
||||
return a.getName().equals(b);
|
||||
}
|
||||
}.order(signals);
|
||||
@ -75,10 +76,10 @@ public class ProbeDialog extends JDialog implements ModelStateObserver {
|
||||
}
|
||||
|
||||
private static class SignalTableModel implements TableModel {
|
||||
private final ArrayList<Model.Signal> signals;
|
||||
private final ArrayList<Signal> signals;
|
||||
private ArrayList<TableModelListener> listeners = new ArrayList<>();
|
||||
|
||||
SignalTableModel(ArrayList<Model.Signal> signals) {
|
||||
SignalTableModel(ArrayList<Signal> signals) {
|
||||
this.signals = signals;
|
||||
}
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
package de.neemann.digital.gui.components.data;
|
||||
|
||||
import de.neemann.digital.core.Model;
|
||||
import de.neemann.digital.core.Signal;
|
||||
|
||||
import java.io.BufferedWriter;
|
||||
import java.io.IOException;
|
||||
@ -71,7 +71,7 @@ public class DataSample {
|
||||
* @param signals the signals to create a sample from
|
||||
* @return the sample to allow chained calls
|
||||
*/
|
||||
public DataSample fillWith(ArrayList<Model.Signal> signals) {
|
||||
public DataSample fillWith(ArrayList<Signal> signals) {
|
||||
for (int i = 0; i < signals.size(); i++)
|
||||
values[i] = signals.get(i).getValue().getValueIgnoreBurn();
|
||||
return this;
|
||||
|
@ -1,6 +1,6 @@
|
||||
package de.neemann.digital.gui.components.data;
|
||||
|
||||
import de.neemann.digital.core.Model;
|
||||
import de.neemann.digital.core.Signal;
|
||||
import de.neemann.digital.draw.graphics.Graphic;
|
||||
import de.neemann.digital.draw.graphics.Orientation;
|
||||
import de.neemann.digital.draw.graphics.Style;
|
||||
@ -18,7 +18,7 @@ import java.util.Iterator;
|
||||
* @author hneemann
|
||||
*/
|
||||
public class DataSet implements Iterable<DataSample>, Drawable {
|
||||
private final ArrayList<Model.Signal> signals;
|
||||
private final ArrayList<Signal> signals;
|
||||
private final int maxSize;
|
||||
private final ArrayList<DataSample> samples;
|
||||
private final int maxTextLength;
|
||||
@ -34,11 +34,11 @@ public class DataSet implements Iterable<DataSample>, Drawable {
|
||||
add(new DataSample(1, signalSize()).setValue(1, 1));
|
||||
}
|
||||
|
||||
private static ArrayList<Model.Signal> createDummy() {
|
||||
ArrayList<Model.Signal> list = new ArrayList<>();
|
||||
list.add(new Model.Signal("A", null));
|
||||
list.add(new Model.Signal("B", null));
|
||||
list.add(new Model.Signal("C", null));
|
||||
private static ArrayList<Signal> createDummy() {
|
||||
ArrayList<Signal> list = new ArrayList<>();
|
||||
list.add(new Signal("A", null));
|
||||
list.add(new Signal("B", null));
|
||||
list.add(new Signal("C", null));
|
||||
return list;
|
||||
}
|
||||
|
||||
@ -48,7 +48,7 @@ public class DataSet implements Iterable<DataSample>, Drawable {
|
||||
* @param signals the signals used to collect DataSamples
|
||||
* @param maxSize max size of data elements
|
||||
*/
|
||||
public DataSet(ArrayList<Model.Signal> signals, int maxSize) {
|
||||
public DataSet(ArrayList<Signal> signals, int maxSize) {
|
||||
this.signals = signals;
|
||||
this.maxSize = maxSize;
|
||||
samples = new ArrayList<>();
|
||||
@ -142,7 +142,7 @@ public class DataSet implements Iterable<DataSample>, Drawable {
|
||||
* @param i the index
|
||||
* @return the signal
|
||||
*/
|
||||
public Model.Signal getSignal(int i) {
|
||||
public Signal getSignal(int i) {
|
||||
return signals.get(i);
|
||||
}
|
||||
|
||||
@ -213,7 +213,7 @@ public class DataSet implements Iterable<DataSample>, Drawable {
|
||||
/**
|
||||
* @return the signals stored
|
||||
*/
|
||||
public ArrayList<Model.Signal> getSignals() {
|
||||
public ArrayList<Signal> getSignals() {
|
||||
return signals;
|
||||
}
|
||||
|
||||
@ -236,7 +236,7 @@ public class DataSet implements Iterable<DataSample>, Drawable {
|
||||
public void saveCSV(BufferedWriter w) throws IOException {
|
||||
try {
|
||||
w.write("\"step\"");
|
||||
for (Model.Signal s : signals)
|
||||
for (Signal s : signals)
|
||||
w.write(",\"" + s.getName() + '"');
|
||||
w.write("\n");
|
||||
for (DataSample s : samples) {
|
||||
|
@ -3,6 +3,7 @@ package de.neemann.digital.gui.components.data;
|
||||
import de.neemann.digital.core.Model;
|
||||
import de.neemann.digital.core.ModelEvent;
|
||||
import de.neemann.digital.core.ModelStateObserver;
|
||||
import de.neemann.digital.core.Signal;
|
||||
import de.neemann.digital.gui.components.OrderMerger;
|
||||
import de.neemann.digital.lang.Lang;
|
||||
import de.neemann.gui.ErrorMessage;
|
||||
@ -44,10 +45,10 @@ public class DataSetDialog extends JDialog implements ModelStateObserver {
|
||||
setDefaultCloseOperation(DISPOSE_ON_CLOSE);
|
||||
setAlwaysOnTop(true);
|
||||
|
||||
ArrayList<Model.Signal> signals = model.getSignalsCopy();
|
||||
new OrderMerger<String, Model.Signal>(ordering) {
|
||||
ArrayList<Signal> signals = model.getSignalsCopy();
|
||||
new OrderMerger<String, Signal>(ordering) {
|
||||
@Override
|
||||
public boolean equals(Model.Signal a, String b) {
|
||||
public boolean equals(Signal a, String b) {
|
||||
return a.getName().equals(b);
|
||||
}
|
||||
}.order(signals);
|
||||
|
Loading…
x
Reference in New Issue
Block a user