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.

TextBlock.gd 3.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. tool
  2. extends Control
  3. var text_height = 21
  4. var editor_reference
  5. var preview = ''
  6. onready var toggler = get_node("PanelContainer/VBoxContainer/Header/VisibleToggle")
  7. # This is the information of this event and it will get parsed and saved to the JSON file.
  8. var event_data = {
  9. 'character': '',
  10. 'text': '',
  11. 'portrait': '',
  12. }
  13. onready var portrait_picker = $PanelContainer/VBoxContainer/Header/PortraitPicker
  14. func _ready():
  15. var _scale = get_constant("inspector_margin", "Editor")
  16. _scale = _scale * 0.125
  17. text_height = text_height * _scale
  18. connect("gui_input", self, '_on_gui_input')
  19. $PanelContainer/VBoxContainer/TextEdit.connect("focus_entered", self, "_on_TextEdit_focus_entered")
  20. $PanelContainer/VBoxContainer/TextEdit.set("rect_min_size", Vector2(0, 80))
  21. $PanelContainer/VBoxContainer/Header/CharacterPicker.connect('character_selected', self , '_on_character_selected')
  22. portrait_picker.get_popup().connect("index_pressed", self, '_on_portrait_selected')
  23. var c_list = DialogicUtil.get_sorted_character_list()
  24. if c_list.size() == 0:
  25. $PanelContainer/VBoxContainer/Header/CharacterPicker.visible = false
  26. else:
  27. # Default Speaker
  28. for c in c_list:
  29. if c['default_speaker']:
  30. event_data['character'] = c['file']
  31. func _on_character_selected(data):
  32. event_data['character'] = data['file']
  33. update_preview()
  34. func _on_portrait_selected(index):
  35. var text = portrait_picker.get_popup().get_item_text(index)
  36. if text == "[Don't change]":
  37. text = ''
  38. portrait_picker.text = ''
  39. event_data['portrait'] = text
  40. update_preview()
  41. func _on_TextEdit_text_changed():
  42. var text = $PanelContainer/VBoxContainer/TextEdit.text
  43. event_data['text'] = text
  44. update_preview()
  45. func load_text(text):
  46. get_node("VBoxContainer/TextEdit").text = text
  47. event_data['text'] = text
  48. update_preview()
  49. func load_data(data):
  50. event_data = data
  51. $PanelContainer/VBoxContainer/TextEdit.text = event_data['text']
  52. update_preview()
  53. func update_preview() -> String:
  54. portrait_picker.set_character(event_data['character'], event_data['portrait'])
  55. var t = $PanelContainer/VBoxContainer/TextEdit.text
  56. $PanelContainer/VBoxContainer/TextEdit.rect_min_size.y = text_height * (2 + t.count('\n'))
  57. for c in DialogicUtil.get_character_list():
  58. if c['file'] == event_data['character']:
  59. $PanelContainer/VBoxContainer/Header/CharacterPicker.set_data_by_file(event_data['character'])
  60. var text = event_data['text']
  61. var lines = text.count('\n')
  62. if text == '':
  63. return ''
  64. if '\n' in text:
  65. text = text.split('\n')[0]
  66. preview = text
  67. if preview.length() > 60:
  68. preview = preview.left(60) + '...'
  69. if lines > 0:
  70. preview += ' - ' + str(lines + 1) + ' lines'
  71. return preview
  72. func _on_gui_input(event):
  73. if event is InputEventMouseButton and event.is_pressed() and event.doubleclick:
  74. if event.button_index == 1:
  75. if toggler.pressed:
  76. toggler.pressed = false
  77. else:
  78. toggler.pressed = true
  79. func _on_TextEdit_focus_entered():
  80. # propagate to timeline to make this text event as active selected
  81. # to help improve keyboard shortcut workflows
  82. # only maybe only do this on left click since mouse wheel and
  83. # touch scrolling may triggers this event too
  84. if (Input.is_mouse_button_pressed(BUTTON_LEFT)):
  85. var timeline_editor = editor_reference.get_node_or_null('MainPanel/TimelineEditor')
  86. if (timeline_editor != null):
  87. # @todo select item and clear selection is marked as "private" in TimelineEditor.gd
  88. # consider to make it "public" or add a public helper function
  89. timeline_editor._clear_selection()
  90. timeline_editor._select_item(self)
  91. pass
  92. func _on_saver_timer_timeout():
  93. update_preview()
  94. # gets called when the user selects this node in the timeline
  95. func on_timeline_selected():
  96. $PanelContainer/VBoxContainer/TextEdit.grab_focus()
  97. pass