123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458 |
- 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 filter_tree_edit = get_node('../FilterMasterTreeEdit')
-
- onready var tree = self
-
- var timeline_icon
- var character_icon
- var theme_icon
- var definition_icon
- var glossary_icon
-
- var timelines_tree
- var characters_tree
- var definitions_tree
- var themes_tree
- var settings_tree
-
- var filter_tree_term = ''
-
- signal editor_selected(selected)
-
- func _ready():
- allow_rmb_select = true
- var root = tree.create_item()
- tree.set_hide_root(true)
-
- var modifier = ''
- var _scale = get_constant("inspector_margin", "Editor")
- _scale = _scale * 0.125
- rect_min_size.x = 150
- if _scale == 1.25:
- modifier = '-1.25'
- rect_min_size.x = 180
- if _scale == 1.5:
- modifier = '-1.25'
- rect_min_size.x = 250
- if _scale == 1.75:
- modifier = '-1.25'
- rect_min_size.x = 250
- if _scale == 2:
- modifier = '-2'
- rect_min_size.x = 360
- rect_size.x = 0
- timeline_icon = load("res://addons/dialogic/Images/Resources/timeline" + modifier + ".svg")
- character_icon = load("res://addons/dialogic/Images/Resources/character" + modifier + ".svg")
- theme_icon = load("res://addons/dialogic/Images/Resources/theme" + modifier + ".svg")
- definition_icon = load("res://addons/dialogic/Images/Resources/definition" + modifier + ".svg")
- glossary_icon = load("res://addons/dialogic/Images/Resources/glossary" + modifier + ".svg")
-
- # 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')
-
- filter_tree_edit.connect("text_changed", self, '_on_filter_tree_edit_changed')
-
- #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():
- if (filter_tree_term != ''):
- if (filter_tree_term.to_lower() in t['file'].to_lower() or filter_tree_term.to_lower() in t['name'].to_lower()):
- _add_timeline(t, not selected_item.empty() and t['file'] == selected_item)
- else:
- _add_timeline(t, not selected_item.empty() and t['file'] == selected_item)
- # force redraw control
- update()
-
-
- 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)
- if not get_constant("dark_theme", "Editor"):
- item.set_icon_modulate(0, get_color("property_color", "Editor"))
- #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():
- if (filter_tree_term != ''):
- if (filter_tree_term.to_lower() in t['file'].to_lower() or filter_tree_term.to_lower() in t['name'].to_lower()):
- _add_theme(t, not selected_item.empty() and t['file'] == selected_item)
- else:
- _add_theme(t, not selected_item.empty() and t['file'] == selected_item)
- # force redraw tree
- update()
-
-
- func _add_theme(theme_item, select = false):
- var item = tree.create_item(themes_tree)
- item.set_icon(0, theme_icon)
- item.set_text(0, theme_item['name'])
- theme_item['editor'] = 'Theme'
- item.set_metadata(0, theme_item)
- if not get_constant("dark_theme", "Editor"):
- item.set_icon_modulate(0, get_color("property_color", "Editor"))
- 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():
- if (filter_tree_term != ''):
- if (filter_tree_term.to_lower() in t['file'].to_lower() or filter_tree_term.to_lower() in t['name'].to_lower()):
- _add_character(t, not selected_item.empty() and t['file'] == selected_item)
- else:
- _add_character(t, not selected_item.empty() and t['file'] == selected_item)
- # force redraw tree
- update()
-
-
- 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():
- if (filter_tree_term != ''):
- if (filter_tree_term.to_lower() in t['name'].to_lower()):
- _add_definition(t, not selected_item.empty() and t['id'] == selected_item)
- else:
- _add_definition(t, not selected_item.empty() and t['id'] == selected_item)
- # force redraw tree
- update()
-
-
- func _add_definition(definition, select = false):
- var item = tree.create_item(definitions_tree)
- item.set_text(0, definition['name'])
- item.set_icon(0, definition_icon)
- if definition['type'] == 1:
- item.set_icon(0, glossary_icon)
- definition['editor'] = 'Definition'
- item.set_metadata(0, definition)
- if not get_constant("dark_theme", "Editor"):
- item.set_icon_modulate(0, get_color("property_color", "Editor"))
- 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')
- pass
-
-
- 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)
- 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 _on_filter_tree_edit_changed(value):
- filter_tree_term = value
- build_timelines()
- build_themes()
- build_characters()
- build_definitions()
-
-
- 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
-
-
- func select_timeline_item(timeline_name):
- if (timeline_name == ''):
- return
-
- var main_item = tree.get_root().get_children()
-
- # wow, godots tree traversal is extremly odd, or I just don't get it
- while (main_item):
-
- if (main_item == null):
- break
-
- if (main_item.has_method("get_text") && main_item.get_text(0) == "Timelines"):
- var item = main_item.get_children()
- while (item):
-
- if (not item.has_method("get_metadata")):
- item = item.get_next()
- continue
-
- var meta = item.get_metadata(0)
-
- if (meta == null):
- item = item.get_next()
- continue
-
- if (not meta.has("editor") or meta["editor"] != "Timeline"):
- item = item.get_next()
- continue
-
- # search for filename
- if (meta.has("file") and meta["file"] == timeline_name):
- # select this one
- item.select(0)
- return;
-
- # search for name
- if (meta.has("name") and meta["name"] == timeline_name):
- # select this one
- item.select(0)
- return;
-
- item = item.get_next()
- break
- else:
- main_item = main_item.get_next()
-
- # fallback
- hide_all_editors()
- pass
|