diff --git a/src/main/java/de/neemann/digital/analyse/TruthTableTableModel.java b/src/main/java/de/neemann/digital/analyse/TruthTableTableModel.java
index c76925f13..a4fcee4cd 100644
--- a/src/main/java/de/neemann/digital/analyse/TruthTableTableModel.java
+++ b/src/main/java/de/neemann/digital/analyse/TruthTableTableModel.java
@@ -79,14 +79,17 @@ public class TruthTableTableModel implements TableModel {
else
setValue(rowIndex, columnIndex, 2);
}
- fireModelEvent(rowIndex);
}
private void setValue(int rowIndex, int columnIndex, int val) {
- try {
- undoManager.apply(truthTable -> truthTable.setValue(rowIndex, columnIndex, val));
- } catch (ModifyException e) {
- e.printStackTrace();
+ int actVal = undoManager.getActual().getValue(rowIndex, columnIndex);
+ if (actVal != val) {
+ try {
+ undoManager.apply(truthTable -> truthTable.setValue(rowIndex, columnIndex, val));
+ } catch (ModifyException e) {
+ e.printStackTrace();
+ }
+ fireModelEvent(rowIndex);
}
}
diff --git a/src/main/java/de/neemann/digital/gui/components/table/TableDialog.java b/src/main/java/de/neemann/digital/gui/components/table/TableDialog.java
index 334fb5b96..e9490ab1d 100644
--- a/src/main/java/de/neemann/digital/gui/components/table/TableDialog.java
+++ b/src/main/java/de/neemann/digital/gui/components/table/TableDialog.java
@@ -327,14 +327,17 @@ public class TableDialog extends JDialog {
}
}
}.setAcceleratorCTRLplus("Y");
+
edit.add(undo.createJMenuItem());
edit.add(redo.createJMenuItem());
undoManager.addListener(() -> {
undo.setEnabled(undoManager.undoAvailable());
redo.setEnabled(undoManager.redoAvailable());
- });
- undo.setEnabled(undoManager.undoAvailable());
- redo.setEnabled(undoManager.redoAvailable());
+ if (undoManager.isModified())
+ setTitle("*" + Lang.get("win_table"));
+ else
+ setTitle(Lang.get("win_table"));
+ }).hasChanged();
}
/**
diff --git a/src/main/java/de/neemann/digital/undo/UndoManager.java b/src/main/java/de/neemann/digital/undo/UndoManager.java
index a3c2d3ecc..30d15516c 100644
--- a/src/main/java/de/neemann/digital/undo/UndoManager.java
+++ b/src/main/java/de/neemann/digital/undo/UndoManager.java
@@ -45,6 +45,7 @@ public class UndoManager> {
modifications = new ArrayList<>();
modificationCounter = 0;
savedCounter = 0;
+ fireChangedEvent();
}
@@ -187,9 +188,11 @@ public class UndoManager> {
* Adds a listener
*
* @param listener the listener to add
+ * @return the given listener for chained calls.
*/
- public void addListener(ChangedListener listener) {
+ public ChangedListener addListener(ChangedListener listener) {
listeners.add(listener);
+ return listener;
}
/**