gohud

Moduli e liste

← Widget

GoField — la riga che può essere sbagliata

Una riga in cima a un modulo di cinque campi che dice "controlla i dati inseriti" non dice quale campo. È proprio questa singola cosa a far abbandonare una registrazione.

var name_field := GoField.make("Nome del personaggio", GoStyle.line_edit("2-12"), "Non potrà essere cambiato")
name_field.set_error("Questo nome è già preso")   # il server ha detto di no
name_field.clear_error()

Il suggerimento si nasconde mentre è visibile un errore, così la riga non cresce di una linea spingendo giù tutto quello che ha sotto, e il testo dell'errore viene unito al nome accessibile del controllo — un bordo rosso da solo non dice nulla a chi il rosso non lo vede.

GoStyle.field() è la versione statica: etichetta, controllo, suggerimento, nessuno stato di errore. Usa la factory quando non può andare storto nulla e il nodo per tutto ciò che un server può rifiutare.

GoInputGroup — un campo saldato al suo pulsante

GoInputGroup.make(GoStyle.line_edit("Messaggio"), {"suffix": GoStyle.icon_button(&"send", send)})
GoInputGroup.make(GoStyle.line_edit("Nome"), {"prefix_icon": &"search"})

Quello che risolve sono gli angoli. Due forme arrotondate che si incontrano al centro sembrano strozzate, e lo spazio predefinito le fa leggere come due oggetti. Gli angoli esterni restano tondi, quelli che si toccano diventano squadrati — in ogni stato del pulsante, altrimenti il gruppo si spacca nell'istante in cui lo premi. Le skin smussate non hanno affatto campi per gli angoli, quindi lì li lascia stare e le facce squadrate si incontrano pulite.

GoCombobox — un selettore che cerca

Sotto le dieci voci GoStyle.select() è meglio: un tocco in meno e la lista si vede tutta. Oltre le trenta, scorrerla con gli occhi è un lavoro.

var picker := GoCombobox.make(server_names, 0, "Scegli un server")
picker.picked.connect(func(i: int) -> void: connect_to(servers[i]))
La ricerca cerca dentro i nomi, non solo all'inizio. La corrispondenza per prefisso non trova quasi nulla nelle liste in coreano o in giapponese, dove la parola che distingue due voci è raramente la prima.

GoCodeInput — codici coupon e codici regalo

Un codice viene incollato da un messaggio molto più spesso di quanto venga digitato. Dodici campi veri spezzerebbero l'incollaggio alla prima cella e perderebbero caratteri per colpa di un IME, quindi il testo lo prende un unico campo nascosto e le celle vengono disegnate. ABCD-EFGH-IJKL perde i trattini mentre entra.

var coupon := GoCodeInput.make(12, 4)
coupon.completed.connect(func(code: String) -> void: server.redeem(code))
coupon.set_error("Già usato")

GoTable — intestazioni ordinabili, righe selezionabili

var board := GoTable.make(
    [{"text": "Pos.", "width": 56}, {"text": "Nome"}, {"text": "Punteggio", "numeric": true}], rows)
board.row_selected.connect(func(i: int) -> void: open_profile(rows[i]))
numeric: true, altrimenti la classifica si inverte. Confrontato come testo, "9124" batte "91240" — e punteggi, oro e danni hanno tutti un numero di cifre variabile.

row_selected restituisce l'indice nel tuo array originale, non la posizione dopo l'ordinamento. Il verso dell'ordinamento è mostrato con un glifo, non solo con un colore, e le righe si premono per intero, così nessuno deve centrare una singola cella. GoStyle.table() resta la griglia di sola lettura.

GoPagination — pagine, oppure una riga Altro

var pager := GoPagination.make(1, 12, func(page: int) -> void: load_mail(page))
var more := GoPagination.more(load_next)   # la variante adatta al mobile

I numeri sono un'interfaccia da mouse; su un telefono la riga Altro si legge meglio. La pagina corrente resta al centro della finestra, quindi premere avanti non rimescola tutti i numeri. Un totale di 0 significa "sconosciuto" e vengono disegnate solo le frecce — non si inventa un numero di pagine che non gli è stato dato.