123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250 |
- 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_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(DialogicUtil.get_path('TIMELINE_DIR', metadata['file']))
- if metadata['editor'] == 'Character':
- character_editor.visible = true
- character_editor.load_character(DialogicUtil.get_path('CHAR_DIR', 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':
- DialogicUtil.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
|