keebie/scripts/globals/layout_config.gd
2025-07-29 19:40:36 +10:00

100 lines
2.1 KiB
GDScript

extends Node
const CONFIG_PATH := "user://layout.cfg"
const SECTION_INFO := "info"
const SECTION_KEYS := "keys"
const PARAM_TYPE := "type"
var layout_name: String
var layout_rows: Array[Array]
var is_configuring: bool = false
func _ready() -> void:
var err := load_config()
if err != OK:
print("config not loaded.....")
set_defaults()
is_configuring = true
# set_defaults()
func _unhandled_input(event: InputEvent) -> void:
if event.is_action_pressed("save_config"):
save_config()
print("config saved!")
func set_defaults() -> void:
layout_name = LayoutANSI.NAME
layout_rows = LayoutANSI.rows()
# layout_name = LayoutISO.NAME
# layout_rows = LayoutISO.rows()
func load_config() -> Error:
var config := ConfigFile.new()
var err := config.load(CONFIG_PATH)
if err == ERR_FILE_NOT_FOUND:
return FAILED
if err != OK:
printerr("failed to load layout config file: %s" % err)
return FAILED
if not config.has_section_key(SECTION_INFO, PARAM_TYPE):
return FAILED
layout_name = config.get_value(SECTION_INFO, PARAM_TYPE)
var rows: Array[Array] = []
if layout_name == LayoutANSI.NAME:
rows = LayoutANSI.rows()
elif layout_name == LayoutISO.NAME:
rows = LayoutISO.rows()
else:
return FAILED
for row: Array[KeyProps] in rows:
for key_props: KeyProps in row:
var param_key := str(key_props.physical_keycode)
if (
not key_props.is_char()
or not config.has_section_key(SECTION_KEYS, param_key)
):
continue
var dictionary := config.get_value(SECTION_KEYS, param_key) as Dictionary
key_props.from_dictionary(dictionary)
layout_rows = rows
print("config loaded!")
return OK
func save_config() -> Error:
var config := ConfigFile.new()
config.set_value(SECTION_INFO, PARAM_TYPE, layout_name)
for row: Array[KeyProps] in layout_rows:
for key_props: KeyProps in row:
if not key_props.is_char():
continue
config.set_value(
SECTION_KEYS, str(key_props.physical_keycode), key_props.to_dictionary()
)
var err := config.save(CONFIG_PATH)
if err != OK:
printerr("failed to save config file: %s" % err)
return err
return OK