every action (selection, editing, ...) becomes a separate class that extends base class "Action" and implements interface "Reversible" if redo/undo-able. These should be all in package "action".
interface Reversible automatically update the action into a deque "history" & has abstract methods undo & redo for its implementer to define.
instead of calling methods, now action should be performed by construct a new action class with target input from constructor parameters.
History is a deque with a final MAX so that it can start taking away actions from one end when reach MAX, the other end is used for undo