GoField — la fila que puede estar mal
Una sola línea arriba de un formulario de cinco campos que dice "revisa los datos" no dice qué campo. Esa única cosa es lo que hace que la gente abandone un registro.
var name_field := GoField.make("Nombre del personaje", GoStyle.line_edit("2-12"), "No se puede cambiar después")
name_field.set_error("Ese nombre ya está cogido") # el servidor ha dicho que no
name_field.clear_error()
La sugerencia se oculta mientras se muestra un error, así que la fila no crece una línea y empuja todo lo que tiene debajo, y el texto del error se une al nombre accesible del control — un borde rojo por sí solo no le dice nada a quien no puede ver el rojo.
GoStyle.field() es la versión estática: etiqueta, control, sugerencia, sin estado de error. Usa la fábrica
cuando nada pueda salir mal, y el nodo para cualquier cosa que un servidor pueda rechazar.
GoInputGroup — una entrada soldada a su botón
GoInputGroup.make(GoStyle.line_edit("Mensaje"), {"suffix": GoStyle.icon_button(&"send", send)})
GoInputGroup.make(GoStyle.line_edit("Nombre"), {"prefix_icon": &"search"})
Lo que resuelve son las esquinas. Dos formas redondeadas que se encuentran en el medio parecen estranguladas, y el hueco predeterminado hace que se lean como dos objetos. Las esquinas exteriores siguen redondas, las que se tocan pasan a ser rectas — en todos los estados del botón, o el grupo se parte en el momento en que se pulsa. Los skins achaflanados no tienen campos de esquina en absoluto, así que ahí los deja en paz y las caras rectas se juntan limpiamente.
GoCombobox — un selector que busca
Por debajo de diez entradas GoStyle.select() es mejor: una pulsación menos y se ve la lista entera.
Pasadas treinta, recorrerla con la vista es trabajo.
var picker := GoCombobox.make(server_names, 0, "Elige un servidor")
picker.picked.connect(func(i: int) -> void: connect_to(servers[i]))
GoCodeInput — códigos de cupón y de regalo
Un código se pega desde un mensaje mucho más a menudo de lo que se teclea. Doce campos reales romperían el pegado
en la primera casilla y perderían caracteres por culpa de un IME, así que un único campo oculto recibe el texto y las casillas se
dibujan. ABCD-EFGH-IJKL pierde sus guiones al entrar.
var coupon := GoCodeInput.make(12, 4)
coupon.completed.connect(func(code: String) -> void: server.redeem(code))
coupon.set_error("Ya se ha usado")
GoTable — encabezados ordenables, filas seleccionables
var board := GoTable.make(
[{"text": "Puesto", "width": 56}, {"text": "Nombre"}, {"text": "Puntuación", "numeric": true}], rows)
board.row_selected.connect(func(i: int) -> void: open_profile(rows[i]))
numeric: true, o la clasificación se invierte. Comparados como texto, "9124" gana a
"91240" — y las puntuaciones, el oro y el daño tienen todos cantidades de dígitos mezcladas.
row_selected da el índice de tu array original, no la posición ordenada. La dirección del orden
se muestra con un glifo, no solo con un color, y las filas enteras se pueden pulsar, así que nadie tiene que acertarle a una
celda. GoStyle.table() sigue siendo la rejilla de solo lectura.
GoPagination — páginas, o una fila Más
var pager := GoPagination.make(1, 12, func(page: int) -> void: load_mail(page))
var more := GoPagination.more(load_next) # la variante amable con el móvil
Los números son una interfaz de ratón; en un teléfono la fila Más se lee mejor. La página actual se mantiene centrada en la ventana, así que pulsar siguiente no rebaraja todos los números. Un total de 0 significa "desconocido" y solo se dibujan las flechas — no se inventa un número de páginas que no le han dado.