Browse Source

added dropdown menu ui option for node generation and parsing

Jonathan Higgins 6 months ago
parent
commit
b50dca8649
3 changed files with 85 additions and 37 deletions
  1. 35 35
      scenes/main/process_help.json
  2. 35 0
      scenes/main/scripts/graph_edit.gd
  3. 15 2
      scenes/main/scripts/run_thread.gd

+ 35 - 35
scenes/main/process_help.json

@@ -2953,12 +2953,12 @@
 		"min": false,
 		"max": false,
 		"flag": "",
-		"minrange": 48000.0,
-		"maxrange": 96000.0,
-		"step": 48000.0,
-		"value": 48000.0,
+		"minrange": "",
+		"maxrange": "",
+		"step": "[44100, 48000, 88200, 96000]",
+		"value": 0.0,
 		"exponential": false,
-		"uitype": "hslider"
+		"uitype": "optionbutton"
 	  },
 	  "param10": {
 		"paramname": "Splice Length",
@@ -2997,12 +2997,12 @@
 		"min": false,
 		"max": false,
 		"flag": "",
-		"minrange": 48000.0,
-		"maxrange": 96000.0,
-		"step": 48000.0,
-		"value": 48000.0,
+		"minrange": "",
+		"maxrange": "",
+		"step": "[44100, 48000, 88200, 96000]",
+		"value": 0.0,
 		"exponential": false,
-		"uitype": "hslider"
+		"uitype": "optionbutton"
 	  },
 	  "param2": {
 		"paramname": "Mono/Stereo",
@@ -3089,12 +3089,12 @@
 		"min": false,
 		"max": false,
 		"flag": "",
-		"minrange": 48000.0,
-		"maxrange": 96000.0,
-		"step": 48000.0,
-		"value": 48000.0,
+		"minrange": "",
+		"maxrange": "",
+		"step": "[44100, 48000, 88200, 96000]",
+		"value": 0.0,
 		"exponential": false,
-		"uitype": "hslider"
+		"uitype": "optionbutton"
 	  },
 	  "param2": {
 		"paramname": "Output Duration",
@@ -3197,12 +3197,12 @@
 		"min": false,
 		"max": false,
 		"flag": "",
-		"minrange": 48000.0,
-		"maxrange": 96000.0,
-		"step": 48000.0,
-		"value": 48000.0,
+		"minrange": "",
+		"maxrange": "",
+		"step": "[44100, 48000, 88200, 96000]",
+		"value": 0.0,
 		"exponential": false,
-		"uitype": "hslider"
+		"uitype": "optionbutton"
 	  },
 	  "param2": {
 		"paramname": "Mono/Stereo",
@@ -3289,12 +3289,12 @@
 		"min": false,
 		"max": false,
 		"flag": "",
-		"minrange": 48000.0,
-		"maxrange": 96000.0,
-		"step": 48000.0,
-		"value": 48000.0,
+		"minrange": "",
+		"maxrange": "",
+		"step": "[44100, 48000, 88200, 96000]",
+		"value": 0.0,
 		"exponential": false,
-		"uitype": "hslider"
+		"uitype": "optionbutton"
 	  },
 	  "param2": {
 		"paramname": "Mono/Stereo",
@@ -3381,12 +3381,12 @@
 		"min": false,
 		"max": false,
 		"flag": "",
-		"minrange": 48000.0,
-		"maxrange": 96000.0,
-		"step": 48000.0,
-		"value": 48000.0,
+		"minrange": "",
+		"maxrange": "",
+		"step": "[44100, 48000, 88200, 96000]",
+		"value": 0.0,
 		"exponential": false,
-		"uitype": "hslider"
+		"uitype": "optionbutton"
 	  },
 	  "param2": {
 		"paramname": "Mono/Stereo",
@@ -3473,12 +3473,12 @@
 		"min": false,
 		"max": false,
 		"flag": "",
-		"minrange": 48000.0,
-		"maxrange": 96000.0,
-		"step": 48000.0,
-		"value": 48000.0,
+		"minrange": "",
+		"maxrange": "",
+		"step": "[44100, 48000, 88200, 96000]",
+		"value": 0.0,
 		"exponential": false,
-		"uitype": "hslider"
+		"uitype": "optionbutton"
 	  },
 	  "param2": {
 		"paramname": "Mono/Stereo",

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

@@ -202,6 +202,41 @@ func _make_node(command: String, skip_undo_redo := false) -> GraphNode:
 						checkbutton.set_meta("flag", flag)
 						
 						graphnode.add_child(checkbutton)
+					elif param_data.get("uitype", "") == "optionbutton":
+						#make optionbutton and label
+						var label = Label.new()
+						var optionbutton = OptionButton.new()
+						var margin = MarginContainer.new()
+						
+						#get button text
+						var optionbutton_label = param_data.get("paramname", "")
+						var optionbutton_tooltip  = param_data.get("paramdescription", "")
+						
+						#get optionbutton properties
+						var options = JSON.parse_string(param_data.get("step", ""))
+						var value = param_data.get("value", 1)
+						var flag = param_data.get("flag", "")
+						
+						label.text = optionbutton_label
+						optionbutton.tooltip_text = optionbutton_tooltip
+						
+						#fill option button
+						for option in options:
+							optionbutton.add_item(str(option))
+						
+						
+						#select the given id
+						optionbutton.select(int(value))
+						
+						#set flag meta
+						optionbutton.set_meta("flag", flag)
+						
+						#add margin size for ertical spacing
+						margin.add_theme_constant_override("margin_bottom", 4)
+						
+						graphnode.add_child(label)
+						graphnode.add_child(optionbutton)
+						graphnode.add_child(margin)
 			
 			
 			graphnode.set_script(node_logic)

+ 15 - 2
scenes/main/scripts/run_thread.gd

@@ -651,6 +651,10 @@ func _get_slider_values_ordered(node: Node) -> Array:
 		elif child is CheckButton:
 			var flag = child.get_meta("flag") if child.has_meta("flag") else ""
 			results.append(["checkbutton", flag, child.button_pressed])
+		elif child is OptionButton:
+			var flag = child.get_meta("flag") if child.has_meta("flag") else ""
+			var value = child.get_item_text(child.selected)
+			results.append(["optionbutton", flag, value])
 		#call this function recursively to find any nested sliders in scenes
 		if child.get_child_count() > 0:
 			var nested := _get_slider_values_ordered(child)
@@ -745,13 +749,16 @@ func make_process(node: Node, process_count: int, current_infile: String, slider
 				var brk_file_path = output_file.get_basename() + "_" + str(slider_count) + ".txt"
 				write_breakfile(calculated_brk, brk_file_path)
 				
+				#add breakfile to cleanup before adding flag
+				cleanup.append(brk_file_path)
+				
 				#append text file in place of value
-				#line += ("\"%s\" " % brk_file_path)
+				#include flag if this param has a flag
 				if flag.begins_with("-"):
 					brk_file_path = flag + brk_file_path
 				args.append(brk_file_path)
 				
-				cleanup.append(brk_file_path)
+				
 			else: #no break file append slider value
 				if time == true:
 					var infile_length = await run_command(control_script.cdpprogs_location + "/sfprops", ["-d", current_infile])
@@ -766,6 +773,12 @@ func make_process(node: Node, process_count: int, current_infile: String, slider
 			#if button is pressed add the flag to the arguments list
 			if value == true:
 				args.append(flag)
+				
+		elif entry[0] == "optionbutton":
+			var flag = entry[1]
+			var value = entry[2]
+			args.append(("%s%.2f " % [flag, value]) if flag.begins_with("-") else str(value))
+			
 		slider_count += 1
 	return [command, output_file, cleanup, args]
 	#return [line.strip_edges(), output_file, cleanup]