123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202 |
- tool
- extends Control
-
- var debug_mode: bool = true # For printing info
- var editor_file_dialog # EditorFileDialog
- var file_picker_data: Dictionary = {'method': '', 'node': self}
- var current_editor_view: String = 'Master'
- var version_string: String
- onready var master_tree = $MainPanel/MasterTreeContainer/MasterTree
- onready var timeline_editor = $MainPanel/TimelineEditor
- onready var character_editor = $MainPanel/CharacterEditor
- onready var definition_editor = $MainPanel/DefinitionEditor
- onready var theme_editor = $MainPanel/ThemeEditor
- onready var settings_editor = $MainPanel/SettingsEditor
-
-
- func _ready():
- # Adding file dialog to get used by pieces
- editor_file_dialog = EditorFileDialog.new()
- add_child(editor_file_dialog)
-
- # Setting references to this node
- timeline_editor.editor_reference = self
- character_editor.editor_reference = self
- definition_editor.editor_reference = self
- theme_editor.editor_reference = self
-
- master_tree.connect("editor_selected", self, 'on_master_tree_editor_selected')
-
-
- # Sizes
- # This part of the code is a bit terrible. But there is no better way
- # of doing this in Godot at the moment. I'm sorry.
- var separation = get_constant("separation", "BoxContainer")
- $MainPanel.margin_left = separation
- $MainPanel.margin_right = separation * -1
- $MainPanel.margin_bottom = separation * -1
- $MainPanel.margin_top = 38
- var modifier = ''
- var _scale = get_constant("inspector_margin", "Editor")
- _scale = _scale * 0.125
- if _scale == 1:
- $MainPanel.margin_top = 30
- if _scale == 1.25:
- modifier = '-1.25'
- $MainPanel.margin_top = 37
- if _scale == 1.5:
- modifier = '-1.25'
- $MainPanel.margin_top = 46
- if _scale == 1.75:
- modifier = '-1.25'
- $MainPanel.margin_top = 53
- if _scale == 2:
- $MainPanel.margin_top = 59
- modifier = '-2'
- $ToolBar/NewTimelineButton.icon = load("res://addons/dialogic/Images/Toolbar/add-timeline" + modifier + ".svg")
- $ToolBar/NewCharactersButton.icon = load("res://addons/dialogic/Images/Toolbar/add-character" + modifier + ".svg")
- $ToolBar/NewDefinitionButton.icon = load("res://addons/dialogic/Images/Toolbar/add-definition" + modifier + ".svg")
- $ToolBar/NewThemeButton.icon = load("res://addons/dialogic/Images/Toolbar/add-theme" + modifier + ".svg")
- $ToolBar/NewThemeButton.icon = load("res://addons/dialogic/Images/Toolbar/add-theme" + modifier + ".svg")
-
- $ToolBar/FoldTools/ButtonFold.icon = get_icon("GuiTreeArrowRight", "EditorIcons")
- $ToolBar/FoldTools/ButtonUnfold.icon = get_icon("GuiTreeArrowDown", "EditorIcons")
- # Toolbar
- $ToolBar/NewTimelineButton.connect('pressed', $MainPanel/TimelineEditor, 'new_timeline')
- $ToolBar/NewCharactersButton.connect('pressed', $MainPanel/CharacterEditor, 'new_character')
- $ToolBar/NewThemeButton.connect('pressed', $MainPanel/ThemeEditor, 'new_theme')
- $ToolBar/NewDefinitionButton.connect('pressed', $MainPanel/DefinitionEditor, 'new_definition')
- $ToolBar/Docs.icon = get_icon("Instance", "EditorIcons")
- $ToolBar/Docs.connect('pressed', OS, "shell_open", ["https://dialogic.coppolaemilio.com"])
- $ToolBar/FoldTools/ButtonFold.connect('pressed', timeline_editor, 'fold_all_nodes')
- $ToolBar/FoldTools/ButtonUnfold.connect('pressed', timeline_editor, 'unfold_all_nodes')
-
-
- # Connecting context menus
- $TimelinePopupMenu.connect('id_pressed', self, '_on_TimelinePopupMenu_id_pressed')
- $CharacterPopupMenu.connect('id_pressed', self, '_on_CharacterPopupMenu_id_pressed')
- $ThemePopupMenu.connect('id_pressed', self, '_on_ThemePopupMenu_id_pressed')
- $DefinitionPopupMenu.connect('id_pressed', self, '_on_DefinitionPopupMenu_id_pressed')
-
- #Connecting confirmation menus
- $RemoveTimelineConfirmation.connect('confirmed', self, '_on_RemoveTimelineConfirmation_confirmed')
- $RemoveCharacterConfirmation.connect('confirmed', self, '_on_RemoveCharacterConfirmation_confirmed')
- $RemoveThemeConfirmation.connect('confirmed', self, '_on_RemoveThemeConfirmation_confirmed')
- $RemoveDefinitionConfirmation.connect('confirmed', self, '_on_RemoveDefinitionConfirmation_confirmed')
-
- # Loading the version number
- var config = ConfigFile.new()
- var err = config.load("res://addons/dialogic/plugin.cfg")
- if err == OK:
- version_string = config.get_value("plugin", "version", "?")
- $ToolBar/Version.text = 'Dialogic v' + version_string
-
- $MainPanel/MasterTreeContainer/FilterMasterTreeEdit.right_icon = get_icon("Search", "EditorIcons")
-
-
- func on_master_tree_editor_selected(editor: String):
- $ToolBar/FoldTools.visible = editor == 'timeline'
-
-
- # Timeline context menu
- func _on_TimelinePopupMenu_id_pressed(id):
- if id == 0: # View files
- OS.shell_open(ProjectSettings.globalize_path(DialogicResources.get_path('TIMELINE_DIR')))
- if id == 1: # Copy to clipboard
- OS.set_clipboard($MainPanel/TimelineEditor.timeline_name)
- if id == 2: # Remove
- $RemoveTimelineConfirmation.popup_centered()
-
-
- func _on_RemoveTimelineConfirmation_confirmed():
- var dir = Directory.new()
- var target = $MainPanel/TimelineEditor.timeline_file
- #'target: ', target)
- DialogicResources.delete_timeline(target)
- $MainPanel/MasterTreeContainer/MasterTree.remove_selected()
- $MainPanel/MasterTreeContainer/MasterTree.hide_all_editors()
-
-
- # Character context menu
- func _on_CharacterPopupMenu_id_pressed(id):
- if id == 0:
- OS.shell_open(ProjectSettings.globalize_path(DialogicResources.get_path('CHAR_DIR')))
- if id == 1:
- $RemoveCharacterConfirmation.popup_centered()
-
-
- # Theme context menu
- func _on_ThemePopupMenu_id_pressed(id):
- if id == 0:
- OS.shell_open(ProjectSettings.globalize_path(DialogicResources.get_path('THEME_DIR')))
- if id == 1:
- $RemoveThemeConfirmation.popup_centered()
- if id == 2:
- var filename = $MainPanel/MasterTreeContainer/MasterTree.get_selected().get_metadata(0)['file']
- if (filename.begins_with('theme-')):
- theme_editor.duplicate_theme(filename)
-
-
- # Definition context menu
- func _on_DefinitionPopupMenu_id_pressed(id):
- if id == 0:
- OS.shell_open(ProjectSettings.globalize_path(DialogicResources.get_path('DEFAULT_DEFINITIONS_FILE')))
- if id == 1:
- $RemoveDefinitionConfirmation.popup_centered()
-
-
- func _on_RemoveDefinitionConfirmation_confirmed():
- var target = $MainPanel/DefinitionEditor.current_definition['id']
- DialogicResources.delete_default_definition(target)
- $MainPanel/MasterTreeContainer/MasterTree.remove_selected()
- $MainPanel/MasterTreeContainer/MasterTree.hide_all_editors()
-
-
- func _on_RemoveCharacterConfirmation_confirmed():
- var filename = $MainPanel/CharacterEditor.opened_character_data['id']
- DialogicResources.delete_character(filename)
- $MainPanel/MasterTreeContainer/MasterTree.remove_selected()
- $MainPanel/MasterTreeContainer/MasterTree.hide_all_editors()
-
-
- func _on_RemoveThemeConfirmation_confirmed():
- var filename = $MainPanel/MasterTreeContainer/MasterTree.get_selected().get_metadata(0)['file']
- DialogicResources.delete_theme(filename)
- $MainPanel/MasterTreeContainer/MasterTree.remove_selected()
- $MainPanel/MasterTreeContainer/MasterTree.hide_all_editors()
-
-
- # Godot dialog
- func godot_dialog(filter):
- editor_file_dialog.mode = EditorFileDialog.MODE_OPEN_FILE
- editor_file_dialog.clear_filters()
- editor_file_dialog.popup_centered_ratio(0.75)
- editor_file_dialog.add_filter(filter)
- return editor_file_dialog
-
-
- func godot_dialog_connect(who, method_name):
- var signal_name = "file_selected"
- # Checking if previous connection exists, if it does, disconnect it.
- if editor_file_dialog.is_connected(
- signal_name,
- file_picker_data['node'],
- file_picker_data['method']):
- editor_file_dialog.disconnect(
- signal_name,
- file_picker_data['node'],
- file_picker_data['method']
- )
- # Connect new signal
- editor_file_dialog.connect(signal_name, who, method_name, [who])
- file_picker_data['method'] = method_name
- file_picker_data['node'] = who
-
-
- func _on_file_selected(path):
- dprint(path)
-
-
- func dprint(what) -> void:
- if debug_mode:
- print(what)
|