Files
2026-01-15 15:27:48 +01:00

74 lines
2.0 KiB
GDScript

@tool
extends HBoxContainer
signal request_refresh_plugin(p_name: String)
signal confirm_refresh_plugin(p_name: String)
@onready var options: OptionButton = $OptionButton
func _ready() -> void:
if get_tree().edited_scene_root == self:
return # This is the scene opened in the editor!
$RefreshButton.icon = EditorInterface.get_editor_theme().get_icon("Reload", "EditorIcons")
func update_items(p_plugins_info: Array) -> void:
if not options:
return
options.clear()
var plugins := p_plugins_info[0] as Dictionary
var display_names_map := p_plugins_info[1] as Dictionary
var plugin_dirs: Array[String] = []
plugin_dirs.assign(plugins.keys())
for idx in plugin_dirs.size():
var plugin_dirname := plugin_dirs[idx]
var plugin_data = plugins[plugin_dirname] # Array[String] used as a Tuple<String, String>.
var plugin_name := plugin_data[0] as String
var plugin_path := plugin_data[1] as String
var display_name := display_names_map[plugin_path] as String
options.add_item(display_name, idx)
options.set_item_metadata(idx, plugin_path)
# Note: For whatever reason, statically typing `p_name` inexplicably causes
# an error about converting from Nil to String, even if the value is converted.
func select_plugin(p_name) -> void:
if not options or not p_name:
return
for idx in options.get_item_count():
var plugin := str(options.get_item_metadata(idx))
if plugin == str(p_name):
options.selected = options.get_item_id(idx)
break
func _on_RefreshButton_pressed() -> void:
if options.selected == -1:
return # nothing selected
var plugin := str(options.get_item_metadata(options.selected))
if not plugin:
return
emit_signal("request_refresh_plugin", plugin)
func show_warning(p_name: String) -> void:
$ConfirmationDialog.dialog_text = (
"""
Plugin `%s` is currently disabled.\n
Do you want to enable it now?
"""
% [p_name]
)
$ConfirmationDialog.popup_centered()
func _on_ConfirmationDialog_confirmed() -> void:
var plugin := options.get_item_metadata(options.selected) as String
emit_signal("confirm_refresh_plugin", plugin)