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]))
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.