No Description
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.

MasterTree.gd 7.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250
  1. tool
  2. extends Tree
  3. onready var editor_reference = get_node('../..')
  4. onready var timeline_editor = get_node('../TimelineEditor')
  5. onready var character_editor = get_node('../CharacterEditor')
  6. onready var definition_editor = get_node('../DefinitionEditor')
  7. onready var settings_editor = get_node('../SettingsEditor')
  8. onready var theme_editor = get_node('../ThemeEditor')
  9. onready var empty_editor = get_node('../Empty')
  10. onready var tree = self
  11. var timeline_icon = load("res://addons/dialogic/Images/timeline.svg")
  12. var character_icon = load("res://addons/dialogic/Images/character.svg")
  13. var timelines_tree
  14. var characters_tree
  15. var definitions_tree
  16. var themes_tree
  17. var settings_tree
  18. func _ready():
  19. allow_rmb_select = true
  20. var root = tree.create_item()
  21. tree.set_hide_root(true)
  22. # Creating the parents
  23. timelines_tree = tree.create_item(root)
  24. timelines_tree.set_selectable(0, false)
  25. timelines_tree.set_text(0, "Timelines")
  26. #timelines_tree.set_icon(0, get_icon("Folder", "EditorIcons"))
  27. characters_tree = tree.create_item(root)
  28. characters_tree.set_selectable(0, false)
  29. characters_tree.set_text(0, "Characters")
  30. #characters_tree.set_icon(0, get_icon("Folder", "EditorIcons"))
  31. definitions_tree = tree.create_item(root)
  32. definitions_tree.set_selectable(0, false)
  33. definitions_tree.set_text(0, "Definitions")
  34. #definitions_tree.set_icon(0, get_icon("Folder", "EditorIcons"))
  35. themes_tree = tree.create_item(root)
  36. themes_tree.set_selectable(0, false)
  37. themes_tree.set_text(0, "Themes")
  38. #themes_tree.set_icon(0, get_icon("Folder", "EditorIcons"))
  39. settings_tree = tree.create_item(root)
  40. settings_tree.set_selectable(0, true)
  41. settings_tree.set_text(0, "Settings")
  42. settings_tree.set_icon(0, get_icon("GDScript", "EditorIcons"))
  43. settings_tree.set_metadata(0, {'editor': 'Settings'})
  44. connect('item_selected', self, '_on_item_selected')
  45. connect('item_rmb_selected', self, '_on_item_rmb_selected')
  46. connect('gui_input', self, '_on_gui_input')
  47. connect('item_edited', self, '_on_item_edited')
  48. $RenamerReset.connect("timeout", self, '_on_renamer_reset_timeout')
  49. #var subchild1 = tree.create_item(timelines_tree)
  50. #subchild1.set_text(0, "Subchild1")
  51. # Adding timelines
  52. for t in DialogicUtil.get_timeline_list():
  53. add_timeline(t)
  54. # Adding characters
  55. for c in DialogicUtil.get_character_list():
  56. add_character(c)
  57. # Adding Definitions
  58. for d in DialogicUtil.get_definition_list():
  59. add_definition(d)
  60. # Adding Themes
  61. for m in DialogicUtil.get_theme_list():
  62. add_theme(m)
  63. # Default empty screen.
  64. hide_all_editors(true)
  65. # AutoSave timer
  66. $AutoSave.connect("timeout", self, '_on_autosave_timeout')
  67. $AutoSave.start(0.5)
  68. func add_timeline(timeline, select = false):
  69. var item = tree.create_item(timelines_tree)
  70. item.set_icon(0, timeline_icon)
  71. if timeline.has('name'):
  72. item.set_text(0, timeline['name'])
  73. else:
  74. item.set_text(0, timeline['file'])
  75. timeline['editor'] = 'Timeline'
  76. item.set_metadata(0, timeline)
  77. #item.set_editable(0, true)
  78. if select: # Auto selecting
  79. item.select(0)
  80. func add_theme(theme_item, select = false):
  81. var item = tree.create_item(themes_tree)
  82. item.set_icon(0, get_icon("StyleBoxTexture", "EditorIcons"))
  83. item.set_text(0, theme_item['name'])
  84. theme_item['editor'] = 'Theme'
  85. item.set_metadata(0, theme_item)
  86. #item.set_editable(0, true)
  87. if select: # Auto selecting
  88. item.select(0)
  89. func add_character(character, select = false):
  90. var item = tree.create_item(characters_tree)
  91. item.set_icon(0, character_icon)
  92. if character.has('name'):
  93. item.set_text(0, character['name'])
  94. else:
  95. item.set_text(0, character['file'])
  96. character['editor'] = 'Character'
  97. item.set_metadata(0, character)
  98. #item.set_editable(0, true)
  99. if character.has('color'):
  100. item.set_icon_modulate(0, character['color'])
  101. # Auto selecting
  102. if select:
  103. item.select(0)
  104. func add_definition(definition, select = false):
  105. var item = tree.create_item(definitions_tree)
  106. item.set_text(0, definition['name'])
  107. item.set_icon(0, get_icon("Variant", "EditorIcons"))
  108. if definition['type'] == 1:
  109. item.set_icon(0, get_icon("ScriptCreateDialog", "EditorIcons"))
  110. definition['editor'] = 'Definition'
  111. item.set_metadata(0, definition)
  112. if select: # Auto selecting
  113. item.select(0)
  114. func _on_item_selected():
  115. # TODO: Ideally I would perform a "save" here before opening the next
  116. # resource. Unfortunately there has been so many bugs doing that
  117. # that I'll revisit it in the future.
  118. # save_current_resource()
  119. var item = get_selected()
  120. var metadata = item.get_metadata(0)
  121. hide_all_editors()
  122. if metadata['editor'] == 'Timeline':
  123. timeline_editor.visible = true
  124. timeline_editor.load_timeline(DialogicUtil.get_path('TIMELINE_DIR', metadata['file']))
  125. if metadata['editor'] == 'Character':
  126. character_editor.visible = true
  127. character_editor.load_character(DialogicUtil.get_path('CHAR_DIR', metadata['file']))
  128. if metadata['editor'] == 'Definition':
  129. definition_editor.visible = true
  130. definition_editor.load_definition(metadata['section'])
  131. if metadata['editor'] == 'Theme':
  132. theme_editor.load_theme(metadata['file'])
  133. theme_editor.visible = true
  134. if metadata['editor'] == 'Settings':
  135. settings_editor.update_data()
  136. settings_editor.visible = true
  137. func hide_all_editors(show_empty = false):
  138. character_editor.visible = false
  139. timeline_editor.visible = false
  140. definition_editor.visible = false
  141. theme_editor.visible = false
  142. empty_editor.visible = false
  143. settings_editor.visible = false
  144. if show_empty:
  145. empty_editor.visible = true
  146. func _on_item_rmb_selected(position):
  147. var item = get_selected().get_metadata(0)
  148. if item['editor'] == 'Timeline':
  149. editor_reference.get_node('TimelinePopupMenu').rect_position = get_viewport().get_mouse_position()
  150. editor_reference.get_node('TimelinePopupMenu').popup()
  151. if item['editor'] == 'Character':
  152. editor_reference.get_node("CharacterPopupMenu").rect_position = get_viewport().get_mouse_position()
  153. editor_reference.get_node("CharacterPopupMenu").popup()
  154. if item['editor'] == 'Theme':
  155. editor_reference.get_node("ThemePopupMenu").rect_position = get_viewport().get_mouse_position()
  156. editor_reference.get_node("ThemePopupMenu").popup()
  157. if item['editor'] == 'Definition':
  158. editor_reference.get_node("DefinitionPopupMenu").rect_position = get_viewport().get_mouse_position()
  159. editor_reference.get_node("DefinitionPopupMenu").popup()
  160. func remove_selected():
  161. var item = get_selected()
  162. item.free()
  163. timelines_tree.select(0)
  164. settings_editor.update_data()
  165. func refresh_timeline_list():
  166. print('update timeline list')
  167. func _on_renamer_reset_timeout():
  168. get_selected().set_editable(0, false)
  169. func _on_gui_input(event):
  170. if event is InputEventMouseButton and event.button_index == 1:
  171. if event.is_pressed() and event.doubleclick:
  172. var item = get_selected()
  173. var metadata = item.get_metadata(0)
  174. item.set_editable(0, true)
  175. $RenamerReset.start(0.5)
  176. func _on_item_edited():
  177. var item = get_selected()
  178. var metadata = item.get_metadata(0)
  179. if metadata['editor'] == 'Timeline':
  180. timeline_editor.timeline_name = item.get_text(0)
  181. if metadata['editor'] == 'Theme':
  182. DialogicUtil.set_theme_value(metadata['file'], 'settings', 'name', item.get_text(0))
  183. if metadata['editor'] == 'Character':
  184. character_editor.nodes['name'].text = item.get_text(0)
  185. if metadata['editor'] == 'Definition':
  186. definition_editor.nodes['name'].text = item.get_text(0)
  187. # Not sure why this signal doesn't triggers
  188. definition_editor._on_name_changed(item.get_text(0))
  189. func _on_autosave_timeout():
  190. save_current_resource()
  191. func save_current_resource():
  192. var root = get_node('../..') # This is the same as the editor_reference
  193. if root.visible: #Only save if the editor is open
  194. var item: TreeItem = get_selected()
  195. var metadata: Dictionary
  196. if item != null:
  197. metadata = item.get_metadata(0)
  198. if metadata['editor'] == 'Timeline':
  199. timeline_editor.save_timeline()
  200. if metadata['editor'] == 'Character':
  201. character_editor.save_character()
  202. if metadata['editor'] == 'Definition':
  203. definition_editor.save_definition()
  204. # Note: Theme files auto saves on change