gohud

ฟอร์มและรายการ

← วิดเจ็ต

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 หมายถึง "ไม่ทราบ" แล้วมันจะวาดแค่ลูกศร — มันไม่แต่งจำนวนหน้าที่ไม่มีใครบอกมันขึ้นมาเอง