gohud

Formlar ve listeler

← Widget'lar

GoField — hatalı olabilen satır

Beş alanlı bir formun tepesinde "girdinizi kontrol edin" diyen tek bir satır, hangi alan olduğunu söylemez. İnsanlara kaydı yarıda bıraktıran tek şey budur.

var name_field := GoField.make("Karakter adı", GoStyle.line_edit("2-12"), "Sonradan değiştirilemez")
name_field.set_error("Bu ad alınmış")   # sunucu hayır dedi
name_field.clear_error()

Bir hata görünürken ipucu gizlenir, böylece satır bir satır büyüyüp altındaki her şeyi aşağı itmez; hata yazısı da denetimin erişilebilir adına eklenir — kırmızıyı göremeyen birine tek başına kırmızı bir kenarlık hiçbir şey söylemez.

GoStyle.field() durağan sürümdür: etiket, denetim, ipucu, hata durumu yok. Hiçbir şeyin ters gidemeyeceği yerde fabrikayı, bir sunucunun reddedebileceği her şey için düğümü kullanın.

GoInputGroup — düğmesine kaynaklanmış bir girdi

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

Çözdüğü şey köşelerdir. Ortada buluşan iki yuvarlak biçim sıkışmış görünür, varsayılan boşluk da onları iki ayrı nesne gibi okutur. Dış köşeler yuvarlak kalır, birbirine değenler köşeli olur — her düğme durumunda, yoksa grup basıldığı anda ikiye ayrılır. Pahlı kaplamalarda köşe alanları hiç yoktur; orada onlara dokunmaz ve köşeli yüzler temizce buluşur.

GoCombobox — arama yapan bir seçici

On girdinin altında GoStyle.select() daha iyidir: bir dokunuş eksik ve listenin tamamı görünür. Otuzu geçtiğinde göz gezdirmek zahmete dönüşür.

var picker := GoCombobox.make(server_names, 0, "Bir sunucu seçin")
picker.picked.connect(func(i: int) -> void: connect_to(servers[i]))
Arama yalnızca adların başını değil, içini de eşleştirir. Ön ek eşleştirmesi Korece ya da Japonca listelerde neredeyse hiçbir şey bulamaz; orada iki öğeyi birbirinden ayıran kelime nadiren ilk kelimedir.

GoCodeInput — kupon ve hediye kodları

Bir kod, yazılmaktan çok daha sık bir mesajdan yapıştırılır. On iki gerçek alan, yapıştırmayı ilk hücrede bozar ve karakterleri bir IME'ye kaptırırdı; bu yüzden yazıyı gizli tek bir alan alır, hücreler ise çizilir. ABCD-EFGH-IJKL girerken tirelerini bırakır.

var coupon := GoCodeInput.make(12, 4)
coupon.completed.connect(func(code: String) -> void: server.redeem(code))
coupon.set_error("Zaten kullanılmış")

GoTable — sıralanabilir başlıklar, seçilebilir satırlar

var board := GoTable.make(
    [{"text": "Sıra", "width": 56}, {"text": "Ad"}, {"text": "Puan", "numeric": true}], rows)
board.row_selected.connect(func(i: int) -> void: open_profile(rows[i]))
numeric: true verin, yoksa sıralama tersine döner. Yazı olarak karşılaştırıldığında "9124", "91240"'ı geçer — puanların, altının ve hasarın hepsinde basamak sayısı karışıktır.

row_selected, sıralanmış konumu değil, özgün dizinizdeki indisi verir. Sıralama yönü yalnızca renkle değil bir simgeyle gösterilir ve kimse tek bir hücreyi tutturmak zorunda kalmasın diye satırların tamamı basılabilir. GoStyle.table() salt okunur ızgara olarak kalır.

GoPagination — sayfalar ya da bir Daha fazla satırı

var pager := GoPagination.make(1, 12, func(page: int) -> void: load_mail(page))
var more := GoPagination.more(load_next)   # mobil dostu değişke

Sayılar fareye göre bir arayüzdür; telefonda Daha fazla satırı daha iyi okunur. Geçerli sayfa pencerenin ortasında kalır, böylece ileriye basmak bütün sayıları yeniden karıştırmaz. Toplamın 0 olması "bilinmiyor" demektir ve yalnızca oklar çizilir — kendisine verilmeyen bir sayfa sayısını uydurmaz.