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.

EditorView.gd 7.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202
  1. tool
  2. extends Control
  3. var debug_mode: bool = true # For printing info
  4. var editor_file_dialog # EditorFileDialog
  5. var file_picker_data: Dictionary = {'method': '', 'node': self}
  6. var current_editor_view: String = 'Master'
  7. var version_string: String
  8. onready var master_tree = $MainPanel/MasterTreeContainer/MasterTree
  9. onready var timeline_editor = $MainPanel/TimelineEditor
  10. onready var character_editor = $MainPanel/CharacterEditor
  11. onready var definition_editor = $MainPanel/DefinitionEditor
  12. onready var theme_editor = $MainPanel/ThemeEditor
  13. onready var settings_editor = $MainPanel/SettingsEditor
  14. func _ready():
  15. # Adding file dialog to get used by pieces
  16. editor_file_dialog = EditorFileDialog.new()
  17. add_child(editor_file_dialog)
  18. # Setting references to this node
  19. timeline_editor.editor_reference = self
  20. character_editor.editor_reference = self
  21. definition_editor.editor_reference = self
  22. theme_editor.editor_reference = self
  23. master_tree.connect("editor_selected", self, 'on_master_tree_editor_selected')
  24. # Sizes
  25. # This part of the code is a bit terrible. But there is no better way
  26. # of doing this in Godot at the moment. I'm sorry.
  27. var separation = get_constant("separation", "BoxContainer")
  28. $MainPanel.margin_left = separation
  29. $MainPanel.margin_right = separation * -1
  30. $MainPanel.margin_bottom = separation * -1
  31. $MainPanel.margin_top = 38
  32. var modifier = ''
  33. var _scale = get_constant("inspector_margin", "Editor")
  34. _scale = _scale * 0.125
  35. if _scale == 1:
  36. $MainPanel.margin_top = 30
  37. if _scale == 1.25:
  38. modifier = '-1.25'
  39. $MainPanel.margin_top = 37
  40. if _scale == 1.5:
  41. modifier = '-1.25'
  42. $MainPanel.margin_top = 46
  43. if _scale == 1.75:
  44. modifier = '-1.25'
  45. $MainPanel.margin_top = 53
  46. if _scale == 2:
  47. $MainPanel.margin_top = 59
  48. modifier = '-2'
  49. $ToolBar/NewTimelineButton.icon = load("res://addons/dialogic/Images/Toolbar/add-timeline" + modifier + ".svg")
  50. $ToolBar/NewCharactersButton.icon = load("res://addons/dialogic/Images/Toolbar/add-character" + modifier + ".svg")
  51. $ToolBar/NewDefinitionButton.icon = load("res://addons/dialogic/Images/Toolbar/add-definition" + modifier + ".svg")
  52. $ToolBar/NewThemeButton.icon = load("res://addons/dialogic/Images/Toolbar/add-theme" + modifier + ".svg")
  53. $ToolBar/NewThemeButton.icon = load("res://addons/dialogic/Images/Toolbar/add-theme" + modifier + ".svg")
  54. $ToolBar/FoldTools/ButtonFold.icon = get_icon("GuiTreeArrowRight", "EditorIcons")
  55. $ToolBar/FoldTools/ButtonUnfold.icon = get_icon("GuiTreeArrowDown", "EditorIcons")
  56. # Toolbar
  57. $ToolBar/NewTimelineButton.connect('pressed', $MainPanel/TimelineEditor, 'new_timeline')
  58. $ToolBar/NewCharactersButton.connect('pressed', $MainPanel/CharacterEditor, 'new_character')
  59. $ToolBar/NewThemeButton.connect('pressed', $MainPanel/ThemeEditor, 'new_theme')
  60. $ToolBar/NewDefinitionButton.connect('pressed', $MainPanel/DefinitionEditor, 'new_definition')
  61. $ToolBar/Docs.icon = get_icon("Instance", "EditorIcons")
  62. $ToolBar/Docs.connect('pressed', OS, "shell_open", ["https://dialogic.coppolaemilio.com"])
  63. $ToolBar/FoldTools/ButtonFold.connect('pressed', timeline_editor, 'fold_all_nodes')
  64. $ToolBar/FoldTools/ButtonUnfold.connect('pressed', timeline_editor, 'unfold_all_nodes')
  65. # Connecting context menus
  66. $TimelinePopupMenu.connect('id_pressed', self, '_on_TimelinePopupMenu_id_pressed')
  67. $CharacterPopupMenu.connect('id_pressed', self, '_on_CharacterPopupMenu_id_pressed')
  68. $ThemePopupMenu.connect('id_pressed', self, '_on_ThemePopupMenu_id_pressed')
  69. $DefinitionPopupMenu.connect('id_pressed', self, '_on_DefinitionPopupMenu_id_pressed')
  70. #Connecting confirmation menus
  71. $RemoveTimelineConfirmation.connect('confirmed', self, '_on_RemoveTimelineConfirmation_confirmed')
  72. $RemoveCharacterConfirmation.connect('confirmed', self, '_on_RemoveCharacterConfirmation_confirmed')
  73. $RemoveThemeConfirmation.connect('confirmed', self, '_on_RemoveThemeConfirmation_confirmed')
  74. $RemoveDefinitionConfirmation.connect('confirmed', self, '_on_RemoveDefinitionConfirmation_confirmed')
  75. # Loading the version number
  76. var config = ConfigFile.new()
  77. var err = config.load("res://addons/dialogic/plugin.cfg")
  78. if err == OK:
  79. version_string = config.get_value("plugin", "version", "?")
  80. $ToolBar/Version.text = 'Dialogic v' + version_string
  81. $MainPanel/MasterTreeContainer/FilterMasterTreeEdit.right_icon = get_icon("Search", "EditorIcons")
  82. func on_master_tree_editor_selected(editor: String):
  83. $ToolBar/FoldTools.visible = editor == 'timeline'
  84. # Timeline context menu
  85. func _on_TimelinePopupMenu_id_pressed(id):
  86. if id == 0: # View files
  87. OS.shell_open(ProjectSettings.globalize_path(DialogicResources.get_path('TIMELINE_DIR')))
  88. if id == 1: # Copy to clipboard
  89. OS.set_clipboard($MainPanel/TimelineEditor.timeline_name)
  90. if id == 2: # Remove
  91. $RemoveTimelineConfirmation.popup_centered()
  92. func _on_RemoveTimelineConfirmation_confirmed():
  93. var dir = Directory.new()
  94. var target = $MainPanel/TimelineEditor.timeline_file
  95. #'target: ', target)
  96. DialogicResources.delete_timeline(target)
  97. $MainPanel/MasterTreeContainer/MasterTree.remove_selected()
  98. $MainPanel/MasterTreeContainer/MasterTree.hide_all_editors()
  99. # Character context menu
  100. func _on_CharacterPopupMenu_id_pressed(id):
  101. if id == 0:
  102. OS.shell_open(ProjectSettings.globalize_path(DialogicResources.get_path('CHAR_DIR')))
  103. if id == 1:
  104. $RemoveCharacterConfirmation.popup_centered()
  105. # Theme context menu
  106. func _on_ThemePopupMenu_id_pressed(id):
  107. if id == 0:
  108. OS.shell_open(ProjectSettings.globalize_path(DialogicResources.get_path('THEME_DIR')))
  109. if id == 1:
  110. $RemoveThemeConfirmation.popup_centered()
  111. if id == 2:
  112. var filename = $MainPanel/MasterTreeContainer/MasterTree.get_selected().get_metadata(0)['file']
  113. if (filename.begins_with('theme-')):
  114. theme_editor.duplicate_theme(filename)
  115. # Definition context menu
  116. func _on_DefinitionPopupMenu_id_pressed(id):
  117. if id == 0:
  118. OS.shell_open(ProjectSettings.globalize_path(DialogicResources.get_path('DEFAULT_DEFINITIONS_FILE')))
  119. if id == 1:
  120. $RemoveDefinitionConfirmation.popup_centered()
  121. func _on_RemoveDefinitionConfirmation_confirmed():
  122. var target = $MainPanel/DefinitionEditor.current_definition['id']
  123. DialogicResources.delete_default_definition(target)
  124. $MainPanel/MasterTreeContainer/MasterTree.remove_selected()
  125. $MainPanel/MasterTreeContainer/MasterTree.hide_all_editors()
  126. func _on_RemoveCharacterConfirmation_confirmed():
  127. var filename = $MainPanel/CharacterEditor.opened_character_data['id']
  128. DialogicResources.delete_character(filename)
  129. $MainPanel/MasterTreeContainer/MasterTree.remove_selected()
  130. $MainPanel/MasterTreeContainer/MasterTree.hide_all_editors()
  131. func _on_RemoveThemeConfirmation_confirmed():
  132. var filename = $MainPanel/MasterTreeContainer/MasterTree.get_selected().get_metadata(0)['file']
  133. DialogicResources.delete_theme(filename)
  134. $MainPanel/MasterTreeContainer/MasterTree.remove_selected()
  135. $MainPanel/MasterTreeContainer/MasterTree.hide_all_editors()
  136. # Godot dialog
  137. func godot_dialog(filter):
  138. editor_file_dialog.mode = EditorFileDialog.MODE_OPEN_FILE
  139. editor_file_dialog.clear_filters()
  140. editor_file_dialog.popup_centered_ratio(0.75)
  141. editor_file_dialog.add_filter(filter)
  142. return editor_file_dialog
  143. func godot_dialog_connect(who, method_name):
  144. var signal_name = "file_selected"
  145. # Checking if previous connection exists, if it does, disconnect it.
  146. if editor_file_dialog.is_connected(
  147. signal_name,
  148. file_picker_data['node'],
  149. file_picker_data['method']):
  150. editor_file_dialog.disconnect(
  151. signal_name,
  152. file_picker_data['node'],
  153. file_picker_data['method']
  154. )
  155. # Connect new signal
  156. editor_file_dialog.connect(signal_name, who, method_name, [who])
  157. file_picker_data['method'] = method_name
  158. file_picker_data['node'] = who
  159. func _on_file_selected(path):
  160. dprint(path)
  161. func dprint(what) -> void:
  162. if debug_mode:
  163. print(what)