Attention: Here be dragons

This is the latest (unstable) version of this documentation, which may document features not available in or compatible with released stable versions of Godot.

EditorUndoRedoManager

Eredita: Object

Gestisce la cronologia degli annullamenti delle scene aperte nell'editor.

Descrizione

EditorUndoRedoManager è un gestore per gli oggetti UndoRedo associati alle scene modificate. Ogni scena ha la sua cronologia di annullamento e EditorUndoRedoManager assicura che ogni azione effettuata nell'editor sia associata a una scena appropriata. Per le azioni che non riguardano le scene (modifiche in ProjectSettings, risorse esterne, ecc.), viene utilizzata una cronologia globale separata.

L'utilizzo è per lo più lo stesso di UndoRedo. Crea e commetti le azioni e il gestore decide automaticamente a quali scene appartengono. La scena viene dedotta in base alla prima operazione in un'azione, tramite l'oggetto dall'operazione. Le regole sono le seguenti:

  • Se l'oggetto è un Node, utilizza la scena attualmente in fase di modifica;

  • Se l'oggetto è una risorsa integrata, utilizza la scena dal suo percorso;

  • Se l'oggetto è una risorsa esterna o qualsiasi altra cosa, utilizza la cronologia globale.

Questa assunzione può talvolta produrre risultati sbagliati, perciò è possibile fornire un oggetto di contesto personalizzato quando si crea un'azione.

EditorUndoRedoManager è pensato all'uso dalle estensioni dell'editor Godot. È possibile ottenerlo attraverso EditorPlugin.get_undo_redo(). Per usi oltre all'editor o estensioni che non hanno bisogno di integrarsi con la cronologia di annullamento dell'editor, usa invece UndoRedo.

L'API del gestore è per lo più la stessa di UndoRedo, quindi è possibile fare riferimento alla sua documentazione per altri esempi. La differenza principale è che EditorUndoRedoManager utilizza un oggetto più il nome del metodo per le azioni, invece di un Callable.

Metodi

void

add_do_method(object: Object, method: StringName, ...) vararg

void

add_do_property(object: Object, property: StringName, value: Variant)

void

add_do_reference(object: Object)

void

add_undo_method(object: Object, method: StringName, ...) vararg

void

add_undo_property(object: Object, property: StringName, value: Variant)

void

add_undo_reference(object: Object)

void

clear_history(id: int = -99, increase_version: bool = true)

void

commit_action(execute: bool = true)

void

create_action(name: String, merge_mode: MergeMode = 0, custom_context: Object = null, backward_undo_ops: bool = false, mark_unsaved: bool = true)

void

force_fixed_history()

UndoRedo

get_history_undo_redo(id: int) const

int

get_object_history_id(object: Object) const

bool

is_committing_action() const


Segnali

history_changed() 🔗

Emesso quando la lista delle azioni in una cronologia è cambiata, sia quando un'azione è stata confermata, sia quando una cronologia è stata pulita.


version_changed() 🔗

Emesso quando la versione di una qualsiasi cronologia è cambiata a seguito di una chiamata di annullamento o ripetizione.


Enumerazioni

enum SpecialHistory: 🔗

SpecialHistory GLOBAL_HISTORY = 0

Cronologia globale non associata ad alcuna scena, ma a risorse esterne ecc.

SpecialHistory REMOTE_HISTORY = -9

Cronologia associata all'ispettore remoto. Utilizzata quando si modifica in tempo reale un progetto in esecuzione.

SpecialHistory INVALID_HISTORY = -99

Cronologia "null" non valida. È un valore speciale, non associato ad alcun oggetto.


Descrizioni dei metodi

void add_do_method(object: Object, method: StringName, ...) vararg 🔗

Registra un metodo che verrà chiamato quando l'azione viene commessa (ovvero l'azione per "fare").

Se questa è la prima operazione, l'oggetto object verrà utilizzato per dedurre la cronologia di destinazione degli annullamenti.


void add_do_property(object: Object, property: StringName, value: Variant) 🔗

Registra una modifica del valore di una proprietà per "fare".

Se questa è la prima operazione, l'oggetto object verrà utilizzato per dedurre la cronologia di destinazione degli annullamenti.


void add_do_reference(object: Object) 🔗

Registra un riferimento per "fare" che verrà cancellato se la cronologia per "fare" viene persa. Questo è utile soprattutto per i nuovi nodi creati nella chiamata per "fare". Non lo utilizzare per le risorse.


void add_undo_method(object: Object, method: StringName, ...) vararg 🔗

