كيف تبني شجرةَ الواجهةِ وتُعدِّلُها
وصفةٌ لمهمّةٍ واحدة: تركيبُ شجرةِ عُقَدٍ، وضبطُ خصائصِها، وتعديلُها بعدَ إنشائِها. الشجرةُ هي الشيءُ الوحيدُ الذي تكتبُه؛ وكلُّ مخرَجٍ — نافذةٌ أو HTML أو Compose — يُشتقُّ منها (الشرح).
١ · ركِّبِ الشجرةَ — طريقتانِ تُخلَطان
متغير العنوان = نص_عنصر("لوحةُ التحكّم").حجم_خط(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 سجلُّ توثيقٍ لا حاجزُ قَبول (٩٤ مفتاحًا مُعلَنًا).
متغير ب = زر("احفظ")
.لون("#FFFFFF") # نصّيّ
.حجم_خط(24) # صحيح
.شفافية(0.5) # عشريّ
.حشوة(8، 8، 8، 8) # متعدّدٌ ⇒ يُدمَجُ بفواصلوالمعدّلاتُ ذاتُ الدلالةِ الخاصّةِ — وهي وحدَها المُعلَنةُ في السجلّ — تسعةٌ: ابن · عند_ (بادئة) · تفرع · حرك · مدة · منحنى · تأخير · تكرار · عكس_تلقائي.
٤ · عدِّلْ عقدةً قائمة
🧩 مقتطفٌ يُتِمُّ برنامجَ الأعلى — لا يُترجَمُ وحدَه.
عين_النص(العنوان، "لوحةٌ محدَّثة")
طباعة_شجرة(الجذر) نص_عنصر(محتوى: "لوحةُ التحكّم", حجم_خط: 30, text: "لوحةٌ محدَّثة")مقيسٌ ويُذكَرُ كما هو
عين_النص تُضيفُ خاصّيّةً باسمِ text ولا تستبدلُ محتوى. فالمخرَجُ النصّيُّ يحملُ القيمتَينِ معًا. ولم يُقَسْ ههنا أيُّهما يفوزُ عندَ الرسم — التحقّقُ منه يلزمُه نافذةٌ تُرى.
٥ · حدٌّ مقيسٌ في الحذف
أزل_ابن وامسح_الأبناء مُعلَنتانِ مستقرَّتَينِ في CompilerUi، والمقيسُ أنّهما بلا أثرٍ ظاهرٍ على الشجرة:
متغير أ = نص_عنصر("أ")
متغير الجذر = عمود()
أضف_ابن(الجذر، أ)
أضف_ابن(الجذر، نص_عنصر("ب"))
أزل_ابن(الجذر، أ)
امسح_الأبناء(الجذر)
طباعة_شجرة(الجذر)المخرَجُ المقيس — الابنانِ باقيان:
عمود
نص_عنصر(محتوى: "أ")
نص_عنصر(محتوى: "ب")ماذا يعني هذا عمليًّا
لا تَبْنِ واجهتَك على الحذف. أعِدْ بناءَ الشجرةِ بدلَ تشذيبِها: مرِّرْ دالّةً بانيةً إلى تشغيل_تطبيق فتُستدعى كلَّ رسم، أو أنشِئْ صفحةً جديدةً وانتقِلْ إليها (الأحداثُ والتنقّل).
والقياسُ ههنا مخرَجُ طباعة_شجرة لا حالُ الشجرةِ الداخليّة؛ ولا بذرةَ انحدارٍ تحرسُ الأمر، فلا يُدَّعى أكثرُ من المقيس.
٦ · تحقّقْ بلا شاشة
طباعة_شجرة(عنصر) هي أداةُ التصحيحِ الوحيدةُ التي تُقارَنُ نصًّا. اطبَعِ الشجرةَ قبلَ تشغيل_تطبيق كلَّما شككتَ في بنيةٍ أو خاصّيّة: الأبناءُ بالمسافةِ البادئة، والخصائصُ بينَ قوسَين، والأحداثُ المسجَّلةُ بينَ معقوفَين [عند_النقر].