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 — رموز القسائم والهدايا
الرمز يُلصق من رسالة أكثر بكثير مما يُكتب. واثنا عشر حقلًا حقيقيًا كانت ستكسر اللصق عند الخليّة الأولى
وتضيّع حروفًا في محرّر الإدخال، فحقلٌ واحد مخفيّ يأخذ النصّ والخلايا تُرسم رسمًا.
و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) # النسخة الملائمة للهاتف
الأرقام واجهة فأرة؛ وعلى الهاتف يُقرأ صفّ «المزيد» أفضل. والصفحة الحالية تبقى متوسّطة في النافذة، فالضغط على التالي لا يعيد خلط كل رقم. والمجموع 0 يعني "غير معروف" فتُرسم الأسهم وحدها — فهو لا يخترع عدد صفحات لم يُعطَه.