Struct egui::util::undoer::Undoer

source ·
pub struct Undoer<State> {
    settings: Settings,
    undos: VecDeque<State>,
    redos: Vec<State>,
    flux: Option<Flux<State>>,
}
Expand description

Automatic undo system.

Every frame you feed it the most recent state. The Undoer compares it with the latest undo point and if there is a change it may create a new undo point.

Undoer follows two simple rules:

  1. If the state has changed since the latest undo point, but has remained stable for stable_time seconds, an new undo point is created.
  2. If the state does not stabilize within auto_save_interval seconds, an undo point is created.

Rule 1) will make sure an undo point is not created until you stop dragging that slider. Rule 2) will make sure that you will get some undo points even if you are constantly changing the state.

Fields§

§settings: Settings§undos: VecDeque<State>

New undoes are added to the back. Two adjacent undo points are never equal. The latest undo point may (often) be the current state.

§redos: Vec<State>

Stores redos immediately after a sequence of undos. Gets cleared every time the state changes. Does not need to be a deque, because there can only be up to undos.len() redos, which is already limited to settings.max_undos.

§flux: Option<Flux<State>>

Implementations§

source§

impl<State> Undoer<State>
where State: Clone + PartialEq,

source

pub fn with_settings(settings: Settings) -> Self

Create a new Undoer with the given Settings.

source

pub fn has_undo(&self, current_state: &State) -> bool

Do we have an undo point different from the given state?

source

pub fn has_redo(&self, current_state: &State) -> bool

source

pub fn is_in_flux(&self) -> bool

Return true if the state is currently changing

source

pub fn undo(&mut self, current_state: &State) -> Option<&State>

source

pub fn redo(&mut self, current_state: &State) -> Option<&State>

source

pub fn add_undo(&mut self, current_state: &State)

Add an undo point if, and only if, there has been a change since the latest undo point.

source

pub fn feed_state(&mut self, current_time: f64, current_state: &State)

Call this as often as you want (e.g. every frame) and Undoer will determine if a new undo point should be created.

  • current_time: current time in seconds.

Trait Implementations§

source§

impl<State: Clone> Clone for Undoer<State>

source§

fn clone(&self) -> Undoer<State>

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl<State> Debug for Undoer<State>

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<State> Default for Undoer<State>
where State: Clone + PartialEq,

source§

fn default() -> Self

Returns the “default value” for a type. Read more

Auto Trait Implementations§

§

impl<State> Freeze for Undoer<State>
where State: Freeze,

§

impl<State> RefUnwindSafe for Undoer<State>
where State: RefUnwindSafe,

§

impl<State> Send for Undoer<State>
where State: Send,

§

impl<State> Sync for Undoer<State>
where State: Sync,

§

impl<State> Unpin for Undoer<State>
where State: Unpin,

§

impl<State> UnwindSafe for Undoer<State>
where State: UnwindSafe,

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> CloneToUninit for T
where T: Clone,

source§

unsafe fn clone_to_uninit(&self, dst: *mut T)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dst. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T, U> Into<U> for T
where U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T> ToOwned for T
where T: Clone,

source§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

source§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<T> SerializableAny for T
where T: 'static + Any + Clone + for<'a> Send + Sync,