Mercurial Hosting > luan
view src/luan/modules/swing/UndoManagerLuan.java @ 1884:55ad3e7cd01a
swing
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Tue, 08 Apr 2025 19:43:00 -0600 |
parents | 3c30ae764004 |
children | 1d60e0ac3b97 |
line wrap: on
line source
package luan.modules.swing; import java.util.WeakHashMap; import javax.swing.event.UndoableEditListener; import javax.swing.event.UndoableEditEvent; import javax.swing.undo.UndoManager; import javax.swing.undo.UndoableEdit; import javax.swing.undo.CannotUndoException; import javax.swing.undo.CannotRedoException; import goodjava.util.GoodUtils; import luan.Luan; import luan.LuanFunction; import luan.LuanException; import luan.LuanRuntimeException; import goodjava.logging.Logger; import goodjava.logging.LoggerFactory; public class UndoManagerLuan extends UndoManager { private static final Logger logger = LoggerFactory.getLogger(UndoManagerLuan.class); private final WeakHashMap<LuanFunction,Boolean> map = new WeakHashMap<LuanFunction,Boolean>(); private final Luan luan; private UndoableEdit unedited = null; public UndoManagerLuan(Luan luan) { this.luan = luan; } private void notifyListeners() { for( LuanFunction fn : map.keySet() ) { try { fn.call(luan); } catch(LuanException e) { throw new LuanRuntimeException(e); } } } @Override public void undoableEditHappened(UndoableEditEvent event) { super.undoableEditHappened(event); notifyListeners(); } @Override public void undo() throws CannotUndoException { super.undo(); notifyListeners(); } @Override public void redo() throws CannotRedoException { super.redo(); notifyListeners(); } public void addListener(LuanFunction fn) { map.put(fn,Boolean.TRUE); } public boolean isUnedited() { return GoodUtils.equal(unedited,editToBeUndone()); } public void setUnedited() { unedited = editToBeUndone(); notifyListeners(); } public void clearUnedited() { discardAllEdits(); unedited = null; notifyListeners(); } }