Got a simple application with undo/redo up and running today. Basically each of the buttons registers a ButtonPressAction every time they are pressed, and if you do a undo you register a ButtonPressRemoveAction. And the code to actuallt undo/redo is index based, it manipulates the listbox.items at the current index.
The CircularStack class is made in a couple of seconds so I won't take any responsibility on that it is perfect :)
Try it if you want. Clicky