156 lines
4.4 KiB
GDScript
156 lines
4.4 KiB
GDScript
tool
|
|
extends HBoxContainer
|
|
|
|
export(StyleBoxFlat) var event_style : StyleBoxFlat
|
|
export(Texture) var event_icon : Texture
|
|
export(String) var event_name : String
|
|
export(PackedScene) var header_scene : PackedScene
|
|
export(PackedScene) var body_scene : PackedScene
|
|
|
|
signal option_action(action_name)
|
|
|
|
onready var panel = $PanelContainer
|
|
onready var title_container = $PanelContainer/MarginContainer/VBoxContainer/Header/TitleHBoxContainer
|
|
onready var title_label = $PanelContainer/MarginContainer/VBoxContainer/Header/TitleHBoxContainer/TitleMarginContainer/TitleLabel
|
|
onready var icon_texture = $PanelContainer/MarginContainer/VBoxContainer/Header/IconMarginContainer/IconTexture
|
|
onready var expand_control = $PanelContainer/MarginContainer/VBoxContainer/Header/ExpandControl
|
|
onready var options_control = $PanelContainer/MarginContainer/VBoxContainer/Header/OptionsControl
|
|
onready var header_content_container = $PanelContainer/MarginContainer/VBoxContainer/Header/Content
|
|
onready var body_container = $PanelContainer/MarginContainer/VBoxContainer/Body
|
|
onready var body_content_container = $PanelContainer/MarginContainer/VBoxContainer/Body/Content
|
|
onready var indent_node = $Indent
|
|
|
|
var editor_reference
|
|
|
|
var header_node
|
|
var body_node
|
|
var indent_size = 25
|
|
|
|
# Setting this to true will ignore the event while saving
|
|
# Useful for making placeholder events in drag and drop
|
|
var ignore_save = false
|
|
|
|
# This is the data that is going to be saved to json
|
|
var event_data := {}
|
|
|
|
## *****************************************************************************
|
|
## PUBLIC METHODS
|
|
## *****************************************************************************
|
|
|
|
# Called when timeline editor loads
|
|
func load_data(data):
|
|
event_data = data
|
|
|
|
|
|
func set_event_style(style: StyleBoxFlat):
|
|
panel.set('custom_styles/panel', style)
|
|
|
|
|
|
func get_event_style():
|
|
return panel.get('custom_styles/panel')
|
|
|
|
|
|
func set_event_icon(icon: Texture):
|
|
icon_texture.texture = icon
|
|
|
|
|
|
func set_event_name(text: String):
|
|
title_label.text = text
|
|
if text.empty():
|
|
title_container.hide()
|
|
else:
|
|
title_container.show()
|
|
|
|
|
|
func set_header(scene: PackedScene):
|
|
header_node = _set_content(header_content_container, scene)
|
|
|
|
|
|
func set_body(scene: PackedScene):
|
|
body_node = _set_content(body_content_container, scene)
|
|
expand_control.set_enabled(body_node != null)
|
|
|
|
|
|
func get_body():
|
|
return body_node
|
|
|
|
|
|
func get_header():
|
|
return header_node
|
|
|
|
|
|
func set_preview(text: String):
|
|
expand_control.set_preview(text)
|
|
|
|
|
|
func set_indent(indent: int):
|
|
indent_node.rect_min_size = Vector2(indent_size * indent, 0)
|
|
indent_node.visible = indent != 0
|
|
|
|
|
|
# Override in inherited class
|
|
func on_timeline_selected(selected: bool):
|
|
pass
|
|
|
|
|
|
func set_expanded(expanded: bool):
|
|
expand_control.set_expanded(expanded)
|
|
|
|
|
|
## *****************************************************************************
|
|
## PRIVATE METHODS
|
|
## *****************************************************************************
|
|
|
|
|
|
func _setup_event():
|
|
if event_style != null:
|
|
set_event_style(event_style)
|
|
if event_icon != null:
|
|
set_event_icon(event_icon)
|
|
if event_name != null:
|
|
set_event_name(event_name)
|
|
if header_scene != null:
|
|
set_header(header_scene)
|
|
if body_scene != null:
|
|
set_body(body_scene)
|
|
|
|
|
|
func _set_content(container: Control, scene: PackedScene):
|
|
for c in container.get_children():
|
|
container.remove_child(c)
|
|
if scene != null:
|
|
var node = scene.instance()
|
|
container.add_child(node)
|
|
# node.set_owner(get_tree().get_edited_scene_root())
|
|
return node
|
|
return null
|
|
|
|
|
|
func _on_ExpandControl_state_changed(expanded: bool):
|
|
if expanded:
|
|
body_container.show()
|
|
else:
|
|
body_container.hide()
|
|
|
|
|
|
func _on_OptionsControl_action(action_name: String):
|
|
# Simply transmit the signal to the timeline editor
|
|
emit_signal("option_action", action_name)
|
|
|
|
|
|
func _on_gui_input(event):
|
|
if event is InputEventMouseButton and event.is_pressed() and event.doubleclick and event.button_index == 1 and expand_control.enabled:
|
|
expand_control.set_expanded(not expand_control.expanded)
|
|
|
|
|
|
## *****************************************************************************
|
|
## OVERRIDES
|
|
## *****************************************************************************
|
|
|
|
|
|
func _ready():
|
|
_setup_event()
|
|
panel.connect("gui_input", self, '_on_gui_input')
|
|
expand_control.connect("state_changed", self, "_on_ExpandControl_state_changed")
|
|
options_control.connect("action", self, "_on_OptionsControl_action")
|
|
expand_control.set_enabled(body_scene != null)
|