46 lines
1.2 KiB
GDScript
46 lines
1.2 KiB
GDScript
extends EditorProperty
|
|
|
|
|
|
var _dropdown_button := Button.new()
|
|
|
|
var _popup_menu := PopupMenu.new()
|
|
|
|
|
|
func _init() -> void:
|
|
_dropdown_button.pressed.connect(_show_popup)
|
|
_dropdown_button.icon = EditorInterface.get_editor_theme().get_icon("AudioStreamWAV", "EditorIcons")
|
|
|
|
_popup_menu.index_pressed.connect(_on_song_selected)
|
|
|
|
add_child(_dropdown_button)
|
|
add_child(_popup_menu)
|
|
add_focusable(_dropdown_button)
|
|
|
|
|
|
func _update_property() -> void:
|
|
var new_value: StringName = get_edited_object()[get_edited_property()]
|
|
_dropdown_button.text = new_value.capitalize()
|
|
|
|
|
|
func _show_popup() -> void:
|
|
var songs = Music.songs.keys()
|
|
|
|
_popup_menu.clear()
|
|
for sound: StringName in songs:
|
|
_popup_menu.add_icon_item(
|
|
EditorInterface.get_editor_theme().get_icon("AudioStreamWAV", "EditorIcons"),
|
|
sound.capitalize()
|
|
)
|
|
|
|
var button_rect = _dropdown_button.get_global_rect()
|
|
_popup_menu.reset_size()
|
|
var popup_pos = button_rect.position + Vector2(DisplayServer.window_get_position())
|
|
_popup_menu.position = popup_pos
|
|
_popup_menu.min_size.x = button_rect.size.x
|
|
_popup_menu.popup()
|
|
|
|
|
|
func _on_song_selected(index: int) -> void:
|
|
var sound = Music.songs.keys()[index]
|
|
_dropdown_button.grab_focus()
|
|
emit_changed(get_edited_property(), sound)
|