Files
fps_project_1/addons/dreadpon.spatial_gardener/utility/undo_redo_interface.gd

87 lines
5.5 KiB
GDScript

#-------------------------------------------------------------------------------
# An interface for common functionality between
# Editor-specific and runtime UndoRedo systems
#-------------------------------------------------------------------------------
extends Object
static func clear_history(undo_redo):
if DPON_FM.is_instance_of_ed(undo_redo, "EditorUndoRedoManager"):
push_error("Unable to clear history on EditorUndoRedoManager!")
else:
undo_redo.clear_history()
static func create_action(undo_redo, name: String, merge_mode := 0, backward_undo_ops := false, custom_context: Object = null):
if DPON_FM.is_instance_of_ed(undo_redo, "EditorUndoRedoManager"):
undo_redo.create_action(name, merge_mode, custom_context, backward_undo_ops)
else:
undo_redo.create_action(name, merge_mode, backward_undo_ops)
static func add_do_method(undo_redo, callable: Callable):
if DPON_FM.is_instance_of_ed(undo_redo, "EditorUndoRedoManager"):
var bound_args = callable.get_bound_arguments()
match bound_args.size():
0: undo_redo.add_do_method(callable.get_object(), callable.get_method())
1: undo_redo.add_do_method(callable.get_object(), callable.get_method(), bound_args[0])
2: undo_redo.add_do_method(callable.get_object(), callable.get_method(), bound_args[0], bound_args[1])
3: undo_redo.add_do_method(callable.get_object(), callable.get_method(), bound_args[0], bound_args[1], bound_args[2])
4: undo_redo.add_do_method(callable.get_object(), callable.get_method(), bound_args[0], bound_args[1], bound_args[2], bound_args[3])
5: undo_redo.add_do_method(callable.get_object(), callable.get_method(), bound_args[0], bound_args[1], bound_args[2], bound_args[3], bound_args[4])
6: undo_redo.add_do_method(callable.get_object(), callable.get_method(), bound_args[0], bound_args[1], bound_args[2], bound_args[3], bound_args[4], bound_args[5])
7: undo_redo.add_do_method(callable.get_object(), callable.get_method(), bound_args[0], bound_args[1], bound_args[2], bound_args[3], bound_args[4], bound_args[5], bound_args[6])
8: undo_redo.add_do_method(callable.get_object(), callable.get_method(), bound_args[0], bound_args[1], bound_args[2], bound_args[3], bound_args[4], bound_args[5], bound_args[6], bound_args[7])
9: undo_redo.add_do_method(callable.get_object(), callable.get_method(), bound_args[0], bound_args[1], bound_args[2], bound_args[3], bound_args[4], bound_args[5], bound_args[6], bound_args[7], bound_args[8])
10: undo_redo.add_do_method(callable.get_object(), callable.get_method(), bound_args[0], bound_args[1], bound_args[2], bound_args[3], bound_args[4], bound_args[5], bound_args[6], bound_args[7], bound_args[8], bound_args[9])
_: push_error("Too many arguments!")
else:
undo_redo.add_do_method(callable)
static func add_undo_method(undo_redo, callable: Callable):
if DPON_FM.is_instance_of_ed(undo_redo, "EditorUndoRedoManager"):
var bound_args = callable.get_bound_arguments()
match bound_args.size():
0: undo_redo.add_undo_method(callable.get_object(), callable.get_method())
1: undo_redo.add_undo_method(callable.get_object(), callable.get_method(), bound_args[0])
2: undo_redo.add_undo_method(callable.get_object(), callable.get_method(), bound_args[0], bound_args[1])
3: undo_redo.add_undo_method(callable.get_object(), callable.get_method(), bound_args[0], bound_args[1], bound_args[2])
4: undo_redo.add_undo_method(callable.get_object(), callable.get_method(), bound_args[0], bound_args[1], bound_args[2], bound_args[3])
5: undo_redo.add_undo_method(callable.get_object(), callable.get_method(), bound_args[0], bound_args[1], bound_args[2], bound_args[3], bound_args[4])
6: undo_redo.add_undo_method(callable.get_object(), callable.get_method(), bound_args[0], bound_args[1], bound_args[2], bound_args[3], bound_args[4], bound_args[5])
7: undo_redo.add_undo_method(callable.get_object(), callable.get_method(), bound_args[0], bound_args[1], bound_args[2], bound_args[3], bound_args[4], bound_args[5], bound_args[6])
8: undo_redo.add_undo_method(callable.get_object(), callable.get_method(), bound_args[0], bound_args[1], bound_args[2], bound_args[3], bound_args[4], bound_args[5], bound_args[6], bound_args[7])
9: undo_redo.add_undo_method(callable.get_object(), callable.get_method(), bound_args[0], bound_args[1], bound_args[2], bound_args[3], bound_args[4], bound_args[5], bound_args[6], bound_args[7], bound_args[8])
10: undo_redo.add_undo_method(callable.get_object(), callable.get_method(), bound_args[0], bound_args[1], bound_args[2], bound_args[3], bound_args[4], bound_args[5], bound_args[6], bound_args[7], bound_args[8], bound_args[9])
_: push_error("Too many arguments!")
else:
undo_redo.add_undo_method(callable)
static func commit_action(undo_redo, execute := true):
undo_redo.commit_action(execute)
static func undo(undo_redo, custom_context: Object = null):
if DPON_FM.is_instance_of_ed(undo_redo, "EditorUndoRedoManager"):
undo_redo = undo_redo.get_history_undo_redo(undo_redo.get_object_history_id(custom_context))
return undo_redo.undo()
static func redo(undo_redo, custom_context: Object = null):
if DPON_FM.is_instance_of_ed(undo_redo, "EditorUndoRedoManager"):
undo_redo = undo_redo.get_history_undo_redo(undo_redo.get_object_history_id(custom_context))
return undo_redo.redo()
static func get_current_action_name(undo_redo, custom_context: Object = null):
if DPON_FM.is_instance_of_ed(undo_redo, "EditorUndoRedoManager"):
undo_redo = undo_redo.get_history_undo_redo(undo_redo.get_object_history_id(custom_context))
return undo_redo.get_current_action_name()