So I was trying to come up with a good way to implement undo/redo, since these are very important functions in an editor of any sort, and I settled on this:
I created an Action object with two properties: object[] EList and object[] UList. I also created a double stack that would allow me to keep track of which actions can be undone and redone.
The Action object also has two methods: Execute and Undo. Execute executes the action, using Elist to access other objects and take arguments, also saving backup data to UList. Undo undoes the action, using UList to restore old data. The Action class is meant to be extended by each individual action such as selection, shape creation, etc. So, for any functionality that modifies data in the editor, the editor will create an action, set it's parameters, and put it on the stack.
Thoughts?