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; } /**