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)