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

Успадковує: Object

У редакторі відкрита історія подій.

Опис

EditorUndoRedoManager є менеджером об'єктів UndoRedo, пов'язаних з редагованими сценаріями. Кожна сцена має свою історію та EditorUndoRedoManager забезпечує, що кожна дія, виконана в редакторі, асоціюється з правильним сценарієм. Для дій, які не пов’язані з сценаріями (ProjectSettings редагування, зовнішні ресурси тощо), використовується окрема глобальна історія.

Використання в основному так само, як UndoRedo. Ви створюєте та впорядковуєте дії та менеджер автоматично вирішується, що він належить. Сцена складається на основі першої операції в дії, використовуючи об'єкт від операції. Правила є наступним чином:

до Якщо об'єкт є Node, скористайтеся редаговані сценою;

до Якщо об'єкт є вбудованим ресурсом, скористайтеся сценою від його шляху;

до Якщо об'єкт є зовнішнім ресурсом або будь-яким іншим, скористайтеся глобальною історією.

Цей здогадка іноді може призвести до помилкових результатів, тому ви можете забезпечити користувацький контекст об'єкта при створенні дії.

EditorUndoRedoManager призначений для використання плагінів редактора Godot. Ви можете отримати його за допомогою EditorPlugin.get_undo_redo(). Для нередактора використовується або плагіни, які не повинні інтегруватися з історією редактора, використовувати UndoRedo.

API менеджера в основному такий же, як і в UndoRedo, так що ви можете звернутися до документації для більш докладних прикладів. Основна відмінність полягає в тому, що EditorUndoRedoManager використовує об'єкт + назву методу для дій, замість Callable.

Методи

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


Сигнали

history_changed() 🔗

При зміні переліку дій в будь-якій історії, або коли дія виконана або історія очищається.


version_changed() 🔗

Увімкнено, коли версія будь-якої історії змінилася в результаті невидимого або червоного виклику.


Переліки

enum SpecialHistory: 🔗

SpecialHistory GLOBAL_HISTORY = 0

Глобальна історія не пов'язана з будь-якою сценою, але з зовнішніми ресурсами тощо.

SpecialHistory REMOTE_HISTORY = -9

Історія, пов'язана з дистанційним інспектором. Використовуються при редагуванні робочого проекту.

SpecialHistory INVALID_HISTORY = -99

Інвалід «нуль» історія. Це спеціальне значення, не пов'язане з будь-яким об'єктом.


Описи методів

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

Зареєструвати метод, який буде викликаний, коли дія виконана (тобто "до" дія).

Якщо це перша операція, об'єкт object буде використовуватися для створення цільової історії.


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

Зареєструвати зміни вартості майна для "до".

Якщо це перша операція, об'єкт object буде використовуватися для створення цільової історії.


void add_do_reference(object: Object) 🔗

Зареєструвати посилання на "до", яка буде вилучена, якщо історія "до" втрачена. Це корисно в основному для нових вузлів, створених для виклику «до». Не використовуйте для ресурсів.


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

Зареєструвати метод, який буде викликаний, коли дія неонова (тобто дія "undo").

Якщо це перша операція, об'єкт object буде використовуватися для створення цільової історії.


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

Зареєструвати зміни цін на майно для "undo".

Якщо це перша операція, об'єкт object буде використовуватися для створення цільової історії.


void add_undo_reference(object: Object) 🔗

Зареєструвати посилання на "undo", яка буде вилучена, якщо втрачена історія "undo". Це корисно в основному для вузлів, видалених за допомогою виклику «до» (не виклику «undo»).


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

Очищає задану історію скасування. Ви можете очистити історію для певної сцени, глобальної історії або для всіх історій одночасно (крім REMOTE_HISTORY), якщо id має значення INVALID_HISTORY.

Якщо increase_version має значення true, версія історії скасування буде збільшена, що позначить її як незбережену. Корисно для операцій, які змінюють сцену, але не підтримують скасування.

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))

Примітка: Якщо ви хочете позначити відредаговану сцену як незбережену, не очищуючи її історію, використовуйте замість цього EditorInterface.mark_scene_as_unsaved().


void commit_action(execute: bool = true) 🔗

Здійснює дію. Якщо execute має значення true (за замовчуванням), усі методи/властивості "do" викликаються/встановлюються під час виклику цієї функції.


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

Створіть нову дію. Після її виклику виконайте всі виклики методів add_do_method(), add_undo_method(), add_do_property() та add_undo_property(), а потім зафіксуйте дію за допомогою методу commit_action().

Спосіб об'єднання дій визначається аргументом merge_mode.

Якщо надано об'єкт custom_context, він буде використаний для виведення цільової історії (замість використання першої операції).

Порядок розташування операцій скасування в діях визначається параметром backward_undo_ops. Коли backward_undo_ops має значення false, опції скасування впорядковуються в тому ж порядку, в якому вони були додані. Це означає, що перша додана операція буде першою скасованою.

Якщо mark_unsaved має значення false, дія не позначить історію як незбережену. Це корисно, наприклад, для дій, які змінюють вибір або налаштування, яке буде збережено автоматично. В іншому випадку, це значення слід залишити на true, якщо дія вимагає збереження користувачем або якщо вона може призвести до втрати даних, якщо її не зберегти.


void force_fixed_history() 🔗

Сили наступну операцію (наприклад, add_do_method()) для використання історії дій, а не вгадуючи його з об'єкта. Це іноді потрібно, коли історія не може бути правильно визначена, як для непристойного ресурсу, який ще не має шляху.

Цей метод повинен бути використаний тільки при необхідності, інакше він може викликати недійсний стан історії. Для більшості складних випадків параметр custom_context create_action() є достатнім.


UndoRedo get_history_undo_redo(id: int) const 🔗

Повертає об'єкт UndoRedo, пов'язаний з даною історією id.

id над 0 наклеєні на відкриті вкладки сцени (але не відповідає їхньому порядку). id 0 або нижчий має особливий зміст (див. SpecialHistory).

Кращий використовується з get_object_history_id(). Цей метод доступний тільки у випадку, якщо вам потрібно більше розширених методів UndoRedo (але не забудьте, що безпосередньо працює на об'єкті UndoRedo може вплинути на стабільність редактора).


int get_object_history_id(object: Object) const 🔗

Повертає ідентифікатор історії, який вивів з вказаного object. Ви можете використовувати з get_history_undo_redo().


bool is_committing_action() const 🔗

Повертає true, якщо EditorUndoRedoManager в даний час бере на себе дію, тобто працює його "до" метод або зміни майна (див. commit_action()).