Просмотр исходного кода

Added autoplay output option and set that and the other toggles on outputfile to be user preferences (remebers last used state)

Jonathan Higgins 6 месяцев назад
Родитель
Сommit
5f5e103d06

+ 3 - 0
Global/config_handler.gd

@@ -17,6 +17,9 @@ func _ready():
 	ensure_setting("interface_settings", "console_on_top", true)
 	ensure_setting("interface_settings", "theme", 0)
 	ensure_setting("interface_settings", "theme_custom_colour", "#865699")
+	ensure_setting("interface_settings", "delete_intermediate", true)
+	ensure_setting("interface_settings", "reuse_output_folder", true)
+	ensure_setting("interface_settings", "autoplay", true)
 	ensure_setting("audio_settings", "device", "Default")
 
 	# Only save if we added anything new

+ 8 - 1
scenes/Nodes/audioplayer.gd

@@ -11,6 +11,7 @@ var mouse_pos_x
 #Used for waveform preview
 var voice_preview_generator : Node = null
 var stream : AudioStreamWAV = null
+var autoplay
 
 func _ready():
 	#Setup file dialogue to access system files and only accept wav files
@@ -22,10 +23,14 @@ func _ready():
 	audio_player.connect("finished", Callable(self, "_on_audio_finished"))
 	
 	if get_meta("loadenable") == false:
-		$PlayButton.position.x = $LoadButton.position.x
+		#$PlayButton.size.x = 192
+		#$PlayButton.position.x = 208
 		$PlayButton.size.x = $Panel.size.x
+		$PlayButton.position.x = $LoadButton.position.x
 		$LoadButton.hide()
 		$RecycleButton.hide()
+	#else:
+		#$Autoplay.hide()
 	
 	$WavError.hide()
 	
@@ -81,6 +86,8 @@ func play_outfile(path: String):
 		return
 	voice_preview_generator.generate_preview(audio_player.stream)
 	reset_playback()
+	if autoplay == true:
+		_on_play_button_button_down()
 
 	
 func recycle_outfile():

+ 17 - 5
scenes/Nodes/nodes.tscn

@@ -1,6 +1,7 @@
-[gd_scene load_steps=5 format=3 uid="uid://duy5epq25pj8u"]
+[gd_scene load_steps=6 format=3 uid="uid://duy5epq25pj8u"]
 
 [ext_resource type="PackedScene" uid="uid://csapiqka522fh" path="res://scenes/Nodes/audioplayer.tscn" id="2_b6nw4"]
+[ext_resource type="Script" uid="uid://cqwwhjwatkghf" path="res://scenes/Nodes/outputfile.gd" id="3_0jqh0"]
 [ext_resource type="Script" uid="uid://cdbx1dt3ohqte" path="res://scenes/Nodes/node_logic.gd" id="3_uv17x"]
 [ext_resource type="Script" uid="uid://cy8x5wubj2kr6" path="res://scenes/Nodes/notes_to_hz.gd" id="4_0jqh0"]
 [ext_resource type="FontFile" uid="uid://bfnlymfdfb0e7" path="res://theme/BravuraText_SoundThread.otf" id="5_0jqh0"]
@@ -54,8 +55,8 @@ metadata/inputfunction = "audioplayer"
 layout_mode = 0
 offset_left = 523.0
 offset_top = 6.0
-offset_right = 951.0
-offset_bottom = 483.0
+offset_right = 954.0
+offset_bottom = 495.0
 tooltip_text = "Handles everything to do with audio output. "
 title = "Output File"
 slot/0/left_enabled = true
@@ -175,7 +176,7 @@ slot/12/right_type = 0
 slot/12/right_color = Color(1, 1, 1, 1)
 slot/12/right_icon = null
 slot/12/draw_stylebox = true
-script = ExtResource("3_uv17x")
+script = ExtResource("3_0jqh0")
 metadata/command = "outputfile"
 metadata/utility = true
 
@@ -233,10 +234,18 @@ metadata/outputfunction = "openfolder"
 layout_mode = 2
 theme_override_constants/margin_bottom = 5
 
-[node name="Label" type="Label" parent="outputfile"]
+[node name="HBoxContainer" type="HBoxContainer" parent="outputfile"]
+layout_mode = 2
+
+[node name="Label" type="Label" parent="outputfile/HBoxContainer"]
 layout_mode = 2
+size_flags_horizontal = 3
 text = "Rendered Output File:"
 
+[node name="Autoplay" type="CheckButton" parent="outputfile/HBoxContainer" groups=["outputnode"]]
+layout_mode = 2
+text = "Autoplay"
+
 [node name="MarginContainer4" type="MarginContainer" parent="outputfile"]
 layout_mode = 2
 theme_override_constants/margin_bottom = 2
@@ -357,5 +366,8 @@ editable = false
 wrap_mode = 1
 
 [connection signal="text_submitted" from="outputfile/FileNameField" to="outputfile" method="_on_file_name_field_text_submitted"]
+[connection signal="toggled" from="outputfile/DeleteIntermediateFilesToggle" to="outputfile" method="_on_delete_intermediate_files_toggle_toggled"]
+[connection signal="toggled" from="outputfile/ReuseFolderToggle" to="outputfile" method="_on_reuse_folder_toggle_toggled"]
+[connection signal="toggled" from="outputfile/HBoxContainer/Autoplay" to="outputfile" method="_on_autoplay_toggled"]
 [connection signal="item_selected" from="note_to_hz/Note" to="note_to_hz" method="_on_item_list_item_selected"]
 [connection signal="item_selected" from="note_to_hz/Accidental" to="note_to_hz" method="_on_item_list_2_item_selected"]

