gohud

Formularze i listy

← Widżety

GoField — wiersz, który może być błędny

Jedna linia na górze formularza z pięcioma polami, mówiąca „sprawdź wprowadzone dane”, nie mówi, które pole. Właśnie to jedno sprawia, że ludzie porzucają rejestrację.

var name_field := GoField.make("Nazwa postaci", GoStyle.line_edit("2-12"), "Nie da się jej później zmienić")
name_field.set_error("Ta nazwa jest zajęta")   # serwer odmówił
name_field.clear_error()

Podpowiedź chowa się, gdy widoczny jest błąd, więc wiersz nie rośnie o linię i nie spycha wszystkiego, co pod nim, a tekst błędu dołączany jest do nazwy dostępności kontrolki — sama czerwona ramka nie mówi nic komuś, kto czerwieni nie widzi.

GoStyle.field() to wersja statyczna: etykieta, kontrolka, podpowiedź, bez stanu błędu. Użyj fabryki wtedy, gdy nic nie może pójść źle, a węzła — wszędzie tam, gdzie serwer może odmówić.

GoInputGroup — pole wprowadzania zespawane ze swoim przyciskiem

GoInputGroup.make(GoStyle.line_edit("Wiadomość"), {"suffix": GoStyle.icon_button(&"send", send)})
GoInputGroup.make(GoStyle.line_edit("Nazwa"), {"prefix_icon": &"search"})

Rozwiązuje sprawę narożników. Dwa zaokrąglone kształty spotykające się pośrodku wyglądają na ściśnięte, a domyślny odstęp sprawia, że czytają się jako dwa obiekty. Narożniki zewnętrzne zostają okrągłe, stykające się stają się kwadratowe — w każdym stanie przycisku, inaczej grupa rozpada się w chwili naciśnięcia. Skórki ze ściętymi narożnikami nie mają pól narożników w ogóle, więc tam zostawia je w spokoju, a kwadratowe lica stykają się czysto.

GoCombobox — lista wyboru, która szuka

Poniżej dziesięciu pozycji lepszy jest GoStyle.select(): o jedno dotknięcie mniej i widać całą listę. Powyżej trzydziestu przeglądanie staje się pracą.

var picker := GoCombobox.make(server_names, 0, "Wybierz serwer")
picker.picked.connect(func(i: int) -> void: connect_to(servers[i]))
Wyszukiwanie dopasowuje wnętrze nazw, nie tylko ich początek. Dopasowanie po przedrostku nie znajduje prawie niczego na listach koreańskich czy japońskich, gdzie słowo odróżniające dwie pozycje rzadko bywa tym pierwszym.

GoCodeInput — kody kuponów i prezentów

Kod dużo częściej wkleja się z wiadomości, niż przepisuje ręcznie. Dwanaście prawdziwych pól złamałoby wklejanie na pierwszej komórce i gubiło znaki przez IME, więc tekst przyjmuje jedno ukryte pole, a komórki są rysowane. ABCD-EFGH-IJKL gubi po drodze myślniki.

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

GoTable — sortowalne nagłówki, wybieralne wiersze

var board := GoTable.make(
    [{"text": "Miejsce", "width": 56}, {"text": "Nazwa"}, {"text": "Wynik", "numeric": true}], rows)
board.row_selected.connect(func(i: int) -> void: open_profile(rows[i]))
numeric: true, albo ranking odwróci się na opak. Porównywane jako tekst, "9124" wygrywa z "91240" — a wyniki, złoto i obrażenia mają różne liczby cyfr.

row_selected daje indeks w twojej pierwotnej tablicy, a nie pozycję po posortowaniu. Kierunek sortowania pokazywany jest znakiem graficznym, nie samym kolorem, a naciskać można całe wiersze, więc nikt nie musi trafiać w jedną komórkę. GoStyle.table() pozostaje siatką tylko do odczytu.

GoPagination — strony albo wiersz Więcej

var pager := GoPagination.make(1, 12, func(page: int) -> void: load_mail(page))
var more := GoPagination.more(load_next)   # wariant przyjazny telefonom

Numery to interfejs dla myszy; na telefonie lepiej czyta się wiersz Więcej. Bieżąca strona zostaje wyśrodkowana w okienku, więc naciśnięcie następnej nie przetasowuje wszystkich numerów. Suma 0 oznacza „nieznana” i rysowane są same strzałki — dodatek nie wymyśla liczby stron, której mu nie podano.