pub trait UndoAction: Send + Any {
// Required methods
fn info(&mut self) -> Arc<dyn UndoInfo>;
fn undo(self: Box<Self>) -> Box<dyn RedoAction>;
fn as_any(&mut self) -> &mut (dyn Any + 'static);
fn merge(
self: Box<Self>,
args: UndoActionMergeArgs,
) -> Result<Box<dyn UndoAction>, (Box<dyn UndoAction>, Box<dyn UndoAction>)>;
}
Expand description
Represents a single undo action.
Required Methods§
sourcefn info(&mut self) -> Arc<dyn UndoInfo>
fn info(&mut self) -> Arc<dyn UndoInfo>
Gets display info about the action that registered this undo.
sourcefn undo(self: Box<Self>) -> Box<dyn RedoAction>
fn undo(self: Box<Self>) -> Box<dyn RedoAction>
Undo action and returns a RedoAction
that redoes it.
sourcefn merge(
self: Box<Self>,
args: UndoActionMergeArgs,
) -> Result<Box<dyn UndoAction>, (Box<dyn UndoAction>, Box<dyn UndoAction>)>
fn merge( self: Box<Self>, args: UndoActionMergeArgs, ) -> Result<Box<dyn UndoAction>, (Box<dyn UndoAction>, Box<dyn UndoAction>)>
Try merge the next
action with the previous self
.
This is called when self
is the latest registered action and next
is registered.
This can be used to optimize high-volume actions, but note that UNDO.undo
will undo all actions
within the UNDO.undo_interval
of the previous, even if not merged, and merged actions always show as one action
for UNDO.undo_select
.