2

I've been tasked with adding undo/redo/repeat functionality to an application. I'm currently investigating whether I can use Swing's UndoManager.

Apart from the usual undo and redo buttons, I need to provide the ability to undo or redo multiple edits at once (drop down UI like MS Office), and repeat a chosen edit.

I believe I can use UndoManager for multiple undo and redo. It provides methods for multiple undo and redo. To build the UI, I can extend UndoManager to expose the edits it holds.

I'm not sure I can use UndoManager for repeat chosen operation however. My first thoughts were to extend UndoManager and add a repeat(edit) method. This method would clone or copy an edit, redo the copy, and then place the copy on top of the undo stack. An edit would only be repeatable if it implemented Clonable.

Does this seem reasonable? Are there better solutions? Should I be rolling my own instead of UndoManager? Thanks in advance.

Stirls
  • 97
  • 2
  • 8

2 Answers2

5

Hope this helps http://java-sl.com/tip_merge_undo_edits.html

StanislavL
  • 56,971
  • 9
  • 68
  • 98
  • Hi, thanks for the link. This shows how to group edits but not how to repeat them. What I require for repeat is; a UI showing the edit history (the undo stack), the user is able to select any one of the edits displayed to repeat. This is different from redo. The repeated edit should be copied(?) and placed on top of the undo stack. Because the edits store state; e.g., an edit can only be redone if it has been undone, I can't simply call redo on the chosen edit. I really need a copy of the edit. – Stirls Sep 10 '12 at 23:47
  • 1
    I am afraid there is no "automatic repeat" feature. E.g. I remove all content from the document and want to "repeat". What should happen? Or I inserted 1 char in 0 position. When I repeat what should happen? Insert in 0 or in 1? There are so many questions without answers. – StanislavL Sep 11 '12 at 06:11
0

UndoManager supports an unlimited number of undo/redo operations. See the documentation

It seems reasonable to me to extends UndoManager in order to add the support for repeat, because the last edit is already there.

lbalazscs
  • 17,474
  • 7
  • 42
  • 50