Half-baked state. Most of the UI is mostly done, but the integration with Grist (or any other data provider) is still missing.
52 lines
1017 B
GDScript
52 lines
1017 B
GDScript
class_name KeyboardLayout
|
|
|
|
extends Node
|
|
|
|
var data:Dictionary = {}
|
|
|
|
|
|
func generate_character_data(char:String) -> Dictionary:
|
|
if char == "":
|
|
return {}
|
|
char = char.to_upper()
|
|
|
|
data = {
|
|
"type": "char",
|
|
"output": char,
|
|
"display": char.to_lower(),
|
|
}
|
|
# if uppercase != lowercase
|
|
if char != char.to_lower():
|
|
data["display-uppercase"] = char
|
|
return data
|
|
|
|
|
|
func generate_characters_data(chars:String) -> Array:
|
|
var keys = []
|
|
for char in chars.split(""):
|
|
var data = generate_character_data(char)
|
|
if data != {}:
|
|
keys.append(data)
|
|
return keys
|
|
|
|
|
|
func set_special(keys):
|
|
for key in keys:
|
|
if !("type" in key):
|
|
key["type"] = "special"
|
|
|
|
|
|
func make_row(left_special_keys: Array, chars: String, right_special_keys: Array):
|
|
set_special(left_special_keys)
|
|
set_special(right_special_keys)
|
|
|
|
var keys = left_special_keys
|
|
var data = generate_characters_data(chars)
|
|
if data != []:
|
|
keys.append_array(data)
|
|
if right_special_keys != []:
|
|
keys.append_array(right_special_keys)
|
|
return {
|
|
"keys": keys
|
|
}
|