ajhahn.de
← Theria
GDScript 125 lines
var PanelControls = load("res://addons/gut/gui/panel_controls.gd")

# All titles so we can free them when we want.
var _all_titles = []


var base_container = null
# All the various PanelControls indexed by thier keys.
var controls = {}


func _init(cont):
	base_container = cont


func add_title(text):
	var row = PanelControls.BaseGutPanelControl.new(text, text)
	base_container.add_child(row)
	row.connect('draw', _on_title_cell_draw.bind(row))
	_all_titles.append(row)
	return row


func add_ctrl(key, ctrl):
	controls[key] = ctrl
	base_container.add_child(ctrl)


func add_number(key, value, disp_text, v_min, v_max, hint=''):
	var ctrl = PanelControls.NumberControl.new(disp_text, value, v_min, v_max, hint)
	add_ctrl(key, ctrl)
	return ctrl


func add_float(key, value, disp_text, step, v_min, v_max, hint=''):
	var ctrl = PanelControls.FloatControl.new(disp_text, value, step, v_min, v_max, hint)
	add_ctrl(key, ctrl)
	return ctrl


func add_select(key, value, values, disp_text, hint=''):
	var ctrl = PanelControls.SelectControl.new(disp_text, value, values, hint)
	add_ctrl(key, ctrl)
	return ctrl


func add_value(key, value, disp_text, hint=''):
	var ctrl = PanelControls.StringControl.new(disp_text, value, hint)
	add_ctrl(key, ctrl)
	return ctrl

func add_multiline_text(key, value, disp_text, hint=''):
	var ctrl = PanelControls.MultiLineStringControl.new(disp_text, value, hint)
	add_ctrl(key, ctrl)
	return ctrl

func add_boolean(key, value, disp_text, hint=''):
	var ctrl = PanelControls.BooleanControl.new(disp_text, value, hint)
	add_ctrl(key, ctrl)
	return ctrl


func add_directory(key, value, disp_text, hint=''):
	var ctrl = PanelControls.DirectoryControl.new(disp_text, value, hint)
	add_ctrl(key, ctrl)
	ctrl.dialog.title = disp_text
	return ctrl


func add_file(key, value, disp_text, hint=''):
	var ctrl = PanelControls.DirectoryControl.new(disp_text, value, hint)
	add_ctrl(key, ctrl)
	ctrl.dialog.file_mode = ctrl.dialog.FILE_MODE_OPEN_FILE
	ctrl.dialog.title = disp_text
	return ctrl


func add_save_file_anywhere(key, value, disp_text, hint=''):
	var ctrl = PanelControls.DirectoryControl.new(disp_text, value, hint)
	add_ctrl(key, ctrl)
	ctrl.dialog.file_mode = ctrl.dialog.FILE_MODE_SAVE_FILE
	ctrl.dialog.access = ctrl.dialog.ACCESS_FILESYSTEM
	ctrl.dialog.title = disp_text
	return ctrl


func add_color(key, value, disp_text, hint=''):
	var ctrl = PanelControls.ColorControl.new(disp_text, value, hint)
	add_ctrl(key, ctrl)
	return ctrl


var _blurbs = 0
func add_blurb(text):
	var ctrl = RichTextLabel.new()
	ctrl.fit_content = true
	ctrl.bbcode_enabled = true
	ctrl.autowrap_mode = TextServer.AUTOWRAP_WORD_SMART
	ctrl.text = text
	add_ctrl(str("blurb_", _blurbs), ctrl)
	return ctrl


# ------------------
# Events
# ------------------
func _on_title_cell_draw(which):
	which.draw_rect(Rect2(Vector2(0, 0), which.size), Color(0, 0, 0, .15))


# ------------------
# Public
# ------------------

func clear():
	for key in controls:
		controls[key].free()

	controls.clear()

	for entry in _all_titles:
		entry.free()

	_all_titles.clear()