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 |
|
get_history_undo_redo(id: int) const |
|
get_object_history_id(object: Object) const |
|
is_committing_action() const |
Сигналы
history_changed() 🔗
Генерируется при изменении списка действий в любой истории, либо при совершении действия, либо при очистке истории.
version_changed() 🔗
Генерируется, когда версия истории изменилась в результате отмены или повтора вызова.
Перечисления
enum SpecialHistory: 🔗
SpecialHistory GLOBAL_HISTORY = 0
Глобальная история не связана с какой-либо сценой, а связана с внешними ресурсами и т. д.
SpecialHistory REMOTE_HISTORY = -9
История, связанная с удаленным инспектором. Используется при редактировании в реальном времени запущенного проекта.
SpecialHistory INVALID_HISTORY = -99
Недопустимая "null" история. Это особое значение, не связанное ни с одним объектом.
Описания метода
void add_do_method(object: Object, method: StringName, ...) vararg 🔗
Зарегистрируйте метод, который будет вызван при фиксации действия (т. е. действие «do»).
Если это первая операция, object будет использоваться для вывода истории отмены цели.
void add_do_property(object: Object, property: StringName, value: Variant) 🔗
Зарегистрируйте изменение значения свойства для "do".
Если это первая операция, object будет использоваться для вывода истории отмены цели.
void add_do_reference(object: Object) 🔗
Зарегистрируйте ссылку для "do", которая будет стерта, если история "do" будет утеряна. Это полезно в основном для новых узлов, созданных для вызова "do". Не используйте для ресурсов.
void add_undo_method(object: Object, method: StringName, ...) vararg 🔗
Зарегистрируйте метод, который будет вызван при отмене действия (т. е. действие «отменить»).
Если это первая операция, object будет использоваться для вывода целевой истории отмен.
void add_undo_property(object: Object, property: StringName, value: Variant) 🔗
Зарегистрируйте изменение значения свойства для «отмены».
Если это первая операция, object будет использоваться для вывода целевой истории отмен.
void add_undo_reference(object: Object) 🔗
Зарегистрируйте ссылку для "отмены", которая будет стерта, если история "отмены" будет утеряна. Это полезно в основном для узлов, удаленных с помощью вызова "do" (а не вызова "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 в данный момент фиксирует действие, т. е. запускает свой метод «do» или изменение свойства (см. commit_action()).