Browse Source

added for slider value changes and randomised sliders

Jonathan Higgins 2 months ago
parent
commit
45d4f8f799

+ 9 - 2
scenes/Nodes/node_logic.gd

@@ -1,6 +1,7 @@
 extends GraphNode
 
 @export var min_gap: float = 0.5  # editable value in inspector for the minimum gap between min and max
+var undo_redo: UndoRedo
 signal open_help
 signal inlet_removed
 signal node_moved
@@ -128,6 +129,7 @@ func _on_position_offset_changed():
 	
 	
 func _randomise_sliders():
+	undo_redo.create_action("Randomise Sliders")
 	var sliders := _get_all_hsliders(self) #finds all sliders
 	#links sliders to this script
 	for slider in sliders:
@@ -142,5 +144,10 @@ func _randomise_sliders():
 		else:
 			rnd_value = (rnd * (maximum - minimum)) + minimum
 		
-		slider.value = rnd_value
-	
+		
+		undo_redo.add_do_method(set_slider_value.bind(slider, rnd_value))
+		undo_redo.add_undo_method(set_slider_value.bind(slider, slider.value))
+		
+	undo_redo.commit_action()
+func set_slider_value(slider: HSlider, value: float) -> void:
+	slider.value = value

+ 15 - 0
scenes/Nodes/valueslider.gd

@@ -2,6 +2,9 @@ extends VBoxContainer
 
 @onready var window := $BreakFileMaker
 @onready var editor := window.get_node("AutomationEditor")
+@onready var slider = $HSplitContainer/HSlider
+var undo_redo: UndoRedo
+var previous_value
 signal meta_changed
 
 
@@ -114,3 +117,15 @@ func _on_break_file_maker_close_requested() -> void:
 
 func _on_meta_changed():
 	emit_signal("meta_changed")
+
+
+func _on_h_slider_drag_ended(value_changed: bool) -> void:
+	if slider.value != previous_value:
+		undo_redo.create_action("Change Slider Value")
+		undo_redo.add_do_method(set_slider_value.bind(slider.value))
+		undo_redo.add_undo_method(set_slider_value.bind(previous_value))
+		undo_redo.commit_action()
+		
+func set_slider_value(value: float) -> void:
+	slider.value = value
+	previous_value = value

+ 1 - 0
scenes/Nodes/valueslider.tscn

@@ -88,6 +88,7 @@ offset_right = 304.0
 offset_bottom = 295.0
 text = "Cancel"
 
+[connection signal="drag_ended" from="HSplitContainer/HSlider" to="." method="_on_h_slider_drag_ended"]
 [connection signal="gui_input" from="HSplitContainer/HSlider" to="." method="_on_h_slider_gui_input"]
 [connection signal="value_changed" from="HSplitContainer/HSlider" to="." method="_on_h_slider_value_changed"]
 [connection signal="index_pressed" from="HSplitContainer/HSlider/PopupMenu" to="." method="_on_popup_menu_index_pressed"]

+ 5 - 1
scenes/main/scripts/graph_edit.gd

@@ -131,6 +131,9 @@ func _make_node(command: String, skip_undo_redo := false) -> GraphNode:
 						#instance the slider scene
 						var slider = valueslider.instantiate()
 						
+						slider.undo_redo = control_script.undo_redo
+						
+						
 						#get slider text
 						var slider_label = param_data.get("paramname", "")
 						var slider_tooltip  = param_data.get("paramdescription", "")
@@ -176,6 +179,7 @@ func _make_node(command: String, skip_undo_redo := false) -> GraphNode:
 						hslider.max_value = maxrange
 						hslider.step = step
 						hslider.value = value
+						slider.previous_value = value #used for undo redo
 						hslider.exp_edit = exponential
 						
 						#add output duration meta to main if true
@@ -320,7 +324,7 @@ func _make_node(command: String, skip_undo_redo := false) -> GraphNode:
 			control_script.undo_redo.add_do_reference(graphnode)
 			control_script.undo_redo.add_undo_method(delete_node.bind(graphnode))
 			control_script.undo_redo.commit_action()
-			#graphnode.undo_redo = control_script.undo_redo
+			graphnode.undo_redo = control_script.undo_redo
 			graphnode.connect("open_help", open_help)
 			graphnode.connect("inlet_removed", Callable(self, "on_inlet_removed"))
 			graphnode.node_moved.connect(_auto_link_nodes)