Popups e diálogos
Um menu de contexto e dois diálogos, cada um respondendo pelo próprio sinal.
O editor acima está rodando este projeto. Mude uma linha e ele recarrega.
Classes do Godot usadas
PopupMenuAcceptDialogConfirmationDialog
O código
scripts/main.gd
extends Node
var status: Label
var menu: PopupMenu
var accept: AcceptDialog
var confirm: ConfirmationDialog
func _ready() -> void:
var column: VBoxContainer = _root()
var title: Label = Label.new()
title.text = 'Popups and dialogs'
title.add_theme_font_size_override('font_size', 26)
column.add_child(title)
menu = PopupMenu.new()
for item in ['cut', 'copy', 'paste']:
menu.add_item(item)
menu.add_separator()
menu.add_item('delete')
menu.id_pressed.connect(func(id: int): _say('menu item %d: %s' % [id, menu.get_item_text(id)]))
add_child(menu)
accept = AcceptDialog.new()
accept.title = 'Heads up'
accept.dialog_text = 'AcceptDialog has a single button and closes on it.'
accept.confirmed.connect(func(): _say('accepted'))
add_child(accept)
confirm = ConfirmationDialog.new()
confirm.title = 'Are you sure'
confirm.dialog_text = 'ConfirmationDialog adds cancel, and each button has its own signal.'
confirm.confirmed.connect(func(): _say('confirmed'))
confirm.canceled.connect(func(): _say('canceled'))
add_child(confirm)
column.add_child(_button('open the popup menu', func(): menu.popup(Rect2i(get_viewport().get_mouse_position(), Vector2i.ZERO))))
column.add_child(_button('open AcceptDialog', func(): accept.popup_centered()))
column.add_child(_button('open ConfirmationDialog', func(): confirm.popup_centered()))
status = Label.new()
status.add_theme_color_override('font_color', Color('#8eef97'))
column.add_child(status)
_say('every dialog reports back through a signal')
func _button(text: String, action: Callable) -> Button:
var button: Button = Button.new()
button.text = text
button.pressed.connect(action)
return button
func _say(message: String) -> void:
status.text = message
func _root() -> VBoxContainer:
var background: ColorRect = ColorRect.new()
background.color = Color('#12141a')
add_child(background)
background.set_anchors_and_offsets_preset(Control.PRESET_FULL_RECT)
var center: CenterContainer = CenterContainer.new()
add_child(center)
center.set_anchors_and_offsets_preset(Control.PRESET_FULL_RECT)
var column: VBoxContainer = VBoxContainer.new()
column.add_theme_constant_override('separation', 16)
center.add_child(column)
return column