250 lines
7.8 KiB
GDScript
250 lines
7.8 KiB
GDScript
tool
|
|
extends Tree
|
|
|
|
onready var editor_reference = get_node('../..')
|
|
onready var timeline_editor = get_node('../TimelineEditor')
|
|
onready var character_editor = get_node('../CharacterEditor')
|
|
onready var definition_editor = get_node('../DefinitionEditor')
|
|
onready var settings_editor = get_node('../SettingsEditor')
|
|
onready var theme_editor = get_node('../ThemeEditor')
|
|
onready var empty_editor = get_node('../Empty')
|
|
|
|
onready var tree = self
|
|
var timeline_icon = load("res://addons/dialogic/Images/timeline.svg")
|
|
var character_icon = load("res://addons/dialogic/Images/character.svg")
|
|
var timelines_tree
|
|
var characters_tree
|
|
var definitions_tree
|
|
var themes_tree
|
|
var settings_tree
|
|
|
|
func _ready():
|
|
allow_rmb_select = true
|
|
var root = tree.create_item()
|
|
tree.set_hide_root(true)
|
|
|
|
# Creating the parents
|
|
timelines_tree = tree.create_item(root)
|
|
timelines_tree.set_selectable(0, false)
|
|
timelines_tree.set_text(0, "Timelines")
|
|
#timelines_tree.set_icon(0, get_icon("Folder", "EditorIcons"))
|
|
|
|
characters_tree = tree.create_item(root)
|
|
characters_tree.set_selectable(0, false)
|
|
characters_tree.set_text(0, "Characters")
|
|
#characters_tree.set_icon(0, get_icon("Folder", "EditorIcons"))
|
|
|
|
definitions_tree = tree.create_item(root)
|
|
definitions_tree.set_selectable(0, false)
|
|
definitions_tree.set_text(0, "Definitions")
|
|
#definitions_tree.set_icon(0, get_icon("Folder", "EditorIcons"))
|
|
|
|
themes_tree = tree.create_item(root)
|
|
themes_tree.set_selectable(0, false)
|
|
themes_tree.set_text(0, "Themes")
|
|
#themes_tree.set_icon(0, get_icon("Folder", "EditorIcons"))
|
|
|
|
settings_tree = tree.create_item(root)
|
|
settings_tree.set_selectable(0, true)
|
|
settings_tree.set_text(0, "Settings")
|
|
settings_tree.set_icon(0, get_icon("GDScript", "EditorIcons"))
|
|
settings_tree.set_metadata(0, {'editor': 'Settings'})
|
|
|
|
|
|
connect('item_selected', self, '_on_item_selected')
|
|
connect('item_rmb_selected', self, '_on_item_rmb_selected')
|
|
connect('gui_input', self, '_on_gui_input')
|
|
connect('item_edited', self, '_on_item_edited')
|
|
$RenamerReset.connect("timeout", self, '_on_renamer_reset_timeout')
|
|
|
|
#var subchild1 = tree.create_item(timelines_tree)
|
|
#subchild1.set_text(0, "Subchild1")
|
|
|
|
# Adding timelines
|
|
for t in DialogicUtil.get_timeline_list():
|
|
add_timeline(t)
|
|
|
|
# Adding characters
|
|
for c in DialogicUtil.get_character_list():
|
|
add_character(c)
|
|
|
|
# Adding Definitions
|
|
for d in DialogicUtil.get_default_definition_list():
|
|
add_definition(d)
|
|
|
|
# Adding Themes
|
|
for m in DialogicUtil.get_theme_list():
|
|
add_theme(m)
|
|
|
|
# Default empty screen.
|
|
hide_all_editors(true)
|
|
|
|
# AutoSave timer
|
|
$AutoSave.connect("timeout", self, '_on_autosave_timeout')
|
|
$AutoSave.start(0.5)
|
|
|
|
|
|
func add_timeline(timeline, select = false):
|
|
var item = tree.create_item(timelines_tree)
|
|
item.set_icon(0, timeline_icon)
|
|
if timeline.has('name'):
|
|
item.set_text(0, timeline['name'])
|
|
else:
|
|
item.set_text(0, timeline['file'])
|
|
timeline['editor'] = 'Timeline'
|
|
item.set_metadata(0, timeline)
|
|
#item.set_editable(0, true)
|
|
if select: # Auto selecting
|
|
item.select(0)
|
|
|
|
|
|
func add_theme(theme_item, select = false):
|
|
var item = tree.create_item(themes_tree)
|
|
item.set_icon(0, get_icon("StyleBoxTexture", "EditorIcons"))
|
|
item.set_text(0, theme_item['name'])
|
|
theme_item['editor'] = 'Theme'
|
|
item.set_metadata(0, theme_item)
|
|
#item.set_editable(0, true)
|
|
if select: # Auto selecting
|
|
item.select(0)
|
|
|
|
|
|
func add_character(character, select = false):
|
|
var item = tree.create_item(characters_tree)
|
|
item.set_icon(0, character_icon)
|
|
if character.has('name'):
|
|
item.set_text(0, character['name'])
|
|
else:
|
|
item.set_text(0, character['file'])
|
|
character['editor'] = 'Character'
|
|
item.set_metadata(0, character)
|
|
#item.set_editable(0, true)
|
|
if character.has('color'):
|
|
item.set_icon_modulate(0, character['color'])
|
|
# Auto selecting
|
|
if select:
|
|
item.select(0)
|
|
|
|
|
|
func add_definition(definition, select = false):
|
|
var item = tree.create_item(definitions_tree)
|
|
item.set_text(0, definition['name'])
|
|
item.set_icon(0, get_icon("Variant", "EditorIcons"))
|
|
if definition['type'] == 1:
|
|
item.set_icon(0, get_icon("ScriptCreateDialog", "EditorIcons"))
|
|
|
|
definition['editor'] = 'Definition'
|
|
item.set_metadata(0, definition)
|
|
if select: # Auto selecting
|
|
item.select(0)
|
|
|
|
|
|
func _on_item_selected():
|
|
# TODO: Ideally I would perform a "save" here before opening the next
|
|
# resource. Unfortunately there has been so many bugs doing that
|
|
# that I'll revisit it in the future.
|
|
# save_current_resource()
|
|
var item = get_selected()
|
|
var metadata = item.get_metadata(0)
|
|
hide_all_editors()
|
|
if metadata['editor'] == 'Timeline':
|
|
timeline_editor.visible = true
|
|
timeline_editor.load_timeline(metadata['file'])
|
|
if metadata['editor'] == 'Character':
|
|
character_editor.visible = true
|
|
character_editor.load_character(metadata['file'])
|
|
if metadata['editor'] == 'Definition':
|
|
definition_editor.visible = true
|
|
definition_editor.load_definition(metadata['section'])
|
|
if metadata['editor'] == 'Theme':
|
|
theme_editor.load_theme(metadata['file'])
|
|
theme_editor.visible = true
|
|
if metadata['editor'] == 'Settings':
|
|
settings_editor.update_data()
|
|
settings_editor.visible = true
|
|
|
|
|
|
func hide_all_editors(show_empty = false):
|
|
character_editor.visible = false
|
|
timeline_editor.visible = false
|
|
definition_editor.visible = false
|
|
theme_editor.visible = false
|
|
empty_editor.visible = false
|
|
settings_editor.visible = false
|
|
if show_empty:
|
|
empty_editor.visible = true
|
|
|
|
|
|
func _on_item_rmb_selected(position):
|
|
var item = get_selected().get_metadata(0)
|
|
if item['editor'] == 'Timeline':
|
|
editor_reference.get_node('TimelinePopupMenu').rect_position = get_viewport().get_mouse_position()
|
|
editor_reference.get_node('TimelinePopupMenu').popup()
|
|
if item['editor'] == 'Character':
|
|
editor_reference.get_node("CharacterPopupMenu").rect_position = get_viewport().get_mouse_position()
|
|
editor_reference.get_node("CharacterPopupMenu").popup()
|
|
if item['editor'] == 'Theme':
|
|
editor_reference.get_node("ThemePopupMenu").rect_position = get_viewport().get_mouse_position()
|
|
editor_reference.get_node("ThemePopupMenu").popup()
|
|
if item['editor'] == 'Definition':
|
|
editor_reference.get_node("DefinitionPopupMenu").rect_position = get_viewport().get_mouse_position()
|
|
editor_reference.get_node("DefinitionPopupMenu").popup()
|
|
|
|
|
|
func remove_selected():
|
|
var item = get_selected()
|
|
item.free()
|
|
timelines_tree.select(0)
|
|
settings_editor.update_data()
|
|
|
|
|
|
func refresh_timeline_list():
|
|
print('update timeline list')
|
|
|
|
|
|
func _on_renamer_reset_timeout():
|
|
get_selected().set_editable(0, false)
|
|
|
|
|
|
func _on_gui_input(event):
|
|
if event is InputEventMouseButton and event.button_index == 1:
|
|
if event.is_pressed() and event.doubleclick:
|
|
var item = get_selected()
|
|
var metadata = item.get_metadata(0)
|
|
item.set_editable(0, true)
|
|
$RenamerReset.start(0.5)
|
|
|
|
|
|
func _on_item_edited():
|
|
var item = get_selected()
|
|
var metadata = item.get_metadata(0)
|
|
if metadata['editor'] == 'Timeline':
|
|
timeline_editor.timeline_name = item.get_text(0)
|
|
if metadata['editor'] == 'Theme':
|
|
DialogicResources.set_theme_value(metadata['file'], 'settings', 'name', item.get_text(0))
|
|
if metadata['editor'] == 'Character':
|
|
character_editor.nodes['name'].text = item.get_text(0)
|
|
if metadata['editor'] == 'Definition':
|
|
definition_editor.nodes['name'].text = item.get_text(0)
|
|
# Not sure why this signal doesn't triggers
|
|
definition_editor._on_name_changed(item.get_text(0))
|
|
|
|
|
|
func _on_autosave_timeout():
|
|
save_current_resource()
|
|
|
|
|
|
func save_current_resource():
|
|
var root = get_node('../..') # This is the same as the editor_reference
|
|
if root.visible: #Only save if the editor is open
|
|
var item: TreeItem = get_selected()
|
|
var metadata: Dictionary
|
|
if item != null:
|
|
metadata = item.get_metadata(0)
|
|
if metadata['editor'] == 'Timeline':
|
|
timeline_editor.save_timeline()
|
|
if metadata['editor'] == 'Character':
|
|
character_editor.save_character()
|
|
if metadata['editor'] == 'Definition':
|
|
definition_editor.save_definition()
|
|
# Note: Theme files auto saves on change
|