gohud

Formulaires et listes

← Widgets

GoField — la rangée qui peut être en erreur

Une seule ligne en haut d'un formulaire à cinq champs qui dit « vérifiez votre saisie » ne dit pas quel champ. C'est cette seule chose qui fait abandonner une inscription.

var name_field := GoField.make("Nom du personnage", GoStyle.line_edit("2-12"), "Impossible à changer ensuite")
name_field.set_error("Ce nom est déjà pris")   # le serveur a refusé
name_field.clear_error()

L'indication se masque pendant qu'une erreur s'affiche : la rangée ne grandit donc pas d'une ligne en poussant tout ce qui se trouve en dessous, et le texte d'erreur est joint au nom accessible de la commande — une bordure rouge, à elle seule, ne dit rien à qui ne voit pas le rouge.

GoStyle.field() en est la version statique : libellé, commande, indication, sans état d'erreur. Prenez la fabrique quand rien ne peut mal tourner, et le nœud pour tout ce qu'un serveur peut refuser.

GoInputGroup — une saisie soudée à son bouton

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

Ce qu'il règle, ce sont les coins. Deux formes arrondies qui se rejoignent au milieu paraissent pincées, et l'écart par défaut les fait lire comme deux objets. Les coins extérieurs restent ronds, ceux qui se touchent deviennent carrés — dans chaque état du bouton, sinon le groupe se scinde à l'instant où l'on appuie dessus. Les skins chanfreinés n'ont aucun champ de coin : là, il les laisse tranquilles et les faces carrées se rejoignent proprement.

GoCombobox — un sélecteur qui cherche

En dessous de dix entrées, GoStyle.select() vaut mieux : un appui de moins et toute la liste est visible. Au-delà de trente, parcourir devient un travail.

var picker := GoCombobox.make(server_names, 0, "Choisissez un serveur")
picker.picked.connect(func(i: int) -> void: connect_to(servers[i]))
La recherche correspond à l'intérieur des noms, pas seulement à leur début. Une correspondance par préfixe ne trouve presque rien dans une liste coréenne ou japonaise, où le mot qui distingue deux éléments est rarement le premier.

GoCodeInput — codes promo et codes cadeaux

Un code est bien plus souvent collé depuis un message que saisi au clavier. Douze vrais champs casseraient le collage dès la première case et perdraient des caractères à cause d'un IME : un seul champ masqué reçoit donc le texte, et les cases sont dessinées. ABCD-EFGH-IJKL perd ses tirets en chemin.

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

GoTable — des en-têtes triables, des rangées sélectionnables

var board := GoTable.make(
    [{"text": "Rang", "width": 56}, {"text": "Nom"}, {"text": "Score", "numeric": true}], rows)
board.row_selected.connect(func(i: int) -> void: open_profile(rows[i]))
numeric: true, sinon le classement s'inverse. Comparé comme du texte, "9124" passe devant "91240" — et les scores, l'or et les dégâts ont tous un nombre de chiffres variable.

row_selected donne l'indice dans votre tableau d'origine, pas la position triée. Le sens du tri est indiqué par un glyphe, pas seulement par une couleur, et la rangée entière s'appuie : personne n'a à viser une cellule. GoStyle.table() reste la grille en lecture seule.

GoPagination — des pages, ou une rangée « Voir plus »

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

Les numéros sont une interface à la souris ; sur un téléphone, la rangée « Voir plus » se lit mieux. La page courante reste centrée dans la fenêtre : appuyer sur suivant ne rebat donc pas tous les numéros. Un total de 0 signifie « inconnu » et seules les flèches sont dessinées — il n'invente pas un nombre de pages qu'on ne lui a pas donné.