Envoi sur GitHub du projet updated
This commit is contained in:
@@ -2,11 +2,6 @@
|
||||
extends Control
|
||||
|
||||
|
||||
const DialogueConstants = preload("../constants.gd")
|
||||
const DialogueSettings = preload("../settings.gd")
|
||||
const DialogueResource = preload("../dialogue_resource.gd")
|
||||
const DialogueManagerParser = preload("../components/parser.gd")
|
||||
|
||||
const OPEN_OPEN = 100
|
||||
const OPEN_QUICK = 101
|
||||
const OPEN_CLEAR = 102
|
||||
@@ -33,7 +28,13 @@ enum TranslationSource {
|
||||
signal confirmation_closed()
|
||||
|
||||
|
||||
@onready var parse_timer := $ParseTimer
|
||||
@onready var parse_timer: Timer = $ParseTimer
|
||||
|
||||
# Banner
|
||||
@onready var banner: CenterContainer = %Banner
|
||||
@onready var banner_new_button: Button = %BannerNewButton
|
||||
@onready var banner_quick_open: Button = %BannerQuickOpen
|
||||
@onready var banner_examples: Button = %BannerExamples
|
||||
|
||||
# Dialogs
|
||||
@onready var new_dialog: FileDialog = $NewDialog
|
||||
@@ -44,13 +45,9 @@ signal confirmation_closed()
|
||||
@onready var export_dialog: FileDialog = $ExportDialog
|
||||
@onready var import_dialog: FileDialog = $ImportDialog
|
||||
@onready var errors_dialog: AcceptDialog = $ErrorsDialog
|
||||
@onready var settings_dialog: AcceptDialog = $SettingsDialog
|
||||
@onready var settings_view := $SettingsDialog/SettingsView
|
||||
@onready var build_error_dialog: AcceptDialog = $BuildErrorDialog
|
||||
@onready var close_confirmation_dialog: ConfirmationDialog = $CloseConfirmationDialog
|
||||
@onready var updated_dialog: AcceptDialog = $UpdatedDialog
|
||||
@onready var find_in_files_dialog: AcceptDialog = $FindInFilesDialog
|
||||
@onready var find_in_files: Control = $FindInFilesDialog/FindInFiles
|
||||
|
||||
# Toolbar
|
||||
@onready var new_button: Button = %NewButton
|
||||
@@ -58,10 +55,10 @@ signal confirmation_closed()
|
||||
@onready var save_all_button: Button = %SaveAllButton
|
||||
@onready var find_in_files_button: Button = %FindInFilesButton
|
||||
@onready var test_button: Button = %TestButton
|
||||
@onready var test_line_button: Button = %TestLineButton
|
||||
@onready var search_button: Button = %SearchButton
|
||||
@onready var insert_button: MenuButton = %InsertButton
|
||||
@onready var translations_button: MenuButton = %TranslationsButton
|
||||
@onready var settings_button: Button = %SettingsButton
|
||||
@onready var support_button: Button = %SupportButton
|
||||
@onready var docs_button: Button = %DocsButton
|
||||
@onready var version_label: Label = %VersionLabel
|
||||
@@ -74,7 +71,7 @@ signal confirmation_closed()
|
||||
@onready var files_list := %FilesList
|
||||
@onready var files_popup_menu: PopupMenu = %FilesPopupMenu
|
||||
@onready var title_list := %TitleList
|
||||
@onready var code_edit := %CodeEdit
|
||||
@onready var code_edit: DMCodeEdit = %CodeEdit
|
||||
@onready var errors_panel := %ErrorsPanel
|
||||
|
||||
# The currently open file
|
||||
@@ -85,6 +82,7 @@ var current_file_path: String = "":
|
||||
if current_file_path == "" or not open_buffers.has(current_file_path):
|
||||
save_all_button.disabled = true
|
||||
test_button.disabled = true
|
||||
test_line_button.disabled = true
|
||||
search_button.disabled = true
|
||||
insert_button.disabled = true
|
||||
translations_button.disabled = true
|
||||
@@ -93,8 +91,11 @@ var current_file_path: String = "":
|
||||
title_list.hide()
|
||||
code_edit.hide()
|
||||
errors_panel.hide()
|
||||
search_and_replace.hide()
|
||||
banner.show()
|
||||
else:
|
||||
test_button.disabled = false
|
||||
test_line_button.disabled = false
|
||||
search_button.disabled = false
|
||||
insert_button.disabled = false
|
||||
translations_button.disabled = false
|
||||
@@ -102,17 +103,25 @@ var current_file_path: String = "":
|
||||
files_list.show()
|
||||
title_list.show()
|
||||
code_edit.show()
|
||||
banner.hide()
|
||||
|
||||
var cursor: Vector2 = DMSettings.get_caret(current_file_path)
|
||||
var scroll_vertical: int = DMSettings.get_scroll(current_file_path)
|
||||
|
||||
code_edit.text = open_buffers[current_file_path].text
|
||||
code_edit.errors = []
|
||||
code_edit.clear_undo_history()
|
||||
code_edit.set_cursor(DialogueSettings.get_caret(current_file_path))
|
||||
code_edit.set_cursor(cursor)
|
||||
code_edit.scroll_vertical = scroll_vertical
|
||||
code_edit.grab_focus()
|
||||
|
||||
_on_code_edit_text_changed()
|
||||
|
||||
errors_panel.errors = []
|
||||
code_edit.errors = []
|
||||
|
||||
if search_and_replace.visible:
|
||||
search_and_replace.search()
|
||||
get:
|
||||
return current_file_path
|
||||
|
||||
@@ -137,16 +146,16 @@ func _ready() -> void:
|
||||
version_label.text = "v%s" % plugin.get_version()
|
||||
update_button.on_before_refresh = func on_before_refresh():
|
||||
# Save everything
|
||||
DialogueSettings.set_user_value("just_refreshed", {
|
||||
DMSettings.set_user_value("just_refreshed", {
|
||||
current_file_path = current_file_path,
|
||||
open_buffers = open_buffers
|
||||
})
|
||||
return true
|
||||
|
||||
# Did we just load from an addon version refresh?
|
||||
var just_refreshed = DialogueSettings.get_user_value("just_refreshed", null)
|
||||
var just_refreshed = DMSettings.get_user_value("just_refreshed", null)
|
||||
if just_refreshed != null:
|
||||
DialogueSettings.set_user_value("just_refreshed", null)
|
||||
DMSettings.set_user_value("just_refreshed", null)
|
||||
call_deferred("load_from_version_refresh", just_refreshed)
|
||||
|
||||
# Hook up the search toolbar
|
||||
@@ -157,35 +166,39 @@ func _ready() -> void:
|
||||
translations_button.get_popup().id_pressed.connect(_on_translations_button_menu_id_pressed)
|
||||
|
||||
code_edit.main_view = self
|
||||
code_edit.wrap_mode = TextEdit.LINE_WRAPPING_BOUNDARY if DialogueSettings.get_setting("wrap_lines", false) else TextEdit.LINE_WRAPPING_NONE
|
||||
var editor_settings: EditorSettings = plugin.get_editor_interface().get_editor_settings()
|
||||
var editor_settings: EditorSettings = EditorInterface.get_editor_settings()
|
||||
editor_settings.settings_changed.connect(_on_editor_settings_changed)
|
||||
_on_editor_settings_changed()
|
||||
|
||||
ProjectSettings.settings_changed.connect(_on_project_settings_changed)
|
||||
_on_project_settings_changed()
|
||||
|
||||
# Reopen any files that were open when Godot was closed
|
||||
if editor_settings.get_setting("text_editor/behavior/files/restore_scripts_on_load"):
|
||||
var reopen_files: Array = DialogueSettings.get_user_value("reopen_files", [])
|
||||
var reopen_files: Array = DMSettings.get_user_value("reopen_files", [])
|
||||
for reopen_file in reopen_files:
|
||||
open_file(reopen_file)
|
||||
|
||||
self.current_file_path = DialogueSettings.get_user_value("most_recent_reopen_file", "")
|
||||
self.current_file_path = DMSettings.get_user_value("most_recent_reopen_file", "")
|
||||
|
||||
save_all_button.disabled = true
|
||||
|
||||
close_confirmation_dialog.ok_button_text = DialogueConstants.translate(&"confirm_close.save")
|
||||
close_confirmation_dialog.add_button(DialogueConstants.translate(&"confirm_close.discard"), true, "discard")
|
||||
close_confirmation_dialog.ok_button_text = DMConstants.translate(&"confirm_close.save")
|
||||
close_confirmation_dialog.add_button(DMConstants.translate(&"confirm_close.discard"), true, "discard")
|
||||
|
||||
errors_dialog.dialog_text = DialogueConstants.translate(&"errors_in_script")
|
||||
errors_dialog.dialog_text = DMConstants.translate(&"errors_in_script")
|
||||
|
||||
# Update the buffer if a file was modified externally (retains undo step)
|
||||
Engine.get_meta("DialogueCache").file_content_changed.connect(_on_cache_file_content_changed)
|
||||
Engine.get_meta("DMCache").file_content_changed.connect(_on_cache_file_content_changed)
|
||||
|
||||
plugin.get_editor_interface().get_file_system_dock().files_moved.connect(_on_files_moved)
|
||||
EditorInterface.get_file_system_dock().files_moved.connect(_on_files_moved)
|
||||
|
||||
code_edit.get_v_scroll_bar().value_changed.connect(_on_code_edit_scroll_changed)
|
||||
|
||||
|
||||
func _exit_tree() -> void:
|
||||
DialogueSettings.set_user_value("reopen_files", open_buffers.keys())
|
||||
DialogueSettings.set_user_value("most_recent_reopen_file", self.current_file_path)
|
||||
DMSettings.set_user_value("reopen_files", open_buffers.keys())
|
||||
DMSettings.set_user_value("most_recent_reopen_file", self.current_file_path)
|
||||
|
||||
|
||||
func _unhandled_input(event: InputEvent) -> void:
|
||||
@@ -225,13 +238,12 @@ func load_from_version_refresh(just_refreshed: Dictionary) -> void:
|
||||
else:
|
||||
open_buffers = just_refreshed.open_buffers
|
||||
|
||||
var interface: EditorInterface = plugin.get_editor_interface()
|
||||
if just_refreshed.current_file_path != "":
|
||||
interface.edit_resource(load(just_refreshed.current_file_path))
|
||||
EditorInterface.edit_resource(load(just_refreshed.current_file_path))
|
||||
else:
|
||||
interface.set_main_screen_editor("Dialogue")
|
||||
EditorInterface.set_main_screen_editor("Dialogue")
|
||||
|
||||
updated_dialog.dialog_text = DialogueConstants.translate(&"update.success").format({ version = update_button.get_version() })
|
||||
updated_dialog.dialog_text = DMConstants.translate(&"update.success").format({ version = update_button.get_version() })
|
||||
updated_dialog.popup_centered()
|
||||
|
||||
|
||||
@@ -241,12 +253,11 @@ func new_file(path: String, content: String = "") -> void:
|
||||
|
||||
var file: FileAccess = FileAccess.open(path, FileAccess.WRITE)
|
||||
if content == "":
|
||||
if DialogueSettings.get_setting("new_with_template", true):
|
||||
file.store_string(DialogueSettings.get_setting("new_template", ""))
|
||||
file.store_string(DMSettings.get_setting(DMSettings.NEW_FILE_TEMPLATE, ""))
|
||||
else:
|
||||
file.store_string(content)
|
||||
|
||||
plugin.get_editor_interface().get_resource_filesystem().scan()
|
||||
EditorInterface.get_resource_filesystem().scan()
|
||||
|
||||
|
||||
# Open a dialogue resource for editing
|
||||
@@ -267,7 +278,7 @@ func open_file(path: String) -> void:
|
||||
pristine_text = text
|
||||
}
|
||||
|
||||
DialogueSettings.add_recent_file(path)
|
||||
DMSettings.add_recent_file(path)
|
||||
build_open_menu()
|
||||
|
||||
files_list.files = open_buffers.keys()
|
||||
@@ -276,12 +287,14 @@ func open_file(path: String) -> void:
|
||||
self.current_file_path = path
|
||||
|
||||
|
||||
func show_file_in_filesystem(path: String) -> void:
|
||||
var file_system_dock: FileSystemDock = plugin \
|
||||
.get_editor_interface() \
|
||||
.get_file_system_dock()
|
||||
func quick_open() -> void:
|
||||
quick_open_files_list.files = Engine.get_meta("DMCache").get_files()
|
||||
quick_open_dialog.popup_centered()
|
||||
quick_open_files_list.focus_filter()
|
||||
|
||||
file_system_dock.navigate_to_path(path)
|
||||
|
||||
func show_file_in_filesystem(path: String) -> void:
|
||||
EditorInterface.get_file_system_dock().navigate_to_path(path)
|
||||
|
||||
|
||||
# Save any open files
|
||||
@@ -295,7 +308,7 @@ func save_files() -> void:
|
||||
save_file(path, false)
|
||||
|
||||
if saved_files.size() > 0:
|
||||
Engine.get_meta("DialogueCache").mark_files_for_reimport(saved_files)
|
||||
Engine.get_meta("DMCache").mark_files_for_reimport(saved_files)
|
||||
|
||||
|
||||
# Save a file
|
||||
@@ -317,10 +330,7 @@ func save_file(path: String, rescan_file_system: bool = true) -> void:
|
||||
file.close()
|
||||
|
||||
if rescan_file_system:
|
||||
plugin \
|
||||
.get_editor_interface() \
|
||||
.get_resource_filesystem()\
|
||||
.scan()
|
||||
EditorInterface.get_resource_filesystem().scan()
|
||||
|
||||
|
||||
func close_file(path: String) -> void:
|
||||
@@ -332,7 +342,7 @@ func close_file(path: String) -> void:
|
||||
remove_file_from_open_buffers(path)
|
||||
await get_tree().process_frame
|
||||
else:
|
||||
close_confirmation_dialog.dialog_text = DialogueConstants.translate(&"confirm_close").format({ path = path.get_file() })
|
||||
close_confirmation_dialog.dialog_text = DMConstants.translate(&"confirm_close").format({ path = path.get_file() })
|
||||
close_confirmation_dialog.popup_centered()
|
||||
await confirmation_closed
|
||||
|
||||
@@ -355,8 +365,8 @@ func remove_file_from_open_buffers(path: String) -> void:
|
||||
# Apply theme colors and icons to the UI
|
||||
func apply_theme() -> void:
|
||||
if is_instance_valid(plugin) and is_instance_valid(code_edit):
|
||||
var scale: float = plugin.get_editor_interface().get_editor_scale()
|
||||
var editor_settings = plugin.get_editor_interface().get_editor_settings()
|
||||
var scale: float = EditorInterface.get_editor_scale()
|
||||
var editor_settings = EditorInterface.get_editor_settings()
|
||||
code_edit.theme_overrides = {
|
||||
scale = scale,
|
||||
|
||||
@@ -371,79 +381,84 @@ func apply_theme() -> void:
|
||||
text_color = editor_settings.get_setting("text_editor/theme/highlighting/text_color"),
|
||||
conditions_color = editor_settings.get_setting("text_editor/theme/highlighting/keyword_color"),
|
||||
mutations_color = editor_settings.get_setting("text_editor/theme/highlighting/function_color"),
|
||||
mutations_line_color = Color(editor_settings.get_setting("text_editor/theme/highlighting/function_color"), 0.6),
|
||||
members_color = editor_settings.get_setting("text_editor/theme/highlighting/member_variable_color"),
|
||||
strings_color = editor_settings.get_setting("text_editor/theme/highlighting/string_color"),
|
||||
numbers_color = editor_settings.get_setting("text_editor/theme/highlighting/number_color"),
|
||||
symbols_color = editor_settings.get_setting("text_editor/theme/highlighting/symbol_color"),
|
||||
comments_color = editor_settings.get_setting("text_editor/theme/highlighting/comment_color"),
|
||||
jumps_color = Color(editor_settings.get_setting("text_editor/theme/highlighting/control_flow_keyword_color"), 0.7),
|
||||
jumps_color = Color(editor_settings.get_setting("text_editor/theme/highlighting/control_flow_keyword_color"), 0.6),
|
||||
|
||||
font_size = editor_settings.get_setting("interface/editor/code_font_size")
|
||||
}
|
||||
|
||||
banner_new_button.icon = get_theme_icon("New", "EditorIcons")
|
||||
banner_quick_open.icon = get_theme_icon("Load", "EditorIcons")
|
||||
|
||||
new_button.icon = get_theme_icon("New", "EditorIcons")
|
||||
new_button.tooltip_text = DialogueConstants.translate(&"start_a_new_file")
|
||||
new_button.tooltip_text = DMConstants.translate(&"start_a_new_file")
|
||||
|
||||
open_button.icon = get_theme_icon("Load", "EditorIcons")
|
||||
open_button.tooltip_text = DialogueConstants.translate(&"open_a_file")
|
||||
open_button.tooltip_text = DMConstants.translate(&"open_a_file")
|
||||
|
||||
save_all_button.icon = get_theme_icon("Save", "EditorIcons")
|
||||
save_all_button.tooltip_text = DialogueConstants.translate(&"start_all_files")
|
||||
save_all_button.text = DMConstants.translate(&"all")
|
||||
save_all_button.tooltip_text = DMConstants.translate(&"start_all_files")
|
||||
|
||||
find_in_files_button.icon = get_theme_icon("ViewportZoom", "EditorIcons")
|
||||
find_in_files_button.tooltip_text = DialogueConstants.translate(&"find_in_files")
|
||||
find_in_files_button.tooltip_text = DMConstants.translate(&"find_in_files")
|
||||
|
||||
test_button.icon = get_theme_icon("PlayScene", "EditorIcons")
|
||||
test_button.tooltip_text = DialogueConstants.translate(&"test_dialogue")
|
||||
test_button.icon = get_theme_icon("DebugNext", "EditorIcons")
|
||||
test_button.tooltip_text = DMConstants.translate(&"test_dialogue")
|
||||
|
||||
test_line_button.icon = get_theme_icon("DebugStep", "EditorIcons")
|
||||
test_line_button.tooltip_text = DMConstants.translate(&"test_dialogue_from_line")
|
||||
|
||||
search_button.icon = get_theme_icon("Search", "EditorIcons")
|
||||
search_button.tooltip_text = DialogueConstants.translate(&"search_for_text")
|
||||
search_button.tooltip_text = DMConstants.translate(&"search_for_text")
|
||||
|
||||
insert_button.icon = get_theme_icon("RichTextEffect", "EditorIcons")
|
||||
insert_button.text = DialogueConstants.translate(&"insert")
|
||||
insert_button.text = DMConstants.translate(&"insert")
|
||||
|
||||
translations_button.icon = get_theme_icon("Translation", "EditorIcons")
|
||||
translations_button.text = DialogueConstants.translate(&"translations")
|
||||
|
||||
settings_button.icon = get_theme_icon("Tools", "EditorIcons")
|
||||
settings_button.tooltip_text = DialogueConstants.translate(&"settings")
|
||||
translations_button.text = DMConstants.translate(&"translations")
|
||||
|
||||
support_button.icon = get_theme_icon("Heart", "EditorIcons")
|
||||
support_button.text = DialogueConstants.translate(&"sponsor")
|
||||
support_button.tooltip_text = DialogueConstants.translate(&"show_support")
|
||||
support_button.text = DMConstants.translate(&"sponsor")
|
||||
support_button.tooltip_text = DMConstants.translate(&"show_support")
|
||||
|
||||
docs_button.icon = get_theme_icon("Help", "EditorIcons")
|
||||
docs_button.text = DialogueConstants.translate(&"docs")
|
||||
docs_button.text = DMConstants.translate(&"docs")
|
||||
|
||||
update_button.apply_theme()
|
||||
|
||||
# Set up the effect menu
|
||||
var popup: PopupMenu = insert_button.get_popup()
|
||||
popup.clear()
|
||||
popup.add_icon_item(get_theme_icon("RichTextEffect", "EditorIcons"), DialogueConstants.translate(&"insert.wave_bbcode"), 0)
|
||||
popup.add_icon_item(get_theme_icon("RichTextEffect", "EditorIcons"), DialogueConstants.translate(&"insert.shake_bbcode"), 1)
|
||||
popup.add_icon_item(get_theme_icon("RichTextEffect", "EditorIcons"), DMConstants.translate(&"insert.wave_bbcode"), 0)
|
||||
popup.add_icon_item(get_theme_icon("RichTextEffect", "EditorIcons"), DMConstants.translate(&"insert.shake_bbcode"), 1)
|
||||
popup.add_separator()
|
||||
popup.add_icon_item(get_theme_icon("Time", "EditorIcons"), DialogueConstants.translate(&"insert.typing_pause"), 3)
|
||||
popup.add_icon_item(get_theme_icon("ViewportSpeed", "EditorIcons"), DialogueConstants.translate(&"insert.typing_speed_change"), 4)
|
||||
popup.add_icon_item(get_theme_icon("DebugNext", "EditorIcons"), DialogueConstants.translate(&"insert.auto_advance"), 5)
|
||||
popup.add_separator(DialogueConstants.translate(&"insert.templates"))
|
||||
popup.add_icon_item(get_theme_icon("RichTextEffect", "EditorIcons"), DialogueConstants.translate(&"insert.title"), 6)
|
||||
popup.add_icon_item(get_theme_icon("RichTextEffect", "EditorIcons"), DialogueConstants.translate(&"insert.dialogue"), 7)
|
||||
popup.add_icon_item(get_theme_icon("RichTextEffect", "EditorIcons"), DialogueConstants.translate(&"insert.response"), 8)
|
||||
popup.add_icon_item(get_theme_icon("RichTextEffect", "EditorIcons"), DialogueConstants.translate(&"insert.random_lines"), 9)
|
||||
popup.add_icon_item(get_theme_icon("RichTextEffect", "EditorIcons"), DialogueConstants.translate(&"insert.random_text"), 10)
|
||||
popup.add_separator(DialogueConstants.translate(&"insert.actions"))
|
||||
popup.add_icon_item(get_theme_icon("RichTextEffect", "EditorIcons"), DialogueConstants.translate(&"insert.jump"), 11)
|
||||
popup.add_icon_item(get_theme_icon("RichTextEffect", "EditorIcons"), DialogueConstants.translate(&"insert.end_dialogue"), 12)
|
||||
popup.add_icon_item(get_theme_icon("Time", "EditorIcons"), DMConstants.translate(&"insert.typing_pause"), 3)
|
||||
popup.add_icon_item(get_theme_icon("ViewportSpeed", "EditorIcons"), DMConstants.translate(&"insert.typing_speed_change"), 4)
|
||||
popup.add_icon_item(get_theme_icon("DebugNext", "EditorIcons"), DMConstants.translate(&"insert.auto_advance"), 5)
|
||||
popup.add_separator(DMConstants.translate(&"insert.templates"))
|
||||
popup.add_icon_item(get_theme_icon("RichTextEffect", "EditorIcons"), DMConstants.translate(&"insert.title"), 6)
|
||||
popup.add_icon_item(get_theme_icon("RichTextEffect", "EditorIcons"), DMConstants.translate(&"insert.dialogue"), 7)
|
||||
popup.add_icon_item(get_theme_icon("RichTextEffect", "EditorIcons"), DMConstants.translate(&"insert.response"), 8)
|
||||
popup.add_icon_item(get_theme_icon("RichTextEffect", "EditorIcons"), DMConstants.translate(&"insert.random_lines"), 9)
|
||||
popup.add_icon_item(get_theme_icon("RichTextEffect", "EditorIcons"), DMConstants.translate(&"insert.random_text"), 10)
|
||||
popup.add_separator(DMConstants.translate(&"insert.actions"))
|
||||
popup.add_icon_item(get_theme_icon("RichTextEffect", "EditorIcons"), DMConstants.translate(&"insert.jump"), 11)
|
||||
popup.add_icon_item(get_theme_icon("RichTextEffect", "EditorIcons"), DMConstants.translate(&"insert.end_dialogue"), 12)
|
||||
|
||||
# Set up the translations menu
|
||||
popup = translations_button.get_popup()
|
||||
popup.clear()
|
||||
popup.add_icon_item(get_theme_icon("Translation", "EditorIcons"), DialogueConstants.translate(&"generate_line_ids"), TRANSLATIONS_GENERATE_LINE_IDS)
|
||||
popup.add_icon_item(get_theme_icon("Translation", "EditorIcons"), DMConstants.translate(&"generate_line_ids"), TRANSLATIONS_GENERATE_LINE_IDS)
|
||||
popup.add_separator()
|
||||
popup.add_icon_item(get_theme_icon("FileList", "EditorIcons"), DialogueConstants.translate(&"save_characters_to_csv"), TRANSLATIONS_SAVE_CHARACTERS_TO_CSV)
|
||||
popup.add_icon_item(get_theme_icon("FileList", "EditorIcons"), DialogueConstants.translate(&"save_to_csv"), TRANSLATIONS_SAVE_TO_CSV)
|
||||
popup.add_icon_item(get_theme_icon("AssetLib", "EditorIcons"), DialogueConstants.translate(&"import_from_csv"), TRANSLATIONS_IMPORT_FROM_CSV)
|
||||
popup.add_icon_item(get_theme_icon("FileList", "EditorIcons"), DMConstants.translate(&"save_characters_to_csv"), TRANSLATIONS_SAVE_CHARACTERS_TO_CSV)
|
||||
popup.add_icon_item(get_theme_icon("FileList", "EditorIcons"), DMConstants.translate(&"save_to_csv"), TRANSLATIONS_SAVE_TO_CSV)
|
||||
popup.add_icon_item(get_theme_icon("AssetLib", "EditorIcons"), DMConstants.translate(&"import_from_csv"), TRANSLATIONS_IMPORT_FROM_CSV)
|
||||
|
||||
# Dialog sizes
|
||||
new_dialog.min_size = Vector2(600, 500) * scale
|
||||
@@ -452,9 +467,6 @@ func apply_theme() -> void:
|
||||
quick_open_dialog.min_size = Vector2(400, 600) * scale
|
||||
export_dialog.min_size = Vector2(600, 500) * scale
|
||||
import_dialog.min_size = Vector2(600, 500) * scale
|
||||
settings_dialog.min_size = Vector2(1000, 600) * scale
|
||||
settings_dialog.max_size = Vector2(1000, 600) * scale
|
||||
find_in_files_dialog.min_size = Vector2(800, 600) * scale
|
||||
|
||||
|
||||
### Helpers
|
||||
@@ -464,13 +476,13 @@ func apply_theme() -> void:
|
||||
func build_open_menu() -> void:
|
||||
var menu = open_button.get_popup()
|
||||
menu.clear()
|
||||
menu.add_icon_item(get_theme_icon("Load", "EditorIcons"), DialogueConstants.translate(&"open.open"), OPEN_OPEN)
|
||||
menu.add_icon_item(get_theme_icon("Load", "EditorIcons"), DialogueConstants.translate(&"open.quick_open"), OPEN_QUICK)
|
||||
menu.add_icon_item(get_theme_icon("Load", "EditorIcons"), DMConstants.translate(&"open.open"), OPEN_OPEN)
|
||||
menu.add_icon_item(get_theme_icon("Load", "EditorIcons"), DMConstants.translate(&"open.quick_open"), OPEN_QUICK)
|
||||
menu.add_separator()
|
||||
|
||||
var recent_files = DialogueSettings.get_recent_files()
|
||||
var recent_files = DMSettings.get_recent_files()
|
||||
if recent_files.size() == 0:
|
||||
menu.add_item(DialogueConstants.translate(&"open.no_recent_files"))
|
||||
menu.add_item(DMConstants.translate(&"open.no_recent_files"))
|
||||
menu.set_item_disabled(2, true)
|
||||
else:
|
||||
for path in recent_files:
|
||||
@@ -478,7 +490,7 @@ func build_open_menu() -> void:
|
||||
menu.add_icon_item(get_theme_icon("File", "EditorIcons"), path)
|
||||
|
||||
menu.add_separator()
|
||||
menu.add_item(DialogueConstants.translate(&"open.clear_recent_files"), OPEN_CLEAR)
|
||||
menu.add_item(DMConstants.translate(&"open.clear_recent_files"), OPEN_CLEAR)
|
||||
if menu.id_pressed.is_connected(_on_open_menu_id_pressed):
|
||||
menu.id_pressed.disconnect(_on_open_menu_id_pressed)
|
||||
menu.id_pressed.connect(_on_open_menu_id_pressed)
|
||||
@@ -487,95 +499,34 @@ func build_open_menu() -> void:
|
||||
# Get the last place a CSV, etc was exported
|
||||
func get_last_export_path(extension: String) -> String:
|
||||
var filename = current_file_path.get_file().replace(".dialogue", "." + extension)
|
||||
return DialogueSettings.get_user_value("last_export_path", current_file_path.get_base_dir()) + "/" + filename
|
||||
return DMSettings.get_user_value("last_export_path", current_file_path.get_base_dir()) + "/" + filename
|
||||
|
||||
|
||||
# Check the current text for errors
|
||||
func parse() -> void:
|
||||
func compile() -> void:
|
||||
# Skip if nothing to parse
|
||||
if current_file_path == "": return
|
||||
|
||||
var parser = DialogueManagerParser.new()
|
||||
var errors: Array[Dictionary] = []
|
||||
if parser.parse(code_edit.text, current_file_path) != OK:
|
||||
errors = parser.get_errors()
|
||||
code_edit.errors = errors
|
||||
errors_panel.errors = errors
|
||||
parser.free()
|
||||
|
||||
var result: DMCompilerResult = DMCompiler.compile_string(code_edit.text, current_file_path)
|
||||
code_edit.errors = result.errors
|
||||
errors_panel.errors = result.errors
|
||||
title_list.titles = code_edit.get_titles()
|
||||
|
||||
|
||||
func show_build_error_dialog() -> void:
|
||||
build_error_dialog.dialog_text = DialogueConstants.translate(&"errors_with_build")
|
||||
build_error_dialog.dialog_text = DMConstants.translate(&"errors_with_build")
|
||||
build_error_dialog.popup_centered()
|
||||
|
||||
|
||||
# Generate translation line IDs for any line that doesn't already have one
|
||||
func generate_translations_keys() -> void:
|
||||
randomize()
|
||||
seed(Time.get_unix_time_from_system())
|
||||
|
||||
var parser = DialogueManagerParser.new()
|
||||
|
||||
var cursor: Vector2 = code_edit.get_cursor()
|
||||
var lines: PackedStringArray = code_edit.text.split("\n")
|
||||
|
||||
var key_regex = RegEx.new()
|
||||
key_regex.compile("\\[ID:(?<key>.*?)\\]")
|
||||
|
||||
# Make list of known keys
|
||||
var known_keys = {}
|
||||
for i in range(0, lines.size()):
|
||||
var line = lines[i]
|
||||
var found = key_regex.search(line)
|
||||
if found:
|
||||
var text = ""
|
||||
var l = line.replace(found.strings[0], "").strip_edges().strip_edges()
|
||||
if l.begins_with("- "):
|
||||
text = parser.extract_response_prompt(l)
|
||||
elif ":" in l:
|
||||
text = l.split(":")[1]
|
||||
else:
|
||||
text = l
|
||||
known_keys[found.strings[found.names.get("key")]] = text
|
||||
|
||||
# Add in any that are missing
|
||||
for i in lines.size():
|
||||
var line = lines[i]
|
||||
var l = line.strip_edges()
|
||||
|
||||
if parser.is_line_empty(l): continue
|
||||
if parser.is_condition_line(l, true): continue
|
||||
if parser.is_title_line(l): continue
|
||||
if parser.is_mutation_line(l): continue
|
||||
if parser.is_goto_line(l): continue
|
||||
if parser.is_import_line(l): continue
|
||||
|
||||
if "[ID:" in line: continue
|
||||
|
||||
var key = "t" + str(randi() % 1000000).sha1_text().substr(0, 10)
|
||||
while key in known_keys:
|
||||
key = "t" + str(randi() % 1000000).sha1_text().substr(0, 10)
|
||||
|
||||
var text = ""
|
||||
if l.begins_with("- "):
|
||||
text = parser.extract_response_prompt(l)
|
||||
else:
|
||||
text = l.substr(l.find(":") + 1)
|
||||
|
||||
text = text.replace("\n", "!NEWLINE!")
|
||||
line = line.replace("\\n", "!NEWLINE!")
|
||||
|
||||
lines[i] = line.replace(text, text + " [ID:%s]" % key).replace("!NEWLINE!", "\\n")
|
||||
known_keys[key] = text
|
||||
|
||||
code_edit.text = "\n".join(lines)
|
||||
var scroll_vertical = code_edit.scroll_vertical
|
||||
code_edit.text = DMTranslationUtilities.generate_translation_keys(code_edit.text)
|
||||
code_edit.set_cursor(cursor)
|
||||
code_edit.scroll_vertical = scroll_vertical
|
||||
_on_code_edit_text_changed()
|
||||
|
||||
parser.free()
|
||||
|
||||
|
||||
# Add a translation file to the project settings
|
||||
func add_path_to_project_translations(path: String) -> void:
|
||||
@@ -587,168 +538,23 @@ func add_path_to_project_translations(path: String) -> void:
|
||||
|
||||
# Export dialogue and responses to CSV
|
||||
func export_translations_to_csv(path: String) -> void:
|
||||
var default_locale: String = DialogueSettings.get_setting("default_csv_locale", "en")
|
||||
DMTranslationUtilities.export_translations_to_csv(path, code_edit.text, current_file_path)
|
||||
|
||||
var file: FileAccess
|
||||
|
||||
# If the file exists, open it first and work out which keys are already in it
|
||||
var existing_csv: Dictionary = {}
|
||||
var column_count: int = 2
|
||||
var default_locale_column: int = 1
|
||||
var character_column: int = -1
|
||||
var notes_column: int = -1
|
||||
if FileAccess.file_exists(path):
|
||||
file = FileAccess.open(path, FileAccess.READ)
|
||||
var is_first_line = true
|
||||
var line: Array
|
||||
while !file.eof_reached():
|
||||
line = file.get_csv_line()
|
||||
if is_first_line:
|
||||
is_first_line = false
|
||||
column_count = line.size()
|
||||
for i in range(1, line.size()):
|
||||
if line[i] == default_locale:
|
||||
default_locale_column = i
|
||||
elif line[i] == "_character":
|
||||
character_column = i
|
||||
elif line[i] == "_notes":
|
||||
notes_column = i
|
||||
|
||||
# Make sure the line isn't empty before adding it
|
||||
if line.size() > 0 and line[0].strip_edges() != "":
|
||||
existing_csv[line[0]] = line
|
||||
|
||||
# The character column wasn't found in the existing file but the setting is turned on
|
||||
if character_column == -1 and DialogueSettings.get_setting("include_character_in_translation_exports", false):
|
||||
character_column = column_count
|
||||
column_count += 1
|
||||
existing_csv["keys"].append("_character")
|
||||
|
||||
# The notes column wasn't found in the existing file but the setting is turned on
|
||||
if notes_column == -1 and DialogueSettings.get_setting("include_notes_in_translation_exports", false):
|
||||
notes_column = column_count
|
||||
column_count += 1
|
||||
existing_csv["keys"].append("_notes")
|
||||
|
||||
# Start a new file
|
||||
file = FileAccess.open(path, FileAccess.WRITE)
|
||||
|
||||
if not FileAccess.file_exists(path):
|
||||
var headings: PackedStringArray = ["keys", default_locale]
|
||||
if DialogueSettings.get_setting("include_character_in_translation_exports", false):
|
||||
character_column = headings.size()
|
||||
headings.append("_character")
|
||||
if DialogueSettings.get_setting("include_notes_in_translation_exports", false):
|
||||
notes_column = headings.size()
|
||||
headings.append("_notes")
|
||||
file.store_csv_line(headings)
|
||||
column_count = headings.size()
|
||||
|
||||
# Write our translations to file
|
||||
var known_keys: PackedStringArray = []
|
||||
|
||||
var dialogue: Dictionary = DialogueManagerParser.parse_string(code_edit.text, current_file_path).lines
|
||||
|
||||
# Make a list of stuff that needs to go into the file
|
||||
var lines_to_save = []
|
||||
for key in dialogue.keys():
|
||||
var line: Dictionary = dialogue.get(key)
|
||||
|
||||
if not line.type in [DialogueConstants.TYPE_DIALOGUE, DialogueConstants.TYPE_RESPONSE]: continue
|
||||
if line.translation_key in known_keys: continue
|
||||
|
||||
known_keys.append(line.translation_key)
|
||||
|
||||
var line_to_save: PackedStringArray = []
|
||||
if existing_csv.has(line.translation_key):
|
||||
line_to_save = existing_csv.get(line.translation_key)
|
||||
line_to_save.resize(column_count)
|
||||
existing_csv.erase(line.translation_key)
|
||||
else:
|
||||
line_to_save.resize(column_count)
|
||||
line_to_save[0] = line.translation_key
|
||||
|
||||
line_to_save[default_locale_column] = line.text
|
||||
if character_column > -1:
|
||||
line_to_save[character_column] = "(response)" if line.type == DialogueConstants.TYPE_RESPONSE else line.character
|
||||
if notes_column > -1:
|
||||
line_to_save[notes_column] = line.notes
|
||||
|
||||
lines_to_save.append(line_to_save)
|
||||
|
||||
# Store lines in the file, starting with anything that already exists that hasn't been touched
|
||||
for line in existing_csv.values():
|
||||
file.store_csv_line(line)
|
||||
for line in lines_to_save:
|
||||
file.store_csv_line(line)
|
||||
|
||||
file.close()
|
||||
|
||||
plugin.get_editor_interface().get_resource_filesystem().scan()
|
||||
plugin.get_editor_interface().get_file_system_dock().call_deferred("navigate_to_path", path)
|
||||
EditorInterface.get_resource_filesystem().scan()
|
||||
EditorInterface.get_file_system_dock().call_deferred("navigate_to_path", path)
|
||||
|
||||
# Add it to the project l10n settings if it's not already there
|
||||
var default_locale: String = DMSettings.get_setting(DMSettings.DEFAULT_CSV_LOCALE, "en")
|
||||
var language_code: RegExMatch = RegEx.create_from_string("^[a-z]{2,3}").search(default_locale)
|
||||
var translation_path: String = path.replace(".csv", ".%s.translation" % language_code.get_string())
|
||||
call_deferred("add_path_to_project_translations", translation_path)
|
||||
|
||||
|
||||
func export_character_names_to_csv(path: String) -> void:
|
||||
var file: FileAccess
|
||||
DMTranslationUtilities.export_character_names_to_csv(path, code_edit.text, current_file_path)
|
||||
|
||||
# If the file exists, open it first and work out which keys are already in it
|
||||
var existing_csv = {}
|
||||
var commas = []
|
||||
if FileAccess.file_exists(path):
|
||||
file = FileAccess.open(path, FileAccess.READ)
|
||||
var is_first_line = true
|
||||
var line: Array
|
||||
while !file.eof_reached():
|
||||
line = file.get_csv_line()
|
||||
if is_first_line:
|
||||
is_first_line = false
|
||||
for i in range(2, line.size()):
|
||||
commas.append("")
|
||||
# Make sure the line isn't empty before adding it
|
||||
if line.size() > 0 and line[0].strip_edges() != "":
|
||||
existing_csv[line[0]] = line
|
||||
|
||||
# Start a new file
|
||||
file = FileAccess.open(path, FileAccess.WRITE)
|
||||
|
||||
if not file.file_exists(path):
|
||||
file.store_csv_line(["keys", DialogueSettings.get_setting("default_csv_locale", "en")])
|
||||
|
||||
# Write our translations to file
|
||||
var known_keys: PackedStringArray = []
|
||||
|
||||
var character_names: PackedStringArray = DialogueManagerParser.parse_string(code_edit.text, current_file_path).character_names
|
||||
|
||||
# Make a list of stuff that needs to go into the file
|
||||
var lines_to_save = []
|
||||
for character_name in character_names:
|
||||
if character_name in known_keys: continue
|
||||
|
||||
known_keys.append(character_name)
|
||||
|
||||
if existing_csv.has(character_name):
|
||||
var existing_line = existing_csv.get(character_name)
|
||||
existing_line[1] = character_name
|
||||
lines_to_save.append(existing_line)
|
||||
existing_csv.erase(character_name)
|
||||
else:
|
||||
lines_to_save.append(PackedStringArray([character_name, character_name] + commas))
|
||||
|
||||
# Store lines in the file, starting with anything that already exists that hasn't been touched
|
||||
for line in existing_csv.values():
|
||||
file.store_csv_line(line)
|
||||
for line in lines_to_save:
|
||||
file.store_csv_line(line)
|
||||
|
||||
file.close()
|
||||
|
||||
plugin.get_editor_interface().get_resource_filesystem().scan()
|
||||
plugin.get_editor_interface().get_file_system_dock().call_deferred("navigate_to_path", path)
|
||||
EditorInterface.get_resource_filesystem().scan()
|
||||
EditorInterface.get_file_system_dock().call_deferred("navigate_to_path", path)
|
||||
|
||||
# Add it to the project l10n settings if it's not already there
|
||||
var translation_path: String = path.replace(".csv", ".en.translation")
|
||||
@@ -758,54 +564,9 @@ func export_character_names_to_csv(path: String) -> void:
|
||||
# Import changes back from an exported CSV by matching translation keys
|
||||
func import_translations_from_csv(path: String) -> void:
|
||||
var cursor: Vector2 = code_edit.get_cursor()
|
||||
|
||||
if not FileAccess.file_exists(path): return
|
||||
|
||||
# Open the CSV file and build a dictionary of the known keys
|
||||
var keys: Dictionary = {}
|
||||
var file: FileAccess = FileAccess.open(path, FileAccess.READ)
|
||||
var csv_line: Array
|
||||
while !file.eof_reached():
|
||||
csv_line = file.get_csv_line()
|
||||
if csv_line.size() > 1:
|
||||
keys[csv_line[0]] = csv_line[1]
|
||||
|
||||
var parser: DialogueManagerParser = DialogueManagerParser.new()
|
||||
|
||||
# Now look over each line in the dialogue and replace the content for matched keys
|
||||
var lines: PackedStringArray = code_edit.text.split("\n")
|
||||
var start_index: int = 0
|
||||
var end_index: int = 0
|
||||
for i in range(0, lines.size()):
|
||||
var line: String = lines[i]
|
||||
var translation_key: String = parser.extract_translation(line)
|
||||
if keys.has(translation_key):
|
||||
if parser.is_dialogue_line(line):
|
||||
start_index = 0
|
||||
# See if we need to skip over a character name
|
||||
line = line.replace("\\:", "!ESCAPED_COLON!")
|
||||
if ": " in line:
|
||||
start_index = line.find(": ") + 2
|
||||
lines[i] = (line.substr(0, start_index) + keys.get(translation_key) + " [ID:" + translation_key + "]").replace("!ESCAPED_COLON!", ":")
|
||||
|
||||
elif parser.is_response_line(line):
|
||||
start_index = line.find("- ") + 2
|
||||
# See if we need to skip over a character name
|
||||
line = line.replace("\\:", "!ESCAPED_COLON!")
|
||||
if ": " in line:
|
||||
start_index = line.find(": ") + 2
|
||||
end_index = line.length()
|
||||
if " =>" in line:
|
||||
end_index = line.find(" =>")
|
||||
if " [if " in line:
|
||||
end_index = line.find(" [if ")
|
||||
lines[i] = (line.substr(0, start_index) + keys.get(translation_key) + " [ID:" + translation_key + "]" + line.substr(end_index)).replace("!ESCAPED_COLON!", ":")
|
||||
|
||||
code_edit.text = "\n".join(lines)
|
||||
code_edit.text = DMTranslationUtilities.import_translations_from_csv(path, code_edit.text)
|
||||
code_edit.set_cursor(cursor)
|
||||
|
||||
parser.free()
|
||||
|
||||
|
||||
func show_search_form(is_enabled: bool) -> void:
|
||||
if code_edit.last_selected_text:
|
||||
@@ -816,6 +577,16 @@ func show_search_form(is_enabled: bool) -> void:
|
||||
search_and_replace.focus_line_edit()
|
||||
|
||||
|
||||
func run_test_scene(from_key: String) -> void:
|
||||
DMSettings.set_user_value("run_title", from_key)
|
||||
DMSettings.set_user_value("is_running_test_scene", true)
|
||||
DMSettings.set_user_value("run_resource_path", current_file_path)
|
||||
var test_scene_path: String = DMSettings.get_setting(DMSettings.CUSTOM_TEST_SCENE_PATH, "res://addons/dialogue_manager/test_scene.tscn")
|
||||
if ResourceUID.has_id(ResourceUID.text_to_id(test_scene_path)):
|
||||
test_scene_path = ResourceUID.get_id_path(ResourceUID.text_to_id(test_scene_path))
|
||||
EditorInterface.play_custom_scene(test_scene_path)
|
||||
|
||||
|
||||
### Signals
|
||||
|
||||
|
||||
@@ -829,30 +600,32 @@ func _on_files_moved(old_file: String, new_file: String) -> void:
|
||||
func _on_cache_file_content_changed(path: String, new_content: String) -> void:
|
||||
if open_buffers.has(path):
|
||||
var buffer = open_buffers[path]
|
||||
if buffer.text != new_content:
|
||||
if buffer.text == buffer.pristine_text and buffer.text != new_content:
|
||||
buffer.text = new_content
|
||||
buffer.pristine_text = new_content
|
||||
code_edit.text = new_content
|
||||
title_list.titles = code_edit.get_titles()
|
||||
buffer.pristine_text = new_content
|
||||
|
||||
|
||||
func _on_editor_settings_changed() -> void:
|
||||
var editor_settings: EditorSettings = plugin.get_editor_interface().get_editor_settings()
|
||||
var editor_settings: EditorSettings = EditorInterface.get_editor_settings()
|
||||
code_edit.minimap_draw = editor_settings.get_setting("text_editor/appearance/minimap/show_minimap")
|
||||
code_edit.minimap_width = editor_settings.get_setting("text_editor/appearance/minimap/minimap_width")
|
||||
code_edit.scroll_smooth = editor_settings.get_setting("text_editor/behavior/navigation/smooth_scrolling")
|
||||
|
||||
|
||||
func _on_project_settings_changed() -> void:
|
||||
code_edit.wrap_mode = TextEdit.LINE_WRAPPING_BOUNDARY if DMSettings.get_setting(DMSettings.WRAP_LONG_LINES, false) else TextEdit.LINE_WRAPPING_NONE
|
||||
|
||||
|
||||
func _on_open_menu_id_pressed(id: int) -> void:
|
||||
match id:
|
||||
OPEN_OPEN:
|
||||
open_dialog.popup_centered()
|
||||
OPEN_QUICK:
|
||||
quick_open_files_list.files = Engine.get_meta("DialogueCache").get_files()
|
||||
quick_open_dialog.popup_centered()
|
||||
quick_open_files_list.focus_filter()
|
||||
quick_open()
|
||||
OPEN_CLEAR:
|
||||
DialogueSettings.clear_recent_files()
|
||||
DMSettings.clear_recent_files()
|
||||
build_open_menu()
|
||||
_:
|
||||
var menu = open_button.get_popup()
|
||||
@@ -915,7 +688,7 @@ func _on_translations_button_menu_id_pressed(id: int) -> void:
|
||||
|
||||
|
||||
func _on_export_dialog_file_selected(path: String) -> void:
|
||||
DialogueSettings.set_user_value("last_export_path", path.get_base_dir())
|
||||
DMSettings.set_user_value("last_export_path", path.get_base_dir())
|
||||
match path.get_extension():
|
||||
"csv":
|
||||
match translation_source:
|
||||
@@ -926,7 +699,7 @@ func _on_export_dialog_file_selected(path: String) -> void:
|
||||
|
||||
|
||||
func _on_import_dialog_file_selected(path: String) -> void:
|
||||
DialogueSettings.set_user_value("last_export_path", path.get_base_dir())
|
||||
DMSettings.set_user_value("last_export_path", path.get_base_dir())
|
||||
import_translations_from_csv(path)
|
||||
|
||||
|
||||
@@ -940,15 +713,16 @@ func _on_main_view_visibility_changed() -> void:
|
||||
|
||||
|
||||
func _on_new_button_pressed() -> void:
|
||||
new_dialog.current_file = "dialogue"
|
||||
new_dialog.current_file = "untitled"
|
||||
new_dialog.popup_centered()
|
||||
|
||||
|
||||
func _on_new_dialog_confirmed() -> void:
|
||||
if new_dialog.current_file.get_basename() == "":
|
||||
var path = "res://untitled.dialogue"
|
||||
new_file(path)
|
||||
open_file(path)
|
||||
var path: String = new_dialog.current_path
|
||||
if path.get_file() == ".dialogue":
|
||||
path = "%s/untitled.dialogue" % path.get_basename()
|
||||
new_file(path)
|
||||
open_file(path)
|
||||
|
||||
|
||||
func _on_new_dialog_file_selected(path: String) -> void:
|
||||
@@ -977,8 +751,8 @@ func _on_quick_open_files_list_file_double_clicked(file_path: String) -> void:
|
||||
|
||||
|
||||
func _on_quick_open_dialog_confirmed() -> void:
|
||||
if quick_open_files_list.current_file_path:
|
||||
open_file(quick_open_files_list.current_file_path)
|
||||
if quick_open_files_list.last_selected_file_path:
|
||||
open_file(quick_open_files_list.last_selected_file_path)
|
||||
|
||||
|
||||
func _on_save_all_button_pressed() -> void:
|
||||
@@ -986,8 +760,7 @@ func _on_save_all_button_pressed() -> void:
|
||||
|
||||
|
||||
func _on_find_in_files_button_pressed() -> void:
|
||||
find_in_files_dialog.popup_centered()
|
||||
find_in_files.prepare()
|
||||
plugin.show_find_in_dialogue()
|
||||
|
||||
|
||||
func _on_code_edit_text_changed() -> void:
|
||||
@@ -1000,13 +773,16 @@ func _on_code_edit_text_changed() -> void:
|
||||
parse_timer.start(1)
|
||||
|
||||
|
||||
func _on_code_edit_scroll_changed(value: int) -> void:
|
||||
DMSettings.set_scroll(current_file_path, code_edit.scroll_vertical)
|
||||
|
||||
|
||||
func _on_code_edit_active_title_change(title: String) -> void:
|
||||
title_list.select_title(title)
|
||||
DialogueSettings.set_user_value("run_title", title)
|
||||
|
||||
|
||||
func _on_code_edit_caret_changed() -> void:
|
||||
DialogueSettings.set_caret(current_file_path, code_edit.get_cursor())
|
||||
DMSettings.set_caret(current_file_path, code_edit.get_cursor())
|
||||
|
||||
|
||||
func _on_code_edit_error_clicked(line_number: int) -> void:
|
||||
@@ -1020,11 +796,11 @@ func _on_title_list_title_selected(title: String) -> void:
|
||||
|
||||
func _on_parse_timer_timeout() -> void:
|
||||
parse_timer.stop()
|
||||
parse()
|
||||
compile()
|
||||
|
||||
|
||||
func _on_errors_panel_error_pressed(line_number: int, column_number: int) -> void:
|
||||
code_edit.set_caret_line(line_number)
|
||||
code_edit.set_caret_line(line_number - 1)
|
||||
code_edit.set_caret_column(column_number)
|
||||
code_edit.grab_focus()
|
||||
|
||||
@@ -1043,35 +819,32 @@ func _on_search_and_replace_close_requested() -> void:
|
||||
code_edit.grab_focus()
|
||||
|
||||
|
||||
func _on_settings_button_pressed() -> void:
|
||||
settings_view.prepare()
|
||||
settings_dialog.popup_centered()
|
||||
|
||||
|
||||
func _on_settings_view_script_button_pressed(path: String) -> void:
|
||||
settings_dialog.hide()
|
||||
plugin.get_editor_interface().edit_resource(load(path))
|
||||
|
||||
|
||||
func _on_test_button_pressed() -> void:
|
||||
save_file(current_file_path, false)
|
||||
Engine.get_meta("DialogueCache").reimport_files([current_file_path])
|
||||
Engine.get_meta("DMCache").reimport_files([current_file_path])
|
||||
|
||||
if errors_panel.errors.size() > 0:
|
||||
errors_dialog.popup_centered()
|
||||
return
|
||||
|
||||
DialogueSettings.set_user_value("is_running_test_scene", true)
|
||||
DialogueSettings.set_user_value("run_resource_path", current_file_path)
|
||||
var test_scene_path: String = DialogueSettings.get_setting("custom_test_scene_path", "res://addons/dialogue_manager/test_scene.tscn")
|
||||
plugin.get_editor_interface().play_custom_scene(test_scene_path)
|
||||
run_test_scene("")
|
||||
|
||||
|
||||
func _on_settings_dialog_confirmed() -> void:
|
||||
settings_view.apply_settings_changes()
|
||||
parse()
|
||||
code_edit.wrap_mode = TextEdit.LINE_WRAPPING_BOUNDARY if DialogueSettings.get_setting("wrap_lines", false) else TextEdit.LINE_WRAPPING_NONE
|
||||
code_edit.grab_focus()
|
||||
func _on_test_line_button_pressed() -> void:
|
||||
save_file(current_file_path)
|
||||
|
||||
if errors_panel.errors.size() > 0:
|
||||
errors_dialog.popup_centered()
|
||||
return
|
||||
|
||||
# Find next non-empty line
|
||||
var line_to_run: int = 0
|
||||
for i in range(code_edit.get_cursor().y, code_edit.get_line_count()):
|
||||
if not code_edit.get_line(i).is_empty():
|
||||
line_to_run = i
|
||||
break
|
||||
|
||||
run_test_scene(str(line_to_run))
|
||||
|
||||
|
||||
func _on_support_button_pressed() -> void:
|
||||
@@ -1096,14 +869,14 @@ func _on_files_popup_menu_about_to_popup() -> void:
|
||||
|
||||
var shortcuts: Dictionary = plugin.get_editor_shortcuts()
|
||||
|
||||
files_popup_menu.add_item(DialogueConstants.translate(&"buffer.save"), ITEM_SAVE, OS.find_keycode_from_string(shortcuts.get("save")[0].as_text_keycode()))
|
||||
files_popup_menu.add_item(DialogueConstants.translate(&"buffer.save_as"), ITEM_SAVE_AS)
|
||||
files_popup_menu.add_item(DialogueConstants.translate(&"buffer.close"), ITEM_CLOSE, OS.find_keycode_from_string(shortcuts.get("close_file")[0].as_text_keycode()))
|
||||
files_popup_menu.add_item(DialogueConstants.translate(&"buffer.close_all"), ITEM_CLOSE_ALL)
|
||||
files_popup_menu.add_item(DialogueConstants.translate(&"buffer.close_other_files"), ITEM_CLOSE_OTHERS)
|
||||
files_popup_menu.add_item(DMConstants.translate(&"buffer.save"), ITEM_SAVE, OS.find_keycode_from_string(shortcuts.get("save")[0].as_text_keycode()))
|
||||
files_popup_menu.add_item(DMConstants.translate(&"buffer.save_as"), ITEM_SAVE_AS)
|
||||
files_popup_menu.add_item(DMConstants.translate(&"buffer.close"), ITEM_CLOSE, OS.find_keycode_from_string(shortcuts.get("close_file")[0].as_text_keycode()))
|
||||
files_popup_menu.add_item(DMConstants.translate(&"buffer.close_all"), ITEM_CLOSE_ALL)
|
||||
files_popup_menu.add_item(DMConstants.translate(&"buffer.close_other_files"), ITEM_CLOSE_OTHERS)
|
||||
files_popup_menu.add_separator()
|
||||
files_popup_menu.add_item(DialogueConstants.translate(&"buffer.copy_file_path"), ITEM_COPY_PATH)
|
||||
files_popup_menu.add_item(DialogueConstants.translate(&"buffer.show_in_filesystem"), ITEM_SHOW_IN_FILESYSTEM)
|
||||
files_popup_menu.add_item(DMConstants.translate(&"buffer.copy_file_path"), ITEM_COPY_PATH)
|
||||
files_popup_menu.add_item(DMConstants.translate(&"buffer.show_in_filesystem"), ITEM_SHOW_IN_FILESYSTEM)
|
||||
|
||||
|
||||
func _on_files_popup_menu_id_pressed(id: int) -> void:
|
||||
@@ -1153,3 +926,22 @@ func _on_close_confirmation_dialog_custom_action(action: StringName) -> void:
|
||||
func _on_find_in_files_result_selected(path: String, cursor: Vector2, length: int) -> void:
|
||||
open_file(path)
|
||||
code_edit.select(cursor.y, cursor.x, cursor.y, cursor.x + length)
|
||||
code_edit.set_line_as_center_visible(cursor.y)
|
||||
|
||||
|
||||
func _on_banner_image_gui_input(event: InputEvent) -> void:
|
||||
if event.is_pressed():
|
||||
OS.shell_open("https://bravestcoconut.com/wishlist")
|
||||
|
||||
|
||||
func _on_banner_new_button_pressed() -> void:
|
||||
new_dialog.current_file = "untitled"
|
||||
new_dialog.popup_centered()
|
||||
|
||||
|
||||
func _on_banner_quick_open_pressed() -> void:
|
||||
quick_open()
|
||||
|
||||
|
||||
func _on_banner_examples_pressed() -> void:
|
||||
OS.shell_open("https://itch.io/c/5226650/godot-dialogue-manager-example-projects")
|
||||
|
||||
Reference in New Issue
Block a user