|  |  |  | @tool | 
					
						
							|  |  |  | extends MarginContainer | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | enum { | 
					
						
							|  |  |  |     EDITBOX_DUPLICATE = 1, | 
					
						
							|  |  |  |     EDITBOX_RENAME, | 
					
						
							|  |  |  |     EDITBOX_DELETE, | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | const TextEditingUtilsClass := preload("res://addons/resources_spreadsheet_view/text_editing_utils.gd") | 
					
						
							|  |  |  | const TablesPluginSettingsClass := preload("res://addons/resources_spreadsheet_view/settings_grid.gd") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | @export @onready var editor_view := $"../.." | 
					
						
							|  |  |  | @export @onready var selection := $"../../SelectionManager" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | @onready var editbox_node := $"Control/ColorRect/Popup" | 
					
						
							|  |  |  | @onready var editbox_label : Label = editbox_node.get_node("Panel/VBoxContainer/Label") | 
					
						
							|  |  |  | @onready var editbox_input : LineEdit = editbox_node.get_node("Panel/VBoxContainer/LineEdit") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var cell : Control | 
					
						
							|  |  |  | var editbox_action : int | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _ready(): | 
					
						
							|  |  |  |     editbox_input.get_node("../..").add_theme_stylebox_override( | 
					
						
							|  |  |  |         "panel", | 
					
						
							|  |  |  |         get_theme_stylebox(&"Content", &"EditorStyles") | 
					
						
							|  |  |  |     ) | 
					
						
							|  |  |  |     editbox_input.text_submitted.connect(func(_new_text): _on_editbox_accepted()) | 
					
						
							|  |  |  |     close() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _on_grid_cells_rightclicked(cells): | 
					
						
							|  |  |  |     open(cells) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _on_grid_cells_selected(cells): | 
					
						
							|  |  |  |     open(cells, true, true) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func open(cells : Array, pin_to_cell : bool = false, from_leftclick : bool = false): | 
					
						
							|  |  |  |     if cells.size() == 0 or (from_leftclick and !ProjectSettings.get_setting(TablesPluginSettingsClass.PREFIX + "context_menu_on_leftclick")): | 
					
						
							|  |  |  |         hide() | 
					
						
							|  |  |  |         cell = null | 
					
						
							|  |  |  |         return | 
					
						
							|  |  |  |      | 
					
						
							|  |  |  |     if pin_to_cell: | 
					
						
							|  |  |  |         cell = cells[-1] | 
					
						
							|  |  |  |         set_deferred(&"global_position", Vector2( | 
					
						
							|  |  |  |             cell.global_position.x + cell.size.x, | 
					
						
							|  |  |  |             cell.global_position.y | 
					
						
							|  |  |  |         )) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     else: | 
					
						
							|  |  |  |         cell = null | 
					
						
							|  |  |  |         set_deferred(&"global_position", get_global_mouse_position() + Vector2.ONE) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     show() | 
					
						
							|  |  |  |     size = Vector2.ZERO | 
					
						
							|  |  |  |     top_level = true | 
					
						
							|  |  |  |     $"Control2/Label".text = str(cells.size()) + (" Cells" if cells.size() % 10 != 1 else " Cell") | 
					
						
							|  |  |  |     $"GridContainer/Rename".visible = editor_view.has_row_names() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func close(): | 
					
						
							|  |  |  |     pass | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _input(event : InputEvent): | 
					
						
							|  |  |  |     if !editor_view.is_visible_in_tree(): | 
					
						
							|  |  |  |         close() | 
					
						
							|  |  |  |         return | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     if event is InputEventMouseButton and event.is_pressed(): | 
					
						
							|  |  |  |         close() | 
					
						
							|  |  |  |         return | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     if event is InputEventKey: | 
					
						
							|  |  |  |         if event.is_pressed() and event.is_command_or_control_pressed(): | 
					
						
							|  |  |  |             global_position = get_global_mouse_position() + Vector2.ONE | 
					
						
							|  |  |  |             if cell != null: | 
					
						
							|  |  |  |                 global_position = Vector2( | 
					
						
							|  |  |  |                     cell.global_position.x + cell.size.x, | 
					
						
							|  |  |  |                     cell.global_position.y | 
					
						
							|  |  |  |                 ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             # Dupe | 
					
						
							|  |  |  |             if event.keycode == KEY_D: | 
					
						
							|  |  |  |                 _on_Duplicate_pressed() | 
					
						
							|  |  |  |                 return | 
					
						
							|  |  |  |              | 
					
						
							|  |  |  |             # Rename | 
					
						
							|  |  |  |             if event.keycode == KEY_R: | 
					
						
							|  |  |  |                 _on_Rename_pressed() | 
					
						
							|  |  |  |                 return | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _on_Duplicate_pressed(): | 
					
						
							|  |  |  |     _show_editbox(EDITBOX_DUPLICATE) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _on_CbCopy_pressed(): | 
					
						
							|  |  |  |     TextEditingUtilsClass.multi_copy(selection.edited_cells_text) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _on_CbPaste_pressed(): | 
					
						
							|  |  |  |     editor_view.set_edited_cells_values( | 
					
						
							|  |  |  |         TextEditingUtilsClass.multi_paste( | 
					
						
							|  |  |  |             selection.edited_cells_text, | 
					
						
							|  |  |  |             selection.edit_cursor_positions | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  |     ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _on_Rename_pressed(): | 
					
						
							|  |  |  |     _show_editbox(EDITBOX_RENAME) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _on_Delete_pressed(): | 
					
						
							|  |  |  |     _show_editbox(EDITBOX_DELETE) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _show_editbox(action): | 
					
						
							|  |  |  |     editbox_action = action | 
					
						
							|  |  |  |     match action: | 
					
						
							|  |  |  |         EDITBOX_DUPLICATE: | 
					
						
							|  |  |  |             if !editor_view.has_row_names(): | 
					
						
							|  |  |  |                 _on_editbox_accepted() | 
					
						
							|  |  |  |                 return | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             if selection.edited_cells.size() == 1: | 
					
						
							|  |  |  |                 editbox_label.text = "Input new row's name..." | 
					
						
							|  |  |  |                 editbox_input.text = editor_view.get_last_selected_row()\ | 
					
						
							|  |  |  |                     .resource_path.get_file().get_basename() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             else: | 
					
						
							|  |  |  |                 editbox_label.text = "Input suffix to append to names..." | 
					
						
							|  |  |  |                 editbox_input.text = "" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         EDITBOX_RENAME: | 
					
						
							|  |  |  |             editbox_label.text = "Input new name for row..." | 
					
						
							|  |  |  |             editbox_input.text = editor_view.get_last_selected_row()\ | 
					
						
							|  |  |  |                 .resource_path.get_file().get_basename() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         EDITBOX_DELETE: | 
					
						
							|  |  |  |             editbox_label.text = "Really delete selected rows? (Irreversible!!!)" | 
					
						
							|  |  |  |             editbox_input.text = editor_view.get_last_selected_row()\ | 
					
						
							|  |  |  |                 .resource_path.get_file().get_basename() | 
					
						
							|  |  |  |      | 
					
						
							|  |  |  |     show() | 
					
						
							|  |  |  |     editbox_input.grab_focus() | 
					
						
							|  |  |  |     editbox_input.caret_column = 999999999 | 
					
						
							|  |  |  |     editbox_node.size = Vector2.ZERO | 
					
						
							|  |  |  |     editbox_node.show() | 
					
						
							|  |  |  |     $"Control/ColorRect".show() | 
					
						
							|  |  |  |     $"Control/ColorRect".top_level = true | 
					
						
							|  |  |  |     $"Control/ColorRect".size = get_viewport_rect().size * 4.0 | 
					
						
							|  |  |  |     editbox_node.global_position = ( | 
					
						
							|  |  |  |         global_position | 
					
						
							|  |  |  |         + size * 0.5 | 
					
						
							|  |  |  |         - editbox_node.get_child(0).size * 0.5 | 
					
						
							|  |  |  |     ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _on_editbox_closed(): | 
					
						
							|  |  |  |     editbox_node.hide() | 
					
						
							|  |  |  |     $"Control/ColorRect".hide() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _on_editbox_accepted(): | 
					
						
							|  |  |  |     match(editbox_action): | 
					
						
							|  |  |  |         EDITBOX_DUPLICATE: | 
					
						
							|  |  |  |             editor_view.duplicate_selected_rows(editbox_input.text) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         EDITBOX_RENAME: | 
					
						
							|  |  |  |             editor_view.rename_row(editor_view.get_last_selected_row(), editbox_input.text) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         EDITBOX_DELETE: | 
					
						
							|  |  |  |             editor_view.delete_selected_rows() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     _on_editbox_closed() |