mirror of
https://github.com/Relintai/GraphicsEditor.git
synced 2025-02-19 15:54:23 +01:00
197 lines
6.6 KiB
GDScript
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
|