gohud

Janelas flutuantes

← Widgets

GoSurface — a casca

Popups, folhas e listas suspensas usam todos este mesmo widget. Ele cuida da área segura, do teclado virtual, do cabeçalho e do rodapé fixos, de um corpo rolável, de qual janela está mais acima, da restauração do foco, de quem é dono do botão Voltar e do redimensionamento por arraste.

PosicionamentoComo apareceServe para
CENTERUm cartão no meio da telaConfirmações, configurações
BOTTOMUma folha que sobe de baixoListas, páginas de gerenciamento
ANCHORUm cartão fixado ao lado de um controleListas suspensas, menus de contexto
Ele não se remove sozinho. Reagir ao close_requested — esconder ou liberar — é tarefa da tela que é dona dele, porque a casca não tem como saber por que está fechando (salvar e fechar, ou descartar).

GoSheet — uma página vinda de baixo

var sheet := GoSheet.new()
add_child(sheet)
sheet.open("Inventário")
sheet.toolbar().add_child(GoStyle.line_edit("Buscar…"))
sheet.toolbar().visible = true
sheet.footer().add_child(GoStyle.button("Fechar", sheet.close, GoStyle.Tone.PRIMARY))
sheet.footer().visible = true

Ele é dono de um CanvasLayer, então fica acima do HUD de forma confiável. O open() limpa o corpo e desliga o botão de voltar e as linhas fixas — um botão morto em uma tela que não tem para onde voltar passa a impressão de coisa quebrada.

GoDialogs — confirmações que você aguarda com await

if await dialogs.confirm("Apagar o save", "Isso não pode ser desfeito."):
    delete_save()

confirm(title, body, ok_text, cancel_text, extra, args, destructive) — tudo depois do corpo é opcional, e o alert() funciona do mesmo jeito, com um botão só. Defina destructive para algo que não pode ser desfeito: o botão de confirmação vira o botão preenchido GoStyle.Tone.DANGER_SOLID. Em um tema claro, um rótulo de perigo apenas tonalizado precisa escurecer até parecer texto preto; o botão preenchido mantém texto branco sobre vermelho. O tom é reaplicado a cada chamada porque uma mesma janela é reaproveitada, e um segundo confirm() enquanto um já está aberto devolve false na hora. O confirm_key() aceita chaves de tradução.

Arranjo dos botões. O action_layout é VERTICAL por padrão (seguro para traduções longas), HORIZONTAL para uma linha só com metade da largura para cada um, ou AUTO, que usa uma linha só quando os dois rótulos cabem em metade do cartão em uma única linha e os empilha nos demais casos. O action_gap é o espaço entre os botões e o body_gap o espaço acima deles — deixe-o maior que o espaço entre os botões para que a pergunta e a escolha se leiam como duas partes. Para um diálogo só, chame set_next_action_layout() antes de abri-lo. A linha é montada quando um diálogo abre pela primeira vez, então um GoDialogs em autoload não acrescenta nada na inicialização.

GoForm — um formulário com largura máxima

Ele garante que os rótulos descendentes quebrem linha. Sem isso, uma frase longa se estica em uma única linha cuja largura mínima ultrapassa a tela, e as laterais ficam cortadas — você nem consegue dizer em que tela está. Ligar a quebra na mão, cena por cena, é esquecido toda vez.

GoScroll — rolagem por toque

Coloque uma coisa dentro dele. Cabeçalhos e linhas de botões ficam fora — uma lista longa não pode empurrá-los para fora da tela. O use_panel_edge() leva a barra de rolagem para dentro do respiro que o cartão já tem, enquanto o conteúdo mantém o recuo.