+ 34 - 0
scenes/Nodes/outputfile.gd

@@ -0,0 +1,34 @@
+extends GraphNode
+signal open_help
+
+# Called when the node enters the scene tree for the first time.
+func _ready() -> void:
+	#add button to title bar
+	var titlebar = self.get_titlebar_hbox()
+	var btn = Button.new()
+	btn.text = "?"
+	btn.tooltip_text = "Open help for " + self.title
+	btn.connect("pressed", Callable(self, "_open_help")) #pass key (process name) when button is pressed
+	titlebar.add_child(btn)
+	
+func init():
+	var interface_settings = ConfigHandler.load_interface_settings()
+	$DeleteIntermediateFilesToggle.button_pressed = interface_settings.get("delete_intermediate", true)
+	$ReuseFolderToggle.button_pressed = interface_settings.get("reuse_output_folder", true)
+	$HBoxContainer/Autoplay.button_pressed = interface_settings.get("autoplay", true)
+
+
+func _open_help():
+	open_help.emit(self.get_meta("command"), self.title)
+
+func _on_autoplay_toggled(toggled_on: bool) -> void:
+	ConfigHandler.save_interface_settings("autoplay", toggled_on)
+	$AudioPlayer.autoplay = toggled_on
+
+
+func _on_delete_intermediate_files_toggle_toggled(toggled_on: bool) -> void:
+	ConfigHandler.save_interface_settings("delete_intermediate", toggled_on)
+
+
+func _on_reuse_folder_toggle_toggled(toggled_on: bool) -> void:
+	ConfigHandler.save_interface_settings("reuse_output_folder", toggled_on)

+ 1 - 0
scenes/Nodes/outputfile.gd.uid

@@ -0,0 +1 @@
+uid://cqwwhjwatkghf

+ 7 - 4
scenes/main/scripts/control.gd

@@ -18,6 +18,7 @@ var foldertoggle #links to the reuse folder button
 var lastoutputfolder = "none" #tracks last output folder, this can in future be used to replace global.outfile but i cba right now
 var uiscale = 1.0 #tracks scaling for retina screens
 
+
 #scripts
 var open_help
 var run_thread
@@ -117,6 +118,7 @@ func new_patch():
 	effect = Nodes.get_node(NodePath("outputfile")).duplicate()
 	effect.name = "outputfile"
 	get_node("GraphEdit").add_child(effect, true)
+	effect.init() #initialise ui from user prefs
 	effect.connect("open_help", Callable(open_help, "show_help_for_node"))
 	effect.position_offset = Vector2((DisplayServer.screen_get_size().x - 480) / uiscale, 80)
 	graph_edit._register_node_movement() #link nodes for tracking position changes for changes tracking
@@ -131,11 +133,11 @@ func link_output():
 	for control in get_tree().get_nodes_in_group("outputnode"): #check all items in outputnode group
 		if control.get_meta("outputfunction") == "deleteintermediate": #link delete intermediate files toggle to script
 			control.toggled.connect(_toggle_delete)
-			control.button_pressed = true
+			_toggle_delete(control.button_pressed)
+			#control.button_pressed = interface_settings.get("delete_intermediate", true)
+
 		elif control.get_meta("outputfunction") == "runprocess": #link runprocess button
 			control.button_down.connect(_run_process)
-		#elif control.get_meta("outputfunction") == "recycle": #link recycle button
-			#control.button_down.connect(_recycle_outfile)
 		elif control.get_meta("outputfunction") == "audioplayer": #link output audio player
 			output_audio_player = control
 		elif control.get_meta("outputfunction") == "filename":
@@ -143,10 +145,11 @@ func link_output():
 			outfilename = control
 		elif control.get_meta("outputfunction") == "reusefolder":
 			foldertoggle = control
-			foldertoggle.button_pressed = true
+			#foldertoggle.button_pressed = interface_settings.get("reuse_output_folder", true)
 		elif control.get_meta("outputfunction") == "openfolder":
 			control.button_down.connect(_open_output_folder)
 
+
 	#for control in get_tree().get_nodes_in_group("inputnode"):
 		#if control.get_meta("inputfunction") == "audioplayer": #link input for recycle function
 			#print("input player found")

+ 3 - 0
scenes/main/scripts/graph_edit.gd

@@ -11,6 +11,7 @@ var node_data = {} #stores json with all nodes in it
 var valueslider = preload("res://scenes/Nodes/valueslider.tscn") #slider scene for use in nodes
 var node_logic = preload("res://scenes/Nodes/node_logic.gd") #load the script logic
 
+
 # Called when the node enters the scene tree for the first time.
 func _ready() -> void:
 	snapping_enabled = false
@@ -41,6 +42,8 @@ func _make_node(command: String, skip_undo_redo := false) -> GraphNode:
 			var effect: GraphNode = Nodes.get_node(NodePath(command)).duplicate()
 			effect.name = command
 			add_child(effect, true)
+			if command == "outputfile":
+				effect.init() #initialise ui from user prefs
 			effect.connect("open_help", open_help)
 			effect.set_position_offset((control_script.effect_position + graph_edit.scroll_offset) / graph_edit.zoom) #set node to current mouse position in graph edit
 			_register_inputs_in_node(effect) #link sliders for changes tracking