diff --git a/preview/preview_inspector.gd b/preview/preview_inspector.gd index b1f5ef4..5ea00f3 100644 --- a/preview/preview_inspector.gd +++ b/preview/preview_inspector.gd @@ -16,16 +16,33 @@ extends EditorInspectorPlugin # -- virtual methods -- func can_handle(object: Object) -> bool: - return object is Preview3D + return _get_preview(object) != null func parse_begin(object): - var button := Button.new() - button.text = "Update preview" - add_custom_control(button) - button.connect("pressed", self, "_on_update_pressed", [object as Preview3D]) + var preview = _get_preview(object) + + if preview: + var button := Button.new() + button.text = "Update preview" + add_custom_control(button) + button.connect("pressed", self, "_on_update_pressed", [preview]) # -- public methods -- # -- private methods -- -func _on_update_pressed(target: Preview3D): - target.update_preview_content() + +# Get the nearest parent preview +# Returns null if none is found +func _get_preview(node: Node): + if node is Preview2D or node is Preview3D: + return node + else: + while node: + node = node.get_parent() + if node is Preview2D or node is Preview3D: + return node + return null + +# Callback for the inspector update button +func _on_update_pressed(preview): + preview.update_preview_content()