123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331 |
- 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
-
- signal editor_selected(selected)
-
- 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
- build_timelines()
-
- # Adding characters
- build_characters()
-
- # Adding Definitions
- build_definitions()
-
- # Adding Themes
- build_themes()
-
- # Default empty screen.
- hide_all_editors()
-
- # AutoSave timer
- $AutoSave.connect("timeout", self, '_on_autosave_timeout')
- $AutoSave.start(0.5)
-
-
- func _clear_tree_children(parent: TreeItem):
- while parent.get_children() != null:
- parent.get_children().free()
-
-
- func build_timelines(selected_item: String=''):
- _clear_tree_children(timelines_tree)
- for t in DialogicUtil.get_sorted_timeline_list():
- _add_timeline(t, not selected_item.empty() and t['file'] == selected_item)
-
-
- 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 build_themes(selected_item: String=''):
- _clear_tree_children(themes_tree)
- for t in DialogicUtil.get_sorted_theme_list():
- _add_theme(t, not selected_item.empty() and t['file'] == selected_item)
-
-
- 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 build_characters(selected_item: String=''):
- _clear_tree_children(characters_tree)
- for t in DialogicUtil.get_sorted_character_list():
- _add_character(t, not selected_item.empty() and t['file'] == selected_item)
-
-
- 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 build_definitions(selected_item: String=''):
- _clear_tree_children(definitions_tree)
- for t in DialogicUtil.get_sorted_default_definitions_list():
- _add_definition(t, not selected_item.empty() and t['id'] == selected_item)
-
-
- 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)
- if metadata['editor'] == 'Timeline':
- timeline_editor.load_timeline(metadata['file'])
- show_timeline_editor()
- if metadata['editor'] == 'Character':
- if not character_editor.is_selected(metadata['file']):
- character_editor.load_character(metadata['file'])
- show_character_editor()
- if metadata['editor'] == 'Definition':
- if not definition_editor.is_selected(metadata['id']):
- definition_editor.visible = true
- definition_editor.load_definition(metadata['id'])
- show_definition_editor()
- if metadata['editor'] == 'Theme':
- theme_editor.load_theme(metadata['file'])
- show_theme_editor()
- if metadata['editor'] == 'Settings':
- settings_editor.update_data()
- show_settings_editor()
-
-
- func show_character_editor():
- emit_signal("editor_selected", 'character')
- character_editor.visible = true
- timeline_editor.visible = false
- definition_editor.visible = false
- theme_editor.visible = false
- settings_editor.visible = false
- empty_editor.visible = false
-
- func show_timeline_editor():
- emit_signal("editor_selected", 'timeline')
- character_editor.visible = false
- timeline_editor.visible = true
- definition_editor.visible = false
- theme_editor.visible = false
- settings_editor.visible = false
- empty_editor.visible = false
-
- func show_definition_editor():
- emit_signal("editor_selected", 'definition')
- character_editor.visible = false
- timeline_editor.visible = false
- definition_editor.visible = true
- theme_editor.visible = false
- settings_editor.visible = false
- empty_editor.visible = false
-
- func show_theme_editor():
- emit_signal("editor_selected", 'theme')
- character_editor.visible = false
- timeline_editor.visible = false
- definition_editor.visible = false
- theme_editor.visible = true
- settings_editor.visible = false
- empty_editor.visible = false
-
- func show_settings_editor():
- emit_signal("editor_selected", 'theme')
- character_editor.visible = false
- timeline_editor.visible = false
- definition_editor.visible = false
- theme_editor.visible = false
- settings_editor.visible = true
- empty_editor.visible = false
-
- func hide_all_editors():
- emit_signal("editor_selected", 'none')
- character_editor.visible = false
- timeline_editor.visible = false
- definition_editor.visible = false
- theme_editor.visible = false
- settings_editor.visible = false
- 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():
- print('edited')
- var item = get_selected()
- var metadata = item.get_metadata(0)
- if metadata['editor'] == 'Timeline':
- timeline_editor.timeline_name = item.get_text(0)
- save_current_resource()
- build_timelines(metadata['file'])
- if metadata['editor'] == 'Theme':
- DialogicResources.set_theme_value(metadata['file'], 'settings', 'name', item.get_text(0))
- build_themes(metadata['file'])
- if metadata['editor'] == 'Character':
- character_editor.nodes['name'].text = item.get_text(0)
- save_current_resource()
- build_characters(metadata['file'])
- 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))
- save_current_resource()
- build_definitions(metadata['id'])
-
-
- 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
|