Skip to content
واجهاتُ SadUIيعملُ بحدودٍ مُعلَنةكلُّ المجالات

كيف تبني شجرةَ الواجهةِ وتُعدِّلُها

وصفةٌ لمهمّةٍ واحدة: تركيبُ شجرةِ عُقَدٍ، وضبطُ خصائصِها، وتعديلُها بعدَ إنشائِها. الشجرةُ هي الشيءُ الوحيدُ الذي تكتبُه؛ وكلُّ مخرَجٍ — نافذةٌ أو HTML أو Compose — يُشتقُّ منها (الشرح).

١ · ركِّبِ الشجرةَ — طريقتانِ تُخلَطان

sad
متغير العنوان = نص_عنصر("لوحةُ التحكّم").حجم_خط(30)

# ① تصريحيّ: الأبناءُ وسائطُ الحاوية
متغير الشريط = صف(
    زر("حفظ")،
    زر("إلغاء")
).تباعد(12)

# ② انسيابيّ: «ابن» يضيفُ ابنًا واحدًا أو أكثر
متغير الجذر = عمود()
    .ابن(العنوان)
    .ابن(الشريط)
    .حشوة(24)
    .تباعد(16)

# ③ نداءُ بناءٍ صريح — يفيدُ في الحلقات
متغير ط = 1
بينما (ط <= 3)
    أضف_ابن(الجذر، نص_عنصر("السطر " + ط))
    ط = ط + 1
نهاية

طباعة_شجرة(الجذر)

المخرَجُ المقيس:

عمود(حشوة: 24, تباعد: 16)
  نص_عنصر(محتوى: "لوحةُ التحكّم", حجم_خط: 30)
  صف(تباعد: 12)
    زر(عنوان: "حفظ")
    زر(عنوان: "إلغاء")
  نص_عنصر(محتوى: "السطر 1")
  نص_عنصر(محتوى: "السطر 2")
  نص_عنصر(محتوى: "السطر 3")

الثلاثةُ متكافئةٌ في الأثر. اختَرِ للبِنى الثابتة، و للحلقات.

٢ · الحاوياتُ التي تقبلُ أبناءً

سبعُ عُقَدٍ مُعلَنةٌ في ui_nodes.yaml بـparser_container: true:

الحاويةالترتيب
عمودرأسيّ
صفأفقيّ
رصةتراكبٌ فوقَ بعض
شبكةجدوليّ
عمود_كسولرأسيٌّ يُنشِئُ عندَ الحاجة
حاويةغلافٌ عامّ
عرض_تمريريُمرَّرُ محتواه

وفي الجردِ ١١٠ عقدةً إجمالًا و٦٤ مصنعًا مستقرًّا في UIWidgets (من ١١٢ مُعلَنًا؛ والباقي مؤجَّلٌ بوسمِ intent). فليست كلُّ عقدةٍ في الجردِ قابلةً للإنشاءِ من لغةِ ص اليوم.

٣ · اضبُطِ الخصائصَ بالمعدّلات

المعدّلُ مفتوحُ الاحتياط: كلُّ اسمٍ غيرِ محجوزٍ في ui_modifiers.yaml يصيرُ ضبطَ خاصّيّةٍ بصريّة. فـ.عرض(100) تضبطُ خاصّيّةَ «عرض»، ولا سجلَّ يحصرُ الأسماء — ولذلك ui_props.yaml سجلُّ توثيقٍ لا حاجزُ قَبول (٩٤ مفتاحًا مُعلَنًا).

sad
متغير ب = زر("احفظ")
    .لون("#FFFFFF")        # نصّيّ
    .حجم_خط(24)             # صحيح
    .شفافية(0.5)            # عشريّ
    .حشوة(8، 8، 8، 8)       # متعدّدٌ ⇒ يُدمَجُ بفواصل

والمعدّلاتُ ذاتُ الدلالةِ الخاصّةِ — وهي وحدَها المُعلَنةُ في السجلّ — تسعةٌ: ابن · عند_ (بادئة) · تفرع · حرك · مدة · منحنى · تأخير · تكرار · عكس_تلقائي.

٤ · عدِّلْ عقدةً قائمة

🧩 مقتطفٌ يُتِمُّ برنامجَ الأعلى — لا يُترجَمُ وحدَه.

sad
عين_النص(العنوان، "لوحةٌ محدَّثة")
طباعة_شجرة(الجذر)
  نص_عنصر(محتوى: "لوحةُ التحكّم", حجم_خط: 30, text: "لوحةٌ محدَّثة")

مقيسٌ ويُذكَرُ كما هو

عين_النص تُضيفُ خاصّيّةً باسمِ text ولا تستبدلُ محتوى. فالمخرَجُ النصّيُّ يحملُ القيمتَينِ معًا. ولم يُقَسْ ههنا أيُّهما يفوزُ عندَ الرسم — التحقّقُ منه يلزمُه نافذةٌ تُرى.

٥ · حدٌّ مقيسٌ في الحذف

أزل_ابن وامسح_الأبناء مُعلَنتانِ مستقرَّتَينِ في CompilerUi، والمقيسُ أنّهما بلا أثرٍ ظاهرٍ على الشجرة:

sad
متغير أ = نص_عنصر("أ")
متغير الجذر = عمود()
أضف_ابن(الجذر، أ)
أضف_ابن(الجذر، نص_عنصر("ب"))

أزل_ابن(الجذر، أ)
امسح_الأبناء(الجذر)

طباعة_شجرة(الجذر)

المخرَجُ المقيس — الابنانِ باقيان:

عمود
  نص_عنصر(محتوى: "أ")
  نص_عنصر(محتوى: "ب")

ماذا يعني هذا عمليًّا

لا تَبْنِ واجهتَك على الحذف. أعِدْ بناءَ الشجرةِ بدلَ تشذيبِها: مرِّرْ دالّةً بانيةً إلى تشغيل_تطبيق فتُستدعى كلَّ رسم، أو أنشِئْ صفحةً جديدةً وانتقِلْ إليها (الأحداثُ والتنقّل).

والقياسُ ههنا مخرَجُ طباعة_شجرة لا حالُ الشجرةِ الداخليّة؛ ولا بذرةَ انحدارٍ تحرسُ الأمر، فلا يُدَّعى أكثرُ من المقيس.

٦ · تحقّقْ بلا شاشة

طباعة_شجرة(عنصر) هي أداةُ التصحيحِ الوحيدةُ التي تُقارَنُ نصًّا. اطبَعِ الشجرةَ قبلَ تشغيل_تطبيق كلَّما شككتَ في بنيةٍ أو خاصّيّة: الأبناءُ بالمسافةِ البادئة، والخصائصُ بينَ قوسَين، والأحداثُ المسجَّلةُ بينَ معقوفَين [عند_النقر].

مُرخَّص بموجب رخصة MIT