44class_name ParleyMainPanel extends VBoxContainer
55
66
7+ const ParleyExport = preload ("./parley_export.gd" )
8+
9+
710const new_file_icon : CompressedTexture2D = preload ("./assets/New.svg" )
811const load_file_icon : CompressedTexture2D = preload ("./assets/Load.svg" )
9- const export_to_csv_icon : CompressedTexture2D = preload ("./assets/Export.svg" )
12+ const export_icon : CompressedTexture2D = preload ("./assets/Export.svg" )
1013const insert_after_icon : CompressedTexture2D = preload ("./assets/InsertAfter.svg" )
1114const dialogue_icon : CompressedTexture2D = preload ("./assets/Dialogue.svg" )
1215const dialogue_option_icon : CompressedTexture2D = preload ("./assets/DialogueOption.svg" )
@@ -38,10 +41,11 @@ var parley_manager: ParleyManager
3841
3942@onready var file_menu : MenuButton = % FileMenu
4043@onready var insert_menu : MenuButton = % InsertMenu
44+ @onready var translations_menu : MenuButton = % TranslationMenu
4145@onready var docs_button : Button = % DocsButton
4246@onready var new_dialogue_sequence_modal : ParleyNewDialogueSequenceModal = % NewDialogueSequenceModal
4347@onready var edit_dialogue_sequence_modal : ParleyEditDialogueSequenceModal = % EditDialogueSequenceModal
44- @onready var export_to_csv_modal : ParleyExportToCsvModal = % ExportToCsvModal
48+ @onready var export_modal : ParleyExportModal = % ExportModal
4549@onready var select_locale_modal : Window = % SelectLocaleModal
4650@onready var editor : HSplitContainer = % EditorView
4751@onready var sidebar : ParleySidebar = % Sidebar
@@ -218,6 +222,7 @@ func _render_test_locale_editor(on_ready: bool = false) -> void:
218222func _setup (on_ready : bool = false ) -> void :
219223 _setup_file_menu ()
220224 _setup_insert_menu ()
225+ _render_translations_menu ()
221226 _render_toolbar ()
222227 _render_bottom_panel ()
223228 _render_test_locale_editor (on_ready )
@@ -230,7 +235,7 @@ func _setup_file_menu() -> void:
230235 popup .add_icon_item (new_file_icon , "New Dialogue Sequence..." , 0 )
231236 popup .add_icon_item (load_file_icon , "Open Dialogue Sequence..." , 1 )
232237 popup .add_separator ("Export" )
233- popup .add_icon_item (export_to_csv_icon , "Export to CSV..." , 2 )
238+ popup .add_icon_item (export_icon , "Export to CSV..." , 2 )
234239 ParleyUtils .signals .safe_connect (popup .id_pressed , _on_file_id_pressed )
235240
236241
@@ -252,6 +257,22 @@ func _setup_insert_menu() -> void:
252257 popup .add_icon_item (end_node_icon , ParleyDialogueSequenceAst .get_type_name (ParleyDialogueSequenceAst .Type .END ), ParleyDialogueSequenceAst .Type .END )
253258 popup .add_icon_item (group_node_icon , ParleyDialogueSequenceAst .get_type_name (ParleyDialogueSequenceAst .Type .GROUP ), ParleyDialogueSequenceAst .Type .GROUP )
254259 ParleyUtils .signals .safe_connect (popup .id_pressed , _on_insert_id_pressed )
260+
261+
262+ func _render_translations_menu () -> void :
263+ var popup : PopupMenu = translations_menu .get_popup ()
264+ popup .clear ()
265+
266+ popup .add_icon_item (export_icon , "Export Dialogue to CSV..." , 0 )
267+ popup .set_item_tooltip (0 , "Export Dialogue Text Translations to CSV" )
268+
269+ popup .add_icon_item (export_icon , "Export Characters to CSV..." , 1 )
270+ popup .set_item_tooltip (1 , "Export Character Translations to CSV" )
271+
272+ popup .add_icon_item (export_icon , "Import Dialogue from CSV..." , 2 )
273+ popup .set_item_tooltip (2 , "Import Dialogue Text Translations from CSV" )
274+
275+ ParleyUtils .signals .safe_connect (popup .id_pressed , _on_translations_menu_id_pressed )
255276#endregion
256277
257278
@@ -265,8 +286,7 @@ func _on_file_id_pressed(id: int) -> void:
265286 # TODO: get this from config (note, see the Node inspector as well)
266287 open_file_dialogue .current_dir = "res://dialogue_sequences"
267288 2 :
268- export_to_csv_modal .dialogue_ast = dialogue_ast
269- export_to_csv_modal .render ()
289+ export_modal .render (ParleyExportModal .ExportType .Node , ParleyExportModal .FileType .Csv , dialogue_ast )
270290 _ :
271291 print_rich (ParleyUtils .log .info_msg ("Unknown option ID pressed: {id} " .format ({'id' : id })))
272292
@@ -320,6 +340,19 @@ func _on_insert_id_pressed(type: ParleyDialogueSequenceAst.Type) -> void:
320340 await refresh ()
321341
322342
343+ func _on_translations_menu_id_pressed (id : int ) -> void :
344+ match id :
345+ 0 :
346+ export_modal .render (ParleyExportModal .ExportType .DialogueTextTranslation , ParleyExportModal .FileType .Csv , dialogue_ast )
347+ 1 :
348+ export_modal .render (ParleyExportModal .ExportType .CharacterNameTranslation , ParleyExportModal .FileType .Csv , dialogue_ast )
349+ 1 :
350+ # IMPORT
351+ return
352+ _ :
353+ print_rich (ParleyUtils .log .info_msg ("Unknown option ID pressed: {id} " .format ({'id' : id })))
354+
355+
323356func _on_save_pressed () -> void :
324357 var result : int = _save_dialogue ()
325358 if result != OK :
@@ -697,6 +730,21 @@ func _on_docs_button_pressed() -> void:
697730 var result : int = OS .shell_open (href )
698731 if result != OK :
699732 push_error (ParleyUtils .log .error_msg ("Unable to navigate to Parley Documentation at %s : %s " % [href , result ]))
733+
734+
735+ func _on_export_requested (export_type : ParleyExportModal .ExportType , file_type : ParleyExportModal .FileType , dialogue_sequence_ast : ParleyDialogueSequenceAst , path : String ) -> void :
736+ var file_type_name : String = ParleyUtils .string .get_enum_key_name (ParleyExportModal .FileType , file_type )
737+ var export_type_name : String = ParleyUtils .string .get_enum_key_name (ParleyExportModal .ExportType , export_type )
738+ match export_type :
739+ ParleyExportModal .ExportType .Node :
740+ ParleyExport .export_node (file_type , dialogue_sequence_ast , path )
741+ ParleyExportModal .ExportType .DialogueTextTranslation :
742+ ParleyExport .export_dialogue_text_translation (file_type , dialogue_sequence_ast , path )
743+ ParleyExportModal .ExportType .CharacterNameTranslation :
744+ ParleyExport .export_character_name_translation (file_type , dialogue_sequence_ast , path )
745+ _ :
746+ push_error (ParleyUtils .log .error_msg ("Unable to export data: unknown export type (file_type:%s , export_type:%s )" % [file_type_name , export_type_name ]))
747+ return
700748#endregion
701749
702750
0 commit comments