DarkSlein 2707d80723 Redone design
Fixed keyboar on web
2025-03-12 16:41:01 +03:00

122 lines
2.1 KiB
GDScript

@tool
extends HBoxContainer
enum Type {
Line,
Text,
Calendar,
Time
}
@export var title : String:
set(value):
title = value
set_title(title)
@export var type := Type.Line:
set(value):
type = value
set_type(type)
@export var editable : bool = true:
set(value):
editable = value
set_editable(value)
@onready var _label = $Container/FieldLabelControl/FieldLabel
@onready var _line = $Container/Value/Line
@onready var _calendar = $Container/Value/Calendar
@onready var _time = $Container/Value/Time
@onready var _text = $Container/Value/Text
var _type
func _process(delta):
_process_fonts()
func _process_fonts():
_process_font_size(_label, 35)
_process_font_size(_line, 35)
_process_font_size(_text, 35)
func _process_font_size(obj, k):
var font_size = obj.get_theme_default_font_size()
var new_font_size = get_viewport_rect().size.y/k
if font_size != new_font_size:
obj.add_theme_font_size_override("font_size", new_font_size)
func _ready():
set_title(title)
set_type(type)
func set_title(new_title):
if _label == null:
await ready
_label.text = new_title
func get_value():
match _type:
Type.Line:
return _line.text
Type.Text:
return _text.text
Type.Calendar:
return ""
Type.Time:
return {
"hours": _time.get_hours(),
"minutes": _time.get_minutes()
}
func set_value(value):
match _type:
Type.Line:
_line.text = value
Type.Text:
_text.text = value
Type.Calendar:
pass
Type.Time:
_time.set_time(value.hours, value.minutes)
func set_editable(value):
if _line == null:
await ready
_line.editable = value
_text.editable = value
_time.editable = value
func set_type(type):
if _line == null:
await ready
_line.visible = false
_text.visible = false
_calendar.visible = false
_time.visible = false
_type = type
match type:
Type.Line:
_line.visible = true
Type.Text:
_text.visible = true
Type.Calendar:
_calendar.visible = true
Type.Time:
_time.visible = true
func clean():
match _type:
Type.Line:
_line.text = ""
Type.Text:
_text.text = ""
Type.Calendar:
pass
Type.Time:
_time.clean()