GraphicsEditor/addons/graphics_editor/Dialogs/Settings.gd
2019-11-26 23:33:20 -06:00

197 lines
6.6 KiB
GDScript

tool
extends Control
#TODO: Make the settings auto generate!
onready var editor = get_parent().get_parent()
onready var canvas_outline = editor.get_node("PaintCanvasContainer/ViewportContainer/Viewport/PaintCanvas/CanvasOutline")
onready var visual_grid_1 = editor.get_node("PaintCanvasContainer/ViewportContainer/Viewport/PaintCanvas/Grids/VisualGrid")
onready var visual_grid_2 = editor.get_node("PaintCanvasContainer/ViewportContainer/Viewport/PaintCanvas/Grids/VisualGrid2")
onready var scroll_container = get_node("ScrollContainer")
#{
# "CATEGORY": {
# "SETTINGNAME": {
# "node": "PATHTONODE",
# "valueMod": "VALUETOMODIFY",
# "setterType": "SETTERTYPE"
# }
# }
#}
#ValueSetterType List:
#ColorPicker
#CheckButton
#SpinBox
var setting_storage = {
"Canvas Outline": {
"Enabled": {
"node": canvas_outline,
"valueMod": "visible",
"setterType": "CheckBox"
},
"Color": {
"node": canvas_outline,
"valueMod": "color",
"setterType": "ColorPicker"
},
"Width": {
"node": canvas_outline,
"valueMod": "width",
"setterType": "SpinBox"
}
},
"Grids": {
"Grid1_Color": {
"node": visual_grid_1,
"valueMod": "color",
"setterType": "ColorPicker"
},
"Grid1_Size": {
"node": visual_grid_1,
"valueMod": "grid_size",
"setterType": "SpinBox"
},
"Grid2_Color": {
"node": visual_grid_2,
"valueMod": "color",
"setterType": "ColorPicker"
},
"Grid2_Size": {
"node": visual_grid_2,
"valueMod": "grid_size",
"setterType": "SpinBox"
},
}
}
#TODO: Instead of this current system, we can make a function type of system instead like this
#generate_category(name)
#generate_property(category_name, node, valueMod) # setterType is automatically detected from the property it gets from the node
func _ready():
generate_category_container("Canvas Outline")
generate_property_container("Canvas Outline", canvas_outline, "Enabled", "visible")
generate_property_container("Canvas Outline", canvas_outline, "Color", "color")
generate_property_container("Canvas Outline", canvas_outline, "Width", "width")
generate_category_container("Grids")
generate_property_container("Grids", visual_grid_1, "Grid1 Enabled", "visible")
generate_property_container("Grids", visual_grid_1, "Grid1 Color", "color")
generate_property_container("Grids", visual_grid_1, "Grid1 Size", "size")
generate_property_container("Grids", visual_grid_2, "Grid2 Enabled", "visible")
generate_property_container("Grids", visual_grid_2, "Grid2 Color", "color")
generate_property_container("Grids", visual_grid_2, "Grid2 Size", "size")
func generate_settings():
for i in setting_storage:
generate_category_container(i)
for j in setting_storage[i]:
var valuemod = setting_storage[i][j]["valueMod"]
var settertype = setting_storage[i][j]["setterType"]
generate_property_container(i, j, valuemod, settertype)
func generate_category_container(category):
var vboxContainer = VBoxContainer.new()
vboxContainer.name = category
var label = Label.new()
label.text = category + ":"
label.valign = Label.ALIGN_CENTER
vboxContainer.add_child(label)
var vboxPropertiesContainer = VBoxContainer.new()
vboxPropertiesContainer.name = "VBoxContainer"
vboxContainer.add_child(vboxPropertiesContainer)
get_node("ScrollContainer/VBoxContainer").add_child(vboxContainer)
func generate_property_container(category, node, propertyname, valuemod):
var hbox = HBoxContainer.new()
hbox.rect_min_size = Vector2(scroll_container.rect_size.x, 20)
hbox.name = propertyname
hbox.add_constant_override("separation", 0)
var label = Label.new()
label.rect_min_size = Vector2(scroll_container.rect_size.x / 2, 20)
label.text = propertyname.capitalize()
label.align = Label.ALIGN_CENTER
label.valign = Label.ALIGN_CENTER
var settertypenode
var get_value = node.get(valuemod)
match typeof(get_value):
TYPE_INT:
settertypenode = SpinBox.new()
settertypenode.max_value = 9999
settertypenode.value = get_value
settertypenode.connect("value_changed", self, "on_setting_changed", [node, valuemod, settertypenode, "value"])
pass
TYPE_REAL:
settertypenode = SpinBox.new()
settertypenode.max_value = 9999
settertypenode.value = get_value
settertypenode.connect("value_changed", self, "on_setting_changed", [node, valuemod, settertypenode, "value"])
pass
TYPE_COLOR:
settertypenode = ColorPickerButton.new()
settertypenode.color = get_value
settertypenode.connect("color_changed", self, "on_setting_changed", [node, valuemod, settertypenode, "color"])
pass
TYPE_VECTOR2:
pass
TYPE_BOOL:
settertypenode = CheckBox.new()
settertypenode.text = "On"
settertypenode.pressed = get_value
var styleboxflat = StyleBoxFlat.new()
styleboxflat.bg_color = Color(0.254902, 0.254902, 0.254902)
settertypenode.add_stylebox_override("normal", styleboxflat)
settertypenode.add_stylebox_override("hover", styleboxflat)
settertypenode.add_stylebox_override("pressed", styleboxflat)
settertypenode.connect("pressed", self, "on_setting_changed", [null, node, valuemod, settertypenode, "pressed"])
pass
# match settertype:
# "ColorPicker":
# settertypenode = ColorPickerButton.new()
# "CheckBox":
# settertypenode = CheckBox.new()
# settertypenode.text = "On"
# var styleboxflat = StyleBoxFlat.new()
# styleboxflat.bg_color = Color(0.254902, 0.254902, 0.254902)
# settertypenode.add_stylebox_override("normal", styleboxflat)
# settertypenode.add_stylebox_override("hover", styleboxflat)
# settertypenode.add_stylebox_override("pressed", styleboxflat)
# "SpinBox":
# settertypenode = SpinBox.new()
if settertypenode == null:
push_error("Setter type not found! Returning! DEBUG_INFO: %s | %s | %s" % [node, node.name, typeof(get_value)])
return
settertypenode.rect_min_size = Vector2(scroll_container.rect_size.x / 2, 20)
hbox.add_child(label)
hbox.add_child(settertypenode)
get_node("ScrollContainer/VBoxContainer/%s/VBoxContainer" % [category]).add_child(hbox)
func _on_Ok_pressed():
hide()
func on_setting_changed(default_signal, node, value_to_get, setter, value_setter_get):
var setter_new_value = setter.get(value_setter_get)
node.set(value_to_get, setter_new_value)
func _on_CanvasOutline_Enabled_value_changed(button_pressed):
canvas_outline.visible = button_pressed
func _on_CanvasOutline_Color_value_changed(color):
canvas_outline.color = color
func _on_CanvasOutline_SpinBox_value_changed(value):
canvas_outline.width = value
func _on_Grids_Grid1Color_value_changed(color):
visual_grid_1.color = color
func _on_Grids_Grid1Size_value_changed(value):
visual_grid_1.size = value
func _on_Grids_Grid2Color_value_changed(color):
visual_grid_2.color = color
func _on_Grids_Grid2Size_value_changed(value):
visual_grid_2.size = value