gohud

Formularios y listas

← Widgets

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]))
La búsqueda coincide dentro de los nombres, no solo en su comienzo. La coincidencia por prefijo no encuentra casi nada en listas en coreano o japonés, donde la palabra que distingue dos elementos rara vez es la primera.

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.