Registra un metodo che verrà chiamato quando l'azione viene annullata (ovvero l'azione per "annullare").

Se questa è la prima operazione, l'oggetto object verrà utilizzato per dedurre la cronologia di destinazione degli annullamenti.


void add_undo_property(object: Object, property: StringName, value: Variant) 🔗

Registra una modifica del valore di una proprietà per "annullare".

Se questa è la prima operazione, l'oggetto object verrà utilizzato per dedurre la cronologia di destinazione degli annullamenti.


void add_undo_reference(object: Object) 🔗

Registra un riferimento per "annullare" che verrà cancellato se la cronologia per "annullare" viene persa. Questo è utile soprattutto per i nodi rimossi con la chiamata per "fare" (non la chiamata per "annullare"!).


void clear_history(id: int = -99, increase_version: bool = true) 🔗

Clears the given undo history. You can clear history for a specific scene, global history, or for all histories at once (except REMOTE_HISTORY) if id is INVALID_HISTORY.

If increase_version is true, the undo history version will be increased, marking it as unsaved. Useful for operations that modify the scene, but don't support undo.

var scene_root = EditorInterface.get_edited_scene_root()
var undo_redo = EditorInterface.get_editor_undo_redo()
undo_redo.clear_history(undo_redo.get_object_history_id(scene_root))

Note: If you want to mark an edited scene as unsaved without clearing its history, use EditorInterface.mark_scene_as_unsaved() instead.


void commit_action(execute: bool = true) 🔗

Commette l'azione. Se execute è true (predefinito), tutti i metodi e proprietà da "fare" vengono chiamati e impostati quando viene chiamata questa funzione.


void create_action(name: String, merge_mode: MergeMode = 0, custom_context: Object = null, backward_undo_ops: bool = false, mark_unsaved: bool = true) 🔗

Crea una nuova azione. Dopo che questo metodo è stata chiamato, esegui tutte le chiamate a add_do_method(), add_undo_method(), add_do_property() e add_undo_property(), quindi commetti l'azione con commit_action().

Il modo in cui le azioni vengono unite è dettato dall'argomento merge_mode. Consulta MergeMode per i dettagli.

Se l'oggetto custom_context viene fornito, verrà usato per dedurre la cronologia di destinazione (invece di usare la prima operazione).

Il modo in cui le operazioni di annullamento sono ordinate nelle azioni è dettato da backward_undo_ops. Quando backward_undo_ops è false le opzioni di annullamento saranno ordinate nello stesso ordine in cui sono state aggiunte. Ciò significa che la prima operazione che è stata aggiunta sarà la prima a essere annullata.

Se mark_unsaved è false, l'azione non segnerà la cronologia come non salvata. Questo è utile, ad esempio, per le azioni che modificano una selezione o un'impostazione che sarà salvata automaticamente. Altrimenti, lascia su true se l'azione richiede il salvataggio dall'utente o se può causare la perdita di dati se non viene salvata.


void force_fixed_history() 🔗

Forza l'operazione successiva (ad esempio add_do_method()) a usare la cronologia dell'azione anziché assumerla dall'oggetto. Ciò è a volte necessario quando una cronologia non può essere determinata correttamente, come per una risorsa innestata che non ha ancora un percorso.

Questo metodo dovrebbe essere usato solo quando assolutamente necessario, altrimenti potrebbe causare uno stato di cronologia non valido. Per la maggior parte dei casi complessi, il parametro custom_context di create_action() è sufficiente.


UndoRedo get_history_undo_redo(id: int) const 🔗

Restituisce l'oggetto UndoRedo associato alla cronologia specificata dall'id.

Gli id superiori a 0 sono mappati alle schede di scene aperte (ma non corrispondono al loro ordine). Gli id inferiori o uguali a 0 hanno un significato speciale (vedi SpecialHistory).

Meglio utilizzato con get_object_history_id(). Questo metodo è fornito solo nel caso in cui siano necessari metodi più avanzati di UndoRedo (ma tieni presente che operare direttamente sull'oggetto UndoRedo potrebbe rendere l'editor meno stabile).


int get_object_history_id(object: Object) const 🔗

Restituisce l'ID della cronologia dedotto dall'object fornito. Può essere utilizzato con get_history_undo_redo().


bool is_committing_action() const 🔗

Restituisce true se EditorUndoRedoManager sta attualmente compiendo l'azione, ovvero sta eseguendo il suo metodo "do" o la modifica della proprietà (vedi commit_action()).