110 lines
4 KiB
GDScript
110 lines
4 KiB
GDScript
@tool
|
|
extends Control
|
|
|
|
## Script that handles the editor sidebar.
|
|
|
|
signal file_activated(file_path)
|
|
|
|
@onready var editors_manager = get_parent().get_parent()
|
|
|
|
|
|
func _ready():
|
|
%ResourcesList.item_selected.connect(_on_resources_list_item_selected)
|
|
editors_manager.resource_opened.connect(_on_editors_resource_opened)
|
|
editors_manager.editor_changed.connect(_on_editors_editor_changed)
|
|
%Search.right_icon = get_theme_icon("Search", "EditorIcons")
|
|
|
|
################################################################################
|
|
## EDITOR BUTTONS/LABELS
|
|
################################################################################
|
|
|
|
func add_icon_button(icon: Texture, tooltip: String) -> Button:
|
|
var button := Button.new()
|
|
button.icon = icon
|
|
button.tooltip_text = tooltip
|
|
%IconButtons.add_child(button)
|
|
return button
|
|
|
|
|
|
func add_custom_button(label:String, icon:Texture) -> Button:
|
|
var button := Button.new()
|
|
button.text = label
|
|
button.icon = icon
|
|
%CustomButtons.add_child(button)
|
|
return button
|
|
|
|
|
|
func hide_all_custom_buttons() -> void:
|
|
for button in %CustomButtons.get_children():
|
|
button.hide()
|
|
|
|
|
|
func set_current_resource_text(text:String) -> void:
|
|
%CurrentResource.text = text
|
|
%CurrentResource.visible = not text.is_empty()
|
|
|
|
|
|
func set_unsaved_indicator(saved:bool = true) -> void:
|
|
if saved and %CurrentResource.text.ends_with('(*)'):
|
|
%CurrentResource.text = %CurrentResource.text.trim_suffix('(*)')
|
|
if not saved and not %CurrentResource.text.ends_with('(*)'):
|
|
%CurrentResource.text = %CurrentResource.text+"(*)"
|
|
|
|
################################################################################
|
|
## RESOURCE LIST
|
|
################################################################################
|
|
|
|
func _on_editors_resource_opened(resource:Resource) -> void:
|
|
update_resource_list()
|
|
|
|
|
|
func _on_editors_editor_changed(previous:DialogicEditor, current:DialogicEditor) -> void:
|
|
update_resource_list()
|
|
|
|
|
|
func update_resource_list() -> void:
|
|
var filter :String = %Search.text
|
|
var current_file := ""
|
|
if editors_manager.current_editor and editors_manager.current_editor.current_resource:
|
|
current_file = editors_manager.current_editor.current_resource.resource_path
|
|
|
|
var character_directory: Dictionary = editors_manager.resource_helper.character_directory
|
|
var timeline_directory: Dictionary = editors_manager.resource_helper.timeline_directory
|
|
var latest_resources: Array = DialogicUtil.get_project_setting('dialogic/editor/last_resources', [])
|
|
for res in latest_resources:
|
|
if !FileAccess.file_exists(res):
|
|
latest_resources.erase(res)
|
|
ProjectSettings.set_setting('dialogic/editor/last_resources', latest_resources)
|
|
|
|
%ResourcesList.clear()
|
|
var idx := 0
|
|
for character in character_directory.values():
|
|
if character['full_path'] in latest_resources:
|
|
if filter.is_empty() or filter.to_lower() in character['unique_short_path'].to_lower():
|
|
%ResourcesList.add_item(
|
|
character['unique_short_path'],
|
|
load("res://addons/dialogic/Editor/Images/Resources/character.svg"))
|
|
%ResourcesList.set_item_metadata(idx, character['full_path'])
|
|
%ResourcesList.set_item_tooltip(idx, character['full_path'])
|
|
if character['full_path'] == current_file:
|
|
%ResourcesList.select(idx)
|
|
%ResourcesList.set_item_custom_fg_color(idx, get_theme_color("accent_color", "Editor"))
|
|
idx += 1
|
|
for timeline_name in timeline_directory:
|
|
if timeline_directory[timeline_name] in latest_resources:
|
|
if filter.is_empty() or filter.to_lower() in timeline_name.to_lower():
|
|
%ResourcesList.add_item(timeline_name, get_theme_icon("TripleBar", "EditorIcons"))
|
|
%ResourcesList.set_item_metadata(idx, timeline_directory[timeline_name])
|
|
if timeline_directory[timeline_name] == current_file:
|
|
%ResourcesList.select(idx)
|
|
%ResourcesList.set_item_custom_fg_color(idx, get_theme_color("accent_color", "Editor"))
|
|
idx += 1
|
|
%ResourcesList.sort_items_by_text()
|
|
|
|
|
|
func _on_resources_list_item_selected(index:int) -> void:
|
|
editors_manager.edit_resource(load(%ResourcesList.get_item_metadata(index)))
|
|
|
|
|
|
func _on_search_text_changed(new_text:String) -> void:
|
|
update_resource_list()
|