GoField — a linha que pode estar errada
Uma linha no topo de um formulário de cinco campos dizendo "verifique os dados" não diz qual campo. É essa única coisa que faz as pessoas abandonarem um cadastro.
var name_field := GoField.make("Nome do personagem", GoStyle.line_edit("2-12"), "Não pode ser alterado depois")
name_field.set_error("Esse nome já está em uso") # o servidor disse não
name_field.clear_error()
A dica se esconde enquanto um erro aparece, então a linha não cresce uma linha e empurra tudo o que está abaixo dela, e o texto do erro é juntado ao nome acessível do controle — uma borda vermelha sozinha não diz nada a quem não enxerga vermelho.
O GoStyle.field() é a versão estática: rótulo, controle, dica, sem estado de erro. Use a fábrica
quando nada pode dar errado, e o nó para qualquer coisa que um servidor possa recusar.
GoInputGroup — uma entrada soldada ao botão dela
GoInputGroup.make(GoStyle.line_edit("Mensagem"), {"suffix": GoStyle.icon_button(&"send", send)})
GoInputGroup.make(GoStyle.line_edit("Nome"), {"prefix_icon": &"search"})
O que ele resolve são os cantos. Duas formas arredondadas se encontrando no meio parecem estranguladas, e o espaço padrão faz as duas se lerem como dois objetos. Os cantos externos continuam redondos, os que se tocam ficam retos — em todos os estados do botão, ou o grupo se parte no instante em que é pressionado. Skins chanfrados não têm campo de canto nenhum, então lá ele não mexe neles e as faces retas se encontram sem emenda.
GoCombobox — um seletor que busca
Com menos de dez itens o GoStyle.select() é melhor: um toque a menos e a lista inteira fica
visível. Passando de trinta, procurar vira trabalho.
var picker := GoCombobox.make(server_names, 0, "Escolha um servidor")
picker.picked.connect(func(i: int) -> void: connect_to(servers[i]))
GoCodeInput — códigos de cupom e de presente
Um código é colado de uma mensagem muito mais vezes do que é digitado. Doze campos de verdade quebrariam a
colagem na primeira célula e perderiam caracteres para um IME, então um único campo escondido recebe o texto e
as células são desenhadas. ABCD-EFGH-IJKL perde os hifens na entrada.
var coupon := GoCodeInput.make(12, 4)
coupon.completed.connect(func(code: String) -> void: server.redeem(code))
coupon.set_error("Já foi usado")
GoTable — cabeçalhos ordenáveis, linhas selecionáveis
var board := GoTable.make(
[{"text": "Posição", "width": 56}, {"text": "Nome"}, {"text": "Pontuação", "numeric": true}], rows)
board.row_selected.connect(func(i: int) -> void: open_profile(rows[i]))
numeric: true, ou a classificação inverte. Comparado como texto, "9124" ganha
de "91240" — e pontuação, ouro e dano têm todos quantidades de dígitos misturadas.
O row_selected devolve o índice no seu array original, não a posição ordenada. A direção da
ordenação é mostrada com um glifo, não só com uma cor, e as linhas inteiras são pressionáveis, então ninguém
precisa acertar uma célula. O GoStyle.table() continua sendo a grade somente leitura.
GoPagination — páginas, ou uma linha Mais
var pager := GoPagination.make(1, 12, func(page: int) -> void: load_mail(page))
var more := GoPagination.more(load_next) # a variante amigável para celular
Números são interface de mouse; no celular a linha Mais se lê melhor. A página atual fica centralizada na janela, então pressionar próxima não embaralha todos os números. Um total de 0 significa "desconhecido" e só as setas são desenhadas — ele não inventa uma contagem de páginas que não recebeu.