122 lines
2.1 KiB
GDScript
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()
|