GoField — แถวที่ผิดพลาดได้
บรรทัดเดียวบนหัวฟอร์มห้าช่องที่บอกว่า "กรุณาตรวจสอบข้อมูลที่กรอก" ไม่ได้บอกว่าช่องไหน เรื่องเดียวเท่านี้แหละที่ทำให้คนเลิกสมัครสมาชิกกลางคัน
var name_field := GoField.make("ชื่อตัวละคร", GoStyle.line_edit("2-12"), "เปลี่ยนภายหลังไม่ได้")
name_field.set_error("ชื่อนี้มีคนใช้แล้ว") # เซิร์ฟเวอร์ตอบว่าไม่ได้
name_field.clear_error()
คำใบ้จะซ่อนตัวขณะที่ข้อผิดพลาดแสดงอยู่ แถวจึงไม่สูงขึ้นอีกหนึ่งบรรทัดแล้วดันทุกอย่างที่อยู่ข้างใต้ลงไป และข้อความผิดพลาดถูกผนวกเข้าไปในชื่อเชิงการเข้าถึงของคอนโทรล — ขอบสีแดงเพียงอย่างเดียว ไม่ได้บอกอะไรกับคนที่มองไม่เห็นสีแดง
GoStyle.field() คือรุ่นที่อยู่นิ่ง: ป้ายข้อความ คอนโทรล คำใบ้ ไม่มีสถานะผิดพลาด
ใช้ตัวโรงงานเมื่อไม่มีอะไรผิดพลาดได้ และใช้โหนดกับทุกอย่างที่เซิร์ฟเวอร์ปฏิเสธได้
GoInputGroup — ช่องกรอกที่เชื่อมติดกับปุ่มของมัน
GoInputGroup.make(GoStyle.line_edit("ข้อความ"), {"suffix": GoStyle.icon_button(&"send", send)})
GoInputGroup.make(GoStyle.line_edit("ชื่อ"), {"prefix_icon": &"search"})
สิ่งที่มันแก้คือมุม รูปทรงมนสองอันที่มาชนกันตรงกลางจะดูเหมือนถูกบีบ และช่องไฟค่าเริ่มต้นทำให้มัน อ่านเป็นของสองชิ้น มุมด้านนอกยังคงมน ส่วนมุมที่ชนกันจะกลายเป็นเหลี่ยม — ในทุกสถานะของปุ่ม ไม่อย่างนั้นกลุ่มนี้จะแยกออกจากกันทันทีที่ถูกกด สกินมุมตัดเฉียงไม่มีฟิลด์มุมอยู่เลย ที่นั่นมันจึงปล่อยไว้ อย่างนั้น แล้วหน้าเหลี่ยมก็มาชนกันได้พอดี
GoCombobox — ตัวเลือกที่ค้นหาได้
ถ้ามีไม่ถึงสิบรายการ GoStyle.select() ดีกว่า: แตะน้อยลงหนึ่งครั้งและเห็นทั้งรายการ
แต่พอเกินสามสิบ การกวาดตาหาก็กลายเป็นงาน
var picker := GoCombobox.make(server_names, 0, "เลือกเซิร์ฟเวอร์")
picker.picked.connect(func(i: int) -> void: connect_to(servers[i]))
GoCodeInput — โค้ดคูปองและโค้ดของขวัญ
โค้ดถูกวางมาจากข้อความบ่อยกว่าถูกพิมพ์เองมาก ถ้าใช้ช่องกรอกจริงสิบสองช่อง การวางจะพังตั้งแต่ช่องแรก
และตัวอักษรจะหายไปกับ IME จึงมีช่องซ่อนอยู่ช่องเดียวที่รับข้อความ ส่วนช่องที่เห็นนั้นเป็นการวาดขึ้นมา
ABCD-EFGH-IJKL จะถูกตัดขีดกลางทิ้งระหว่างทางเข้า
var coupon := GoCodeInput.make(12, 4)
coupon.completed.connect(func(code: String) -> void: server.redeem(code))
coupon.set_error("ใช้ไปแล้ว")
GoTable — หัวตารางที่เรียงลำดับได้ แถวที่เลือกได้
var board := GoTable.make(
[{"text": "อันดับ", "width": 56}, {"text": "ชื่อ"}, {"text": "คะแนน", "numeric": true}], rows)
board.row_selected.connect(func(i: int) -> void: open_profile(rows[i]))
numeric: true ไม่อย่างนั้นอันดับจะกลับหัว ถ้าเทียบกันแบบข้อความ "9124"
จะชนะ "91240" — และคะแนน เงินทอง กับความเสียหาย ล้วนมีจำนวนหลักไม่เท่ากันทั้งนั้น
row_selected ให้ดัชนีในอาร์เรย์ต้นฉบับของคุณ ไม่ใช่ตำแหน่งหลังเรียงลำดับ ทิศทางการเรียง
แสดงด้วยสัญลักษณ์ ไม่ใช่แค่สี และทั้งแถวกดได้ ไม่มีใครต้องเล็งให้โดนเซลล์เดียว ส่วน
GoStyle.table() ยังคงเป็นตารางแบบอ่านอย่างเดียวเหมือนเดิม
GoPagination — แบ่งเป็นหน้า หรือแถว "ดูเพิ่ม"
var pager := GoPagination.make(1, 12, func(page: int) -> void: load_mail(page))
var more := GoPagination.more(load_next) # รุ่นที่เหมาะกับมือถือ
ตัวเลขหน้าเป็น UI ของเมาส์ บนมือถือแถว "ดูเพิ่ม" อ่านง่ายกว่า หน้าปัจจุบันจะอยู่กึ่งกลางหน้าต่างเสมอ การกดถัดไปจึงไม่สลับตำแหน่งตัวเลขใหม่ทั้งชุด ยอดรวมเป็น 0 หมายถึง "ไม่ทราบ" แล้วมันจะวาดแค่ลูกศร — มันไม่แต่งจำนวนหน้าที่ไม่มีใครบอกมันขึ้นมาเอง