You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
109 lines
3.1 KiB
109 lines
3.1 KiB
tool |
|
extends EditorProperty |
|
|
|
# The main controls for editing the property. |
|
var timelines_dropdown = MenuButton.new() |
|
var container = HBoxContainer.new() |
|
var edit_button = Button.new() |
|
|
|
# reference to the inspector plugin |
|
var editor_inspector_plugin = null |
|
|
|
# An internal value of the property. |
|
var current_value = '' |
|
# A guard against internal changes when the property is updated. |
|
var updating = false |
|
|
|
# @Override |
|
func get_tooltip_text(): |
|
return "Click to select a Dialogic timeline.\nPress the tool button to directly switch to the editor" |
|
|
|
|
|
func _ready(): |
|
edit_button.icon = get_icon("Tools", "EditorIcons") |
|
|
|
|
|
func _init(): |
|
# setup controls |
|
timelines_dropdown.rect_min_size.x = 80 |
|
timelines_dropdown.set_h_size_flags(SIZE_EXPAND_FILL) |
|
timelines_dropdown.clip_text = true |
|
container.add_child(timelines_dropdown) |
|
container.add_child(edit_button) |
|
edit_button.flat = true |
|
edit_button.hint_tooltip = "Edit Timeline" |
|
edit_button.disabled = true |
|
|
|
# Add the container as a direct child |
|
add_child(container) |
|
|
|
# Make sure the control is able to retain the focus. |
|
add_focusable(timelines_dropdown) |
|
|
|
# Setup the initial state and connect to the signal to track changes. |
|
timelines_dropdown.connect("about_to_show", self, "_about_to_show_menu") |
|
timelines_dropdown.get_popup().connect("index_pressed", self, '_on_timeline_selected') |
|
edit_button.connect("pressed", self, "_on_editTimelineButton_pressed") |
|
|
|
|
|
func _about_to_show_menu(): |
|
# Ignore the signal if the property is currently being updated. |
|
if (updating): |
|
return |
|
|
|
# Adding timelines |
|
timelines_dropdown.get_popup().clear() |
|
var index = 0 |
|
for c in DialogicUtil.get_sorted_timeline_list(): |
|
timelines_dropdown.get_popup().add_item(c['name']) |
|
timelines_dropdown.get_popup().set_item_metadata(index, {'file': c['file'], 'color': c['color']}) |
|
index += 1 |
|
|
|
|
|
func _on_timeline_selected(index): |
|
var text = timelines_dropdown.get_popup().get_item_text(index) |
|
var metadata = timelines_dropdown.get_popup().get_item_metadata(index) |
|
current_value = metadata['file'] |
|
timelines_dropdown.text = text |
|
timelines_dropdown.hint_tooltip = text |
|
_update_edit_button(current_value) |
|
emit_changed(get_edited_property(), current_value) |
|
|
|
|
|
func _on_editTimelineButton_pressed(): |
|
if (current_value != '' and editor_inspector_plugin != null): |
|
editor_inspector_plugin.switch_to_dialogic_timeline(current_value) |
|
|
|
|
|
func update_property(): |
|
# Read the current value from the property. |
|
var new_value = get_edited_object()[get_edited_property()] |
|
_update_edit_button(new_value) |
|
|
|
if (new_value == current_value): |
|
return |
|
|
|
# Update the control with the new value. |
|
updating = true |
|
current_value = new_value |
|
# Checking for the display name |
|
timelines_dropdown.text = '' |
|
|
|
if (current_value == ''): |
|
timelines_dropdown.hint_tooltip = 'Click to select a timeline' |
|
|
|
for c in DialogicUtil.get_timeline_list(): |
|
if c['file'] == current_value: |
|
timelines_dropdown.text = c['name'] |
|
timelines_dropdown.hint_tooltip = c['name'] |
|
|
|
updating = false |
|
|
|
_update_edit_button(current_value) |
|
|
|
|
|
func _update_edit_button(value): |
|
if (value == ''): |
|
edit_button.disabled = true |
|
else: |
|
edit_button.disabled = false
|
|
|