GoField — cái hàng có thể sai
Một dòng chữ trên đầu biểu mẫu năm ô nói "hãy kiểm tra lại thông tin" không cho biết là ô nào. Chỉ một chuyện đó thôi đã đủ làm người ta bỏ dở việc đăng ký.
var name_field := GoField.make("Tên nhân vật", GoStyle.line_edit("2-12"), "Không đổi được về sau")
name_field.set_error("Tên này đã có người dùng") # server nói không
name_field.clear_error()
Chữ gợi ý ẩn đi trong lúc lỗi hiện ra, nên hàng không cao thêm một dòng rồi đẩy mọi thứ bên dưới nó xuống, và chữ báo lỗi được ghép vào tên trợ năng của control — chỉ một cái viền đỏ thôi thì chẳng nói lên điều gì với người không nhìn thấy màu đỏ.
GoStyle.field() là bản tĩnh: nhãn, control, chữ gợi ý, không có trạng thái lỗi. Hãy dùng
factory khi không có gì sai được, và dùng node cho bất cứ thứ gì mà server có thể từ chối.
GoInputGroup — ô nhập hàn liền với cái nút của nó
GoInputGroup.make(GoStyle.line_edit("Tin nhắn"), {"suffix": GoStyle.icon_button(&"send", send)})
GoInputGroup.make(GoStyle.line_edit("Tên"), {"prefix_icon": &"search"})
Thứ nó giải quyết là các góc. Hai hình bo tròn gặp nhau ở giữa trông như bị bóp lại, còn khoảng hở mặc định làm chúng đọc ra thành hai vật thể riêng. Góc ngoài giữ nguyên độ bo, góc chạm nhau thì vuông lại — ở mọi trạng thái của nút, không thì cả cụm sẽ tách đôi ngay khoảnh khắc bị bấm. Skin vát góc vốn không có trường góc bo nào, nên ở đó nó để yên và các mặt vuông gặp nhau gọn ghẽ.
GoCombobox — bộ chọn có tìm kiếm
Dưới mười mục thì GoStyle.select() tốt hơn: bớt được một lần chạm và cả danh sách đều nhìn thấy.
Quá ba mươi mục thì việc dò tìm trở thành lao động.
var picker := GoCombobox.make(server_names, 0, "Chọn máy chủ")
picker.picked.connect(func(i: int) -> void: connect_to(servers[i]))
GoCodeInput — mã coupon và mã quà tặng
Một cái mã được dán từ tin nhắn nhiều hơn hẳn so với được gõ tay. Mười hai ô nhập thật sẽ làm thao tác dán
vỡ ngay ở ô đầu tiên và làm mất ký tự vào tay IME, nên một ô ẩn duy nhất nhận chữ còn các ô kia chỉ là hình
vẽ. ABCD-EFGH-IJKL rụng hết dấu gạch ngang trên đường vào.
var coupon := GoCodeInput.make(12, 4)
coupon.completed.connect(func(code: String) -> void: server.redeem(code))
coupon.set_error("Đã dùng rồi")
GoTable — tiêu đề cột sắp xếp được, hàng chọn được
var board := GoTable.make(
[{"text": "Hạng", "width": 56}, {"text": "Tên"}, {"text": "Điểm", "numeric": true}], rows)
board.row_selected.connect(func(i: int) -> void: open_profile(rows[i]))
numeric: true, không thì bảng xếp hạng lộn ngược. So sánh như chữ thì
"9124" thắng "91240" — mà điểm, vàng và sát thương đều có số chữ số so le nhau.
row_selected trả về chỉ số trong mảng gốc của bạn, không phải vị trí sau khi sắp xếp. Chiều
sắp xếp được thể hiện bằng một ký hiệu chứ không chỉ bằng màu, và cả hàng đều bấm được nên không ai phải
nhắm trúng một ô nhỏ. GoStyle.table() vẫn là cái lưới chỉ để đọc.
GoPagination — trang số, hoặc một hàng Xem thêm
var pager := GoPagination.make(1, 12, func(page: int) -> void: load_mail(page))
var more := GoPagination.more(load_next) # biến thể hợp với di động
Số trang là giao diện dành cho chuột; trên điện thoại thì hàng Xem thêm đọc ra dễ hơn. Trang hiện tại luôn nằm giữa khung, nên bấm sang trang sau không xáo lại toàn bộ dãy số. Tổng bằng 0 nghĩa là "không biết" và chỉ mấy cái mũi tên được vẽ ra — nó không bịa ra một số trang mà nó không được cho.