From a71bcffc667ee62c6fd547135713a0a0915ba6be Mon Sep 17 00:00:00 2001 From: hneemann Date: Sat, 2 Apr 2016 22:09:39 +0200 Subject: [PATCH] added measurement dialog --- src/main/dig/processor/PC.dig | 193 +- src/main/dig/processor/Processor.dig | 84 +- src/main/dig/processor/Register.dig | 2477 +++++++++-------- .../java/de/neemann/digital/core/Model.java | 15 +- .../digital/core/element/AttributeKey.java | 1 + .../de/neemann/digital/core/io/Probe.java | 4 - .../neemann/digital/core/memory/Register.java | 16 +- .../java/de/neemann/digital/gui/Main.java | 19 +- .../gui/components/CircuitComponent.java | 16 +- .../digital/gui/components/ProbeDialog.java | 123 + src/main/resources/lang/lang_de.properties | 5 + src/main/resources/lang/lang_en.properties | 4 + 12 files changed, 1539 insertions(+), 1418 deletions(-) create mode 100644 src/main/java/de/neemann/digital/gui/components/ProbeDialog.java diff --git a/src/main/dig/processor/PC.dig b/src/main/dig/processor/PC.dig index 0cd324243..0c081b8b3 100644 --- a/src/main/dig/processor/PC.dig +++ b/src/main/dig/processor/PC.dig @@ -1,5 +1,6 @@ + 1 Width @@ -10,6 +11,10 @@ Register + + valueIsProbe + true + Label PC @@ -19,7 +24,7 @@ 16 - + 0 @@ -34,7 +39,7 @@ 16 - + 0 @@ -49,7 +54,7 @@ 16 - + 0 @@ -60,7 +65,7 @@ 16 - + 0 @@ -71,7 +76,7 @@ 0 - + 0 @@ -86,7 +91,7 @@ 16 - + 0 @@ -94,9 +99,7 @@ rotation - - 3 - + Label @@ -107,7 +110,7 @@ 16 - + 3 @@ -122,7 +125,7 @@ 16 - + 0 @@ -133,7 +136,7 @@ C - + 0 @@ -144,7 +147,7 @@ 0 - + 0 @@ -155,7 +158,7 @@ 16 - + 0 @@ -166,7 +169,7 @@ 16 - + 0 @@ -174,16 +177,14 @@ rotation - - 1 - + Label abs - + 1 @@ -191,22 +192,20 @@ rotation - - 1 - + Label rel - + 1 Not - + 0 @@ -217,138 +216,138 @@ Reset - + 0 - - + + - - - - - - - - - - - - - - - - - - - - - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/dig/processor/Processor.dig b/src/main/dig/processor/Processor.dig index 7c063496b..1dfd2ce86 100644 --- a/src/main/dig/processor/Processor.dig +++ b/src/main/dig/processor/Processor.dig @@ -238,42 +238,12 @@ Frequency - 1000 + 200 2 - - Probe - - - Label - R0 - - - Bits - 16 - - - - 0 - - - Probe - - - Label - R1 - - - Bits - 16 - - - - 0 - GPO.dig @@ -444,14 +414,6 @@ - - - - - - - - @@ -546,7 +508,7 @@ - + @@ -641,7 +603,7 @@ - + @@ -664,10 +626,6 @@ - - - - @@ -768,10 +726,6 @@ - - - - @@ -797,7 +751,7 @@ - + @@ -809,7 +763,7 @@ - + @@ -824,10 +778,6 @@ - - - - @@ -908,10 +858,6 @@ - - - - @@ -964,10 +910,6 @@ - - - - @@ -976,6 +918,14 @@ + + + + + + + + @@ -1004,10 +954,6 @@ - - - - @@ -1040,10 +986,6 @@ - - - - diff --git a/src/main/dig/processor/Register.dig b/src/main/dig/processor/Register.dig index 7bd64587d..739a4955e 100644 --- a/src/main/dig/processor/Register.dig +++ b/src/main/dig/processor/Register.dig @@ -1,1235 +1,1252 @@ - + 1 + + + Width + 5 + + + + + Register + - Width - 5 + valueIsProbe + true - - - - Register - - - Label - R0 - - - Bits - 16 - - - - 0 - - - In - - - Label - WD - - - Bits - 16 - - - - 0 - - - Register - - - Label - R1 - - - Bits - 16 - - - - 0 - - - Register - - - Label - R2 - - - Bits - 16 - - - - 0 - - - Register - - - Label - R3 - - - Bits - 16 - - - - 0 - - - Register - - - Label - R4 - - - Bits - 16 - - - - 0 - - - Register - - - Label - R5 - - - Bits - 16 - - - - 0 - - - Register - - - Label - R6 - - - Bits - 16 - - - - 0 - - - Register - - - Label - R7 - - - Bits - 16 - - - - 0 - - - Register - - - Label - R8 - - - Bits - 16 - - - - 0 - - - Register - - - Label - R9 - - - Bits - 16 - - - - 0 - - - Register - - - Label - R10 - - - Bits - 16 - - - - 0 - - - Register - - - Label - R11 - - - Bits - 16 - - - - 0 - - - Register - - - Label - R12 - - - Bits - 16 - - - - 0 - - - Register - - - Label - BP - - - Bits - 16 - - - - 0 - - - Register - - - Label - SP - - - Bits - 16 - - - - 0 - - - Register - - - Label - RA - - - Bits - 16 - - - - 0 - - - Demultiplexer - - - Selector Bits - 4 - - - - 0 - - - In - - - Label - C - - - - 0 - - - In - - - rotation - - 1 - - - - Label - src - - - Bits - 4 - - - - 1 - - - Multiplexer - - - Selector Bits - 4 - - - Bits - 16 - - - - 0 - - - Out - - - Label - R0 - - - Bits - 16 - - - - 0 - - - Multiplexer - - - Selector Bits - 4 - - - Bits - 16 - - - - 0 - - - Out - - - Label - R1 - - - Bits - 16 - - - - 0 - - - In - - - Label - dest - - - Bits - 4 - - - - 0 - - - In - - - Label - WE - - - - 0 - - - Out - - - Label - Rdest - - - Bits - 16 - - - - 0 - - - Out - - - Label - Rsrc - - - Bits - 16 - - - - 0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + Label + R0 + + + Bits + 16 + + + + 0 + + + In + + + Label + WD + + + Bits + 16 + + + + 0 + + + Register + + + valueIsProbe + true + + + Label + R1 + + + Bits + 16 + + + + 0 + + + Register + + + valueIsProbe + true + + + Label + R2 + + + Bits + 16 + + + + 0 + + + Register + + + valueIsProbe + true + + + Label + R3 + + + Bits + 16 + + + + 0 + + + Register + + + valueIsProbe + true + + + Label + R4 + + + Bits + 16 + + + + 0 + + + Register + + + valueIsProbe + true + + + Label + R5 + + + Bits + 16 + + + + 0 + + + Register + + + valueIsProbe + true + + + Label + R6 + + + Bits + 16 + + + + 0 + + + Register + + + valueIsProbe + true + + + Label + R7 + + + Bits + 16 + + + + 0 + + + Register + + + valueIsProbe + true + + + Label + R8 + + + Bits + 16 + + + + 0 + + + Register + + + valueIsProbe + true + + + Label + R9 + + + Bits + 16 + + + + 0 + + + Register + + + valueIsProbe + true + + + Label + R10 + + + Bits + 16 + + + + 0 + + + Register + + + valueIsProbe + true + + + Label + R11 + + + Bits + 16 + + + + 0 + + + Register + + + valueIsProbe + true + + + Label + R12 + + + Bits + 16 + + + + 0 + + + Register + + + valueIsProbe + true + + + Label + BP + + + Bits + 16 + + + + 0 + + + Register + + + valueIsProbe + true + + + Label + SP + + + Bits + 16 + + + + 0 + + + Register + + + valueIsProbe + true + + + Label + RA + + + Bits + 16 + + + + 0 + + + Demultiplexer + + + Selector Bits + 4 + + + + 0 + + + In + + + Label + C + + + + 0 + + + In + + + rotation + + + + Label + src + + + Bits + 4 + + + + 1 + + + Multiplexer + + + Selector Bits + 4 + + + Bits + 16 + + + + 0 + + + Multiplexer + + + Selector Bits + 4 + + + Bits + 16 + + + + 0 + + + In + + + Label + dest + + + Bits + 4 + + + + 0 + + + In + + + Label + WE + + + + 0 + + + Out + + + Label + Rdest + + + Bits + 16 + + + + 0 + + + Out + + + Label + Rsrc + + + Bits + 16 + + + + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/java/de/neemann/digital/core/Model.java b/src/main/java/de/neemann/digital/core/Model.java index 7b7bf01a4..853dbc275 100644 --- a/src/main/java/de/neemann/digital/core/Model.java +++ b/src/main/java/de/neemann/digital/core/Model.java @@ -239,7 +239,7 @@ public class Model { return signals; } - public static class Signal { + public static class Signal implements Comparable { private final String name; private final ObservableValue value; @@ -248,6 +248,19 @@ public class Model { this.name = name; this.value = value; } + + public String getName() { + return name; + } + + public ObservableValue getValue() { + return value; + } + + @Override + public int compareTo(Signal o) { + return name.compareTo(o.name); + } } } diff --git a/src/main/java/de/neemann/digital/core/element/AttributeKey.java b/src/main/java/de/neemann/digital/core/element/AttributeKey.java index 4b68ecb9f..0f4861378 100644 --- a/src/main/java/de/neemann/digital/core/element/AttributeKey.java +++ b/src/main/java/de/neemann/digital/core/element/AttributeKey.java @@ -27,6 +27,7 @@ public class AttributeKey { public static final AttributeKey TermWidth = new AttributeKey<>("termWidth", Lang.get("key_termWidth"), 50); public static final AttributeKey TermHeight = new AttributeKey<>("termHeight", Lang.get("key_termHeight"), 25); public static final AttributeKey Cycles = new AttributeKey<>("Cycles", Lang.get("key_cycles"), 100000); + public static final AttributeKey ValueIsProbe = new AttributeKey<>("valueIsProbe", Lang.get("key_valueIsProbe"), false); private final String key; diff --git a/src/main/java/de/neemann/digital/core/io/Probe.java b/src/main/java/de/neemann/digital/core/io/Probe.java index 98686776c..231edd302 100644 --- a/src/main/java/de/neemann/digital/core/io/Probe.java +++ b/src/main/java/de/neemann/digital/core/io/Probe.java @@ -26,10 +26,6 @@ public class Probe implements Element { label = attributes.get(AttributeKey.Label); } - public Probe(int bits) { - label = null; - } - @Override public void setInputs(ObservableValue... inputs) throws NodeException { value = inputs[0]; diff --git a/src/main/java/de/neemann/digital/core/memory/Register.java b/src/main/java/de/neemann/digital/core/memory/Register.java index a08f2a014..d25468033 100644 --- a/src/main/java/de/neemann/digital/core/memory/Register.java +++ b/src/main/java/de/neemann/digital/core/memory/Register.java @@ -1,9 +1,6 @@ package de.neemann.digital.core.memory; -import de.neemann.digital.core.BitsException; -import de.neemann.digital.core.Node; -import de.neemann.digital.core.NodeException; -import de.neemann.digital.core.ObservableValue; +import de.neemann.digital.core.*; import de.neemann.digital.core.element.AttributeKey; import de.neemann.digital.core.element.Element; import de.neemann.digital.core.element.ElementAttributes; @@ -19,9 +16,12 @@ public class Register extends Node implements Element { .addAttribute(AttributeKey.Rotate) .addAttribute(AttributeKey.Bits) .addAttribute(AttributeKey.Label) + .addAttribute(AttributeKey.ValueIsProbe) .setShortName("Reg"); private final int bits; + private final boolean isProbe; + private final String label; private ObservableValue dVal; private ObservableValue clockVal; private ObservableValue enableVal; @@ -32,6 +32,8 @@ public class Register extends Node implements Element { public Register(ElementAttributes attributes) { bits = attributes.getBits(); this.q = new ObservableValue("Q", bits); + isProbe = attributes.get(AttributeKey.ValueIsProbe); + label = attributes.get(AttributeKey.Label); } @Override @@ -60,4 +62,10 @@ public class Register extends Node implements Element { return new ObservableValue[]{q}; } + @Override + public void registerNodes(Model model) { + super.registerNodes(model); + if (isProbe) + model.addSignal(label, q); + } } diff --git a/src/main/java/de/neemann/digital/gui/Main.java b/src/main/java/de/neemann/digital/gui/Main.java index 993051ccf..9f9d1a12d 100644 --- a/src/main/java/de/neemann/digital/gui/Main.java +++ b/src/main/java/de/neemann/digital/gui/Main.java @@ -12,6 +12,7 @@ import de.neemann.digital.draw.model.RealTimeClock; import de.neemann.digital.draw.shapes.ShapeFactory; import de.neemann.digital.gui.components.CircuitComponent; import de.neemann.digital.gui.components.ElementOrderer; +import de.neemann.digital.gui.components.ProbeDialog; import de.neemann.digital.gui.state.State; import de.neemann.digital.gui.state.StateManager; import de.neemann.digital.lang.Lang; @@ -53,6 +54,8 @@ public class Main extends JFrame implements ClosingWindowListener.ConfirmSave { private final ToolTipAction runToBreak; private final ElementLibrary library; private final JCheckBoxMenuItem runClock; + private final JCheckBoxMenuItem showProbes; + private final JCheckBoxMenuItem traceEnable; private final LibrarySelector librarySelector; private final ShapeFactory shapeFactory; private final SavedListener savedListener; @@ -280,16 +283,19 @@ public class Main extends JFrame implements ClosingWindowListener.ConfirmSave { } }.setToolTip(Lang.get("menu_speedTest_tt")); - JCheckBoxMenuItem traceEnable = new JCheckBoxMenuItem(Lang.get("menu_trace")); - runClock = new JCheckBoxMenuItem(Lang.get("menu_runClock"), true); + showProbes = new JCheckBoxMenuItem(Lang.get("menu_probe")); + showProbes.setToolTipText(Lang.get("menu_probe_tt")); + traceEnable = new JCheckBoxMenuItem(Lang.get("menu_trace")); + runClock = new JCheckBoxMenuItem(Lang.get("menu_runClock")); runClock.setToolTipText(Lang.get("menu_runClock_tt")); run.add(runModelAction.createJMenuItem()); run.add(runModelMicroAction.createJMenuItem()); run.add(doStep.createJMenuItem()); run.add(runToBreak.createJMenuItem()); - run.add(speedTest.createJMenuItem()); - run.add(traceEnable); + //run.add(speedTest.createJMenuItem()); + run.add(showProbes); + //run.add(traceEnable); run.add(runClock); doStep.setEnabled(false); @@ -390,6 +396,11 @@ public class Main extends JFrame implements ClosingWindowListener.ConfirmSave { runToBreak.setEnabled(!runClock && model.isFastRunModel()); + + if (showProbes.isSelected()) + new ProbeDialog(this, model, updateEvent).setVisible(true); + + model.init(); } catch (NodeException e) { diff --git a/src/main/java/de/neemann/digital/gui/components/CircuitComponent.java b/src/main/java/de/neemann/digital/gui/components/CircuitComponent.java index af4990b24..3aede1aac 100644 --- a/src/main/java/de/neemann/digital/gui/components/CircuitComponent.java +++ b/src/main/java/de/neemann/digital/gui/components/CircuitComponent.java @@ -402,13 +402,15 @@ public class CircuitComponent extends JComponent { corner1 = getPosVector(e); wasRealyDragged = false; } else { - if (e.getButton() == MouseEvent.BUTTON1) { - elements = circuit.getElementsToMove(Vector.min(corner1, corner2), Vector.max(corner1, corner2)); - state = State.MOVE; - } else { - elements = circuit.getElementsToCopy(Vector.min(corner1, corner2), Vector.max(corner1, corner2), shapeFactory); - copyStartPosition = raster(getPosVector(e)); - state = State.COPY; + if (corner2 != null) { + if (e.getButton() == MouseEvent.BUTTON1) { + elements = circuit.getElementsToMove(Vector.min(corner1, corner2), Vector.max(corner1, corner2)); + state = State.MOVE; + } else { + elements = circuit.getElementsToCopy(Vector.min(corner1, corner2), Vector.max(corner1, corner2), shapeFactory); + copyStartPosition = raster(getPosVector(e)); + state = State.COPY; + } } lastPos = getPosVector(e); } diff --git a/src/main/java/de/neemann/digital/gui/components/ProbeDialog.java b/src/main/java/de/neemann/digital/gui/components/ProbeDialog.java new file mode 100644 index 000000000..0a7f174ef --- /dev/null +++ b/src/main/java/de/neemann/digital/gui/components/ProbeDialog.java @@ -0,0 +1,123 @@ +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.lang.Lang; + +import javax.swing.*; +import javax.swing.event.TableModelEvent; +import javax.swing.event.TableModelListener; +import javax.swing.table.TableModel; +import java.awt.*; +import java.awt.event.WindowAdapter; +import java.awt.event.WindowEvent; +import java.util.ArrayList; +import java.util.Collections; + +/** + * @author hneemann + */ +public class ProbeDialog extends JDialog implements ModelStateObserver { + + private final ModelEvent.Event type; + private final SignalTableModel tableModel; + + public ProbeDialog(Frame owner, Model model, ModelEvent.Event type) { + super(owner, Lang.get("win_measures"), false); + setDefaultCloseOperation(DISPOSE_ON_CLOSE); + this.type = type; + + ArrayList signals = model.getSignals(); + Collections.sort(signals); + tableModel = new SignalTableModel(signals); + JTable list = new JTable(tableModel); + getContentPane().add(new JScrollPane(list), BorderLayout.CENTER); + setAlwaysOnTop(true); + + addWindowListener(new WindowAdapter() { + @Override + public void windowOpened(WindowEvent e) { + model.addObserver(ProbeDialog.this); + } + + @Override + public void windowClosed(WindowEvent e) { + model.removeObserver(ProbeDialog.this); + } + }); + + setPreferredSize(new Dimension(150, getPreferredSize().height)); + + pack(); + setLocationRelativeTo(owner); + } + + @Override + public void handleEvent(ModelEvent event) { + if (event.getType() == type) { + tableModel.fireChanged(); + } + } + + private class SignalTableModel implements TableModel { + private final ArrayList signals; + private ArrayList listeners = new ArrayList<>(); + + public SignalTableModel(ArrayList signals) { + this.signals = signals; + } + + @Override + public int getRowCount() { + return signals.size(); + } + + @Override + public int getColumnCount() { + return 2; + } + + @Override + public String getColumnName(int columnIndex) { + if (columnIndex == 0) return Lang.get("key_label"); + else return Lang.get("key_value"); + } + + @Override + public Class getColumnClass(int columnIndex) { + return String.class; + } + + @Override + public boolean isCellEditable(int rowIndex, int columnIndex) { + return false; + } + + @Override + public Object getValueAt(int rowIndex, int columnIndex) { + if (columnIndex == 0) return signals.get(rowIndex).getName(); + else return signals.get(rowIndex).getValue().getValueString(); + } + + @Override + public void setValueAt(Object aValue, int rowIndex, int columnIndex) { + } + + @Override + public void addTableModelListener(TableModelListener l) { + listeners.add(l); + } + + @Override + public void removeTableModelListener(TableModelListener l) { + listeners.remove(l); + } + + public void fireChanged() { + TableModelEvent e = new TableModelEvent(this, 0, signals.size() - 1); + for (TableModelListener l : listeners) + l.tableChanged(e); + } + } +} diff --git a/src/main/resources/lang/lang_de.properties b/src/main/resources/lang/lang_de.properties index f2aeeb1e8..6ddb8f9c5 100644 --- a/src/main/resources/lang/lang_de.properties +++ b/src/main/resources/lang/lang_de.properties @@ -31,6 +31,8 @@ key_width=Breite key_cycles=Timeout Zyklen key_termWidth=Zeichen pro Zeile key_termHeight=Zeilen +key_valueIsProbe=Als Messwert anzeigen + rot_0=0\u00B0 rot_90=90\u00B0 @@ -137,8 +139,11 @@ menu_exportSVG=Export SVG menu_exportSVGLaTex=Export SVG+LaTeX menu_delete=L\u00F6schen menu_delete_tt=L\u00F6scht ausgew\u00E4hlte Elemente +menu_probe=Zeige Messwerte +menu_probe_tt=Zeigt die Messwerte in einem eigenen Fenster menu_about=\u00DCber Digital win_saveChanges=\u00C4nderungen speichern? win_confirmExit=Beenden best\u00E4tigen! win_stateChanged=Die Datei wurde ver\u00E4ndert! +win_measures=Messwerte \ No newline at end of file diff --git a/src/main/resources/lang/lang_en.properties b/src/main/resources/lang/lang_en.properties index 4b19c757e..fb15e1aaa 100644 --- a/src/main/resources/lang/lang_en.properties +++ b/src/main/resources/lang/lang_en.properties @@ -31,6 +31,7 @@ key_width=Width key_cycles=Timeout cycles key_termWidth=Characters per line key_termHeight=Lines +key_valueIsProbe=Is measurment value rot_0=0\u00B0 rot_90=90\u00B0 @@ -138,7 +139,10 @@ menu_exportSVG=Export SVG menu_exportSVGLaTex=Export SVG+LaTeX menu_delete=Delete elements menu_delete_tt=Delete selected single element or group of elements +menu_probe=Show Probe Values +menu_probe_tt=Shows values of probes in separate window win_saveChanges=Save Changes? win_confirmExit=Confirm Exit! win_stateChanged=State Changed! +win_measures=Measurments \ No newline at end of file