رابطپایانه tui
برنامههای تمامصفحهی پایانه: ویجتها، چیدمان، تمرکز، کلیدها، ماوس و تغییر اندازه، رسم در یک بافر و بازترسیم فقط جاهایی که عوض شدهاند.
واردسازی رابطپایانه
نام آرگومانها شناسهی خود کد است و معادل فارسی ندارد؛ گونهها، کلیدواژهها و نام بستهها با معادل فارسی نوشته میشوند.
رابطپایانه برنامههای تمامصفحهی پایانه میسازد: مدیر فایل، داشبورد، نصبکننده، ویرایشگر، هر چیزی که به جای چاپ خط به خط کل پنجره را در دست میگیرد. این کتابخانه نگهدارنده است: یک بار درختی از ویجتهای ماندگار میسازید، وقتی چیزی رخ داد وضعیتشان را عوض میکنید و صفحه فشردن کلید، کلیک و تغییر اندازه را به رویداد، و رسم ویجتها را به فریم تبدیل میکند. فقط خانههایی را دوباره رسم میکند که تغییر کردهاند، پس صفحهی بزرگ روی اتصال کند هم سریع میماند. روی بستهی پایانه ساخته شده و با سیگنال از تغییر اندازهی پنجره باخبر میشود.
این کتابخانه با نام باسلام به دست پارسا نوشته شد و اکنون بخشی از کتابخانهی استاندارد است.
اجزا:
- صفحه صاحب پایانه، درخت ویجتها، تمرکز و حلقهی رویداد است.
صفحه ترمینال جدیداندازه را از پایانه میگیرد؛صفحه جدیداندازهی ثابت میگیرد و هرگز به پایانه دست نمیزند و راه آزمودن همین است. - ویجتها ساختارهاییاند که
ویجتپایهرا در خود دارند و هر چه لازم است را بازنویسی میکنند:ترسیمبرای رسم،پردازش رویدادبرای پاسخ وتمرکزپذیر استبرای گرفتن کلیدها. ویجتهای آماده:متن،کادرمتن،دکمه،کادرانتخاب،فهرست،نوارپیشرفت،جداکننده،جدول،نمایجدول،پنلومودال. - چیدمان: ظرفهای
ردیف،ستون،شبکهوپشتهجای فرزندانشان را تعیین میکنند و لازم نیست مختصات را دستی حساب کنید. - رویدادها اول به ویجتی میرسند که تمرکز دارد و تا وقتی یکی مصرفشان کند به والدها بالا میروند؛ آنچه کسی مصرف نکند به
نگاشتکلیداختیاری و سپس به حلقهی شما میرسد.
یک برنامهی کامل
یک ویجت، یک صفحه و حلقهی رویداد. آغاز پایانه را به حالت خام و صفحهی جایگزین میبرد؛ دیرکن صفحه.بستن() درست در خط بعد پایانه را در هر مسیر خروج برمیگرداند، تا هیچ خطایی پوستهی کاربر را خراب رها نکند. رویداد بعدی منتظر کلید، کلیک، تیک یا تغییر اندازهی بعدی میماند؛ هدایت رویداد آن را به ویجتها میدهد؛ نمایش تغییرات آنچه عوض شده را رسم میکند. کلیدی که ویجتها مصرف نکنند مال شماست: اینجا q خارج میشود. این برنامه پایانهی واقعی لازم دارد، برای همین این صفحه فقط کامپایلش میکند.
// زبان: فارسی
واردسازی پایانه
واردسازی رابطپایانه
ساختار سلام:
همگانی شامل رابطپایانه.ویجتپایه
همگانی شمار فشار: صحیح = 0
همگانی تابع ترسیم(بافر: رابطپایانه.بافر، مرز: رابطپایانه.مستطیل):
بافر.نوشتن متن(مرز.ایکس + 2، مرز.ایگرگ + 1، "سلام از رابطپایانه!"، رابطپایانه.ظاهر { پررنگ = درست، رنگ پیشزمینه = رابطپایانه.فیروزهای })
بافر.نوشتن متن(مرز.ایکس + 2، مرز.ایگرگ + 3، "اینتر " + این.شمار فشار + " بار فشرده شد"، رابطپایانه.ظاهر پیشفرض)
بافر.نوشتن متن(مرز.ایکس + 2، مرز.پایین() - 1، "q برای خروج"، رابطپایانه.ظاهر { کمرنگ = درست })
پایان
همگانی تابع پردازش رویداد(رویداد: رابطپایانه.رویداد): منطقی:
اگر رویداد.کلید است(پایانه.کلید ورود):
این.شمار فشار++
برگشت درست
پایان
برگشت نادرست
پایان
پایان
تابع ریشه:
اگر وارونه پایانه.پایانه دارد():
نادرستسرچاپ "مرا در یک پایانه اجرا کنید"
برگشت 1
پایان
ناپایا ص := رابطپایانه.صفحه ترمینال جدید(سلام {})
ص.آغاز()
دیرکن ص.بستن()
ص.نمایش تغییرات()
ناپایا رخداد := رابطپایانه.رویداد {}
تا ص.رویداد بعدی(رخداد):
مصرف شد := ص.هدایت رویداد(رخداد)
اگر وارونه مصرف شد و (رخداد.نویسه است("q") یا رخداد.ترکیب کنترل است("c")):
ص.توقف()
پایان
ص.نمایش تغییرات()
پایان
برگشت 0
پایاندیدن فریم بدون پایانه
صفحهای که با صفحه جدید ساخته شود هرگز به پایانه دست نمیزند. باز هم میتوانید با هدایت رویداد (یا صفگذاری رویداد و رویداد بعدی) رویداد بفرستید، با بازترسیم رسم کنید و هر ردیف را با بافر.متن ردیف بخوانید. خروجی نمونههای این صفحه همینطور ساخته شده و آزمون صفحههای خودتان را هم همینطور مینویسید.
// زبان: فارسی
واردسازی پایانه
واردسازی رابطپایانه
ساختار سلام:
همگانی شامل رابطپایانه.ویجتپایه
همگانی شمار فشار: صحیح = 0
همگانی تابع ترسیم(بافر: رابطپایانه.بافر، مرز: رابطپایانه.مستطیل):
رابطپایانه.ترسیم کادر(بافر، مرز، رابطپایانه.سبککادر.گوشهگرد، رابطپایانه.ظاهر پیشفرض، "سلام!")
بافر.نوشتن متن(مرز.ایکس + 2، مرز.ایگرگ + 1، "سلام از رابطپایانه!"، رابطپایانه.ظاهر { پررنگ = درست })
بافر.نوشتن متن(مرز.ایکس + 2، مرز.ایگرگ + 2، "اینتر " + این.شمار فشار + " بار فشرده شد"، رابطپایانه.ظاهر پیشفرض)
پایان
همگانی تابع پردازش رویداد(رویداد: رابطپایانه.رویداد): منطقی:
اگر رویداد.کلید است(پایانه.کلید ورود):
این.شمار فشار++
برگشت درست
پایان
برگشت نادرست
پایان
پایان
تابع نمایش(ص: رابطپایانه.صفحه):
ص.بازترسیم()
تکرار ص.بافر.ارتفاع در ردیف:
سرچاپ ص.بافر.متن ردیف(ردیف)
پایان
پایان
تابع ریشه:
ناپایا ص := رابطپایانه.صفحه جدید(سلام {}، 30، 4)
دیرکن ص.بستن()
نمایش(ص)
اینتر := رابطپایانه.رویداد { نوع = رابطپایانه.رویداد کیبورد، کلید = پایانه.کلید { کد = پایانه.کلید ورود } }
_ := ص.هدایت رویداد(اینتر)
_ := ص.هدایت رویداد(اینتر)
نمایش(ص)
پایانچیدن یک صفحه
ویجتها را به یک ظرف بدهید تا جایشان را تعیین کند. ستون فرزندانش را زیر هم میچیند؛ تنظیم ارتفاع با یک قاعده اندازهگذاری سهم هر کدام را تعیین میکند: ثابت به تعداد خانه، پرکردن فضا با وزنی از باقیمانده، یا ترجیحی به اندازهی دلخواه خود ویجت. ظرف را ریشهی صفحه کنید و هر فرزند را به صفحه هم اضافه کنید: ظرف جا را تعیین میکند و صفحه رسم و تمرکز را. با تغییر اندازه، صفحه اندازهی تازه را به ریشه میدهد و چیدمان دوباره اجرا میشود.
// زبان: فارسی
واردسازی رابطپایانه
تابع ثابت(تعداد: صحیح): رابطپایانه.قاعدهاندازهگذاری:
برگشت رابطپایانه.قاعدهاندازهگذاری { نوع = رابطپایانه.نوعاندازهگذاری.ثابت، تعداد سلول = تعداد }
پایان
تابع ریشه:
عنوان := رابطپایانه.متن جدید("دانلودها") برگردان پویا رابطپایانه.ویجت
خط جدا := رابطپایانه.جداکننده جدید() برگردان پویا رابطپایانه.ویجت
ناپایا نوار := رابطپایانه.نوار پیشرفت جدید()
نوار.تنظیم پیشرفت(40)
پیشرفت := نوار برگردان پویا رابطپایانه.ویجت
ناپایا بدنه := رابطپایانه.متن جدید("فایل salam-0.6.3.tar.gz تا 40% دانلود شده است. باقی این خط درون ستون شکسته خواهد شد.")
بدنه.تنظیم شکست خط(رابطپایانه.حالتشکستخط.بر پایه واژه)
متن := بدنه برگردان پویا رابطپایانه.ویجت
ناپایا ستون := رابطپایانه.ستون جدید()
ستون.تنظیم فاصله درونی(رابطپایانه.فاصلههای چهارگانه یکسان(1))
اول := ستون.افزودن(عنوان)
دوم := ستون.افزودن(خط جدا)
سوم := ستون.افزودن(پیشرفت)
_ := ستون.افزودن(متن)
ستون.تنظیم ارتفاع(اول، ثابت(1))
ستون.تنظیم ارتفاع(دوم، ثابت(1))
ستون.تنظیم ارتفاع(سوم، ثابت(1))
ناپایا ص := رابطپایانه.صفحه جدید(ستون برگردان پویا رابطپایانه.ویجت، 32، 8)
دیرکن ص.بستن()
_ := ص.افزودن(رابطپایانه.شناسه ریشه، عنوان)
_ := ص.افزودن(رابطپایانه.شناسه ریشه، خط جدا)
_ := ص.افزودن(رابطپایانه.شناسه ریشه، پیشرفت)
_ := ص.افزودن(رابطپایانه.شناسه ریشه، متن)
ص.بازترسیم()
تکرار ص.بافر.ارتفاع در ردیف:
سرچاپ "|" + ص.بافر.متن ردیف(ردیف) + "|"
پایان
پایانیک فرم: تمرکز، تایپ و فراخوانها
ویجتهای تمرکزپذیر به نوبت کلید میگیرند. اولین ویجت تمرکزپذیری که اضافه شود تمرکز را میگیرد؛ با نصب نگاشتکلید پیشفرض، Tab و کلیدهای جهت آن را جابهجا میکنند. مقدارها با فراخوانها برمیگردند: هنگام ثبت برای کادرمتن وقتی Enter زده شود، هنگام تغییر انتخاب برای کادرانتخاب و هنگام کلیک برای دکمه. فراخوانها لامبدا هستند و متغیرهای محلی را نمیگیرند، پس وضعیتی را که عوض میکنند در متغیرهای سراسری یا ویجت خودتان نگه دارید.
// زبان: فارسی
واردسازی پایانه
واردسازی رابطپایانه
ناپایا نام := ""
ناپایا مشترک := نادرست
ناپایا شمار ذخیره := 0
تابع مستطیل(ایکس: صحیح، ایگرگ: صحیح، پهنا: صحیح): رابطپایانه.مستطیل:
برگشت رابطپایانه.مستطیل { ایکس = ایکس، ایگرگ = ایگرگ، عرض = پهنا، ارتفاع = 1 }
پایان
تابع کلید(دنباله: رشته): رابطپایانه.رویداد:
برگشت رابطپایانه.رویداد { نوع = رابطپایانه.رویداد کیبورد، کلید = پایانه.رمزگشایی(دنباله) }
پایان
تابع تایپ(ص &: رابطپایانه.صفحه، متن: رشته):
تکرار متن.طول() در شماره:
_ := ص.هدایت رویداد(کلید(متن.زیررشته(شماره، 1)))
پایان
پایان
تابع ریشه:
ناپایا ص := رابطپایانه.صفحه جدید(رابطپایانه.ویجتپایه {}، 30، 4)
دیرکن ص.بستن()
ص.تنظیم نگاشت کلید(رابطپایانه.نگاشت کلید پیشفرض())
برچسب := ص.افزودن(رابطپایانه.شناسه ریشه، رابطپایانه.متن جدید("نام:") برگردان پویا رابطپایانه.ویجت)
ص.ویجت(برچسب).تنظیم محدوده(مستطیل(1، 0، 6))
ناپایا خانه نام := رابطپایانه.کادر متن جدید()
خانه نام.تنظیم متن راهنما("نام شما")
خانه نام.هنگام ثبت = (مقدار: رشته):
نام = مقدار
برگشت درست
پایان
فیلد := ص.افزودن(رابطپایانه.شناسه ریشه، خانه نام برگردان پویا رابطپایانه.ویجت)
ص.ویجت(فیلد).تنظیم محدوده(مستطیل(7، 0، 20))
ناپایا کادر := رابطپایانه.کادر انتخاب جدید("خبرنامه بفرست"، نادرست)
کادر.هنگام تغییر انتخاب = (فعال: منطقی): مشترک = فعال پایان
خبر := ص.افزودن(رابطپایانه.شناسه ریشه، کادر برگردان پویا رابطپایانه.ویجت)
ص.ویجت(خبر).تنظیم محدوده(مستطیل(1، 1، 20))
ناپایا دکمه := رابطپایانه.دکمه جدید("ثبت")
دکمه.هنگام کلیک = (): شمار ذخیره++ پایان
ذخیره := ص.افزودن(رابطپایانه.شناسه ریشه، دکمه برگردان پویا رابطپایانه.ویجت)
ص.ویجت(ذخیره).تنظیم محدوده(مستطیل(1، 2، 10))
سرچاپ "تمرکز اول:"، ص.شناسه متمرکز() برابر فیلد
تایپ(ص، "سارا")
_ := ص.هدایت رویداد(کلید("\r"))
_ := ص.هدایت رویداد(کلید("\t"))
_ := ص.هدایت رویداد(کلید(" "))
_ := ص.هدایت رویداد(کلید("\t"))
_ := ص.هدایت رویداد(کلید("\r"))
سرچاپ "نام:"، نام، "خبرنامه:"، مشترک، "ذخیره:"، شمار ذخیره
ص.بازترسیم()
تکرار ص.بافر.ارتفاع در ردیف:
سرچاپ "|" + ص.بافر.متن ردیف(ردیف) + "|"
پایان
پایانفهرستها و جدولها
فهرست در هر ردیف یک گزینهی انتخابپذیر نشان میدهد و با j و k جابهجا میشود (کلیدهای جهت برای جابهجایی تمرکز آزاد میمانند)؛ Enter هنگام انتخاب را صدا میزند. نمایجدول جدولی پیمایشپذیر با یک ردیف انتخابشده است؛ بالا و پایین آن را جابهجا میکنند و Enter فعالسازی را با شمارهی ردیف داده صدا میزند. ستونها یک قاعده اندازهگذاری برای عرض، یک تراز و رفتاری برای متنی که جا نمیشود میگیرند.
// زبان: فارسی
واردسازی پایانه
واردسازی رابطپایانه
ناپایا بازشده := -1
تابع ردیف(اولی: رشته، دومی: رشته): وکتور<رشته>:
ناپایا خانهها := وکتور {} برگردان وکتور<رشته>
خانهها.بیفزا(اولی)
خانهها.بیفزا(دومی)
برگشت خانهها
پایان
تابع ستون(پهنا: صحیح، چینش: رابطپایانه.تراز): رابطپایانه.ستونجدول:
برگشت رابطپایانه.ستونجدول { عرض = رابطپایانه.قاعدهاندازهگذاری { نوع = رابطپایانه.نوعاندازهگذاری.ثابت، تعداد سلول = پهنا }، تراز = چینش }
پایان
تابع پایین(): رابطپایانه.رویداد:
برگشت رابطپایانه.رویداد { نوع = رابطپایانه.رویداد کیبورد، کلید = پایانه.کلید { کد = پایانه.کلید پایین } }
پایان
تابع ریشه:
ناپایا ص := رابطپایانه.صفحه جدید(رابطپایانه.ویجتپایه {}، 34، 6)
دیرکن ص.بستن()
ناپایا فایلها := وکتور {} برگردان وکتور<رشته>
فایلها.بیفزا("main.salam")
فایلها.بیفزا("util.salam")
فایلها.بیفزا("README.md")
فهرست := ص.افزودن(رابطپایانه.شناسه ریشه، رابطپایانه.فهرست جدید(فایلها) برگردان پویا رابطپایانه.ویجت)
ص.ویجت(فهرست).تنظیم محدوده(رابطپایانه.مستطیل { ایکس = 0، ایگرگ = 0، عرض = 12، ارتفاع = 3 })
ناپایا نما := رابطپایانه.نمای جدول جدید()
_ := نما.افزودن ستون(ستون(8، رابطپایانه.تراز.چپ))
_ := نما.افزودن ستون(ستون(7، رابطپایانه.تراز.راست))
نما.جدول.سرآیند = درست
_ := نما.افزودن ردیف(ردیف("نام"، "خطوط"))
_ := نما.افزودن ردیف(ردیف("tui"، "8956"))
_ := نما.افزودن ردیف(ردیف("signal"، "976"))
_ := نما.افزودن ردیف(ردیف("term"، "1944"))
نما.فعالسازی = (شماره: صحیح):
بازشده = شماره
برگشت درست
پایان
شناسه جدول := ص.افزودن(رابطپایانه.شناسه ریشه، نما برگردان پویا رابطپایانه.ویجت)
ص.ویجت(شناسه جدول).تنظیم محدوده(رابطپایانه.مستطیل { ایکس = 13، ایگرگ = 0، عرض = 20، ارتفاع = 5 })
_ := ص.تمرکز(فهرست)
_ := ص.هدایت رویداد(رابطپایانه.رویداد { نوع = رابطپایانه.رویداد کیبورد، کلید = پایانه.رمزگشایی("j") })
_ := ص.تمرکز(شناسه جدول)
_ := ص.هدایت رویداد(پایین())
_ := ص.هدایت رویداد(رابطپایانه.رویداد { نوع = رابطپایانه.رویداد کیبورد، کلید = پایانه.کلید { کد = پایانه.کلید ورود } })
نامها := ["tui"، "signal"، "term"]
سرچاپ "باز شد:"، نامها[بازشده]
ص.بازترسیم()
تکرار ص.بافر.ارتفاع در سطر:
سرچاپ "|" + ص.بافر.متن ردیف(سطر) + "|"
پایان
پایان| نیاز | استفاده |
|---|---|
| نوشتن متن، پر کردن یا کادر | بافر.نوشتن متن، پرکردن، ترسیم کادر |
| رنگ و ویژگیها | ظاهر با رنگ پیشزمینه، رنگ پسزمینه، پررنگ و ثابتهای رنگ |
| چیدن ویجتها | ستون جدید، ردیف جدید، شبکه جدید، پشته جدید |
| جابهجایی تمرکز | تمرکز، تمرکز بعدی، تمرکز چپ و... یا تنظیم نگاشتکلید با نگاشتکلید پیشفرض |
| کلیدها و توالیهای خودتان | پیوند کلید، پیوند توالی، نگاشتکلید ویم |
| پنجرهی گفتوگو روی صفحه | مودال با تمرکز با ذخیره قبلی و آوردن زیردرخت به رو |
| کاری با زمانسنج | بازه تیک به میلیثانیه و اجرا با تیک |
| کلیک | گزارش ماوس را پیش از آغاز روشن کنید؛ مختصات ماوس |
| آزمودن یک صفحه | صفحه جدید، هدایت رویداد، بازترسیم، بافر.متن ردیف |
| فقط رنگ یا نوارپیشرفت روی خروجی ساده | پایانه |
آنچه باید در نظر داشت:
- همیشه در خط بعد از
آغاز()بنویسیددیرکن صفحه.بستن(). - فرزندی که به یک ظرف یا
پنلداده میشود باید به صفحه هم اضافه شود، وگرنه جا میگیرد اما رسم نمیشود. dyn ویجترا نمیشود دوباره به ساختار اصلیاش برگرداند، پس مقدارها را با فراخوانها بخوانید یا در وضعیت خودتان نگه دارید.- فقط در
ترسیمرسم کنید؛ وضعیت را درپردازش رویدادیا حلقهی خودتان عوض کنید تانمایش تغییراتبعدی نشانش دهد. پس از تغییر وضعیتی که ویجتها نمیبینند،صفحه.نیازمند بازترسیمرا درست کنید. - در پایانههای بدون UTF-8 نویسهها به ASCII برمیگردند؛ با
SALAM_TUI_GLYPHSبرابرasciiیاunicodeخودتان انتخاب کنید. رنگها ازNO_COLOR،COLORTERMوTERMپیروی میکنند. - در ویندوز تغییر اندازه به جای سیگنال با پرسیدن اندازه در هر حدود ۲۰ میلیثانیه فهمیده میشود.
گونهها
ویجت Widget
میانجی ویجتپویا ویجت نگه دارید.// زبان: فارسی
واردسازی پایانه
واردسازی رابطپایانه
ساختار شمارنده:
همگانی شامل رابطپایانه.ویجتپایه
همگانی شمار: صحیح = 0
همگانی تابع تمرکزپذیر است(): منطقی:
برگشت درست
پایان
همگانی تابع پردازش رویداد(رویداد: رابطپایانه.رویداد): منطقی:
اگر رویداد.نویسه است("+"):
این.شمار++
برگشت درست
پایان
برگشت نادرست
پایان
همگانی تابع ترسیم(بافر: رابطپایانه.بافر، مرز: رابطپایانه.مستطیل):
ناپایا ظاهر := رابطپایانه.ظاهر پیشفرض
اگر بافر.در تمرکز:
ظاهر.معکوس = درست
پایان
بافر.نوشتن متن(مرز.ایکس، مرز.ایگرگ، "شمار " + این.شمار، ظاهر)
پایان
پایان
تابع ریشه:
پایه := رابطپایانه.ویجتپایه {}
سرچاپ "پیشفرضها:"، پایه.تمرکزپذیر است()، پایه.اصابتپذیر است()، پایه.نمایان است()، پایه.اندازه ترجیحی(10).عرض
سنجش := پایه.اندازهگیری(رابطپایانه.محور.محور افقی، 10)
سرچاپ "اندازهگیری:"، سنجش.معتبر
ناپایا درخت := رابطپایانه.درخت جدید(رابطپایانه.ویجتپایه {} برگردان پویا رابطپایانه.ویجت)
شناسه := درخت.افزودن(رابطپایانه.شناسه ریشه، شمارنده {} برگردان پویا رابطپایانه.ویجت)
سرچاپ "درخت:"، درخت.تعداد()، درخت.معتبر است(شناسه)، درخت.والد(شناسه) برابر رابطپایانه.شناسه ریشه، درخت.معتبر است(رابطپایانه.بدون ویجت)
بعلاوه := رابطپایانه.رویداد { نوع = رابطپایانه.رویداد کیبورد، کلید = پایانه.رمزگشایی("+") }
سرچاپ "پردازش توسط خودش:"، درخت.هدایت رویداد(شناسه، بعلاوه) برابر شناسه
ویجت := درخت.دریافت(شناسه)
ویجت.تنظیم محدوده(رابطپایانه.مستطیل { عرض = 10، ارتفاع = 1 })
ناپایا بافر := رابطپایانه.بافر جدید(10، 1)
ویجت.ترسیم(بافر، ویجت.محدوده())
سرچاپ بافر.متن ردیف(0)
بافر.آزادسازی()
درخت.آزادسازی()
_ := پایه.مستطیل
پایانویجتپایه BaseWidget
ساختار ویجتپایهویجت. آن را با همگانی شامل رابطپایانه.ویجتپایه جاسازی کنید و هر چه لازم دارید را بازنویسی کنید. بهتنهایی ویجتی است که چیزی رسم نمیکند، تمرکزپذیر نیست، خود را نمایان گزارش میکند و همه رویدادها را نادیده میگیرد؛ همین آن را ظرف یا جاینگهدار مفیدی هم میکند.| نام | انگلیسی | گونه | توضیح |
|---|---|---|---|
| مستطیل | rect | مستطیل | محل نگهداری محدوده() و تنظیم محدوده(). ویجتهای جاسازیکننده میتوانند آن را مستقیم به شکل این.مستطیل بخوانند. |
نمونهی این مورد همراه با موارد بالاتر آمده است: tui-widget.salam
ترسیم Render
تابع ترسیم(buf: بافر، bounds: مستطیل)ترسیم render
تابع ترسیم(buf: بافر، bounds: مستطیل)نمونهی این مورد همراه با موارد بالاتر آمده است: tui-widget.salam
پردازش رویداد HandleEvent
تابع پردازش رویداد(event: رویداد): منطقیپردازش رویداد handle_event
تابع پردازش رویداد(event: رویداد): منطقینادرست برمیگرداند تا رویداد به بالا برود.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-widget.salam
تمرکزپذیر است Focusable
تابع تمرکزپذیر است(): منطقیتمرکزپذیر است focusable
تابع تمرکزپذیر است(): منطقینادرست برمیگرداند. برای ویجتهای تعاملی آن را بازنویسی کنید تا درست برگرداند.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-widget.salam
اصابتپذیر است Hits
تابع اصابتپذیر است(): منطقیاصابتپذیر است hits
تابع اصابتپذیر است(): منطقیدرست برمیگرداند. وقتی ویجت ممکن است رسم کند ولی اصابت را نپذیرد، آن را بازنویسی کنید تا نادرست برگرداند.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-widget.salam
نمایان است Visible
تابع نمایان است(): منطقینمایان است visible
تابع نمایان است(): منطقیدرست برمیگرداند: یک ویجتپایه روی صفحه است، هرچند چیزی رسم نمیکند. برای پنهان کردن کل یک زیردرخت آن را بازنویسی کنید.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-widget.salam
محدوده Bounds
تابع محدوده(): مستطیلمحدوده bounds
تابع محدوده(): مستطیلتنظیم محدوده ذخیره کرده است.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-widget.salam
تنظیم محدوده SetBounds
تابع تنظیم محدوده(bounds: مستطیل)تنظیم محدوده set_bounds
تابع تنظیم محدوده(bounds: مستطیل)نمونهی این مورد همراه با موارد بالاتر آمده است: tui-widget.salam
اندازه ترجیحی PreferredSize
تابع اندازه ترجیحی(max_width: صحیح): مستطیلاندازه ترجیحی preferred_size
تابع اندازه ترجیحی(max_width: صحیح): مستطیلنمونهی این مورد همراه با موارد بالاتر آمده است: tui-widget.salam
اندازهگیری Measure
تابع اندازهگیری(axis: محور، max_width: صحیح): اندازهاندازهگیری measure
تابع اندازهگیری(axis: محور، max_width: صحیح): اندازهمعتبر برابر نادرست و گستره برابر 0 است. سپس موتور چیدمان اندازه ترجیحی را میخواند. ظرفهایی که میتوانند گستره طبیعی گزارش کنند آن را بازنویسی میکنند.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-widget.salam
درخت Tree
ساختار درختدرخت جدید بسازید؛ درخت همیشه دستکم ریشهاش را دارد.| نام | انگلیسی | گونه | توضیح |
|---|---|---|---|
| ویجتها | widgets | وکتور | ویجتها، نمایهشده بر اساس شناسه. رونوشتهای یک مقدار dyn در ویجت شریکاند، پس خواندن عضو id از ویجتها به همان ویجتی میرسد که فراخواننده افزوده است. |
| والدها | parents | وکتور<صحیح> | والدها[id] شناسه والد است؛ برای ریشه بدون ویجت. |
نمونهی این مورد همراه با موارد بالاتر آمده است: tui-widget.salam
تعداد Count
تابع تعداد(): صحیحتعداد count
تابع تعداد(): صحیحنمونهی این مورد همراه با موارد بالاتر آمده است: tui-widget.salam
معتبر است Valid
تابع معتبر است(id: صحیح): منطقیمعتبر است valid
تابع معتبر است(id: صحیح): منطقینمونهی این مورد همراه با موارد بالاتر آمده است: tui-widget.salam
افزودن Add
تابع افزودن(parent: صحیح، w: dyn ویجت): صحیحافزودن add
تابع افزودن(parent: صحیح، w: dyn ویجت): صحیحنمونهی این مورد همراه با موارد بالاتر آمده است: tui-widget.salam
دریافت Get
تابع دریافت(id: صحیح): dyn ویجتدریافت get
تابع دریافت(id: صحیح): dyn ویجتنمونهی این مورد همراه با موارد بالاتر آمده است: tui-widget.salam
والد Parent
تابع والد(id: صحیح): صحیحوالد parent
تابع والد(id: صحیح): صحیحبدون ویجت برای ریشه و برای شناسههای نامعتبر.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-widget.salam
هدایت رویداد Dispatch
تابع هدایت رویداد(from: صحیح، event: رویداد): صحیحهدایت رویداد dispatch
تابع هدایت رویداد(from: صحیح، event: رویداد): صحیحfrom و سپس به هر یک از نیاکانش تا ریشه عرضه میکند تا یکی آن را مصرف کند. شناسه مصرفکننده را برمیگرداند، یا اگر هیچکدام مصرف نکرد بدون ویجت را. from نامعتبر از ریشه آغاز میشود.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-widget.salam
آزادسازی Free
تابع آزادسازی()آزادسازی free
تابع آزادسازی()نمونهی این مورد همراه با موارد بالاتر آمده است: tui-widget.salam
تراز Alignment
جداشمار تراز| نام | انگلیسی | گونه | توضیح |
|---|---|---|---|
| چپ | Left | | خطها از لبه چپ جعبه آغاز میشوند (پیشفرض). |
| مرکز | Center | | خطها در مرکز قرار میگیرند؛ وقتی فضای اضافه فرد باشد، خانه اضافه در سمت راست است. |
| راست | Right | | خطها در لبه راست جعبه تمام میشوند. |
// زبان: فارسی
واردسازی رابطپایانه
تابع ریشه:
خطوط := رابطپایانه.شکستن خطوط متن("رابط کاربر متنی برای پایانه در سلام"، 12)
هر خط در خطوط:
سرچاپ "[" + خط + "]"
پایان
اندازه := رابطپایانه.اندازهگیری متن("خط یک\nخط دو"، 20)
سرچاپ "اندازه"، اندازه.عرض، "x"، اندازه.ارتفاع
ناپایا بافر := رابطپایانه.بافر جدید(20، 4)
ناپایا عنوان := رابطپایانه.متن جدید("در میانه")
عنوان.تنظیم تراز(رابطپایانه.تراز.مرکز)
عنوان.تنظیم ظاهر(رابطپایانه.ظاهر { پررنگ = درست })
عنوان.تنظیم محدوده(رابطپایانه.مستطیل { ایکس = 0، ایگرگ = 0، عرض = 20، ارتفاع = 1 })
عنوان.ترسیم(بافر، عنوان.محدوده())
ناپایا خط جدا := رابطپایانه.جداکننده جدید()
خط جدا.تنظیم محدوده(رابطپایانه.مستطیل { ایکس = 0، ایگرگ = 1، عرض = 20، ارتفاع = 1 })
خط جدا.ترسیم(بافر، خط جدا.محدوده())
ناپایا نوار := رابطپایانه.نوار پیشرفت جدید()
نوار.تنظیم بیشینه(200)
نوار.تنظیم پیشرفت(50)
نوار.تنظیم محدوده(رابطپایانه.مستطیل { ایکس = 0، ایگرگ = 2، عرض = 20، ارتفاع = 1 })
نوار.ترسیم(بافر، نوار.محدوده())
ناپایا بلند := رابطپایانه.متن جدید("این خط هرگز شکسته نمیشود")
بلند.تنظیم شکست خط(رابطپایانه.حالتشکستخط.بدون شکست)
بلند.تنظیم محدوده(رابطپایانه.مستطیل { ایکس = 0، ایگرگ = 3، عرض = 10، ارتفاع = 1 })
بافر.محدوده برش = بلند.محدوده()
بلند.ترسیم(بافر، بلند.محدوده())
بافر.محدوده برش = بافر.محدوده()
تکرار بافر.ارتفاع در سطر:
سرچاپ "|" + بافر.متن ردیف(سطر) + "|"
پایان
سرچاپ "پیشرفت"، نوار.مقدار پیشرفت()، "عرض ترجیحی"، عنوان.عرض ترجیحی()
بافر.آزادسازی()
پایانحالتشکستخط WrapMode
جداشمار حالتشکستخطمتن هنگام رسم، محتوای خود را به خطها تبدیل میکند.| نام | انگلیسی | گونه | توضیح |
|---|---|---|---|
| بر پایه واژه | Word | | شکست حریصانه خط در مرز واژهها در عرض جعبه (پیشفرض). |
| بدون شکست | None | | هر خط صریح همانطور که هست رسم میشود؛ لبه جعبه آن را برش میدهد. |
نمونهی این مورد همراه با موارد بالاتر آمده است: tui-text.salam
متن Text
ساختار متنمتن جدید بسازید.| نام | انگلیسی | گونه | توضیح |
|---|---|---|---|
| ویجت پایه | BaseWidget | ویجتپایه | ویجتپایه جاسازیشده: محدوده و پاسخهای پیشفرض برای هر متد ویجت که این نوع بازنویسی نمیکند. |
| محتوا | content | رشته = "" | متنی که رسم میشود. یک "\n" صریح خط تازهای آغاز میکند (نگاه کنید به شکستن خطوط متن). |
| تراز | align | تراز | جایگذاری افقی هر خط. پیشفرض تراز.چپ است. |
| ظاهر | style | ظاهر | شیوه رسم محتوا. پسزمینه کل جعبه را پر میکند؛ پیشزمینه و ویژگیها فقط بر خانههای نویسهها اعمال میشوند، از جمله فاصلههای میانی، تا زیرخط پیوسته بماند. ظاهر پیشفرض با پیشفرضهای پایانه رسم میکند. بافر آن را در سطحرنگ خودش منتشر میکند. |
| شکست خط | wrap | حالتشکستخط | شیوه تبدیل محتوا به خطها هنگام رسم. پیشفرض حالتشکستخط.بر پایه واژه است. |
نمونهی این مورد همراه با موارد بالاتر آمده است: tui-text.salam
تنظیم متن SetText
تابع تنظیم متن(content: رشته)تنظیم متن set_text
تابع تنظیم متن(content: رشته)نمونهی این مورد همراه با موارد بالاتر آمده است: tui-text.salam
تنظیم منبع SetSource
تابع تنظیم منبع(src: تابع(): رشته)تنظیم منبع set_source
تابع تنظیم منبع(src: تابع(): رشته)src را هنگام رسم و اندازهگیری میخواند؛ آخرین تنظیم برنده است. مقدار آن را در طول یک فریم ثابت نگه دارید. بستارها مقدار را بهصورت کپی میگیرند، پس وضعیت ماژول یا یک نگهدارنده مشترک را بخوانید. منبع را پیش از صفحه.افزودن تنظیم کنید، چون ویجت را کپی میکند. تغییرات بهطور خودکار بازترسیم یا چیدمان دوباره را به دنبال ندارند: علامتگذاری برای بازترسیم(id) را فراخوانی کنید، یک تیک ثبت کنید، یا تنظیم محدوده را دوباره فراخوانی کنید.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-text.salam
پاکسازی منبع ClearSource
تابع پاکسازی منبع()پاکسازی منبع clear_source
تابع پاکسازی منبع()نمونهی این مورد همراه با موارد بالاتر آمده است: tui-text.salam
تنظیم تراز SetAlign
تابع تنظیم تراز(align: تراز)تنظیم تراز set_align
تابع تنظیم تراز(align: تراز)نمونهی این مورد همراه با موارد بالاتر آمده است: tui-text.salam
تنظیم ظاهر SetStyle
تابع تنظیم ظاهر(style: ظاهر)تنظیم ظاهر set_style
تابع تنظیم ظاهر(style: ظاهر)نمونهی این مورد همراه با موارد بالاتر آمده است: tui-text.salam
تنظیم شکست خط SetWrap
تابع تنظیم شکست خط(wrap: حالتشکستخط)تنظیم شکست خط set_wrap
تابع تنظیم شکست خط(wrap: حالتشکستخط)نمونهی این مورد همراه با موارد بالاتر آمده است: tui-text.salam
اندازه ترجیحی PreferredSize
تابع اندازه ترجیحی(max_width: صحیح): مستطیلاندازه ترجیحی preferred_size
تابع اندازه ترجیحی(max_width: صحیح): مستطیلmax_width میخواهد، به شکل یک مستطیل در (0, 0): عرض، بلندترین خط شکستهشده بر حسب خانه است و ارتفاع، تعداد خطهای شکستهشده. max_width <= 0 یعنی بیکران، پس خطهای صریح اندازهگیری میشوند.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-text.salam
عرض ترجیحی PreferredWidth
تابع عرض ترجیحی(): صحیحعرض ترجیحی preferred_width
تابع عرض ترجیحی(): صحیحنمونهی این مورد همراه با موارد بالاتر آمده است: tui-text.salam
ترسیم Render
تابع ترسیم(buf: بافر، bounds: مستطیل)ترسیم render
تابع ترسیم(buf: بافر، bounds: مستطیل)محدوده.ارتفاع خط رسم میشود. جعبه تباهیده چیزی رسم نمیکند و هرگز panic نمیکند.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-text.salam
HandleEvent
تابع HandleEvent(event: رویداد): منطقیhandle_event
تابع handle_event(event: رویداد): منطقیFocusable
تابع Focusable(): منطقیfocusable
تابع focusable(): منطقیHits
تابع Hits(): منطقیhits
تابع hits(): منطقیVisible
تابع Visible(): منطقیvisible
تابع visible(): منطقیBounds
تابع Bounds(): مستطیلbounds
تابع bounds(): مستطیلSetBounds
تابع SetBounds(bounds: مستطیل)set_bounds
تابع set_bounds(bounds: مستطیل)Measure
تابع Measure(axis: محور، max_width: صحیح): اندازهmeasure
تابع measure(axis: محور، max_width: صحیح): اندازهسرریزسلول CellOverflow
جداشمار سرریزسلول| نام | انگلیسی | گونه | توضیح |
|---|---|---|---|
| برش | Clip | | متن فراتر از لبه بریده میشود (پیشفرض). |
| سهنقطه | Ellipsis | | آخرین خانه نمایان با نویسه سهنقطه جایگزین میشود. |
// زبان: فارسی
واردسازی پایانه
واردسازی رابطپایانه
تابع ردیف(اولی: رشته، دومی: رشته): وکتور<رشته>:
ناپایا خانهها := وکتور {} برگردان وکتور<رشته>
خانهها.بیفزا(اولی)
خانهها.بیفزا(دومی)
برگشت خانهها
پایان
تابع ریشه:
ناپایا جدول := رابطپایانه.جدول جدید()
_ := جدول.افزودن ستون(رابطپایانه.ستونجدول {})
_ := جدول.افزودن ستون(رابطپایانه.ستونجدول {})
جدول.تنظیم عرض ستون(0، رابطپایانه.قاعدهاندازهگذاری { نوع = رابطپایانه.نوعاندازهگذاری.ثابت، تعداد سلول = 9 })
جدول.تنظیم تراز ستون(1، رابطپایانه.تراز.راست)
جدول.تنظیم سرریز ستون(0، رابطپایانه.سرریزسلول.سهنقطه)
جدول.تنظیم فاصله درونی افقی(1)
جدول.سرآیند = درست
جدول.خطکشی = درست
جدول.ظاهر سرآیند = رابطپایانه.ظاهر { پررنگ = درست }
_ := جدول.افزودن ردیف(ردیف("بسته"، "حجم"))
_ := جدول.افزودن ردیف(ردیف("tui"، "8956"))
_ := جدول.افزودن ردیف(ردیف("os.signal"، "976"))
_ := جدول.افزودن ردیف(ردیف("encoding.json"، "3100"))
جدول.تنظیم تراز سلول(3، 1، رابطپایانه.تراز.چپ)
ترجیحی := جدول.اندازه ترجیحی(40)
سرچاپ "ارتفاع ترجیحی"، ترجیحی.ارتفاع
ناپایا بافر := رابطپایانه.بافر جدید(20، ترجیحی.ارتفاع)
جدول.تنظیم محدوده(بافر.محدوده())
جدول.ترسیم(بافر، بافر.محدوده())
تکرار بافر.ارتفاع در سطر:
سرچاپ "|" + بافر.متن ردیف(سطر) + "|"
پایان
سرچاپ "ستونها"، جدول.ستونها.طول()، "ردیفها"، جدول.ردیفها.طول()، "تمرکزپذیر"، جدول.تمرکزپذیر است()
بافر.آزادسازی()
ناپایا نما := رابطپایانه.نمای جدول جدید()
_ := نما.افزودن ستون(رابطپایانه.ستونجدول { عرض = رابطپایانه.قاعدهاندازهگذاری { نوع = رابطپایانه.نوعاندازهگذاری.پرکردن فضا، وزن = 1 }، سرریز = رابطپایانه.سرریزسلول.برش })
تکرار 10 در شماره:
ناپایا تک := وکتور {} برگردان وکتور<رشته>
تک.بیفزا("خط " + شماره)
_ := نما.افزودن ردیف(تک)
پایان
نما.تنظیم محدوده(رابطپایانه.مستطیل { عرض = 12، ارتفاع = 3 })
پایین := رابطپایانه.رویداد { نوع = رابطپایانه.رویداد کیبورد، کلید = پایانه.کلید { کد = پایانه.کلید پایین } }
تکرار 4:
_ := نما.پردازش رویداد(پایین)
پایان
سرچاپ "انتخابشده"، نما.انتخابشده، "نخستین ردیف نمایان"، نما.جابهجایی
پایانستونجدول TableColumn
ساختار ستونجدولجدول. عرض به صورت قاعده اندازهگذاری خوانده میشود؛ کمینه و بیشینه فقط وقتی عرض برابر ترجیحی است خوانده میشوند. بیشینه = -1 یعنی نامحدود. وقتی کمینه و بیشینه با هم تعارض دارند، کمینه برنده است.| نام | انگلیسی | گونه | توضیح |
|---|---|---|---|
| عرض | width | قاعدهاندازهگذاری | ثابت دقیقاً به تعداد خانه، ترجیحی به عرض محتوا، پرکردن فضا سهمی وزنی. |
| کمینه | min | صحیح = 0 | کران پایین برای ستون ترجیحی، بر حسب خانه. |
| بیشینه | max | صحیح = -1 | کران بالا برای ستون ترجیحی، بر حسب خانه. -1 یعنی نامحدود. |
| تراز | align | تراز | تراز پیشفرض خانهها و سرآیند این ستون. |
| سرریز | overflow | سرریزسلول | نحوه نمایش متنی که از ستون پهنتر است. |
نمونهی این مورد همراه با موارد بالاتر آمده است: tui-table.salam
جدول Table
ساختار جدولسرآیند روشن است، ردیف 0 سرآیند است: با ظاهر سرآیند رسم میشود و هر خانه تراز ستون خود را میگیرد. خطکشی خطی از ─ زیر سرآیند در عرض جدول رسم میکند. فاصله درونی افقی فضای خالی هر طرف یک خانه است؛ مقدار منفی 0 حساب میشود.| نام | انگلیسی | گونه | توضیح |
|---|---|---|---|
| ویجت پایه | BaseWidget | ویجتپایه | ویجتپایه تعبیهشده: محدوده و پاسخهای پیشفرض برای هر متد ویجت که این نوع آن را بازتعریف نمیکند. |
| ستونها | columns | وکتور<ستونجدول> | تعریف ستونها، از چپ به راست. |
| ردیفها | rows | وکتور<وکتور<رشته>> | متن خانهها بر اساس ردیف، سپس ستون. وقتی سرآیند روشن است ردیف 0 سرآیند است. |
| سرآیند | header | منطقی = نادرست | وقتی درست باشد، ردیف 0 سرآیند است. |
| خطکشی | rule | منطقی = درست | خطی زیر سرآیند رسم میکند. فقط وقتی سرآیند روشن است معنادار است. |
| فاصله درونی افقی | pad_x | صحیح = 1 | خانههای خالی در هر طرف متن هر خانه. |
| ظاهر | style | ظاهر | ظاهر ردیفهای داده. |
| ظاهر سرآیند | header_style | ظاهر | ظاهر ردیف سرآیند. در آنجا جای ظاهر را میگیرد، نه اینکه با آن ادغام شود. |
نمونهی این مورد همراه با موارد بالاتر آمده است: tui-table.salam
تمرکزپذیر است Focusable
تابع تمرکزپذیر است(): منطقیتمرکزپذیر است focusable
تابع تمرکزپذیر است(): منطقینمونهی این مورد همراه با موارد بالاتر آمده است: tui-table.salam
اصابتپذیر است Hits
تابع اصابتپذیر است(): منطقیاصابتپذیر است hits
تابع اصابتپذیر است(): منطقینمونهی این مورد همراه با موارد بالاتر آمده است: tui-table.salam
پردازش رویداد HandleEvent
تابع پردازش رویداد(event: رویداد): منطقیپردازش رویداد handle_event
تابع پردازش رویداد(event: رویداد): منطقینمونهی این مورد همراه با موارد بالاتر آمده است: tui-table.salam
افزودن ستون AddColumn
تابع افزودن ستون(col: ستونجدول): صحیحافزودن ستون add_column
تابع افزودن ستون(col: ستونجدول): صحیحنمونهی این مورد همراه با موارد بالاتر آمده است: tui-table.salam
افزودن ردیف AddRow
تابع افزودن ردیف(cells: وکتور<رشته>): صحیحافزودن ردیف add_row
تابع افزودن ردیف(cells: وکتور<رشته>): صحیحنمونهی این مورد همراه با موارد بالاتر آمده است: tui-table.salam
تنظیم عرض ستون SetColumnWidth
تابع تنظیم عرض ستون(i: صحیح، w: قاعدهاندازهگذاری)تنظیم عرض ستون set_column_width
تابع تنظیم عرض ستون(i: صحیح، w: قاعدهاندازهگذاری)نمونهی این مورد همراه با موارد بالاتر آمده است: tui-table.salam
تنظیم تراز ستون SetColumnAlign
تابع تنظیم تراز ستون(i: صحیح، a: تراز)تنظیم تراز ستون set_column_align
تابع تنظیم تراز ستون(i: صحیح، a: تراز)نمونهی این مورد همراه با موارد بالاتر آمده است: tui-table.salam
تنظیم سرریز ستون SetColumnOverflow
تابع تنظیم سرریز ستون(i: صحیح، o: سرریزسلول)تنظیم سرریز ستون set_column_overflow
تابع تنظیم سرریز ستون(i: صحیح، o: سرریزسلول)نمونهی این مورد همراه با موارد بالاتر آمده است: tui-table.salam
تنظیم تراز سلول SetCellAlign
تابع تنظیم تراز سلول(row: صحیح، col: صحیح، a: تراز)تنظیم تراز سلول set_cell_align
تابع تنظیم تراز سلول(row: صحیح، col: صحیح، a: تراز)چپ. row نمایهای در ردیفها است، پس وقتی سرآیند روشن است 0 سرآیند است.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-table.salam
تنظیم فاصله درونی افقی SetPadX
تابع تنظیم فاصله درونی افقی(n: صحیح)تنظیم فاصله درونی افقی set_pad_x
تابع تنظیم فاصله درونی افقی(n: صحیح)نمونهی این مورد همراه با موارد بالاتر آمده است: tui-table.salam
اندازه ترجیحی PreferredSize
تابع اندازه ترجیحی(max_width: صحیح): مستطیلاندازه ترجیحی preferred_size
تابع اندازه ترجیحی(max_width: صحیح): مستطیلmax_width مثبت است به آن محدود میشود. ارتفاع برابر سرآیند، خطکشی و ردیفهای داده است، پس جدول بدون ردیف ارتفاع 0 دارد. جدول بدون ستون 0 در 0 است.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-table.salam
اندازهگیری Measure
تابع اندازهگیری(axis: محور، max_width: صحیح): اندازهاندازهگیری measure
تابع اندازهگیری(axis: محور، max_width: صحیح): اندازهaxis گزارش میکند. معتبر همیشه درست است، پس موتور چیدمان پاسخی واقعی میخواند.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-table.salam
ترسیم Render
تابع ترسیم(buf: بافر، bounds: مستطیل)ترسیم render
تابع ترسیم(buf: بافر، bounds: مستطیل)محدوده رسم میکند. ردیفهای فراتر از محدوده.ارتفاع رسم نمیشوند. برای جدول خالی یا مستطیل خالی چیزی رسم نمیشود.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-table.salam
محاسبه عرضها ResolveWidths
تابع محاسبه عرضها(w: صحیح): وکتور<صحیح>رسم ردیف PaintRow
تابع رسم ردیف(buf: بافر، bounds: مستطیل، ws: وکتور<صحیح>، r: صحیح، y: صحیح، style: ظاهر)رسم خط PaintRule
تابع رسم خط(buf: بافر، bounds: مستطیل، ws: وکتور<صحیح>، y: صحیح، style: ظاهر)Visible
تابع Visible(): منطقیvisible
تابع visible(): منطقیBounds
تابع Bounds(): مستطیلbounds
تابع bounds(): مستطیلSetBounds
تابع SetBounds(bounds: مستطیل)set_bounds
تابع set_bounds(bounds: مستطیل)نمایجدول TableView
ساختار نمایجدولجدول تمرکزپذیر با پیمایش عمودی. جدول را تعبیه میکند، پس ستونها، ردیفها، سرآیند، خطکشی، ظاهرها و همه تنظیمکنندهها از آن جدول هستند. سرآیند و خطکشی ثابت میمانند؛ ردیفهای داده زیر آنها در پنجرهای که از جابهجایی آغاز میشود پیمایش میشوند. انتخابشده ردیف نشانگر است، نمایهای در ردیفهای داده، یا -1 وقتی ردیفی نیست. نمایجدول را در جایگاهی از نوع پرکردن فضا قرار دهید: اندازه ترجیحی برابر ارتفاع کامل جدول است، پس هر جایگاه دیگری همه ردیفها را نشان میدهد و هرگز پیمایش نمیکند. Up، Down، PageUp، PageDown، Home و End نشانگر را جابهجا میکنند و همیشه مصرف میشوند؛ Enter فعالسازی را فراخوانی میکند. وقتی تعداد ردیفها از پنجره بیشتر باشد، آخرین ستون خانهها یک نوار پیمایش را نگه میدارد.| نام | انگلیسی | گونه | توضیح |
|---|---|---|---|
| جدول | Table | جدول | جدول تعبیهشده: ستونها، ردیفها، سرآیند و ظاهرها، که نما آنها را با پیمایش و یک ردیف انتخابشده رسم میکند. |
| جابهجایی | offset | صحیح = 0 | نمایه نخستین ردیف داده نمایان. |
| انتخابشده | selected | صحیح = 0 | ردیف داده انتخابشده، یا -1 وقتی ردیف دادهای نیست. |
| فعالسازی | activate | تابع(صحیح): منطقی | وقتی Enter روی جدول غیرخالی فشرده شود با ردیف انتخابشده فراخوانی میشود. نتیجه آن پرچم مصرف است: پیشفرض نادرست برمیگرداند، پس Enter بالا میرود. |
نمونهی این مورد همراه با موارد بالاتر آمده است: tui-table.salam
تمرکزپذیر است Focusable
تابع تمرکزپذیر است(): منطقیتمرکزپذیر است focusable
تابع تمرکزپذیر است(): منطقینمایجدول تمرکز دارد کلیدها را به آن میفرستد.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-table.salam
اصابتپذیر است Hits
تابع اصابتپذیر است(): منطقیاصابتپذیر است hits
تابع اصابتپذیر است(): منطقینمونهی این مورد همراه با موارد بالاتر آمده است: tui-table.salam
پردازش رویداد HandleEvent
تابع پردازش رویداد(event: رویداد): منطقیپردازش رویداد handle_event
تابع پردازش رویداد(event: رویداد): منطقیفعالسازی(انتخابشده) را برمیگرداند و وقتی ردیفی نیست مصرف نمیشود. هر چیز دیگری نادرست برمیگرداند.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-table.salam
ترسیم Render
تابع ترسیم(buf: بافر، bounds: مستطیل)ترسیم render
تابع ترسیم(buf: بافر، bounds: مستطیل)جابهجایی تا جابهجایی + ارتفاع پنجره را، که هر کدام فقط درون محدوده رسم میشوند. ردیف انتخابشده وقتی بافر در تمرکز است وارونه و وقتی نیست پررنگ است؛ وقتی انتخاب بیرون از پنجره باشد هیچ ردیفی علامت نمیخورد. نوار پیمایش از │ و █ استفاده میکند، یا تحت سیاست نویسه اسکی از | و #.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-table.salam
Visible
تابع Visible(): منطقیvisible
تابع visible(): منطقیBounds
تابع Bounds(): مستطیلbounds
تابع bounds(): مستطیلSetBounds
تابع SetBounds(bounds: مستطیل)set_bounds
تابع set_bounds(bounds: مستطیل)PreferredSize
تابع PreferredSize(max_width: صحیح): مستطیلpreferred_size
تابع preferred_size(max_width: صحیح): مستطیلجدول.اندازه ترجیحی، روی جدول درون نما.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-table.salam
Measure
تابع Measure(axis: محور، max_width: صحیح): اندازهmeasure
تابع measure(axis: محور، max_width: صحیح): اندازهجدول.اندازهگیری، روی جدول درون نما.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-table.salam
AddColumn
تابع AddColumn(col: ستونجدول): صحیحadd_column
تابع add_column(col: ستونجدول): صحیحجدول.افزودن ستون، روی جدول درون نما.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-table.salam
AddRow
تابع AddRow(cells: وکتور<رشته>): صحیحadd_row
تابع add_row(cells: وکتور<رشته>): صحیحجدول.افزودن ردیف، روی جدول درون نما.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-table.salam
SetColumnWidth
تابع SetColumnWidth(i: صحیح، w: قاعدهاندازهگذاری)set_column_width
تابع set_column_width(i: صحیح، w: قاعدهاندازهگذاری)جدول.تنظیم عرض ستون، روی جدول درون نما.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-table.salam
SetColumnAlign
تابع SetColumnAlign(i: صحیح، a: تراز)set_column_align
تابع set_column_align(i: صحیح، a: تراز)جدول.تنظیم تراز ستون، روی جدول درون نما.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-table.salam
SetColumnOverflow
تابع SetColumnOverflow(i: صحیح، o: سرریزسلول)set_column_overflow
تابع set_column_overflow(i: صحیح، o: سرریزسلول)جدول.تنظیم سرریز ستون، روی جدول درون نما.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-table.salam
SetCellAlign
تابع SetCellAlign(row: صحیح، col: صحیح، a: تراز)set_cell_align
تابع set_cell_align(row: صحیح، col: صحیح، a: تراز)جدول.تنظیم تراز سلول، روی جدول درون نما.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-table.salam
SetPadX
تابع SetPadX(n: صحیح)set_pad_x
تابع set_pad_x(n: صحیح)جدول.تنظیم فاصله درونی افقی، روی جدول درون نما.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-table.salam
ResolveWidths
تابع ResolveWidths(w: صحیح): وکتور<صحیح>PaintRow
تابع PaintRow(buf: بافر، bounds: مستطیل، ws: وکتور<صحیح>، r: صحیح، y: صحیح، style: ظاهر)PaintRule
تابع PaintRule(buf: بافر، bounds: مستطیل، ws: وکتور<صحیح>، y: صحیح، style: ظاهر)سبککادر BorderStyle
جداشمار سبککادرظاهر است و هرگز فیلدی از آن نیست، پس کادرانتخابی برای هر ویجت است و به ارث نمیرسد یا ادغام نمیشود.| نام | انگلیسی | گونه | توضیح |
|---|---|---|---|
| بدون کادر | None | | بدون کادر؛ ناحیه محتوا کل ناحیه است. |
| تک خط | Single | | حلقهای یکخانهای از خطوط نازک با گوشههای چهارگوش. |
| دو خط | Double | | حلقهای یکخانهای از خطوط دوتایی. |
| گوشهگرد | Rounded | | حلقهای یکخانهای از خطوط نازک با گوشههای قوسی. |
// زبان: فارسی
واردسازی رشته
واردسازی رابطپایانه
تابع نمایش(دنباله: رشته): رشته:
برگشت رشته.جایگزینی(دنباله، "\x1b"، "ESC")
پایان
تابع ریشه:
سرچاپ نمایش(رابطپایانه.دنباله رنگ پیشزمینه(رابطپایانه.قرمز))، نمایش(رابطپایانه.دنباله رنگ پسزمینه(رابطپایانه.آبی))
نارنجی := رابطپایانه.رنگ.آرجیبی(255، 128، 0)
سرچاپ "رنگ حقیقی:"، نمایش(رابطپایانه.دنباله پیشزمینه در سطح(نارنجی، رابطپایانه.سطحرنگ.رنگ حقیقی))
سرچاپ "256 رنگ:"، نمایش(رابطپایانه.دنباله پیشزمینه در سطح(نارنجی، رابطپایانه.سطحرنگ.نمایهای۲۵۶))
سرچاپ "16 رنگ:"، نمایش(رابطپایانه.دنباله پسزمینه در سطح(نارنجی، رابطپایانه.سطحرنگ.انسی۱۶))
سرچاپ "بیرنگ:"، نمایش(رابطپایانه.دنباله پیشزمینه در سطح(نارنجی، رابطپایانه.سطحرنگ.خاموش))
سرچاپ "کاهشیافته:"، رابطپایانه.کاهش سطح رنگ(رابطپایانه.رنگ.نمایهای(196)، رابطپایانه.سطحرنگ.انسی۱۶) برابر رابطپایانه.قرمز روشن
سرچاپ "رنگها:"، رابطپایانه.مشکی نابرابر رابطپایانه.سفید، رابطپایانه.سبز نابرابر رابطپایانه.سبز روشن، رابطپایانه.زرد نابرابر رابطپایانه.ارغوانی، رابطپایانه.فیروزهای نابرابر رابطپایانه.فیروزهای روشن
سرچاپ "روشنها:"، رابطپایانه.مشکی روشن نابرابر رابطپایانه.زرد روشن، رابطپایانه.آبی روشن نابرابر رابطپایانه.ارغوانی روشن، رابطپایانه.سفید روشن نابرابر رابطپایانه.رنگ.پیشفرض
سرچاپ "سطح پایانه معلوم است:"، رابطپایانه.تشخیص سطح رنگ() برابر رابطپایانه.تشخیص سطح رنگ()
پایه := رابطپایانه.ظاهر { رنگ پیشزمینه = رابطپایانه.سبز، پررنگ = درست }
رویی := رابطپایانه.ظاهر { رنگ پسزمینه = رابطپایانه.مشکی، زیرخط = درست }
هردو := رابطپایانه.ادغام ظاهر(پایه، رویی)
سرچاپ "ادغام، پررنگ را نگه میدارد:"، هردو.پررنگ، "و زیرخط را:"، هردو.زیرخط
سرچاپ "برابر پیشفرض:"، رابطپایانه.برابری ظاهر(رابطپایانه.ظاهر پیشفرض، رابطپایانه.ظاهر {})
سرچاپ "روشن:"، نمایش(رابطپایانه.دنباله فعالسازی ظاهر(هردو، رابطپایانه.سطحرنگ.انسی۱۶))، "خاموش:"، نمایش(رابطپایانه.دنباله غیرفعالسازی ظاهر(هردو، رابطپایانه.سطحرنگ.انسی۱۶))
سرچاپ "ضخامت قاب:"، رابطپایانه.ضخامت کادر(رابطپایانه.سبککادر.تک خط)، رابطپایانه.ضخامت کادر(رابطپایانه.سبککادر.بدون کادر)
سرچاپ "ظاهرهای ساختهشده:"، رابطپایانه.شمار ساخت اسجیآر() بزرگتر 0
ناپایا وارون := رابطپایانه.ظاهر { کمرنگ = درست، کج = درست }
وارون.معکوس = درست
_ := وارون
پایانظاهر Style
ساختار ظاهررنگ هستند، نه Option<Color> (Default خودش یعنی «رنگی انتخاب نشده») و ویژگی false یعنی خاموش. معکوس ذخیره میشود و هنگام تولید خروجی ترکیب نمیشود تا برابری ظاهر آن را ببیند و تغییری که فقط در وارونگی است به اختلاف بافر برسد. مجموعه به همین هفت مورد بسته میماند: بدون خطخورده، چشمکزن یا پنهان.| نام | انگلیسی | گونه | توضیح |
|---|---|---|---|
| رنگ پیشزمینه | fg | رنگ | پیشزمینه نویسه؛ Color.Default پیشزمینه خود پایانه را باقی میگذارد. |
| رنگ پسزمینه | bg | رنگ | پسزمینه خانه؛ Color.Default پسزمینه خود پایانه را باقی میگذارد. |
| پررنگ | bold | منطقی = نادرست | فقط وزن پررنگ؛ هرگز رنگ پیشزمینه را روشنتر نمیکند. |
| کمرنگ | dim | منطقی = نادرست | شدت کاهشیافته. |
| کج | italic | منطقی = نادرست | نویسههای کج. |
| زیرخط | underline | منطقی = نادرست | یک خط زیرین تکی. |
| معکوس | reverse | منطقی = نادرست | جای رنگ پیشزمینه و پسزمینهای را که پایانه با آن رسم میکند عوض میکند. |
نمونهی این مورد همراه با موارد بالاتر آمده است: tui-style.salam
جهتگیری Orientation
جداشمار جهتگیریجداکننده.| نام | انگلیسی | گونه | توضیح |
|---|---|---|---|
| افقی | Horizontal | | خطی در امتداد ردیف 0 مستطیل، با تمام عرض. مقدار پیشفرض. |
| عمودی | Vertical | | خطی در امتداد ستون 0 مستطیل، با تمام ارتفاع. |
نمونهی این مورد همراه با موارد بالاتر آمده است: tui-text.salam
جداکننده Separator
ساختار جداکنندهتنظیم جهتگیری، نویسه را با تنظیم نویسه و ظاهر آن را با تنظیم ظاهر تنظیم کنید.| نام | انگلیسی | گونه | توضیح |
|---|---|---|---|
| ویجت پایه | BaseWidget | ویجتپایه | ویجتپایه تعبیهشده: محدوده و پاسخهای پیشفرض برای هر متد ویجت که این نوع آن را بازتعریف نمیکند. |
| جهتگیری | orientation | جهتگیری | کدام خط رسم شود. بهطور پیشفرض افقی. |
| نویسه | ch | رشته = "" | نویسه، به پهنای یک خانه. خالی یعنی نویسه پیشفرض جهتگیری. |
| ظاهر | style | ظاهر | ظاهر خط. رنگ پیشزمینه آن خانههای نویسه را رنگ میکند. رنگ پسزمینه تنظیمشده، پیش از رسم نویسه، کل مستطیل را پر میکند. |
نمونهی این مورد همراه با موارد بالاتر آمده است: tui-text.salam
تمرکزپذیر است Focusable
تابع تمرکزپذیر است(): منطقیتمرکزپذیر است focusable
تابع تمرکزپذیر است(): منطقینمونهی این مورد همراه با موارد بالاتر آمده است: tui-text.salam
اصابتپذیر است Hits
تابع اصابتپذیر است(): منطقیاصابتپذیر است hits
تابع اصابتپذیر است(): منطقینمونهی این مورد همراه با موارد بالاتر آمده است: tui-text.salam
پردازش رویداد HandleEvent
تابع پردازش رویداد(event: رویداد): منطقیپردازش رویداد handle_event
تابع پردازش رویداد(event: رویداد): منطقینمونهی این مورد همراه با موارد بالاتر آمده است: tui-text.salam
اندازه ترجیحی PreferredSize
تابع اندازه ترجیحی(max_width: صحیح): مستطیلاندازه ترجیحی preferred_size
تابع اندازه ترجیحی(max_width: صحیح): مستطیلنمونهی این مورد همراه با موارد بالاتر آمده است: tui-text.salam
اندازهگیری Measure
تابع اندازهگیری(axis: محور، max_width: صحیح): اندازهاندازهگیری measure
تابع اندازهگیری(axis: محور، max_width: صحیح): اندازهmax_width را میگیرد، همان پرکردنی که مقدار نگهبان اندازه ترجیحی درخواست میکند. جداکننده هرگز معتبر = نادرست گزارش نمیکند، پس چیدمان هرگز به جایگزین موقت برنمیگردد.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-text.salam
تنظیم جهتگیری SetOrientation
تابع تنظیم جهتگیری(o: جهتگیری)تنظیم جهتگیری set_orientation
تابع تنظیم جهتگیری(o: جهتگیری)نمونهی این مورد همراه با موارد بالاتر آمده است: tui-text.salam
تنظیم نویسه SetCh
تابع تنظیم نویسه(ch: رشته): منطقیتنظیم نویسه set_ch
تابع تنظیم نویسه(ch: رشته): منطقینمونهی این مورد همراه با موارد بالاتر آمده است: tui-text.salam
تنظیم ظاهر SetStyle
تابع تنظیم ظاهر(s: ظاهر)تنظیم ظاهر set_style
تابع تنظیم ظاهر(s: ظاهر)نمونهی این مورد همراه با موارد بالاتر آمده است: tui-text.salam
ترسیم Render
تابع ترسیم(buf: بافر، bounds: مستطیل)ترسیم render
تابع ترسیم(buf: بافر، bounds: مستطیل)محدوده رسم میکند. وقتی مستطیل عرض یا ارتفاع ندارد چیزی رسم نمیشود. رنگ پسزمینه تنظیمشده ابتدا کل مستطیل را پر میکند. سپس نویسه در طول کامل ردیف 0 (افقی) یا ستون 0 (عمودی) مستطیل تکرار میشود. هر نوشتن از طریق تنظیم انجام میشود که به بافر برش میخورد.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-text.salam
Visible
تابع Visible(): منطقیvisible
تابع visible(): منطقیBounds
تابع Bounds(): مستطیلbounds
تابع bounds(): مستطیلSetBounds
تابع SetBounds(bounds: مستطیل)set_bounds
تابع set_bounds(bounds: مستطیل)صفحه Screen
ساختار صفحهصفحه جدید بسازید.| نام | انگلیسی | گونه | توضیح |
|---|---|---|---|
| رویدادها | events | کانال.کانال<رویداد> | کانالی که رشته ورودی رویدادها را روی آن میفرستد و رویداد بعدی از آن میخواند. |
| ریشه | root | dyn ویجت | ویجت ریشه (شناسه 0). همیشه کل صفحه را میپوشاند. |
| ویجت متمرکز | focused | dyn ویجت | ویجتی که در حال حاضر رویدادها را پیش از همه دریافت میکند. |
| بافر | buffer | بافر | بافر پشتی که ویجتها در آن رسم میکنند. |
| نویسهها | glyphs | سیاستنویسهها | سیاست نویسهای که در رونوشت بافر هر فریم قرار میگیرد. بهطور پیشفرض یونیکد؛ آغاز() آن را با تشخیص سیاست نویسهها() جایگزین میکند، مگر اینکه برنامه تنظیم نویسهها را فراخوانی کرده باشد. |
| در حال اجرا | running | منطقی = نادرست | از آغاز() (یا نخستین اجرا) تا توقف() درست است. |
| درخت | tree | درخت | رجیستری ویجتها. به جای ویرایش مستقیم آن، افزودن() و ویجت() را ترجیح دهید. |
| بازه تیک به میلیثانیه | tick_ms | صحیح = 0 | فاصله رویدادهای رویداد تیک به میلیثانیه؛ 0 (پیشفرض) هیچ تیکی نمیفرستد. آن را پیش از آغاز() تنظیم کنید. |
| گزارش ماوس | mouse | منطقی = نادرست | وقتی درست باشد، آغاز() گزارش کلیک را فعال میکند: فشردنها و رها کردنها به صورت رویداد ماوس میرسند. آن را پیش از آغاز() تنظیم کنید. |
| گزارش حرکت ماوس | mouse_motion | منطقی = نادرست | وقتی درست باشد، آغاز() گزارش همه حرکتها را فعال میکند و هر حرکت اشارهگر، فشردن و رها کردن به صورت رویداد ماوس میرسد. کلیکها را هم شامل میشود، پس به گزارش ماوس نیازی ندارد، و گزارشها پرتعدادند. آن را پیش از آغاز() تنظیم کنید. |
| نگاشت کلید | keymap | نگاشتکلید | پیوندهای کلید اختیاری، که به عنوان راه جایگزین هدایت برای رویدادهای رویداد کیبوردی که هیچ ویجتی مصرف نکرده بررسی میشوند. بهطور پیشفرض خالی است، پس برنامهای که هرگز به آن دست نمیزند دقیقاً مانند قبل رفتار میکند. برای گسترش درجا از طریق همین فیلد پیوند بزنید، یا یک نگاشت کامل را با تنظیم نگاشتکلید نصب کنید. هرگز یک نگاشتکلید را مستقیم انتساب ندهید: بافرهای نگاشت فعلی نشت میکنند. |
| نیازمند بازترسیم | dirty | منطقی = درست | وقتی درست است که نمایش تغییرات() بعدی باید کل فریم را بازترسیم کند: تغییر اندازه، یک تیک، ویجت افزودهشده، آوردن به رو یا بازگرداندن ترتیب، کلیدی که نگاشتکلید مصرف کرده، یا علامتگذاری برای بازترسیم یک ویجت ناشناخته. تغییر دقیق یک ناحیه است. |
| پشته تمرکز | focus_stack | وکتور<صحیح> | شناسههای ویجت؛ مدخل بالایی (آخر) ویجت متمرکز است و پشته خالی یعنی هیچ چیز تمرکز ندارد. آن را از طریق تمرکز، تمرکز با ذخیره قبلی، بازیابی تمرکز و متدهای پیمایش تغییر دهید که ویجت متمرکز را همگام نگه میدارند و محدوده قدیم و جدید را در صف بازترسیم میگذارند. |
// زبان: فارسی
واردسازی پایانه
واردسازی رابطپایانه
تابع جا(ایکس: صحیح، ایگرگ: صحیح): رابطپایانه.مستطیل:
برگشت رابطپایانه.مستطیل { ایکس = ایکس، ایگرگ = ایگرگ، عرض = 8، ارتفاع = 1 }
پایان
تابع کلید(کد: صحیح): رابطپایانه.رویداد:
برگشت رابطپایانه.رویداد { نوع = رابطپایانه.رویداد کیبورد، کلید = پایانه.کلید { کد = کد } }
پایان
تابع ریشه:
ناپایا ص := رابطپایانه.صفحه جدید(رابطپایانه.ویجتپایه {}، 20، 3)
دیرکن ص.بستن()
الف := ص.افزودن(رابطپایانه.شناسه ریشه، رابطپایانه.دکمه جدید("ا") برگردان پویا رابطپایانه.ویجت)
ب := ص.افزودن(رابطپایانه.شناسه ریشه، رابطپایانه.دکمه جدید("ب") برگردان پویا رابطپایانه.ویجت)
پ := ص.افزودن(رابطپایانه.شناسه ریشه، رابطپایانه.دکمه جدید("پ") برگردان پویا رابطپایانه.ویجت)
ص.ویجت(الف).تنظیم محدوده(جا(0، 0))
ص.ویجت(ب).تنظیم محدوده(جا(10، 0))
ص.ویجت(پ).تنظیم محدوده(جا(0، 2))
سرچاپ "هنوز چیزی متمرکز نیست:"، ص.شناسه متمرکز() برابر رابطپایانه.بدون ویجت
_ := ص.تمرکز(الف)
سرچاپ "تمرکز روی الف:"، ص.شناسه متمرکز() برابر الف، "ب تمرکزپذیر است:"، ص.تمرکزپذیر است(ب)
_ := ص.تمرکز راست()
سرچاپ "راست:"، ص.شناسه متمرکز() برابر ب
_ := ص.تمرکز چپ()
_ := ص.تمرکز پایین()
سرچاپ "پایین:"، ص.شناسه متمرکز() برابر پ
_ := ص.تمرکز بالا()
_ := ص.تمرکز بعدی()
_ := ص.تمرکز قبلی()
سرچاپ "پس از بعدی و قبلی:"، ص.شناسه متمرکز() برابر الف
_ := ص.تمرکز با ذخیره قبلی(پ)
_ := ص.بازیابی تمرکز()
سرچاپ "بازیابی برمیگرداند:"، ص.شناسه متمرکز() برابر الف، "پشته:"، ص.پشته تمرکز.طول()
سرچاپ "برخورد در 11,0:"، ص.آزمون برخورد(11، 0) برابر ب، "هیچ چیز در 19,2:"، ص.آزمون برخورد(19، 2) برابر رابطپایانه.شناسه ریشه
ناپایا لایه := وکتور {} برگردان وکتور<صحیح>
لایه.بیفزا(پ)
ص.آوردن به رو(لایه)
سرچاپ "رو آمده تمرکز میگیرد:"، ص.شناسه متمرکز() برابر پ
ص.بازگرداندن ترتیب(لایه)
ص.آوردن زیردرخت به رو(ب)
ص.بازگرداندن ترتیب زیردرخت(ب)
ص.تنظیم نگاشت کلید(رابطپایانه.نگاشت کلید پیشفرض())
سرچاپ "در صف رفت:"، ص.صفگذاری رویداد(کلید(پایانه.کلید تب))
ناپایا رخداد := رابطپایانه.رویداد {}
اگر ص.رویداد بعدی(رخداد):
سرچاپ "مصرف شد:"، ص.هدایت رویداد(رخداد)
پایان
ص.علامتگذاری برای بازترسیم(الف)
ص.علامتگذاری زیردرخت برای بازترسیم(رابطپایانه.شناسه ریشه)
ص.تغییر اندازه(22، 3)
ص.جاسازی ریشه()
ص.بازترسیم()
ص.نمایش تغییرات()
سرچاپ "|" + ص.بافر.متن ردیف(0) + "|"
سرچاپ "|" + ص.بافر.متن ردیف(2) + "|"
سرچاپ "ویجتها:"، ص.درخت.تعداد()، "نیاز به بازترسیم:"، ص.نیازمند بازترسیم، "عرض محدوده متمرکز:"، ص.ویجت متمرکز.محدوده().عرض
سرچاپ "ریشه میپوشاند"، ص.ریشه.محدوده().عرض، "x"، ص.ریشه.محدوده().ارتفاع، "نویسهها یونیکد:"، ص.نویسهها برابر رابطپایانه.سیاستنویسهها.یونیکد
_ := ص.رویدادها
_ := ص.نگاشت کلید
ص.توقف()
پایانافزودن Add
تابع افزودن(parent: صحیح، w: dyn ویجت): صحیحافزودن add
تابع افزودن(parent: صحیح، w: dyn ویجت): صحیحw را زیر parent (یک شناسه؛ شناسه ریشه برای سطح بالا) اضافه میکند و شناسه ویجت جدید را برمیگرداند. ویجتهایی که به رو آورده نشدهاند به ترتیب شناسه، یعنی ترتیب افزوده شدن، رسم میشوند. نخستین ویجت تمرکزپذیر دسترسپذیری که وقتی هیچ چیز تمرکز ندارد افزوده شود تمرکز را میگیرد؛ فرزند یک نگهدارنده پنهان دسترسپذیر نیست، پس از آن گذر میشود.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-screen.salam
آوردن به رو Raise
تابع آوردن به رو(ids: وکتور<صحیح>)آوردن به رو raise
تابع آوردن به رو(ids: وکتور<صحیح>)id یک مُهر تازه میدهد که در کل این فراخوانی مشترک است، پس شناسهها یک لایه واحد بالای هر ویجتی که پیشتر به رو آورده شده و بالای هر ویجت به رو نیاورده میسازند. درون لایه، ترتیب رسم همان ترتیب شناسه میماند. وقتی ترتیب تمرکز حاصل خالی نباشد و تمرکز فعلی بیرون از آن باشد، آن تمرکز را ذخیره میکند و به نخستین شناسه این ترتیب میرود. در غیر این صورت تمرکز و شناسه ذخیرهشده را تغییر نمیدهد. شناسهای که در درخت نیست ثبت میشود و باعث خرابی نمیشود؛ فقط وقتی آن شناسه ثبت شود رسم را تغییر میدهد.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-screen.salam
بازگرداندن ترتیب Unraise
تابع بازگرداندن ترتیب(ids: وکتور<صحیح>)بازگرداندن ترتیب unraise
تابع بازگرداندن ترتیب(ids: وکتور<صحیح>)id را به 0 برمیگرداند، پس آن ویجتها به ترتیب ساده شناسه بازمیگردند. خودتوان است: شناسهای که به رو آورده نشده یا در درخت نیست، 0 میماند. شمارنده مُهر را عقب نمیبرد. وقتی چیزی به رو آوردهشده باقی نماند، اگر شناسه ذخیرهشده هنوز بیرون از زیردرخت پنهان تمرکزپذیر باشد به آن تمرکز میدهد، در غیر این صورت به نخستین ویجت تمرکزپذیر بیرون از زیردرخت پنهان، و شناسه ذخیرهشده را پاک میکند. تا وقتی لایهای باقی است، اگر تمرکز فعلی بیرون از ترتیب تمرکز جدید باشد به نخستین شناسه آن تمرکز میدهد.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-screen.salam
آوردن زیردرخت به رو RaiseSubtree
تابع آوردن زیردرخت به رو(id: صحیح)آوردن زیردرخت به رو raise_subtree
تابع آوردن زیردرخت به رو(id: صحیح)id و همه نوادگانش را به صورت یک لایه به رو میآورد: یک مُهر تازه برای کل زیردرخت، پس بالای همه ویجتهای دیگر رسم میشود. درون لایه، ترتیب صعودی شناسه هر والد را پیش از فرزندانش نگه میدارد. تمرکز از آوردن به رو پیروی میکند: وقتی تمرکز فعلی بیرون از ترتیب تمرکز لایه باشد، به نخستین شناسه آن ترتیب میرود و تمرکز قبلی برای بازگرداندن ترتیب زیردرخت ذخیره میشود. شناسهای که در درخت نیست، از جمله بدون ویجت، کاری نمیکند. تمرکز ذخیرهشده فقط یک سطح عمق دارد: به رو آوردن دوم آن را بازنویسی میکند، پس لایهها را با تمرکز با ذخیره قبلی و بازیابی تمرکز تودرتو کنید. ردشده: یک پرسوجوی عمومی زیردرخت و سپس آوردن به رو()، که یعنی دو فراخوانی در هر باز شدن مودال. این هم رد شد: فیلدی برای مالک مسدودکننده که هدایت رویداد و آزمون برخورد به آن رجوع کنند، که مسدودسازی هندسی را تکرار میکند و ممکن است از آن عقب بماند.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-screen.salam
بازگرداندن ترتیب زیردرخت UnraiseSubtree
تابع بازگرداندن ترتیب زیردرخت(id: صحیح)بازگرداندن ترتیب زیردرخت unraise_subtree
تابع بازگرداندن ترتیب زیردرخت(id: صحیح)id و همه نوادگانش را به 0 برمیگرداند تا به ترتیب ساده شناسه بازگردند، و تمرکز را دقیقاً مانند بازگرداندن ترتیب بازمیگرداند. شناسهای که در درخت نیست، از جمله بدون ویجت، کاری نمیکند.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-screen.salam
ویجت Widget
تابع ویجت(id: صحیح): dyn ویجتویجت widget
تابع ویجت(id: صحیح): dyn ویجتنمونهی این مورد همراه با موارد بالاتر آمده است: tui-screen.salam
شناسه متمرکز FocusedId
تابع شناسه متمرکز(): صحیحشناسه متمرکز focused_id
تابع شناسه متمرکز(): صحیحبدون ویجت وقتی هیچ چیز تمرکز ندارد (در این حالت رویدادها از ریشه شروع میشوند).نمونهی این مورد همراه با موارد بالاتر آمده است: tui-screen.salam
تمرکزپذیر است CanFocus
تابع تمرکزپذیر است(id: صحیح): منطقیتمرکزپذیر است can_focus
تابع تمرکزپذیر است(id: صحیح): منطقیid به ویجتی اشاره کند که در حال حاضر تمرکزپذیر است و هیچ ویجتی در مسیرش تا ریشه خود را پنهان گزارش نکند.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-screen.salam
تمرکز Focus
تابع تمرکز(id: صحیح): منطقیتمرکز focus
تابع تمرکز(id: صحیح): منطقیid میبرد و بالای پشته تمرکز را جایگزین میکند (یا پشته را آغاز میکند). وقتی id ویجتی تمرکزپذیر بیرون از زیردرخت پنهان نباشد، بدون هیچ تغییری نادرست برمیگرداند.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-screen.salam
تمرکز با ذخیره قبلی PushFocus
تابع تمرکز با ذخیره قبلی(id: صحیح): منطقیتمرکز با ذخیره قبلی push_focus
تابع تمرکز با ذخیره قبلی(id: صحیح): منطقیid تمرکز میدهد و تمرکز قبلی را زیر آن به خاطر میسپارد، برای نمونه هنگامی که یک گفتگو باز است. بازیابی تمرکز به آن بازمیگردد. وقتی id ویجتی تمرکزپذیر بیرون از زیردرخت پنهان نباشد، بدون هیچ تغییری نادرست برمیگرداند.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-screen.salam
بازیابی تمرکز PopFocus
تابع بازیابی تمرکز(): منطقیبازیابی تمرکز pop_focus
تابع بازیابی تمرکز(): منطقیتمرکز با ذخیره قبلی متناظر متمرکز بود بازمیگرداند. وقتی پشته از قبل خالی بوده نادرست برمیگرداند.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-screen.salam
تمرکز بعدی FocusNext
تابع تمرکز بعدی(): منطقیتمرکز بعدی focus_next
تابع تمرکز بعدی(): منطقینمونهی این مورد همراه با موارد بالاتر آمده است: tui-screen.salam
تمرکز قبلی FocusPrev
تابع تمرکز قبلی(): منطقیتمرکز قبلی focus_prev
تابع تمرکز قبلی(): منطقینمونهی این مورد همراه با موارد بالاتر آمده است: tui-screen.salam
تمرکز بالا FocusUp
تابع تمرکز بالا(): منطقیتمرکز بالا focus_up
تابع تمرکز بالا(): منطقینزدیکترین را ببینید). وقتی تمرکز جابهجا شود درست برمیگرداند.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-screen.salam
تمرکز پایین FocusDown
تابع تمرکز پایین(): منطقیتمرکز پایین focus_down
تابع تمرکز پایین(): منطقینمونهی این مورد همراه با موارد بالاتر آمده است: tui-screen.salam
تمرکز چپ FocusLeft
تابع تمرکز چپ(): منطقیتمرکز چپ focus_left
تابع تمرکز چپ(): منطقینمونهی این مورد همراه با موارد بالاتر آمده است: tui-screen.salam
تمرکز راست FocusRight
تابع تمرکز راست(): منطقیتمرکز راست focus_right
تابع تمرکز راست(): منطقینمونهی این مورد همراه با موارد بالاتر آمده است: tui-screen.salam
جاسازی ریشه FitRoot
تابع جاسازی ریشه()جاسازی ریشه fit_root
تابع جاسازی ریشه()نمونهی این مورد همراه با موارد بالاتر آمده است: tui-screen.salam
تغییر اندازه Resize
تابع تغییر اندازه(width: صحیح، height: صحیح)تغییر اندازه resize
تابع تغییر اندازه(width: صحیح، height: صحیح)نمونهی این مورد همراه با موارد بالاتر آمده است: tui-screen.salam
آزمون برخورد HitTest
تابع آزمون برخورد(x: صحیح، y: صحیح): صحیحآزمون برخورد hit_test
تابع آزمون برخورد(x: صحیح، y: صحیح): صحیحبدون ویجت وقتی هیچ ویجتی آن را نمیپوشاند. پیمایش به ترتیب معکوس رسم است: نخستین ویجتی که مستطیلش نقطه را در بر بگیرد، اصابتپذیر است() آن درست باشد و زنجیره نیاکانش نمایان گزارش شود برنده است. ویجت ممکن است رسم شود و باز هم کلیک را نپذیرد، و ویجت درون زیردرخت پنهان هرگز برنده نمیشود؛ در این حالت پیمایش ادامه مییابد. ویجتهایی با محدوده خالی هرگز منطبق نمیشوند.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-screen.salam
هدایت رویداد Dispatch
تابع هدایت رویداد(event: رویداد): منطقیهدایت رویداد dispatch
تابع هدایت رویداد(event: رویداد): منطقیرویداد تغییر اندازه ابتدا اندازه صفحه را تغییر میدهد. سپس رویداد ماوس رمزگشاییشده به ویجت زیر نشانگر میرود (آزمون برخورد را ببینید)؛ هر رویداد دیگر، و رویداد ماوسی که ویجتی زیر آن نیست، به ویجت متمرکز میرود. از آن نخستین ویجت، رویداد در درخت بالا میرود. سپس رویداد کیبورد مصرفنشده به راه جایگزین نگاشتکلید پیشنهاد میشود. وقتی یک ویجت یا نگاشتکلید آن را مصرف کند درست برمیگرداند.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-screen.salam
تنظیم نگاشت کلید SetKeymap
تابع تنظیم نگاشت کلید(km: نگاشتکلید)تنظیم نگاشت کلید set_keymap
تابع تنظیم نگاشت کلید(km: نگاشتکلید)km جایگزین میکند. ابتدا بافرهای نگاشت فعلی را آزاد میکند، پس این تنها راه امن تعویض یک نگاشتکلید است (انتساب مستقیم به فیلد، نگاشت قدیمی را نشت میدهد). نگاشت جدید بدون توالی در انتظار آغاز میشود. مالکیت km به صفحه منتقل میشود: فراخواننده نباید پس از آن آن را آزاد یا استفاده کند. برای تعویض حالت و نصب نگاشتی تازهساخته در نظر گرفته شده است.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-screen.salam
علامتگذاری برای بازترسیم Invalidate
تابع علامتگذاری برای بازترسیم(id: صحیح)علامتگذاری برای بازترسیم invalidate
تابع علامتگذاری برای بازترسیم(id: صحیح)id را در صف میگذارد. شناسه ناشناخته، یا ویجتی با مستطیل خالی، به جای آن کل صفحه را علامت میزند. پیش از آغاز() هم مجاز است: فقط علامت میزند و تخلیه تا اتصال صفحه منتظر میماند.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-screen.salam
علامتگذاری زیردرخت برای بازترسیم InvalidateSubtree
تابع علامتگذاری زیردرخت برای بازترسیم(id: صحیح)علامتگذاری زیردرخت برای بازترسیم invalidate_subtree
تابع علامتگذاری زیردرخت برای بازترسیم(id: صحیح)id و همه نوادگانش را میپوشاند، به جای فقط محدوده خود ویجت که علامتگذاری برای بازترسیم انجام میدهد. وقتی ظاهر یک ویجت به فرزندی وابسته است، یا فرزندی ممکن است از مستطیل خود ویجت بیرون بزند، از آن استفاده کنید. ناحیه، اجتماع محاطی است، پس زیردرختی پراکنده فاصله میان مستطیلهایش را هم بازترسیم میکند، و ناحیهای بیش از نیمی از صفحه به بازترسیم کامل ارتقا مییابد. شناسه ناشناخته، از جمله بدون ویجت، یا زیردرختی که همه مستطیلهایش خالیاند، به جای آن کل صفحه را علامت میزند. پیش از آغاز() هم مجاز است: فقط علامت میزند و تخلیه تا اتصال صفحه منتظر میماند.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-screen.salam
بازترسیم Draw
تابع بازترسیم()بازترسیم draw
تابع بازترسیم()نیازمند بازترسیم تنظیمشده، بیش از RegionLimit ناحیه، یا ناحیههایی که بیش از نیمی از صفحه را بپوشانند، همه ویجتها را بازترسیم میکند. در غیر این صورت فقط ناحیههای در انتظار پاک و بازترسیم میشوند. وقتی هیچکدام تنظیم نشده باشد کاری نمیکند. ترتیب رسم صعودی بر اساس (مُهر، شناسه) است. هر ویجت یک رونوشت بافر بریدهشده به محدوده نمایانش میگیرد، که اگر تمرکز را داشته باشد در تمرکز در آن تنظیم شده است.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-screen.salam
نمایش تغییرات Present
تابع نمایش تغییرات()نمایش تغییرات present
تابع نمایش تغییرات()آغاز() پایانه را متصل کرده باشد، خانههای تغییرکرده را مینویسد. وقتی چیزی در انتظار نیست بیدرنگ بازمیگردد. نیازمند بازترسیم و ناحیههای در انتظار را پاک میکند.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-screen.salam
صفگذاری رویداد Post
تابع صفگذاری رویداد(event: رویداد): منطقیصفگذاری رویداد post
تابع صفگذاری رویداد(event: رویداد): منطقینمونهی این مورد همراه با موارد بالاتر آمده است: tui-screen.salam
رویداد بعدی NextEvent
تابع رویداد بعدی(event &: رویداد): منطقیرویداد بعدی next_event
تابع رویداد بعدی(event &: رویداد): منطقیevent ذخیره میکند. وقتی صفحه متوقف شده و همه رویدادهای صف تحویل داده شدهاند نادرست برمیگرداند. حلقه مورد نظر این است: تا صفحه.رویداد بعدی(ev): ... پایاننمونهی این مورد همراه با موارد بالاتر آمده است: tui-screen.salam
تنظیم نویسهها SetGlyphs
تابع تنظیم نویسهها(policy: سیاستنویسهها)تنظیم نویسهها set_glyphs
تابع تنظیم نویسهها(policy: سیاستنویسهها)آغاز() سیاستی را از محیط تشخیص نمیدهد. میتوان پیش یا پس از آغاز() فراخوانی کرد.// زبان: فارسی
واردسازی پایانه
واردسازی رابطپایانه
ناپایا ثانیهها := 0
ساختار ساعت:
همگانی شامل رابطپایانه.ویجتپایه
همگانی تابع ترسیم(بافر: رابطپایانه.بافر، مرز: رابطپایانه.مستطیل):
بافر.نوشتن متن(مرز.ایکس + 1، مرز.ایگرگ، "در حال اجرا از " + ثانیهها + " ثانیه پیش، q برای خروج"، رابطپایانه.ظاهر پیشفرض)
پایان
همگانی تابع پردازش رویداد(رویداد: رابطپایانه.رویداد): منطقی:
اگر رویداد.نویسه است("q"):
برگشت نادرست
پایان
برگشت رویداد.نوع برابر رابطپایانه.رویداد ماوس
پایان
پایان
تابع ریشه:
اگر وارونه پایانه.پایانه دارد():
نادرستسرچاپ "به یک پایانه نیاز دارد"
برگشت 1
پایان
ناپایا ص := رابطپایانه.صفحه ترمینال جدید(ساعت {})
ص.بازه تیک به میلیثانیه = 1000
ص.گزارش ماوس = درست
ص.گزارش حرکت ماوس = نادرست
ص.تنظیم نویسهها(رابطپایانه.سیاستنویسهها.یونیکد)
ص.آغاز()
دیرکن ص.بستن()
ص.اجرا با تیک((): ثانیهها++ پایان)
سرچاپ "پایش هر"، رابطپایانه.بازه پایش به میلیثانیه، "میلیثانیه، صف با ظرفیت"، رابطپایانه.ظرفیت رویداد، "در حال اجرا:"، ص.در حال اجرا
برگشت 0
پایانآغاز Start
تابع آغاز()آغاز start
تابع آغاز()گزارش حرکت ماوس تنظیم شده باشد، وگرنه گزارش کلیک اگر گزارش ماوس تنظیم شده باشد، بافری به اندازه پایانه و رشته ورودی. بلافاصله پس از آن دیرکن صفحه.بستن() را فراخوانی کنید.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-terminal.salam
توقف Stop
تابع توقف()توقف stop
تابع توقف()رویداد بعدی پس از خالی شدن صف نادرست برمیگرداند. فراخوانی بیش از یک بار و از بافتی بدون ویجت، مانند تابع تیک، امن است.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-screen.salam
بستن Close
تابع بستن()بستن close
تابع بستن()آغاز() آن را یافته بود بازمیگرداند، منتظر رشتههای ورودی و winch میماند و حافظه صفحه را آزاد میکند. فراخوانی بیش از یک بار امن است؛ برای دیرکن در نظر گرفته شده است.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-screen.salam
اجرا Run
تابع اجرا()اجرا run
تابع اجرا()توقف() اجرا میکند: نمایش تغییرات، سپس برای هر رویداد آن را هدایت میکند و اگر چیزی تغییر کرده باشد دوباره نمایش تغییرات. Ctrl+C مصرفنشده حلقه را متوقف میکند، پس همیشه میتوان از برنامهای در حالت خام خارج شد.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-terminal.salam
اجرا با تیک RunWithTick
تابع اجرا با تیک(on_tick: تابع())اجرا با تیک run_with_tick
تابع اجرا با تیک(on_tick: تابع())اجرا، و افزون بر آن برای هر رویداد تیک، پیش از هدایت تیک، on_tick را روی رشته اصلی فراخوانی میکند و سپس بازترسیم میکند. تیکها هر بازه تیک به میلیثانیه میلیثانیه میرسند؛ بازه تیک به میلیثانیه را پیش از آغاز() تنظیم کنید.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-terminal.salam
نقطه Point
ساختار نقطهایکس ستون و ایگرگ ردیف است، هر دو از 0 شمرده میشوند.| نام | انگلیسی | گونه | توضیح |
|---|---|---|---|
| ایکس | x | صحیح = 0 | ستون، که از 0 در لبه چپ شمرده میشود. |
| ایگرگ | y | صحیح = 0 | ردیف، که از 0 در لبه بالا شمرده میشود. |
// زبان: فارسی
واردسازی رابطپایانه
تابع ریشه:
کادر := رابطپایانه.مستطیل { ایکس = 2، ایگرگ = 1، عرض = 10، ارتفاع = 4 }
سرچاپ "راست"، کادر.راست()، "پایین"، کادر.پایین()، "خالی"، کادر.خالی است()
سرچاپ "شامل 5,2:"، کادر.دربرمیگیرد(رابطپایانه.نقطه { ایکس = 5، ایگرگ = 2 })
دیگری := رابطپایانه.مستطیل { ایکس = 8، ایگرگ = 3، عرض = 6، ارتفاع = 6 }
سرچاپ "همپوشانی دارد:"، کادر.همپوشانی دارد(دیگری)
مشترک := کادر.اشتراک(دیگری)
سرچاپ "بخش مشترک"، مشترک.ایکس، مشترک.ایگرگ، مشترک.عرض، مشترک.ارتفاع
میانه := کادر.مرکز()
سرچاپ "مرکز"، میانه.ایکس، میانه.ایگرگ
ناپایا جعبهها := وکتور {} برگردان وکتور<رابطپایانه.مستطیل>
جعبهها.بیفزا(رابطپایانه.مستطیل { ایکس = 0، ایگرگ = 10، عرض = 4، ارتفاع = 1 })
جعبهها.بیفزا(رابطپایانه.مستطیل { ایکس = 20، ایگرگ = 1، عرض = 4، ارتفاع = 1 })
سرچاپ "راست:"، رابطپایانه.نزدیکترین(کادر، جعبهها، رابطپایانه.جهت راست)، "پایین:"، رابطپایانه.نزدیکترین(کادر، جعبهها، رابطپایانه.جهت پایین)
سرچاپ "بالا:"، رابطپایانه.نزدیکترین(کادر، جعبهها، رابطپایانه.جهت بالا)، "چپ:"، رابطپایانه.نزدیکترین(کادر، جعبهها، رابطپایانه.جهت چپ)
پایانمستطیل Rect
ساختار مستطیلایکس .. ایکس + عرض - 1 و ردیفهای ایگرگ .. ایگرگ + ارتفاع - 1 را میپوشاند.| نام | انگلیسی | گونه | توضیح |
|---|---|---|---|
| ایکس | x | صحیح = 0 | ستون لبه چپ. |
| ایگرگ | y | صحیح = 0 | ردیف لبه بالا. |
| عرض | width | صحیح = 0 | تعداد ستونها. صفر یا منفی یعنی مستطیل خالی است. |
| ارتفاع | height | صحیح = 0 | تعداد ردیفها. صفر یا منفی یعنی مستطیل خالی است. |
نمونهی این مورد همراه با موارد بالاتر آمده است: tui-geometry.salam
خالی است IsEmpty
تابع خالی است(): منطقیخالی است is_empty
تابع خالی است(): منطقیعرض یا ارتفاع <= 0).نمونهی این مورد همراه با موارد بالاتر آمده است: tui-geometry.salam
راست Right
تابع راست(): صحیحراست right
تابع راست(): صحیحایکس + عرض)، که خودش بیرون از مستطیل است.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-geometry.salam
پایین Bottom
تابع پایین(): صحیحپایین bottom
تابع پایین(): صحیحایگرگ + ارتفاع)، که خودش بیرون از مستطیل است.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-geometry.salam
دربرمیگیرد Contains
تابع دربرمیگیرد(p: نقطه): منطقیدربرمیگیرد contains
تابع دربرمیگیرد(p: نقطه): منطقینمونهی این مورد همراه با موارد بالاتر آمده است: tui-geometry.salam
همپوشانی دارد Intersects
تابع همپوشانی دارد(other: مستطیل): منطقیهمپوشانی دارد intersects
تابع همپوشانی دارد(other: مستطیل): منطقینمونهی این مورد همراه با موارد بالاتر آمده است: tui-geometry.salam
اشتراک Intersection
تابع اشتراک(other: مستطیل): مستطیلاشتراک intersection
تابع اشتراک(other: مستطیل): مستطیلمستطیل خالی در مبدأ است.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-geometry.salam
مرکز Center
تابع مرکز(): نقطهمرکز center
تابع مرکز(): نقطه(ایکس + عرض / 2, ایگرگ + ارتفاع / 2) با تقسیم صحیح. اندازه فرد یک خانه میانی دقیق دارد (3x3 در مبدأ، (1, 1) را میدهد). اندازه زوج چنین خانهای ندارد، پس خانهای که درست در راست و پایین مرکز هندسی است به کار میرود (4x4 در مبدأ، (2, 2) را میدهد). حاصل برای مستطیل خالی معنادار نیست.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-geometry.salam
نوارپیشرفت Progress
ساختار نوارپیشرفتتنظیم پیشرفت و بیشینه را با تنظیم بیشینه تنظیم کنید. خانههای پر، خانههای خالی و دنباله درصد را جداگانه با فیلدهای ظاهر بخش پر، ظاهر بخش خالی و ظاهر متن آرایش دهید.| نام | انگلیسی | گونه | توضیح |
|---|---|---|---|
| ویجت پایه | BaseWidget | ویجتپایه | ویجتپایه تعبیهشده: محدوده و پاسخهای پیشفرض برای هر متد ویجت که این نوع آن را بازتعریف نمیکند. |
| ظاهر بخش پر | fill_style | ظاهر | ظاهر خانههای پر. ظاهر پیشفرض از پیشفرضهای پایانه استفاده میکند. |
| ظاهر بخش خالی | empty_style | ظاهر | ظاهر خانههای خالی. |
| ظاهر متن | text_style | ظاهر | ظاهر دنباله پنجخانهای درصد. |
نمونهی این مورد همراه با موارد بالاتر آمده است: tui-text.salam
اصابتپذیر است Hits
تابع اصابتپذیر است(): منطقیاصابتپذیر است hits
تابع اصابتپذیر است(): منطقینمونهی این مورد همراه با موارد بالاتر آمده است: tui-text.salam
اندازه ترجیحی PreferredSize
تابع اندازه ترجیحی(max_width: صحیح): مستطیلاندازه ترجیحی preferred_size
تابع اندازه ترجیحی(max_width: صحیح): مستطیلنمونهی این مورد همراه با موارد بالاتر آمده است: tui-text.salam
مقدار پیشرفت Progress
تابع مقدار پیشرفت(): صحیحمقدار پیشرفت progress
تابع مقدار پیشرفت(): صحیحنمونهی این مورد همراه با موارد بالاتر آمده است: tui-text.salam
تنظیم پیشرفت SetProgress
تابع تنظیم پیشرفت(percent: صحیح)تنظیم پیشرفت set_progress
تابع تنظیم پیشرفت(percent: صحیح)نمونهی این مورد همراه با موارد بالاتر آمده است: tui-text.salam
تنظیم بیشینه SetMax
تابع تنظیم بیشینه(limit: صحیح)تنظیم بیشینه set_max
تابع تنظیم بیشینه(limit: صحیح)نمونهی این مورد همراه با موارد بالاتر آمده است: tui-text.salam
ترسیم Render
تابع ترسیم(buf: بافر، bounds: مستطیل)ترسیم render
تابع ترسیم(buf: بافر، bounds: مستطیل)محدوده.ایگرگ رسم میکند، از محدوده.ایکس و به طول محدوده.عرض خانه. وقتی دنباله نمایش داده شود، نوار عرض را منهای دنباله میگیرد. وقتی عرض صفر یا کمتر باشد چیزی رسم نمیشود. هر خانه از طریق تنظیم نوشته میشود که به بافر برش میخورد.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-text.salam
HandleEvent
تابع HandleEvent(event: رویداد): منطقیhandle_event
تابع handle_event(event: رویداد): منطقیFocusable
تابع Focusable(): منطقیfocusable
تابع focusable(): منطقیVisible
تابع Visible(): منطقیvisible
تابع visible(): منطقیBounds
تابع Bounds(): مستطیلbounds
تابع bounds(): مستطیلSetBounds
تابع SetBounds(bounds: مستطیل)set_bounds
تابع set_bounds(bounds: مستطیل)Measure
تابع Measure(axis: محور، max_width: صحیح): اندازهmeasure
تابع measure(axis: محور، max_width: صحیح): اندازهپنل Panel
ساختار پنلپنل آن را از هر طرف به اندازه ضخامت کادر مربوط به کادر به داخل میبرد و آن مستطیل را به تنظیم محدوده فرزند میدهد. پنلی با کادر بدون کادر چیزی رسم نمیکند و چیزی را به داخل نمیبرد، پس مانند فرزندش رفتار میکند. فرزند را با افزودن اضافه کنید؛ مانند هر فرزند دیگری، برای رسم شدن باید به درخت صفحه هم افزوده شود. پنل اندازه طبیعی فرزند را بهعلاوه ضخامت کادر مربوط به کادر در هر طرف گزارش میکند، پس حلقهای که رسم میکند بخشی از همان اندازه است. تمرکزپذیر نیست مگر اینکه تمرکز میگیرد تنظیم شده باشد.| نام | انگلیسی | گونه | توضیح |
|---|---|---|---|
| ویجت پایه | BaseWidget | ویجتپایه | ویجتپایه تعبیهشده: محدوده و پاسخهای پیشفرض برای هر متد ویجت که این نوع آن را بازتعریف نمیکند. |
| کادر | border | سبککادر | حلقهای که دور فرزند رسم میشود. بدون کادر چیزی رسم نمیکند و چیزی را به داخل نمیبرد. |
| ظاهر کادر | border_style | ظاهر | ظاهر قاب. فقط رنگ پیشزمینه آن، برای همه خانههای حلقه و عنوان، به کار میرود؛ ویژگیها نادیده گرفته میشوند. |
| عنوان | title | رشته = "" | متن روی لبه بالایی. خالی یا فقط فاصله یعنی بدون عنوان. |
| تمرکز میگیرد | takes_focus | منطقی = نادرست | وقتی درست باشد پنل تمرکزپذیر است: تمرکز را میگیرد و هر رویداد را به فرزندش میدهد. فرزند تمرکزپذیر نیست و تمرکز جداگانهای نمیگیرد. بهطور پیشفرض نادرست است، پس پنل هرگز ایستگاه تمرکز نیست. |
| ظاهر تمرکز | focus_style | ظاهر | ظاهر قاب هنگامی که پنل تمرکز دارد. ظاهر پیشفرض، که مقدار پیشفرض است، یعنی بدون ظاهر تمرکز: قاب همان ظاهر کادر را نگه میدارد. مانند ظاهر کادر، فقط رنگ پیشزمینه به کار میرود. |
| جایگاه | slot | وکتور<جایگاهچیدمان> | فرزند، که بهصورت تنها جایگاهچیدمان نگه داشته میشود. تا وقتی افزودن فراخوانی نشده خالی است. |
// زبان: فارسی
واردسازی پایانه
واردسازی رابطپایانه
ناپایا شمار بستن := 0
تابع نمایش(ص: رابطپایانه.صفحه):
ص.بازترسیم()
تکرار ص.بافر.ارتفاع در سطر:
سرچاپ "|" + ص.بافر.متن ردیف(سطر) + "|"
پایان
پایان
تابع ریشه:
ناپایا ص := رابطپایانه.صفحه جدید(رابطپایانه.ویجتپایه {}، 24، 6)
دیرکن ص.بستن()
ناحیه := رابطپایانه.مستطیل { عرض = 24، ارتفاع = 6 }
بدنه := رابطپایانه.متن جدید("درون این قاب") برگردان پویا رابطپایانه.ویجت
ناپایا قاب := رابطپایانه.پنل { کادر = رابطپایانه.سبککادر.تک خط، عنوان = "پنجره"، تمرکز میگیرد = درست، ظاهر تمرکز = رابطپایانه.ظاهر { پررنگ = درست } }
قاب.ظاهر کادر = رابطپایانه.ظاهر پیشفرض
قاب.افزودن(بدنه)
شناسه قاب := ص.افزودن(رابطپایانه.شناسه ریشه، قاب برگردان پویا رابطپایانه.ویجت)
_ := ص.افزودن(شناسه قاب، بدنه)
ص.ویجت(شناسه قاب).تنظیم محدوده(ناحیه)
سرچاپ "پنل تمرکزپذیر:"، ص.ویجت(شناسه قاب).تمرکزپذیر است()، "جایگاه فرزند:"، قاب.جایگاه.طول()
ناپایا گفتگو := رابطپایانه.مودال جدید()
گفتگو.تنظیم عنوان("خروج؟")
گفتگو.تنظیم اندازه(رابطپایانه.اندازهمودال.ثابت(14، 3))
گفتگو.تنظیم امکان بستن(درست)
گفتگو.ظاهر کادر = رابطپایانه.ظاهر پیشفرض
گفتگو.هنگام بستن = (): شمار بستن++ پایان
پاسخ := رابطپایانه.متن جدید("ب / خ") برگردان پویا رابطپایانه.ویجت
گفتگو.افزودن(پاسخ)
گفتگو.تنظیم محدوده(ناحیه)
شناسه گفتگو := ص.افزودن(رابطپایانه.شناسه ریشه، گفتگو برگردان پویا رابطپایانه.ویجت)
_ := ص.افزودن(شناسه گفتگو، پاسخ)
گفتگو.باز کردن()
_ := ص.تمرکز با ذخیره قبلی(شناسه گفتگو)
ص.آوردن زیردرخت به رو(شناسه گفتگو)
نمایش(ص)
_ := ص.هدایت رویداد(رابطپایانه.رویداد { نوع = رابطپایانه.رویداد کیبورد، کلید = پایانه.کلید { کد = پایانه.کلید گریز } })
ص.بازگرداندن ترتیب زیردرخت(شناسه گفتگو)
_ := ص.بازیابی تمرکز()
سرچاپ "بسته شد:"، شمار بستن، "تمرکز به پنل برگشت:"، ص.شناسه متمرکز() برابر شناسه قاب
نمایش(ص)
_ := گفتگو.تمرکز میگیرد
_ := گفتگو.وضعیت
گفتگو.بستن()
_ := رابطپایانه.اندازهمودال.درصدی(50، 50)
_ := رابطپایانه.ضخامت.سنگین
پایانافزودن Add
تابع افزودن(child: dyn ویجت)افزودن add
تابع افزودن(child: dyn ویجت)پنل حداکثر یک فرزند دارد. فرزند در تنظیم محدوده بعدی در ناحیه محتوای پنل جای میگیرد.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-panels.salam
تنظیم محدوده SetBounds
تابع تنظیم محدوده(bounds: مستطیل)تنظیم محدوده set_bounds
تابع تنظیم محدوده(bounds: مستطیل)پنل را ذخیره میکند، سپس مستطیل فرزند را برابر مستطیل پنل قرار میدهد که از هر طرف به اندازه هزینه کادر (ضخامت کادر) به داخل برده شده است.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-panels.salam
اندازه ترجیحی PreferredSize
تابع اندازه ترجیحی(max_width: صحیح): مستطیلاندازه ترجیحی preferred_size
تابع اندازه ترجیحی(max_width: صحیح): مستطیلضخامت کادر مربوط به کادر در هر طرف. هر محور با max_width منهای آن فاصله در دو طرف، با کف 1، اندازهگیری میشود؛ max_width غیرمثبت بدون تغییر و به معنای نامحدود فرستاده میشود. فرزندی که نتواند اندازهگیری کند به اندازه ترجیحی خود برمیگردد. مؤلفه منفی یعنی بدون ترجیح در آن محور و -1 میماند. پنل خالی هیچ ترجیحی گزارش نمیکند.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-panels.salam
تمرکزپذیر است Focusable
تابع تمرکزپذیر است(): منطقیتمرکزپذیر است focusable
تابع تمرکزپذیر است(): منطقیتمرکز میگیرد تنظیم شده باشد.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-panels.salam
پردازش رویداد HandleEvent
تابع پردازش رویداد(event: رویداد): منطقیپردازش رویداد handle_event
تابع پردازش رویداد(event: رویداد): منطقیپنل متمرکز رویداد دریافت میکند، پس این مسیر کلید فرزند است.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-panels.salam
ترسیم Render
تابع ترسیم(buf: بافر، bounds: مستطیل)ترسیم render
تابع ترسیم(buf: بافر، bounds: مستطیل)پنل رسم میکند. هنگامی که پنل تمرکز دارد و ظاهر تمرکز تنظیم شده، قاب از ظاهر تمرکز استفاده میکند. فرزند خودش را رسم میکند: صفحه همه ویجتهای درختش را رسم میکند.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-panels.salam
Hits
تابع Hits(): منطقیhits
تابع hits(): منطقیVisible
تابع Visible(): منطقیvisible
تابع visible(): منطقیBounds
تابع Bounds(): مستطیلbounds
تابع bounds(): مستطیلMeasure
تابع Measure(axis: محور، max_width: صحیح): اندازهmeasure
تابع measure(axis: محور، max_width: صحیح): اندازهاندازهمودال ModalSize
جداشمار اندازهمودال:
درصدی(w: صحیح، h: صحیح)
ثابت(w: صحیح، h: صحیح)
پایانمودال.| نام | انگلیسی | گونه | توضیح |
|---|---|---|---|
| درصدی | Percent | (w: صحیح، h: صحیح) | سهمی از محدوده، به درصد (0 تا 100) در هر محور. حاصلضرب رو به پایین گرد میشود، سپس دستکم به 20 در 5 و حداکثر به اندازه محدوده محدود میشود. وقتی محدوده کوچکتر از 20 در 5 باشد، پنجره گفتوگو برابر محدوده است. |
| ثابت | Fixed | (w: صحیح، h: صحیح) | دقیقا w در h خانه، که فقط به محدوده محدود میشود و نه چیز دیگر: کف 20 در 5 برای اندازه صریح اعمال نمیشود. |
نمونهی این مورد همراه با موارد بالاتر آمده است: tui-panels.salam
مودال Modal
ساختار مودالمودال و روی پردهای کمرنگ (DIM). فرزند یک خانه درون حلقه قرار میگیرد. مودال پنهان چیزی رسم نمیکند، تمرکز نمیگیرد و هیچ برخوردی نمیگیرد. آن را با مودال جدید بسازید. وضعیتش میان همه رونوشتها مشترک است، پس متدهای زیر پیش و پس از صفحه.افزودن کار میکنند.| نام | انگلیسی | گونه | توضیح |
|---|---|---|---|
| ویجت پایه | BaseWidget | ویجتپایه | ویجتپایه جاسازیشده: محدوده و پاسخهای پیشفرض برای هر متد ویجت که این نوع بازنویسی نمیکند. |
| ظاهر کادر | border_style | ظاهر | رنگ حلقه. فقط رنگ پیشزمینه آن به کار میرود؛ ویژگیها نادیده گرفته میشوند، همانند پنل. |
| تمرکز میگیرد | takes_focus | منطقی = درست | وقتی true باشد، مودال تا زمانی که باز است یک ایستگاه تمرکز است. همین یک ایستگاه تمرکز، Tab را درون لایه خودش نگه میدارد. |
| هنگام بستن | on_close | تابع() | پس از آنکه Esc مودال را ببندد فراخوانی میشود. بستن آن را فراخوانی نمیکند. |
| وضعیت | state | وکتور<_ModalState> | نگهدارنده وضعیت مشترک، با یک عضو. مودال جدید آن را میسازد؛ همه رونوشتها در آن شریکاند. مودال را از طریق متدهایش بخوانید و بنویسید. |
نمونهی این مورد همراه با موارد بالاتر آمده است: tui-panels.salam
افزودن Add
تابع افزودن(child: dyn ویجت)افزودن add
تابع افزودن(child: dyn ویجت)مودال به درخت صفحه هم افزوده شود تا رسم شود و رویدادها را دریافت کند. در تنظیم محدوده بعدی جایگذاری میشود.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-panels.salam
باز کردن Open
تابع باز کردن()باز کردن open
تابع باز کردن()مودال را نمایش میدهد. فقط وضعیت را تغییر میدهد: مودال را به رو نمیآورد و تمرکز را جابهجا نمیکند. برنامه هر دو را با صفحه.تمرکز با ذخیره قبلی و سپس آوردن زیردرخت به رو انجام میدهد. روی مقدار محلی یا روی رونوشتی که صفحه.افزودن ذخیره کرده کار میکند.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-panels.salam
بستن Close
تابع بستن()بستن close
تابع بستن()مودال را پنهان میکند. فقط وضعیت را تغییر میدهد: هنگام بستن را فراخوانی نمیکند، به رو آوردن را برنمیگرداند و تمرکز را بازیابی نمیکند. برنامه اینها را با بازگرداندن ترتیب زیردرخت و سپس بازیابی تمرکز انجام میدهد. روی مقدار محلی یا روی رونوشتی که صفحه.افزودن ذخیره کرده کار میکند.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-panels.salam
تنظیم عنوان SetTitle
تابع تنظیم عنوان(t: رشته)تنظیم عنوان set_title
تابع تنظیم عنوان(t: رشته)صفحه.افزودن کار میکند.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-panels.salam
تنظیم اندازه SetSize
تابع تنظیم اندازه(sz: اندازهمودال)تنظیم اندازه set_size
تابع تنظیم اندازه(sz: اندازهمودال)صفحه.افزودن کار میکند.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-panels.salam
تنظیم امکان بستن SetClosable
تابع تنظیم امکان بستن(b: منطقی)تنظیم امکان بستن set_closable
تابع تنظیم امکان بستن(b: منطقی)مودال را ببندد یا نه. پیش یا پس از صفحه.افزودن کار میکند.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-panels.salam
تنظیم محدوده SetBounds
تابع تنظیم محدوده(bounds: مستطیل)تنظیم محدوده set_bounds
تابع تنظیم محدوده(bounds: مستطیل)مودال را در وضعیت مشترک ذخیره میکند، سپس فرزند را در مستطیل پنجره گفتوگو، با یک خانه فاصله برای حلقه، جایگذاری میکند. پیش یا پس از صفحه.افزودن کار میکند.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-panels.salam
محدوده Bounds
تابع محدوده(): مستطیلمحدوده bounds
تابع محدوده(): مستطیلتنظیم محدوده ذخیره کرده است، خواندهشده از وضعیت مشترک تا صفحه روی رونوشت ذخیرهشده همان مستطیل را ببیند.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-panels.salam
اندازه ترجیحی PreferredSize
تابع اندازه ترجیحی(max_width: صحیح): مستطیلاندازه ترجیحی preferred_size
تابع اندازه ترجیحی(max_width: صحیح): مستطیلFixed مقدار دقیق w در h خود را گزارش میکند. اندازه Percent به محدودهای که میگیرد وابسته است، پس مقدار نگهبان «بدون ترجیح» را گزارش میکند.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-panels.salam
تمرکزپذیر است Focusable
تابع تمرکزپذیر است(): منطقیتمرکزپذیر است focusable
تابع تمرکزپذیر است(): منطقیتمرکز میگیرد تنظیم شده باشد true است.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-panels.salam
اصابتپذیر است Hits
تابع اصابتپذیر است(): منطقیاصابتپذیر است hits
تابع اصابتپذیر است(): منطقیمودال پنهان اجازه میدهد کلیک به لایه زیرین برسد.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-panels.salam
نمایان است Visible
تابع نمایان است(): منطقینمایان است visible
تابع نمایان است(): منطقیمودال پنهان فرزندش را هم از ترتیب تمرکز، رسم و آزمون برخورد پنهان میکند، چون صفحه همه ویجتهای مسیر تا ریشه را بررسی میکند.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-panels.salam
پردازش رویداد HandleEvent
تابع پردازش رویداد(event: رویداد): منطقیپردازش رویداد handle_event
تابع پردازش رویداد(event: رویداد): منطقیمودال را میبندد، هنگام بستن را فراخوانی میکند و true برمیگرداند. سپس رویداد ماوس درون محدوده ولی بیرون از پنجره گفتوگو true برمیگرداند، تا هرگز به ویجت زیرین نرسد. هر چیز دیگری false برمیگرداند. مودال پنهان برای همه چیز false برمیگرداند.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-panels.salam
ترسیم Render
تابع ترسیم(buf: بافر، bounds: مستطیل)ترسیم render
تابع ترسیم(buf: بافر، bounds: مستطیل)نمونهی این مورد همراه با موارد بالاتر آمده است: tui-panels.salam
Measure
تابع Measure(axis: محور، max_width: صحیح): اندازهmeasure
تابع measure(axis: محور، max_width: صحیح): اندازهفهرست List
ساختار فهرستهنگام انتخاب را با نمایه انتخابشده فراخوانی میکند. ردیف انتخابشده با تمام پهنا و با ظاهر انتخاب رسم میشود و پنجره نمایش به کمترین اندازه لازم پیمایش میکند تا آن را نمایان نگه دارد.| نام | انگلیسی | گونه | توضیح |
|---|---|---|---|
| ویجت پایه | BaseWidget | ویجتپایه | ویجتپایه جاسازیشده: محدوده و پاسخهای پیشفرض برای هر متد ویجت که این نوع بازنویسی نمیکند. |
| ظاهر | style | ظاهر | ظاهر همه ردیفهای انتخابنشده. ظاهر پیشفرض با پیشفرضهای پایانه رسم میکند. |
| ظاهر انتخاب | selected_style | ظاهر | ظاهر ردیف انتخابشده هنگام تمرکز؛ روی آن ردیف جای ظاهر را میگیرد. پیشفرض آن رنگ وارونه است. |
| ظاهر انتخاب بیتمرکز | selected_unfocused_style | ظاهر | ظاهر ردیف انتخابشده هنگام بیتمرکزی؛ روی آن ردیف جای ظاهر را میگیرد. پیشفرض آن پسزمینه مشکی روشن است. |
| هنگام انتخاب | on_select | تابع(صحیح) | وقتی enter روی فهرست غیرخالی فشرده شود، با نمایه انتخابشده فراخوانی میشود. پیشفرض کاری نمیکند. |
// زبان: فارسی
واردسازی رشته
واردسازی پایانه
واردسازی رابطپایانه
ناپایا ثبتشده := ""
ناپایا برگزیده := -1
ناپایا شمار فشار := 0
ناپایا تغییر کرد := نادرست
تابع کلید(دنباله: رشته): رابطپایانه.رویداد:
برگشت رابطپایانه.رویداد { نوع = رابطپایانه.رویداد کیبورد، کلید = پایانه.رمزگشایی(دنباله) }
پایان
تابع ظاهر وارون(): رابطپایانه.ظاهر:
ناپایا ظاهر := رابطپایانه.ظاهر {}
ظاهر.معکوس = درست
برگشت ظاهر
پایان
تابع ریشه:
ناپایا بافر := رابطپایانه.بافر جدید(24، 5)
ناپایا گذرواژه := رابطپایانه.کادر متن جدید()
گذرواژه.پوشانده = درست
گذرواژه.نماد پوشش = "*"
گذرواژه.حداکثر طول = 8
گذرواژه.پالایه = (نامزد: رشته): برگشت وارونه رشته.شامل است(نامزد، " ") پایان
گذرواژه.هنگام ثبت = (مقدار: رشته):
ثبتشده = مقدار
برگشت درست
پایان
گذرواژه.تنظیم متن راهنما("گذرواژه")
گذرواژه.تنظیم مقدار("")
گذرواژه.ظاهر = رابطپایانه.ظاهر پیشفرض
گذرواژه.ظاهر مکاننما = ظاهر وارون()
گذرواژه.ظاهر متن راهنما = رابطپایانه.ظاهر { کمرنگ = درست }
گذرواژه.تنظیم محدوده(رابطپایانه.مستطیل { ایکس = 0، ایگرگ = 0، عرض = 12، ارتفاع = 1 })
هر نویسه در ["s"، " "، "e"، "c"]:
_ := گذرواژه.پردازش رویداد(کلید(نویسه))
پایان
_ := گذرواژه.پردازش رویداد(کلید("\r"))
سرچاپ "ورودی تمرکزپذیر:"، گذرواژه.تمرکزپذیر است()، "مقدار:"، گذرواژه.مقدار()، "ثبت شد:"، ثبتشده
ناپایا دکمه خب := رابطپایانه.دکمه جدید("خب")
دکمه خب.هنگام کلیک = (): شمار فشار++ پایان
دکمه خب.ظاهر تمرکز = رابطپایانه.ظاهر { پررنگ = درست }
دکمه خب.ظاهر = رابطپایانه.ظاهر پیشفرض
دکمه خب.غیرفعال = نادرست
دکمه خب.تنظیم محدوده(رابطپایانه.مستطیل { ایکس = 0، ایگرگ = 1، عرض = 8، ارتفاع = 1 })
_ := دکمه خب.پردازش رویداد(کلید(" "))
سرچاپ "دکمه:"، دکمه خب.برچسب، دکمه خب.تمرکزپذیر است()، دکمه خب.اصابتپذیر است()، "فشار"، شمار فشار، "عرض"، دکمه خب.اندازه ترجیحی(20).عرض
ناپایا شکستن := رابطپایانه.کادر انتخاب جدید("شکستن خطوط"، نادرست)
شکستن.هنگام تغییر انتخاب = (روشن: منطقی): تغییر کرد = روشن پایان
شکستن.ظاهر کادر = رابطپایانه.ظاهر پیشفرض
شکستن.ظاهر برچسب = رابطپایانه.ظاهر پیشفرض
شکستن.غیرفعال = نادرست
شکستن.تنظیم محدوده(رابطپایانه.مستطیل { ایکس = 0، ایگرگ = 2، عرض = 14، ارتفاع = 1 })
_ := شکستن.پردازش رویداد(کلید(" "))
شکستن.تنظیم انتخاب(شکستن.انتخاب شده است())
سرچاپ "کادر انتخاب:"، شکستن.برچسب، شکستن.انتخاب شده است()، تغییر کرد، شکستن.تمرکزپذیر است()، شکستن.اصابتپذیر است()، شکستن.اندازه ترجیحی(20).عرض
ناپایا گزینهها := وکتور {} برگردان وکتور<رشته>
گزینهها.بیفزا("قرمز")
گزینهها.بیفزا("سبز")
ناپایا رنگها := رابطپایانه.فهرست جدید(گزینهها)
رنگها.هنگام انتخاب = (شماره: صحیح): برگزیده = شماره پایان
رنگها.ظاهر = رابطپایانه.ظاهر پیشفرض
رنگها.ظاهر انتخاب = ظاهر وارون()
رنگها.ظاهر انتخاب بیتمرکز = رابطپایانه.ظاهر { زیرخط = درست }
رنگها.تنظیم محدوده(رابطپایانه.مستطیل { ایکس = 14، ایگرگ = 0، عرض = 8، ارتفاع = 2 })
_ := رنگها.پردازش رویداد(کلید("j"))
_ := رنگها.پردازش رویداد(کلید("\r"))
سرچاپ "فهرست:"، رنگها.نمایه انتخاب()، رنگها.گزینه انتخابشده()، برگزیده، رنگها.تمرکزپذیر است()
گذرواژه.ترسیم(بافر، گذرواژه.محدوده())
دکمه خب.ترسیم(بافر، دکمه خب.محدوده())
شکستن.ترسیم(بافر، شکستن.محدوده())
رنگها.ترسیم(بافر، رنگها.محدوده())
تکرار بافر.ارتفاع در سطر:
سرچاپ "|" + بافر.متن ردیف(سطر) + "|"
پایان
بافر.آزادسازی()
پایانتمرکزپذیر است Focusable
تابع تمرکزپذیر است(): منطقیتمرکزپذیر است focusable
تابع تمرکزپذیر است(): منطقیفهرست تعاملی است، پس توزیع تمرکز صفحه رویدادهای صفحهکلید را به آن میفرستد.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-controls.salam
پردازش رویداد HandleEvent
تابع پردازش رویداد(event: رویداد): منطقیپردازش رویداد handle_event
تابع پردازش رویداد(event: رویداد): منطقیهنگام انتخاب را با نمایه انتخابشده فراخوانی میکند. رویدادها و کلیدهای دیگر مصرف نمیشوند، پس به بالا منتقل میشوند.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-controls.salam
نمایه انتخاب SelectedIndex
تابع نمایه انتخاب(): صحیحنمایه انتخاب selected_index
تابع نمایه انتخاب(): صحیحنمونهی این مورد همراه با موارد بالاتر آمده است: tui-controls.salam
گزینه انتخابشده SelectedItem
تابع گزینه انتخابشده(): رشتهگزینه انتخابشده selected_item
تابع گزینه انتخابشده(): رشتهنمونهی این مورد همراه با موارد بالاتر آمده است: tui-controls.salam
ترسیم Render
تابع ترسیم(buf: بافر، bounds: مستطیل)ترسیم render
تابع ترسیم(buf: بافر، bounds: مستطیل)نمونهی این مورد همراه با موارد بالاتر آمده است: tui-controls.salam
Hits
تابع Hits(): منطقیhits
تابع hits(): منطقیVisible
تابع Visible(): منطقیvisible
تابع visible(): منطقیBounds
تابع Bounds(): مستطیلbounds
تابع bounds(): مستطیلSetBounds
تابع SetBounds(bounds: مستطیل)set_bounds
تابع set_bounds(bounds: مستطیل)PreferredSize
تابع PreferredSize(max_width: صحیح): مستطیلpreferred_size
تابع preferred_size(max_width: صحیح): مستطیلMeasure
تابع Measure(axis: محور، max_width: صحیح): اندازهmeasure
تابع measure(axis: محور، max_width: صحیح): اندازهمحور Axis
جداشمار محورمحور افقی افقی و محور عمودی عمودی است.| نام | انگلیسی | گونه | توضیح |
|---|---|---|---|
| محور افقی | X | | محور افقی. |
| محور عمودی | Y | | محور عمودی. |
// زبان: فارسی
واردسازی رابطپایانه
ساختار جعبه:
همگانی شامل رابطپایانه.ویجتپایه
همگانی نشان: رشته = "#"
همگانی تابع ترسیم(بافر: رابطپایانه.بافر، مرز: رابطپایانه.مستطیل):
بافر.پرکردن(مرز، این.نشان، رابطپایانه.ظاهر پیشفرض)
پایان
پایان
تابع ساخت جعبه(نشان: رشته): پویا رابطپایانه.ویجت:
برگشت جعبه { نشان = نشان } برگردان پویا رابطپایانه.ویجت
پایان
تابع قاعده(شیوه: رابطپایانه.نوعاندازهگذاری، سلولها: صحیح، وزن: صحیح): رابطپایانه.قاعدهاندازهگذاری:
برگشت رابطپایانه.قاعدهاندازهگذاری { نوع = شیوه، تعداد سلول = سلولها، وزن = وزن }
پایان
تابع ریشه:
الف := ساخت جعبه("a")
ب := ساخت جعبه("b")
پ := ساخت جعبه("c")
ت := ساخت جعبه("d")
ث := ساخت جعبه("e")
ج := ساخت جعبه("f")
ناپایا بالا := رابطپایانه.ردیف جدید()
بالا.تنظیم فاصله(1)
جای الف := بالا.افزودن(الف)
جای ب := بالا.افزودن(ب)
بالا.تنظیم عرض(جای الف، قاعده(رابطپایانه.نوعاندازهگذاری.ثابت، 4، 0))
بالا.تنظیم عرض(جای ب، قاعده(رابطپایانه.نوعاندازهگذاری.پرکردن فضا، 0، 1))
ردیف بالا := بالا برگردان پویا رابطپایانه.ویجت
ناپایا شبکه := رابطپایانه.شبکه جدید(1، 2)
جای پ := شبکه.افزودن(پ)
جای ت := شبکه.افزودن(ت)
شبکه.تنظیم خانه(جای پ، 0، 0)
شبکه.تنظیم خانه(جای ت، 0، 1)
ویجت شبکه := شبکه برگردان پویا رابطپایانه.ویجت
ناپایا پشته := رابطپایانه.پشته جدید()
جای ث := پشته.افزودن(ث)
جای ج := پشته.افزودن(ج)
پشته.تنظیم حاشیه بیرونی(جای ج، رابطپایانه.فاصلههای چهارگانه جدید(0، 2، 0، 2))
پشته.تنظیم تراز(جای ث، رابطپایانه.ترازعرضی.کشیده، رابطپایانه.ترازعرضی.کشیده)
ویجت پشته := پشته برگردان پویا رابطپایانه.ویجت
ناپایا ستون := رابطپایانه.ستون جدید()
ستون.تنظیم فاصله درونی(رابطپایانه.فاصلههای چهارگانه یکسان(1))
جای ردیف := ستون.افزودن(ردیف بالا)
جای شبکه := ستون.افزودن(ویجت شبکه)
جای پشته := ستون.افزودن(ویجت پشته)
ستون.تنظیم ارتفاع(جای ردیف، قاعده(رابطپایانه.نوعاندازهگذاری.ثابت، 1، 0))
ستون.تنظیم ارتفاع(جای شبکه، قاعده(رابطپایانه.نوعاندازهگذاری.ثابت، 2، 0))
ستون.تنظیم ارتفاع(جای پشته، قاعده(رابطپایانه.نوعاندازهگذاری.پرکردن فضا، 0، 1))
ناپایا ص := رابطپایانه.صفحه جدید(ستون برگردان پویا رابطپایانه.ویجت، 20، 8)
دیرکن ص.بستن()
هر ویجت در [ردیف بالا، الف، ب، ویجت شبکه، پ، ت، ویجت پشته، ث، ج]:
_ := ص.افزودن(رابطپایانه.شناسه ریشه، ویجت)
پایان
ص.بازترسیم()
تکرار ص.بافر.ارتفاع در سطر:
سرچاپ "|" + ص.بافر.متن ردیف(سطر) + "|"
پایان
ناپایا اندازهها := وکتور {} برگردان وکتور<رابطپایانه.قاعدهاندازهگذاری>
اندازهها.بیفزا(قاعده(رابطپایانه.نوعاندازهگذاری.ثابت، 3، 0))
اندازهها.بیفزا(قاعده(رابطپایانه.نوعاندازهگذاری.پرکردن فضا، 0، 2))
اندازهها.بیفزا(قاعده(رابطپایانه.نوعاندازهگذاری.ترجیحی، 0، 1))
تقسیم := رابطپایانه.تقسیم محور اصلی(12، اندازهها، 0)
سرچاپ "تقسیم 12:"، تقسیم.دریافت(0)، تقسیم.دریافت(1)، تقسیم.دریافت(2)
بخشها := رابطپایانه.اندازههای بخشهای شبکه(10، 3)
سرچاپ "بخشهای 10/3:"، بخشها.دریافت(0)، بخشها.دریافت(1)، بخشها.دریافت(2)
درون := رابطپایانه.کاستن از لبههای مستطیل(رابطپایانه.مستطیل { عرض = 10، ارتفاع = 4 }، رابطپایانه.فاصلههای چهارگانه جدید(1، 2، 1، 2))
سرچاپ "تورفتگی:"، درون.ایکس، درون.ایگرگ، درون.عرض، درون.ارتفاع
جاگرفته := رابطپایانه.جاسازی مستطیل(رابطپایانه.مستطیل { ایکس = 8، ایگرگ = 0، عرض = 6، ارتفاع = 2 }، رابطپایانه.مستطیل { عرض = 10، ارتفاع = 4 })
سرچاپ "جاسازی:"، جاگرفته.ایکس، جاگرفته.عرض
سرچاپ "جایابی:"، رابطپایانه.اندازه در محور(10، رابطپایانه.ترازعرضی.مرکز، 4)، رابطپایانه.جابهجایی در محور(10، رابطپایانه.ترازعرضی.انتها، 4)
سنجش := رابطپایانه.اندازه { معتبر = درست، گستره = 3 }
سرچاپ "اندازه:"، سنجش.معتبر، سنجش.گستره، رابطپایانه.محور.محور افقی نابرابر رابطپایانه.محور.محور عمودی
جایگاه := ستون.جایگاهها.بگیر(1)
سرچاپ "گستره جایگاه:"، جایگاه.گستره ردیف، جایگاه.گستره ستون، "ردیف/ستون:"، شبکه.ردیفها، شبکه.ستونها، "فاصله:"، بالا.فاصله، "فاصله درونی:"، ستون.فاصله درونی.بالا
پایاناندازه Measure
ساختار اندازهویجت.اندازهگیری. وقتی ویجت قادر به اندازهگیری نباشد، معتبر برابر نادرست است. سپس موتور چیدمان اندازه ترجیحی را میخواند.| نام | انگلیسی | گونه | توضیح |
|---|---|---|---|
| معتبر | ok | منطقی = نادرست | وقتی گستره یک اندازهگیری واقعی است، درست است. نادرست یعنی اندازهگیری ممکن نیست. |
| گستره | extent | صحیح = 0 | طول اندازهگیریشده بر حسب خانه، وقتی معتبر برابر درست است. موتور مقدار منفی را به 0 محدود میکند. وقتی معتبر برابر نادرست است نادیده گرفته میشود. |
نمونهی این مورد همراه با موارد بالاتر آمده است: tui-layout.salam
ترازعرضی CrossAlign
جداشمار ترازعرضیکشیده (پیشفرض) کل محور را پر میکند؛ بقیه، فرزندی با اندازه طبیعی را درون فضای آزاد قرار میدهند.| نام | انگلیسی | گونه | توضیح |
|---|---|---|---|
| آغاز | Start | | فرزند از لبه آغازین جعبه شروع میشود؛ فضای آزاد پس از آن میآید. |
| مرکز | Center | | فرزند در مرکز قرار میگیرد؛ وقتی فضای آزاد فرد باشد، خانه اضافه به راست (ردیف) یا پایین (ستون) میرود. |
| انتها | End | | فرزند در لبه پایانی جعبه تمام میشود؛ فضای آزاد پیش از آن میآید. |
| کشیده | Stretch | | فرزند کل محور را پر میکند (پیشفرض)؛ هر اندازهای نادیده گرفته میشود. |
نمونهی این مورد همراه با موارد بالاتر آمده است: tui-layout.salam
نوعاندازهگذاری SizeKind
جداشمار نوعاندازهگذاری| نام | انگلیسی | گونه | توضیح |
|---|---|---|---|
| پرکردن فضا | Fill | | سهمی وزندار از هر آنچه پس از فرزندان ثابت باقی میماند (R5). روی محور عرضی، پرکردن فضا مانند ترجیحی رفتار میکند و وزن نادیده گرفته میشود (R8). |
| ثابت | Fixed | | دقیقا به طول تعداد سلول. مقدار منفی به 0 محدود میشود. |
| ترجیحی | Pref | | اندازه ترجیحی فرزند. روی محور اصلی، ترجیحی اندازهگیریشده مانند ثابت رزرو میشود و اگر قابل اندازهگیری نباشد، پرکردن فضا با وزن 1 است. روی محور عرضی، همان اندازه طبیعی اندازهگیریشده است (R8). |
نمونهی این مورد همراه با موارد بالاتر آمده است: tui-layout.salam
قاعدهاندازهگذاری LayoutSize
ساختار قاعدهاندازهگذاریتعداد سلول فقط وقتی خوانده میشود که نوع برابر ثابت باشد. وزن فقط وقتی خوانده میشود که یک پرکردن فضا یا ترجیحی محور اصلی در تقسیم سهم شرکت کند.| نام | انگلیسی | گونه | توضیح |
|---|---|---|---|
| نوع | kind | نوعاندازهگذاری | شیوه تعیین اندازه. پیشفرض پرکردن فضا است. |
| تعداد سلول | cells | صحیح = 0 | طول درخواستی، فقط وقتی خوانده میشود که نوع برابر ثابت باشد. مقدار منفی هنگام استفاده به 0 محدود میشود. |
| وزن | weight | صحیح = 1 | سهم یک پرکردن فضا از باقیمانده محور اصلی. پیشفرض 1 است. مقدار منفی هنگام استفاده به 0 محدود میشود. ثابت آن را نادیده میگیرد، و همچنین شبکه، پشته و تراز محور عرضی. تقسیم محور اصلی آن را برای یک ترجیحی که هنوز در بردار است هم میخواند. Arrange ابتدا ترجیحی اندازهگیریشده را به ثابت و ترجیحی غیرقابل اندازهگیری را به پرکردن فضا با وزن 1 تبدیل میکند، پس این مقدار وزن آن جایگاه نیست. |
نمونهی این مورد همراه با موارد بالاتر آمده است: tui-layout.salam
فاصلههایچهارگانه Insets
ساختار فاصلههایچهارگانهکاستن از لبههای مستطیل)؛ فاصلههای چهارگانه جدید و فاصلههای چهارگانه یکسان هنگام ساخت محدود میکنند.| نام | انگلیسی | گونه | توضیح |
|---|---|---|---|
| بالا | top | صحیح = 0 | خانههایی که بالای محتوا افزوده میشوند (فاصله درونی) یا بالای فرزند رزرو میشوند (حاشیه بیرونی). |
| راست | right | صحیح = 0 | خانههایی که سمت راست محتوا افزوده میشوند یا سمت راست فرزند رزرو میشوند. |
| پایین | bottom | صحیح = 0 | خانههایی که پایین محتوا افزوده میشوند یا پایین فرزند رزرو میشوند. |
| چپ | left | صحیح = 0 | خانههایی که سمت چپ محتوا افزوده میشوند یا سمت چپ فرزند رزرو میشوند. |
نمونهی این مورد همراه با موارد بالاتر آمده است: tui-layout.salam
جایگاهچیدمان LayoutSlot
ساختار جایگاهچیدمانحاشیه بیرونی پیش از قرار گرفتن فرزند از جایگاه کم میشود، عرض و ارتفاع اندازههای درخواستی روی هر محور هستند، و تراز افقی / تراز عمودی فرزندی را که کشیده نمیشود جایگذاری میکنند. ردیف، ستون، گستره ردیف و گستره ستون فقط توسط شبکه خوانده میشوند.| نام | انگلیسی | گونه | توضیح |
|---|---|---|---|
| فرزند | child | dyn ویجت | ویجت فرزند. باید در درخت صفحه هم ثبت شود، وگرنه صفحه هرگز آن را رسم نمیکند. |
| حاشیه بیرونی | margin | فاصلههایچهارگانه | فضای رزروشده درون جایگاه، پیش از تراز (R4). پیشفرض صفر است. |
| عرض | width | قاعدهاندازهگذاری | اندازه درخواستی روی محور x. پیشفرض پرکردن فضا است. |
| ارتفاع | height | قاعدهاندازهگذاری | اندازه درخواستی روی محور y. پیشفرض پرکردن فضا است. |
| تراز افقی | align_x | ترازعرضی | تراز محور عرضی روی x. پیشفرض کشیده است. |
| تراز عمودی | align_y | ترازعرضی | تراز محور عرضی روی y. پیشفرض کشیده است. |
| ردیف | row | صحیح = 0 | ردیفی از شبکه که این فرزند اشغال میکند. پیشفرض 0 است. |
| ستون | col | صحیح = 0 | ستونی از شبکه که این فرزند اشغال میکند. پیشفرض 0 است. |
| گستره ردیف | row_span | صحیح = 1 | تعداد ردیفهایی از شبکه که این فرزند از ردیف به بعد پوشش میدهد. پیشفرض 1 است. مقدار نامثبت یعنی 1، و شبکه آن را به ردیفهای باقیمانده محدود میکند. |
| گستره ستون | col_span | صحیح = 1 | تعداد ستونهایی از شبکه که این فرزند از ستون به بعد پوشش میدهد. پیشفرض 1 است. مقدار نامثبت یعنی 1، و شبکه آن را به ستونهای باقیمانده محدود میکند. |
نمونهی این مورد همراه با موارد بالاتر آمده است: tui-layout.salam
ردیف Row
ساختار ردیفتنظیم فاصله به همان تعداد خانه میانشان فاصله میگذارد. ترجیحی اندازهگیریشده محور اصلی مانند ثابت رزرو میشود. سپس پرکردن فضا عرض محتوای باقیمانده پس از این رزرو و بودجه فاصلهها را تقسیم میکند (R5). فرزند ارتفاع محتوا را پر میکند مگر اینکه تراز عمودی آن را جای دیگری قرار دهد. فاصله درونی را با تنظیم فاصله درونی و حاشیه بیرونی، اندازه و تراز فرزند را با متدهای جایگاه تنظیم کنید. فرزندان فقط جایگذاری میشوند، نه رسم، پس آنها را به درخت صفحه هم اضافه کنید.| نام | انگلیسی | گونه | توضیح |
|---|---|---|---|
| ویجت پایه | BaseWidget | ویجتپایه | ویجتپایه جاسازیشده: محدوده و پاسخهای پیشفرض برای هر متد ویجت که این نوع بازنویسی نمیکند. |
| فاصله درونی | pad | فاصلههایچهارگانه | فاصله میان محدوده ظرف و جعبه محتوای آن (R3). |
| فاصله | gap | صحیح = 0 | تعداد خانههای میان جایگاههای مجاور روی محور اصلی (R5). پیشفرض صفر است. مقدار منفی به 0 محدود میشود. |
| جایگاهها | items | وکتور<جایگاهچیدمان> | فرزندان به ترتیب جایگذاری، هر کدام یک جایگاه. |
نمونهی این مورد همراه با موارد بالاتر آمده است: tui-layout.salam
افزودن Add
تابع افزودن(child: dyn ویجت): صحیحافزودن add
تابع افزودن(child: dyn ویجت): صحیحصفحه اضافه کنید.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-layout.salam
تنظیم حاشیه بیرونی SetMargin
تابع تنظیم حاشیه بیرونی(i: صحیح، margin: فاصلههایچهارگانه)تنظیم حاشیه بیرونی set_margin
تابع تنظیم حاشیه بیرونی(i: صحیح، margin: فاصلههایچهارگانه)i را تنظیم میکند (R4). نمایه خارج از بازه نادیده گرفته میشود.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-layout.salam
تنظیم عرض SetWidth
تابع تنظیم عرض(i: صحیح، size: قاعدهاندازهگذاری)تنظیم عرض set_width
تابع تنظیم عرض(i: صحیح، size: قاعدهاندازهگذاری)i را تنظیم میکند (R5).نمونهی این مورد همراه با موارد بالاتر آمده است: tui-layout.salam
تنظیم ارتفاع SetHeight
تابع تنظیم ارتفاع(i: صحیح، size: قاعدهاندازهگذاری)تنظیم ارتفاع set_height
تابع تنظیم ارتفاع(i: صحیح، size: قاعدهاندازهگذاری)i را تنظیم میکند (R7).نمونهی این مورد همراه با موارد بالاتر آمده است: tui-layout.salam
تنظیم تراز SetAlign
تابع تنظیم تراز(i: صحیح، align_x: ترازعرضی، align_y: ترازعرضی)تنظیم تراز set_align
تابع تنظیم تراز(i: صحیح، align_x: ترازعرضی، align_y: ترازعرضی)i را تنظیم میکند (R7).نمونهی این مورد همراه با موارد بالاتر آمده است: tui-layout.salam
تنظیم فاصله درونی SetPadding
تابع تنظیم فاصله درونی(pad: فاصلههایچهارگانه)تنظیم فاصله درونی set_padding
تابع تنظیم فاصله درونی(pad: فاصلههایچهارگانه)نمونهی این مورد همراه با موارد بالاتر آمده است: tui-layout.salam
تنظیم فاصله SetGap
تابع تنظیم فاصله(gap: صحیح)تنظیم فاصله set_gap
تابع تنظیم فاصله(gap: صحیح)نمونهی این مورد همراه با موارد بالاتر آمده است: tui-layout.salam
اندازهگیری Measure
تابع اندازهگیری(axis: محور، max_width: صحیح): اندازهاندازهگیری measure
تابع اندازهگیری(axis: محور، max_width: صحیح): اندازهaxis در max_width، بدون جابهجا کردن فرزندان. محور اصلی برابر است با فاصله درونی، بهعلاوه هر اندازه ثابت یا پرکردن فضا یا ترجیحی اندازهگیریشده، بهعلاوه بودجه فاصلهها. محور عرضی برابر است با فاصله درونی بهعلاوه بزرگترین فرزند اندازهگیریشده. فرزندی که قابل اندازهگیری نباشد معتبر را نادرست میکند.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-layout.salam
تنظیم محدوده SetBounds
تابع تنظیم محدوده(bounds: مستطیل)تنظیم محدوده set_bounds
تابع تنظیم محدوده(bounds: مستطیل)ویجتپایه را بازنویسی میکند.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-layout.salam
Render
تابع Render(buf: بافر، bounds: مستطیل)render
تابع render(buf: بافر، bounds: مستطیل)HandleEvent
تابع HandleEvent(event: رویداد): منطقیhandle_event
تابع handle_event(event: رویداد): منطقیFocusable
تابع Focusable(): منطقیfocusable
تابع focusable(): منطقیHits
تابع Hits(): منطقیhits
تابع hits(): منطقیVisible
تابع Visible(): منطقیvisible
تابع visible(): منطقیBounds
تابع Bounds(): مستطیلbounds
تابع bounds(): مستطیلPreferredSize
تابع PreferredSize(max_width: صحیح): مستطیلpreferred_size
تابع preferred_size(max_width: صحیح): مستطیلستون Column
ساختار ستونردیف: ترجیحی اندازهگیریشده محور اصلی مانند ثابت رزرو میشود، سپس پرکردن فضا ارتفاع محتوای باقیمانده پس از این رزرو و بودجه فاصلهها را تقسیم میکند (R5). فرزند عرض محتوا را پر میکند مگر اینکه تراز افقی آن را جای دیگری قرار دهد. برای متدهای جایگاه، فاصله درونی و فاصله، ردیف را ببینید.| نام | انگلیسی | گونه | توضیح |
|---|---|---|---|
| ویجت پایه | BaseWidget | ویجتپایه | ویجتپایه جاسازیشده: محدوده و پاسخهای پیشفرض برای هر متد ویجت که این نوع بازنویسی نمیکند. |
| فاصله درونی | pad | فاصلههایچهارگانه | فاصله میان محدوده ظرف و جعبه محتوای آن (R3). |
| فاصله | gap | صحیح = 0 | تعداد خانههای میان جایگاههای مجاور روی محور اصلی (R5). پیشفرض صفر است. مقدار منفی به 0 محدود میشود. |
| جایگاهها | items | وکتور<جایگاهچیدمان> | فرزندان به ترتیب جایگذاری، هر کدام یک جایگاه. |
نمونهی این مورد همراه با موارد بالاتر آمده است: tui-layout.salam
افزودن Add
تابع افزودن(child: dyn ویجت): صحیحافزودن add
تابع افزودن(child: dyn ویجت): صحیحصفحه اضافه کنید.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-layout.salam
تنظیم حاشیه بیرونی SetMargin
تابع تنظیم حاشیه بیرونی(i: صحیح، margin: فاصلههایچهارگانه)تنظیم حاشیه بیرونی set_margin
تابع تنظیم حاشیه بیرونی(i: صحیح، margin: فاصلههایچهارگانه)i را تنظیم میکند (R4). نمایه خارج از بازه نادیده گرفته میشود.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-layout.salam
تنظیم عرض SetWidth
تابع تنظیم عرض(i: صحیح، size: قاعدهاندازهگذاری)تنظیم عرض set_width
تابع تنظیم عرض(i: صحیح، size: قاعدهاندازهگذاری)i را تنظیم میکند (R7).نمونهی این مورد همراه با موارد بالاتر آمده است: tui-layout.salam
تنظیم ارتفاع SetHeight
تابع تنظیم ارتفاع(i: صحیح، size: قاعدهاندازهگذاری)تنظیم ارتفاع set_height
تابع تنظیم ارتفاع(i: صحیح، size: قاعدهاندازهگذاری)i را تنظیم میکند (R5).نمونهی این مورد همراه با موارد بالاتر آمده است: tui-layout.salam
تنظیم تراز SetAlign
تابع تنظیم تراز(i: صحیح، align_x: ترازعرضی، align_y: ترازعرضی)تنظیم تراز set_align
تابع تنظیم تراز(i: صحیح، align_x: ترازعرضی، align_y: ترازعرضی)i را تنظیم میکند (R7).نمونهی این مورد همراه با موارد بالاتر آمده است: tui-layout.salam
تنظیم فاصله درونی SetPadding
تابع تنظیم فاصله درونی(pad: فاصلههایچهارگانه)تنظیم فاصله درونی set_padding
تابع تنظیم فاصله درونی(pad: فاصلههایچهارگانه)نمونهی این مورد همراه با موارد بالاتر آمده است: tui-layout.salam
تنظیم فاصله SetGap
تابع تنظیم فاصله(gap: صحیح)تنظیم فاصله set_gap
تابع تنظیم فاصله(gap: صحیح)نمونهی این مورد همراه با موارد بالاتر آمده است: tui-layout.salam
اندازهگیری Measure
تابع اندازهگیری(axis: محور، max_width: صحیح): اندازهاندازهگیری measure
تابع اندازهگیری(axis: محور، max_width: صحیح): اندازهaxis در max_width، بدون جابهجا کردن فرزندان. قرینه ردیف.اندازهگیری: محور اصلی محور عمودی است.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-layout.salam
تنظیم محدوده SetBounds
تابع تنظیم محدوده(bounds: مستطیل)تنظیم محدوده set_bounds
تابع تنظیم محدوده(bounds: مستطیل)ویجتپایه را بازنویسی میکند.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-layout.salam
Render
تابع Render(buf: بافر، bounds: مستطیل)render
تابع render(buf: بافر، bounds: مستطیل)HandleEvent
تابع HandleEvent(event: رویداد): منطقیhandle_event
تابع handle_event(event: رویداد): منطقیFocusable
تابع Focusable(): منطقیfocusable
تابع focusable(): منطقیHits
تابع Hits(): منطقیhits
تابع hits(): منطقیVisible
تابع Visible(): منطقیvisible
تابع visible(): منطقیBounds
تابع Bounds(): مستطیلbounds
تابع bounds(): مستطیلPreferredSize
تابع PreferredSize(max_width: صحیح): مستطیلpreferred_size
تابع preferred_size(max_width: صحیح): مستطیلشبکه Grid
ساختار شبکهردیفها x ستونها تقسیم میکند (R9) و هر فرزند را بر پایه (ردیف, ستون) صریح آن قرار میدهد (R10). ستونها و ردیفها فضا را بهطور برابر تقسیم میکنند و باقیمانده به نخستینها میرسد؛ خانه خارج از بازه یا منفی، جایگاهی 0x0 در مبدأ محتوا است و فرزند همچنان پیمایش میشود. تنظیم گستره یک خانه را به اندازه بخشهای کامل گسترش میدهد (R15). دو فرزند در یک خانه آن را به اشتراک میگذارند و روی هم میافتند.| نام | انگلیسی | گونه | توضیح |
|---|---|---|---|
| ویجت پایه | BaseWidget | ویجتپایه | ویجتپایه جاسازیشده: محدوده و پاسخهای پیشفرض برای هر متد ویجت که این نوع بازنویسی نمیکند. |
| فاصله درونی | pad | فاصلههایچهارگانه | فاصله میان محدوده ظرف و جعبه محتوای آن (R3). |
| جایگاهها | items | وکتور<جایگاهچیدمان> | فرزندان به ترتیب جایگذاری، هر کدام یک جایگاه. |
| ردیفها | rows | صحیح = 0 | تعداد ردیفهای شبکه. توسط شبکه جدید تنظیم میشود. |
| ستونها | cols | صحیح = 0 | تعداد ستونهای شبکه. توسط شبکه جدید تنظیم میشود. |
نمونهی این مورد همراه با موارد بالاتر آمده است: tui-layout.salam
افزودن Add
تابع افزودن(child: dyn ویجت): صحیحافزودن add
تابع افزودن(child: dyn ویجت): صحیحصفحه اضافه کنید.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-layout.salam
تنظیم حاشیه بیرونی SetMargin
تابع تنظیم حاشیه بیرونی(i: صحیح، margin: فاصلههایچهارگانه)تنظیم حاشیه بیرونی set_margin
تابع تنظیم حاشیه بیرونی(i: صحیح، margin: فاصلههایچهارگانه)i را تنظیم میکند (R4). نمایه خارج از بازه نادیده گرفته میشود.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-layout.salam
تنظیم عرض SetWidth
تابع تنظیم عرض(i: صحیح، size: قاعدهاندازهگذاری)تنظیم عرض set_width
تابع تنظیم عرض(i: صحیح، size: قاعدهاندازهگذاری)i را تنظیم میکند (R7).نمونهی این مورد همراه با موارد بالاتر آمده است: tui-layout.salam
تنظیم ارتفاع SetHeight
تابع تنظیم ارتفاع(i: صحیح، size: قاعدهاندازهگذاری)تنظیم ارتفاع set_height
تابع تنظیم ارتفاع(i: صحیح، size: قاعدهاندازهگذاری)i را تنظیم میکند (R7).نمونهی این مورد همراه با موارد بالاتر آمده است: tui-layout.salam
تنظیم تراز SetAlign
تابع تنظیم تراز(i: صحیح، align_x: ترازعرضی، align_y: ترازعرضی)تنظیم تراز set_align
تابع تنظیم تراز(i: صحیح، align_x: ترازعرضی، align_y: ترازعرضی)i را تنظیم میکند (R7).نمونهی این مورد همراه با موارد بالاتر آمده است: tui-layout.salam
تنظیم خانه SetCell
تابع تنظیم خانه(i: صحیح، row: صحیح، col: صحیح)تنظیم خانه set_cell
تابع تنظیم خانه(i: صحیح، row: صحیح، col: صحیح)نمونهی این مورد همراه با موارد بالاتر آمده است: tui-layout.salam
تنظیم گستره SetSpan
تابع تنظیم گستره(i: صحیح، rows: صحیح، cols: صحیح)تنظیم گستره set_span
تابع تنظیم گستره(i: صحیح، rows: صحیح، cols: صحیح)i پوشش میدهد تنظیم میکند (R15). تعداد نامثبت بهصورت 1 ذخیره میشود. نمایه خارج از بازه نادیده گرفته میشود.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-layout.salam
تنظیم فاصله درونی SetPadding
تابع تنظیم فاصله درونی(pad: فاصلههایچهارگانه)تنظیم فاصله درونی set_padding
تابع تنظیم فاصله درونی(pad: فاصلههایچهارگانه)نمونهی این مورد همراه با موارد بالاتر آمده است: tui-layout.salam
تنظیم محدوده SetBounds
تابع تنظیم محدوده(bounds: مستطیل)تنظیم محدوده set_bounds
تابع تنظیم محدوده(bounds: مستطیل)ویجتپایه را بازنویسی میکند. شبکه قادر به اندازهگیری نیست؛ اندازهگیری همان پیشفرض ویجتپایه میماند.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-layout.salam
Render
تابع Render(buf: بافر، bounds: مستطیل)render
تابع render(buf: بافر، bounds: مستطیل)HandleEvent
تابع HandleEvent(event: رویداد): منطقیhandle_event
تابع handle_event(event: رویداد): منطقیFocusable
تابع Focusable(): منطقیfocusable
تابع focusable(): منطقیHits
تابع Hits(): منطقیhits
تابع hits(): منطقیVisible
تابع Visible(): منطقیvisible
تابع visible(): منطقیBounds
تابع Bounds(): مستطیلbounds
تابع bounds(): مستطیلPreferredSize
تابع PreferredSize(max_width: صحیح): مستطیلpreferred_size
تابع preferred_size(max_width: صحیح): مستطیلMeasure
تابع Measure(axis: محور، max_width: صحیح): اندازهmeasure
تابع measure(axis: محور، max_width: صحیح): اندازهپشته Stack
ساختار پشتهصفحه تعیین میکند کدام فرزند رو قرار گیرد. فرزند بدون حاشیه بیرونی دقیقا همان جعبه محتوا است.| نام | انگلیسی | گونه | توضیح |
|---|---|---|---|
| ویجت پایه | BaseWidget | ویجتپایه | ویجتپایه جاسازیشده: محدوده و پاسخهای پیشفرض برای هر متد ویجت که این نوع بازنویسی نمیکند. |
| فاصله درونی | pad | فاصلههایچهارگانه | فاصله میان محدوده ظرف و جعبه محتوای آن (R3). |
| جایگاهها | items | وکتور<جایگاهچیدمان> | فرزندان به ترتیب جایگذاری، هر کدام یک جایگاه. |
نمونهی این مورد همراه با موارد بالاتر آمده است: tui-layout.salam
افزودن Add
تابع افزودن(child: dyn ویجت): صحیحافزودن add
تابع افزودن(child: dyn ویجت): صحیحصفحه اضافه کنید.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-layout.salam
تنظیم حاشیه بیرونی SetMargin
تابع تنظیم حاشیه بیرونی(i: صحیح، margin: فاصلههایچهارگانه)تنظیم حاشیه بیرونی set_margin
تابع تنظیم حاشیه بیرونی(i: صحیح، margin: فاصلههایچهارگانه)i را تنظیم میکند (R4). نمایه خارج از بازه نادیده گرفته میشود.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-layout.salam
تنظیم عرض SetWidth
تابع تنظیم عرض(i: صحیح، size: قاعدهاندازهگذاری)تنظیم عرض set_width
تابع تنظیم عرض(i: صحیح، size: قاعدهاندازهگذاری)i را تنظیم میکند. پشته آن را نادیده میگیرد و فقط برای تقارن API میپذیرد.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-layout.salam
تنظیم ارتفاع SetHeight
تابع تنظیم ارتفاع(i: صحیح، size: قاعدهاندازهگذاری)تنظیم ارتفاع set_height
تابع تنظیم ارتفاع(i: صحیح، size: قاعدهاندازهگذاری)i را تنظیم میکند. پشته آن را نادیده میگیرد و فقط برای تقارن API میپذیرد.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-layout.salam
تنظیم تراز SetAlign
تابع تنظیم تراز(i: صحیح، align_x: ترازعرضی، align_y: ترازعرضی)تنظیم تراز set_align
تابع تنظیم تراز(i: صحیح، align_x: ترازعرضی، align_y: ترازعرضی)i را تنظیم میکند. پشته آن را نادیده میگیرد و فقط برای تقارن API میپذیرد.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-layout.salam
تنظیم فاصله درونی SetPadding
تابع تنظیم فاصله درونی(pad: فاصلههایچهارگانه)تنظیم فاصله درونی set_padding
تابع تنظیم فاصله درونی(pad: فاصلههایچهارگانه)نمونهی این مورد همراه با موارد بالاتر آمده است: tui-layout.salam
تنظیم محدوده SetBounds
تابع تنظیم محدوده(bounds: مستطیل)تنظیم محدوده set_bounds
تابع تنظیم محدوده(bounds: مستطیل)ویجتپایه را بازنویسی میکند. پشته قادر به اندازهگیری نیست؛ اندازهگیری همان پیشفرض ویجتپایه میماند.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-layout.salam
Render
تابع Render(buf: بافر، bounds: مستطیل)render
تابع render(buf: بافر، bounds: مستطیل)HandleEvent
تابع HandleEvent(event: رویداد): منطقیhandle_event
تابع handle_event(event: رویداد): منطقیFocusable
تابع Focusable(): منطقیfocusable
تابع focusable(): منطقیHits
تابع Hits(): منطقیhits
تابع hits(): منطقیVisible
تابع Visible(): منطقیvisible
تابع visible(): منطقیBounds
تابع Bounds(): مستطیلbounds
تابع bounds(): مستطیلPreferredSize
تابع PreferredSize(max_width: صحیح): مستطیلpreferred_size
تابع preferred_size(max_width: صحیح): مستطیلMeasure
تابع Measure(axis: محور، max_width: صحیح): اندازهmeasure
تابع measure(axis: محور، max_width: صحیح): اندازهنگاشتکلید Keymap
ساختار نگاشتکلیدنگاشتکلید جدید، نگاشتکلید پیشفرض یا نگاشتکلید ویم (یا خالی با نگاشتکلید {}) بسازید، با پیوند کلید و گونههای آن پر کنید، رویدادها را به پردازش کلید بدهید و با آزادسازی آزاد کنید. هرگز یک مقدار نگاشتکلید را رونوشت نکنید.| نام | انگلیسی | گونه | توضیح |
|---|---|---|---|
| مهلت توالی به میلیثانیه | pending_timeout_ms | صحیح = 0 | مدتی که یک توالی کلید در انتظار میتواند برای کلید بعدی صبر کند، به میلیثانیه. 0 (پیشفرض) هرگز پیشوند را منقضی نمیکند، که همان رفتار بدون مهلت است. مهلت به صورت تنبل و فقط در رویداد کیبورد بعدی ارزیابی میشود؛ رویدادهای غیرکلیدی هرگز پیشوند را منقضی نمیکنند. آن را مستقیم تنظیم کنید (keymap.مهلت توالی به میلیثانیه = 700)؛ سازندهای ندارد. |
| آغاز انتظار توالی به میلیثانیه | pending_since_ms | صحیح = 0 | زمان ساعت، به میلیثانیه، هنگامی که توالی در انتظار فعلی شروع به انتظار کرد؛ در هر گام پیشوند تازه میشود و وقتی چیزی در انتظار نیست 0 است. پردازش کلید آن را نگهداری میکند؛ برنامه بهجای آن مهلت توالی به میلیثانیه را تنظیم میکند. |
// زبان: فارسی
واردسازی پایانه
واردسازی رابطپایانه
ناپایا شمار خروج := 0
ناپایا شمار بالا := 0
تابع ریشه:
خروج := رابطپایانه.رویداد { نوع = رابطپایانه.رویداد کیبورد، کلید = پایانه.رمزگشایی("q") }
سرچاپ "q است:"، خروج.نویسه است("q")، "Ctrl+C است:"، خروج.ترکیب کنترل است("c")، "اینتر است:"، خروج.کلید است(پایانه.کلید ورود)
کلیک := رابطپایانه.رویداد { نوع = رابطپایانه.رویداد ماوس، کلید = پایانه.کلید { خام = "\x1b[<0;5;3M" }، ماوس = پایانه.رمزگشایی موشواره("\x1b[<0;5;3M") }
نقطه := کلیک.مختصات ماوس()
سرچاپ "کلیک در"، نقطه.ایکس، نقطه.ایگرگ
تغییر اندازه := رابطپایانه.رویداد { نوع = رابطپایانه.رویداد تغییر اندازه، عرض = 100، ارتفاع = 30 }
سرچاپ "انواع:"، رابطپایانه.بدون رویداد، رابطپایانه.رویداد کیبورد، رابطپایانه.رویداد ماوس، تغییر اندازه.نوع، رابطپایانه.رویداد تیک، "اندازه"، تغییر اندازه.عرض، تغییر اندازه.ارتفاع، "بالا رفته"، تغییر اندازه.بالا رفته
ناپایا ص := رابطپایانه.صفحه جدید(رابطپایانه.ویجتپایه {}، 10، 2)
دیرکن ص.بستن()
ناپایا نگاشت := رابطپایانه.نگاشت کلید جدید()
نگاشت.پیوند کلید(پایانه.رمزگشایی("q")، (_ص: رابطپایانه.صفحه*، _ر: رابطپایانه.رویداد):
شمار خروج++
برگشت درست
پایان)
نگاشت.پیوند توالی("gg"، (_ص: رابطپایانه.صفحه*، _ر: رابطپایانه.رویداد):
شمار بالا++
برگشت درست
پایان)
نگاشت.پیوند کلید برای ویجت(رابطپایانه.شناسه ریشه، پایانه.رمزگشایی("x")، (_ص: رابطپایانه.صفحه*، _ر: رابطپایانه.رویداد): برگشت درست پایان)
نگاشت.پیوند توالی برای ویجت(رابطپایانه.شناسه ریشه، "dd"، (_ص: رابطپایانه.صفحه*، _ر: رابطپایانه.رویداد): برگشت درست پایان)
نگاشت.مهلت توالی به میلیثانیه = 1000
ص.تنظیم نگاشت کلید(نگاشت)
_ := ص.هدایت رویداد(خروج)
_ := ص.هدایت رویداد(رابطپایانه.رویداد { نوع = رابطپایانه.رویداد کیبورد، کلید = پایانه.رمزگشایی("g") })
سرچاپ "مهلت توالی:"، ص.نگاشت کلید.مهلت توالی به میلیثانیه، "میلیثانیه"
_ := ص.نگاشت کلید.آغاز انتظار توالی به میلیثانیه
_ := ص.هدایت رویداد(رابطپایانه.رویداد { نوع = رابطپایانه.رویداد کیبورد، کلید = پایانه.رمزگشایی("g") })
سرچاپ "q فشرده شد"، شمار خروج، "gg فشرده شد"، شمار بالا
ص.نگاشت کلید.لغو پیوند کلید(پایانه.رمزگشایی("q"))
ص.نگاشت کلید.لغو پیوند کلید برای ویجت(رابطپایانه.شناسه ریشه، پایانه.رمزگشایی("x"))
ص.نگاشت کلید.لغو پیوند توالی برای ویجت(رابطپایانه.شناسه ریشه، "dd")
ص.نگاشت کلید.لغو توالی در انتظار()
سرچاپ "پس از لغو پیوند:"، ص.هدایت رویداد(خروج)
ناپایا پیکانها := رابطپایانه.نگاشت کلید پیشفرض()
پیکانها.آزادسازی()
ناپایا ویم := رابطپایانه.نگاشت کلید ویم((_ص: رابطپایانه.صفحه*، _ر: رابطپایانه.رویداد): برگشت نادرست پایان)
ویم.آزادسازی()
پایانپیوند کلید Bind
تابع پیوند کلید(key: پایانه.کلید، action: تابع(صفحه*، رویداد): منطقی)پیوند کلید bind
تابع پیوند کلید(key: پایانه.کلید، action: تابع(صفحه*، رویداد): منطقی)نمونهی این مورد همراه با موارد بالاتر آمده است: tui-events.salam
پیوند کلید برای ویجت BindFor
تابع پیوند کلید برای ویجت(widget_id: صحیح، key: پایانه.کلید، action: تابع(صفحه*، رویداد): منطقی)پیوند کلید برای ویجت bind_for
تابع پیوند کلید برای ویجت(widget_id: صحیح، key: پایانه.کلید، action: تابع(صفحه*، رویداد): منطقی)بدون ویجت پیوند سراسری میسازد.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-events.salam
پیوند توالی BindSeq
تابع پیوند توالی(seq: رشته، action: تابع(صفحه*، رویداد): منطقی)پیوند توالی bind_seq
تابع پیوند توالی(seq: رشته، action: تابع(صفحه*، رویداد): منطقی)نمونهی این مورد همراه با موارد بالاتر آمده است: tui-events.salam
پیوند توالی برای ویجت BindForSeq
تابع پیوند توالی برای ویجت(widget_id: صحیح، seq: رشته، action: تابع(صفحه*، رویداد): منطقی)پیوند توالی برای ویجت bind_for_seq
تابع پیوند توالی برای ویجت(widget_id: صحیح، seq: رشته، action: تابع(صفحه*، رویداد): منطقی)بدون ویجت پیوند سراسری میسازد. رشته خالی نادیده گرفته میشود.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-events.salam
لغو پیوند کلید Unbind
تابع لغو پیوند کلید(key: پایانه.کلید)لغو پیوند کلید unbind
تابع لغو پیوند کلید(key: پایانه.کلید)پیوند کلید برای ویجت و برای حذف یکی از لغو پیوند کلید برای ویجت استفاده کنید). لغو پیوند کلید برای ویجت(بدون ویجت, key) همین کار را انجام میدهد.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-events.salam
لغو پیوند کلید برای ویجت UnbindFor
تابع لغو پیوند کلید برای ویجت(widget_id: صحیح، key: پایانه.کلید)لغو پیوند کلید برای ویجت unbind_for
تابع لغو پیوند کلید برای ویجت(widget_id: صحیح، key: پایانه.کلید)پیوند کلید برای ویجت. فقط بازنویسی همان ویجت حذف میشود، پس پیوند سراسری و بازنویسیهای ویجتهای دیگر روی همان کلید همچنان برقرارند و هیچ گرهای از trie حذف نمیشود. وقتی نگاشت خالی باشد، کلید هرگز پیوند نخورده باشد یا ویجت هرگز آن را پیوند نداده باشد کاری نمیکند. بدون ویجت پیوند سراسری را حذف میکند، پس لغو پیوند کلید برای ویجت(بدون ویجت, key) همان لغو پیوند کلید(key) است. توالی در انتظار را بازنشانی میکند.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-events.salam
لغو پیوند توالی برای ویجت UnbindForSeq
تابع لغو پیوند توالی برای ویجت(widget_id: صحیح، seq: رشته)لغو پیوند توالی برای ویجت unbind_for_seq
تابع لغو پیوند توالی برای ویجت(widget_id: صحیح، seq: رشته)پیوند توالی برای ویجت. فقط بازنویسی همان ویجت حذف میشود، پس توالی سراسری و بازنویسیهای ویجتهای دیگر روی همان توالی همچنان برقرارند. trie فقط خوانده میشود، پس هیچ گرهای ساخته یا حذف نمیشود و پیوند توالی برای ویجت بعدی روی همان توالی همچنان کار میکند. وقتی نگاشت خالی باشد، توالی هرگز پیوند نخورده باشد یا ویجت هرگز آن را پیوند نداده باشد کاری نمیکند؛ بدون ویجت پیوند سراسری توالی را حذف میکند و رشته خالی نادیده گرفته میشود. توالی در انتظار را بازنشانی میکند.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-events.salam
پردازش کلید Handle
تابع پردازش کلید(screen: صفحه*، event: رویداد): منطقیپردازش کلید handle
تابع پردازش کلید(screen: صفحه*، event: رویداد): منطقیرویداد کیبوردها به trie میرسند؛ هر نوع دیگری false برمیگرداند و pending را دستنخورده میگذارد. وقتی کنشی اجرا شود true برمیگرداند. خواندنها کلید را پیش از فراخوانی هر کنشی حل میکنند؛ پس از فراخوانی هیچ چیز به trie دست نمیزند.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-events.salam
آزادسازی Free
تابع آزادسازی()آزادسازی free
تابع آزادسازی()نمونهی این مورد همراه با موارد بالاتر آمده است: tui-events.salam
لغو توالی در انتظار CancelPending
تابع لغو توالی در انتظار()لغو توالی در انتظار cancel_pending
تابع لغو توالی در انتظار()نمونهی این مورد همراه با موارد بالاتر آمده است: tui-events.salam
کادرمتن Input
ساختار کادرمتنتنظیم مقدار تنظیم کنید، با مقدار بخوانید، و متن راهنما را با فیلد یا تنظیم متن راهنما تنظیم کنید.| نام | انگلیسی | گونه | توضیح |
|---|---|---|---|
| ویجت پایه | BaseWidget | ویجتپایه | ویجتپایه جاسازیشده: محدوده و پاسخهای پیشفرض برای هر متد ویجت که این نوع بازنویسی نمیکند. |
| متن راهنما | placeholder | رشته = "" | متنی که تا وقتی مقدار خالی است (کمرنگ) نمایش داده میشود. "" یعنی بدون متن راهنما. |
| ظاهر | style | ظاهر | ظاهر پایه مقدار و پسزمینه خالی. ظاهر پیشفرض با پیشفرضهای پایانه رسم میکند. |
| ظاهر مکاننما | cursor_style | ظاهر | ظاهری که برای خانه مکاننما روی ظاهر ادغام میشود. پیشفرض آن نمایش وارونه است. |
| ظاهر متن راهنما | placeholder_style | ظاهر | ظاهری که برای متن راهنما روی ظاهر ادغام میشود. پیشفرض آن پیشزمینه مشکی روشن است. |
| حداکثر طول | max_length | صحیح = 0 | حداکثر طول مقدار بر حسب نویسه (codepoint)، نه خانه نمایشی. 0 یعنی نامحدود. تایپ در حد مجاز مصرف میشود و چیزی را تغییر نمیدهد؛ تنظیم مقدار مقدار بلندتر را کوتاه میکند؛ حذف همیشه مجاز است. |
| پالایه | filter | تابع(رشته): منطقی | پس از یک درج پیشنهادی (یک نویسه تایپشده) و پس از گذشتن از بررسی حداکثر طول، با کل مقدار نامزد فراخوانی میشود. برگرداندن نادرست آن را رد میکند: کلید مصرف میشود و چیزی تغییر نمیکند. برای Backspace، Delete یا تنظیم مقدار فراخوانی نمیشود. پیشفرض همه چیز را میپذیرد. |
| پوشانده | masked | منطقی = نادرست | وقتی درست باشد، هر نویسه مقدار به شکل نماد پوشش رسم میشود. فقط برای نمایش: مقدار، نشانگر درج و پنجره تغییر نمیکنند. متن راهنما هرگز پوشانده نمیشود. |
| نماد پوشش | mask_glyph | رشته = "*" | نویسهای که هنگام پوشاندن به جای هر نویسه مقدار رسم میشود. فقط نخستین codepoint آن به کار میرود؛ "" یعنی "*". در سیاست نویسهها.اسکی نویسه پوشش غیر ASCII به شکل "*" رسم میشود. |
| هنگام ثبت | on_submit | تابع(رشته): منطقی | هنگام Enter بهصورت همگام با مقدار واقعی، و هرگز پوشش، فراخوانی میشود. برگرداندن درست کلید را مصرف میکند؛ نادرست اجازه میدهد کلید به والد برود. پیشفرض درست برمیگرداند. پس از بازگشت آن، نشانگر درج و پنجره به محدوده مقدار محدود میشوند، برای حالتی که مقدار را تغییر داده باشد. |
نمونهی این مورد همراه با موارد بالاتر آمده است: tui-controls.salam
تمرکزپذیر است Focusable
تابع تمرکزپذیر است(): منطقیتمرکزپذیر است focusable
تابع تمرکزپذیر است(): منطقیدرست برمیگرداند: کادرمتن تعاملی است، پس هدایت تمرکز صفحه رویدادهای کیبورد را به آن میفرستد.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-controls.salam
پردازش رویداد HandleEvent
تابع پردازش رویداد(event: رویداد): منطقیپردازش رویداد handle_event
تابع پردازش رویداد(event: رویداد): منطقیهنگام ثبت را فراخوانی میکند و نتیجه آن را برمیگرداند. رویدادها و کلیدهای دیگر مصرف نمیشوند، پس به بالا میروند.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-controls.salam
مقدار Value
تابع مقدار(): رشتهمقدار value
تابع مقدار(): رشتهنمونهی این مورد همراه با موارد بالاتر آمده است: tui-controls.salam
تنظیم مقدار SetValue
تابع تنظیم مقدار(v: رشته)تنظیم مقدار set_value
تابع تنظیم مقدار(v: رشته)حداکثر طول تنظیم شده باشد آن را به همان تعداد نویسه کوتاه میکند، بدون فراخوانی پالایه؛ نشانگر درج به انتهای آن میرود.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-controls.salam
تنظیم متن راهنما SetPlaceholder
تابع تنظیم متن راهنما(p: رشته)تنظیم متن راهنما set_placeholder
تابع تنظیم متن راهنما(p: رشته)نمونهی این مورد همراه با موارد بالاتر آمده است: tui-controls.salam
ترسیم Render
تابع ترسیم(buf: بافر، bounds: مستطیل)ترسیم render
تابع ترسیم(buf: بافر، bounds: مستطیل)ظاهر رنگ میشود، پنجرهای از خانهها که نشانگر درج را در بر دارد نوشته میشود (وقتی مقدار خالی است، متن راهنما بهصورت کمرنگ)، و (تا وقتی بافر تمرکز را گزارش میکند) یک خانه با نمایش وارونه ستون نشانگر را مشخص میکند. آغاز پنجره بین فریمها حفظ میشود و فقط وقتی نشانگر از آن بیرون برود جابهجا میشود. جعبه تباهیده چیزی رسم نمیکند و هرگز panic نمیکند.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-controls.salam
Hits
تابع Hits(): منطقیhits
تابع hits(): منطقیVisible
تابع Visible(): منطقیvisible
تابع visible(): منطقیBounds
تابع Bounds(): مستطیلbounds
تابع bounds(): مستطیلSetBounds
تابع SetBounds(bounds: مستطیل)set_bounds
تابع set_bounds(bounds: مستطیل)PreferredSize
تابع PreferredSize(max_width: صحیح): مستطیلpreferred_size
تابع preferred_size(max_width: صحیح): مستطیلMeasure
تابع Measure(axis: محور، max_width: صحیح): اندازهmeasure
تابع measure(axis: محور، max_width: صحیح): اندازهرویداد Event
ساختار رویدادنوع مشخص میکند کدام فیلدهای داده معنادارند.| نام | انگلیسی | گونه | توضیح |
|---|---|---|---|
| نوع | kind | صحیح = 0 | یکی از بدون رویداد، رویداد کیبورد، رویداد ماوس، رویداد تغییر اندازه، رویداد تیک. |
| کلید | key | پایانه.کلید | کلید برای رویداد کیبورد؛ توالی خام (در کلید.raw) برای رویداد ماوس. |
| ماوس | mouse | پایانه.رویداد موشواره | گزارش رمزگشاییشده برای رویداد ماوس. |
| عرض | width | صحیح = 0 | عرض جدید پایانه بر حسب ستون، برای رویداد تغییر اندازه. |
| ارتفاع | height | صحیح = 0 | ارتفاع جدید پایانه بر حسب ردیف، برای رویداد تغییر اندازه. |
| بالا رفته | bubbled | منطقی = نادرست | وقتی رویداد از ویجتی که از آن شروع شده به یکی از نیاکانش رفته باشد درست است. نگهدارندههایی مانند پنل و مودال از آن استفاده میکنند تا همان رویداد را برای بار دوم به فرزندشان ندهند. |
نمونهی این مورد همراه با موارد بالاتر آمده است: tui-events.salam
مختصات ماوس MousePoint
تابع مختصات ماوس(): نقطهمختصات ماوس mouse_point
تابع مختصات ماوس(): نقطهرویداد ماوس روی آن رخ داده، به صورت یک نقطه از 0 مانند همه مختصات دیگر در tui. term.DecodeMouse ستون و ردیف از 1 پایانه را نگه میدارد، پس این متد از هر کدام 1 کم میکند. فقط برای رویداد ماوسی معنادار است که ماوس.ok آن درست باشد.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-events.salam
کلید است IsKey
تابع کلید است(code: صحیح): منطقیکلید است is_key
تابع کلید است(code: صحیح): منطقیرویداد کیبوردی درست است که کد کلیدش code باشد (یک ثابت term.Key*، برای نمونه term.KeyEnter یا term.KeyUp). کلیدهای تغییردهنده نادیده گرفته میشوند.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-events.salam
نویسه است IsChar
تابع نویسه است(ch: رشته): منطقینویسه است is_char
تابع نویسه است(ch: رشته): منطقیرویداد کیبوردی درست است که دقیقاً ch را بدون نگه داشتن Ctrl یا Alt تایپ کرده باشد، پس نویسه است("q") با Ctrl+Q یا Alt+Q منطبق نمیشود.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-events.salam
ترکیب کنترل است IsCtrl
تابع ترکیب کنترل است(ch: رشته): منطقیترکیب کنترل است is_ctrl
تابع ترکیب کنترل است(ch: رشته): منطقیch درست است، برای نمونه ترکیب کنترل است("c") برای Ctrl+C. در حالت خام، Ctrl+C به صورت همین کلید میرسد، نه به صورت سیگنال.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-events.salam
رنگ Color
جداشمار رنگ:
پیشفرض
انسی(n: صحیح)
نمایهای(n: صحیح)
آرجیبی(r: صحیح، g: صحیح، b: صحیح)
پایانرنگ وقتی برابرند که گونه و دادهشان برابر باشد، پس گونههای متفاوت هرگز برابر نیستند.| نام | انگلیسی | گونه | توضیح |
|---|---|---|---|
| پیشفرض | Default | | رنگ پیشفرض پیشزمینه یا پسزمینه خود پایانه (SGR 39 / 49)، نه درایهای از یک پالت. |
| انسی | Ansi | (n: صحیح) | یک نمایه در پالت 16 رنگی، 0-15: 0-7 رنگهای عادی و 8-15 گونههای روشن آنها. اعتبارسنجی انجام نمیشود؛ بازه مستند 0-15 است. |
| نمایهای | Indexed | (n: صحیح) | یک نمایه در پالت 256 رنگی، 0-255 (SGR 38;5;n / 48;5;n). نمایهای در بازه 0-15 در خروجی همچنان Indexed میماند و هرگز به شکل ANSI بازنویسی نمیشود. |
| آرجیبی | Rgb | (r: صحیح، g: صحیح، b: صحیح) | یک سهتایی رنگ حقیقی 24 بیتی، هر کانال 0-255 (SGR 38;2;r;g;b). |
نمونهی این مورد همراه با موارد بالاتر آمده است: tui-style.salam
سطحرنگ ColorTier
جداشمار سطحرنگخاموش یعنی بدون رنگ، انسی۱۶ پالت 16 رنگی، نمایهای۲۵۶ پالت 256 رنگی و رنگ حقیقی رنگ 24 بیتی RGB.| نام | انگلیسی | گونه | توضیح |
|---|---|---|---|
| خاموش | Off | | بدون رنگ: هر رنگ به Default کاهش مییابد. |
| انسی۱۶ | Ansi16 | | فقط پالت 16 رنگی. |
| نمایهای۲۵۶ | Indexed256 | | پالت 256 رنگی. |
| رنگ حقیقی | TrueColor | | رنگ حقیقی 24 بیتی. |
نمونهی این مورد همراه با موارد بالاتر آمده است: tui-style.salam
کادرانتخاب Checkbox
ساختار کادرانتخابانتخاب شده است بخوانید و با تنظیم انتخاب یا به دست کاربر تغییر دهید. برای جلوگیری از دریافت ورودی، غیرفعال را تنظیم کنید.| نام | انگلیسی | گونه | توضیح |
|---|---|---|---|
| ویجت پایه | BaseWidget | ویجتپایه | ویجتپایه جاسازیشده: محدوده و پاسخهای پیشفرض برای هر متد ویجت که این نوع بازنویسی نمیکند. |
| برچسب | label | رشته = "" | متنی که پس از علامت رسم میشود. "" فقط علامت را رسم میکند. |
| ظاهر کادر | box_style | ظاهر | ظاهر سه خانه علامت: "["، نویسه وضعیت و "]". |
| ظاهر برچسب | label_style | ظاهر | ظاهر فاصلهگذار، برچسب و پرکننده انتهای ردیف. |
| غیرفعال | disabled | منطقی = نادرست | وقتی true باشد، کادرانتخاب تمرکزپذیر نیست، همه رویدادها را نادیده میگیرد، برخوردی نمیگیرد و ردیفش را کمرنگ رسم میکند. |
| هنگام تغییر انتخاب | on_toggle | تابع(منطقی) | پس از هر تغییر، با مقدار جدید وضعیت انتخاب فراخوانی میشود. پیشفرض کاری نمیکند. |
نمونهی این مورد همراه با موارد بالاتر آمده است: tui-controls.salam
تمرکزپذیر است Focusable
تابع تمرکزپذیر است(): منطقیتمرکزپذیر است focusable
تابع تمرکزپذیر است(): منطقینمونهی این مورد همراه با موارد بالاتر آمده است: tui-controls.salam
اصابتپذیر است Hits
تابع اصابتپذیر است(): منطقیاصابتپذیر است hits
تابع اصابتپذیر است(): منطقینمونهی این مورد همراه با موارد بالاتر آمده است: tui-controls.salam
پردازش رویداد HandleEvent
تابع پردازش رویداد(event: رویداد): منطقیپردازش رویداد handle_event
تابع پردازش رویداد(event: رویداد): منطقیهنگام تغییر انتخاب را با مقدار جدید فراخوانی میکند و true برمیگرداند. هر رویداد دیگری false برمیگرداند و کادرانتخاب غیرفعال برای همه رویدادها false برمیگرداند.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-controls.salam
انتخاب شده است Checked
تابع انتخاب شده است(): منطقیانتخاب شده است checked
تابع انتخاب شده است(): منطقینمونهی این مورد همراه با موارد بالاتر آمده است: tui-controls.salam
تنظیم انتخاب SetChecked
تابع تنظیم انتخاب(value: منطقی)تنظیم انتخاب set_checked
تابع تنظیم انتخاب(value: منطقی)هنگام تغییر انتخاب تنظیم میکند.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-controls.salam
اندازه ترجیحی PreferredSize
تابع اندازه ترجیحی(max_width: صحیح): مستطیلاندازه ترجیحی preferred_size
تابع اندازه ترجیحی(max_width: صحیح): مستطیلنمونهی این مورد همراه با موارد بالاتر آمده است: tui-controls.salam
ترسیم Render
تابع ترسیم(buf: بافر، bounds: مستطیل)ترسیم render
تابع ترسیم(buf: بافر، bounds: مستطیل)ظاهر برچسب، سپس سه خانه علامت را با ظاهر کادر. تمرکز (در حالت فعال) پررنگی را روی هر دو ظاهر میافزاید و غیرفعال بودن کمرنگی را میافزاید و پررنگی را برمیدارد. هر خانه به پهنا بریده میشود، پس در ردیف باریک ابتدا برچسب و سپس خانههای علامت از سمت راست حذف میشوند. جعبه تباهیده چیزی رسم نمیکند.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-controls.salam
Visible
تابع Visible(): منطقیvisible
تابع visible(): منطقیBounds
تابع Bounds(): مستطیلbounds
تابع bounds(): مستطیلSetBounds
تابع SetBounds(bounds: مستطیل)set_bounds
تابع set_bounds(bounds: مستطیل)Measure
تابع Measure(axis: محور، max_width: صحیح): اندازهmeasure
تابع measure(axis: محور، max_width: صحیح): اندازهدکمه Button
ساختار دکمههنگام کلیک را فراخوانی میکنند، و کلیک چپ درون محدوده آن، چه تمرکز داشته باشد چه نه، هنگام کلیک را فراخوانی میکند. دکمه غیرفعال کمرنگ رسم میشود، تمرکز نمیگیرد و همه رویدادها را نادیده میگیرد.| نام | انگلیسی | گونه | توضیح |
|---|---|---|---|
| ویجت پایه | BaseWidget | ویجتپایه | ویجتپایه تعبیهشده: محدوده و پاسخهای پیشفرض برای هر متد ویجت که این نوع آن را بازتعریف نمیکند. |
| برچسب | label | رشته = "" | متنی که میان کروشهها رسم میشود. به اندازه عرض بریده میشود و هرگز سهنقطه نمیگیرد. |
| ظاهر | style | ظاهر | ظاهر پایه همه خانههای دکمه. |
| ظاهر تمرکز | focus_style | ظاهر | ظاهری که هنگام متمرکز و فعال بودن دکمه به جای ظاهر به کار میرود. ظاهر پیشفرض، که مقدار پیشفرض است، یعنی پررنگ روی همه خانهها. |
| غیرفعال | disabled | منطقی = نادرست | وقتی درست باشد دکمه کمرنگ رسم میشود، تمرکز و کلیک نمیگیرد و همه رویدادها را نادیده میگیرد. |
| هنگام کلیک | on_click | تابع() | هنگام فعال شدن دکمه فراخوانی میشود. پیشفرض کاری نمیکند. |
نمونهی این مورد همراه با موارد بالاتر آمده است: tui-controls.salam
تمرکزپذیر است Focusable
تابع تمرکزپذیر است(): منطقیتمرکزپذیر است focusable
تابع تمرکزپذیر است(): منطقینمونهی این مورد همراه با موارد بالاتر آمده است: tui-controls.salam
اصابتپذیر است Hits
تابع اصابتپذیر است(): منطقیاصابتپذیر است hits
تابع اصابتپذیر است(): منطقینمونهی این مورد همراه با موارد بالاتر آمده است: tui-controls.salam
اندازه ترجیحی PreferredSize
تابع اندازه ترجیحی(max_width: صحیح): مستطیلاندازه ترجیحی preferred_size
تابع اندازه ترجیحی(max_width: صحیح): مستطیلmax_width > 0 است به max_width محدود میشود.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-controls.salam
پردازش رویداد HandleEvent
تابع پردازش رویداد(event: رویداد): منطقیپردازش رویداد handle_event
تابع پردازش رویداد(event: رویداد): منطقیهنگام کلیک را فراخوانی میکند و درست برمیگرداند؛ هر رویداد دیگری نادرست برمیگرداند.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-controls.salam
ترسیم Render
تابع ترسیم(buf: بافر، bounds: مستطیل)ترسیم render
تابع ترسیم(buf: بافر، bounds: مستطیل)محدوده رسم میکند: ردیف با ظاهر مؤثر پر میشود، "[" در نخستین ستون و "]" در آخرین ستون (اگر عرض اجازه دهد) قرار میگیرد و برچسب میان آنها وسطچین و برای جا شدن بریده میشود. ظاهر مؤثر ظاهر است؛ هنگام غیرفعال بودن کمرنگ و غیرپررنگ؛ دکمه متمرکز و فعال از ظاهر تمرکز استفاده میکند، یا وقتی ظاهر تمرکز برابر ظاهر پیشفرض است پررنگ میشود. عرض صفر یا کمتر چیزی رسم نمیکند.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-controls.salam
Visible
تابع Visible(): منطقیvisible
تابع visible(): منطقیBounds
تابع Bounds(): مستطیلbounds
تابع bounds(): مستطیلSetBounds
تابع SetBounds(bounds: مستطیل)set_bounds
تابع set_bounds(bounds: مستطیل)Measure
تابع Measure(axis: محور، max_width: صحیح): اندازهmeasure
تابع measure(axis: محور، max_width: صحیح): اندازهسیاستنویسهها GlyphPolicy
جداشمار سیاستنویسههایونیکد مقدار صفر است و نویسههای رسم جعبه (box-drawing) را رسم میکند؛ اسکی آنها را برای پایانههایی که نویسه رسم جعبه ندارند به کدپوینتهای تا 0x7F محدود میکند.| نام | انگلیسی | گونه | توضیح |
|---|---|---|---|
| یونیکد | Unicode | | نویسههای رسم جعبه. |
| اسکی | ASCII | | فقط نویسههای ساده ASCII. |
// زبان: فارسی
واردسازی رابطپایانه
تابع ریشه:
ناپایا بافر := رابطپایانه.بافر جدید(16، 5)
بافر.نویسهها = رابطپایانه.سیاستنویسهها.یونیکد
ناحیه := بافر.محدوده()
سرچاپ "ناحیه"، ناحیه.عرض، "x"، ناحیه.ارتفاع
رابطپایانه.ترسیم کادر(بافر، ناحیه، رابطپایانه.سبککادر.دو خط، رابطپایانه.ظاهر پیشفرض، "قاب")
بافر.نوشتن متن(2، 1، "hi 中文"، رابطپایانه.ظاهر { پررنگ = درست })
بافر.پرکردن(رابطپایانه.مستطیل { ایکس = 2، ایگرگ = 2، عرض = 5، ارتفاع = 1 }، "."، رابطپایانه.ظاهر پیشفرض)
بافر.تنظیم(9، 2، رابطپایانه.سلول { نویسه = "*"، ظاهر = رابطپایانه.ظاهر پیشفرض })
رابطپایانه.ترسیم کادر با نویسهها(بافر، رابطپایانه.مستطیل { ایکس = 10، ایگرگ = 2، عرض = 5، ارتفاع = 3 }، رابطپایانه.نویسههای گرد()، رابطپایانه.ظاهر پیشفرض، "")
تکرار بافر.ارتفاع در سطر:
سرچاپ بافر.متن ردیف(سطر)
پایان
سرچاپ "خانه 2,1:"، بافر.دریافت(2، 1).نویسه، "سر نویسه پهن:"، بافر.دریافت(5، 1).نویسه
سرچاپ "بایتهای قاب:"، بافر.خروجی کامل انسی().طول() بزرگتر 0، "تغییرها:"، بافر.اختلاف().طول() بزرگتر 0
بافر.ثبت قاب()
سرچاپ "پس از ثبت:"، بافر.اختلاف().طول()
بافر.پاکسازی()
بافر.تغییر اندازه(4، 1)
سرچاپ "اندازه تازه"، بافر.عرض، بافر.ارتفاع، "بازترسیم کامل:"، بافر.اجبار بازترسیم کامل
سرچاپ "مجموعه نویسهها:"، رابطپایانه.نویسههای تک خط().افقی، رابطپایانه.نویسههای دو خط().افقی، رابطپایانه.نویسههای سنگین().افقی، رابطپایانه.نویسههای اسکی().افقی، رابطپایانه.نویسههای ترکیبی().گوشه بالا چپ
سرچاپ "جایگزین اسکی:"، رابطپایانه.نویسهها برای(رابطپایانه.سبککادر.گوشهگرد، رابطپایانه.سیاستنویسهها.اسکی).گوشه بالا چپ
سرچاپ "سیاست از محیط:"، رابطپایانه.تشخیص سیاست نویسهها() برابر رابطپایانه.تشخیص سیاست نویسهها()
_ := بافر.در تمرکز
_ := بافر.محدوده برش
بافر.آزادسازی()
پایانسلول Cell
ساختار سلول| نام | انگلیسی | گونه | توضیح |
|---|---|---|---|
| نویسه | ch | رشته = " " | نویسهای به پهنای یک خانه، یا "" برای ادامه نویسه پهنی که در خانه سمت چپ آن است. خانه خالی " " را نگه میدارد. نوشتن متن نویسههای پهن را مینویسد؛ تنظیم هر نویسه را که پهنای آن یک خانه نباشد خالی میکند. |
| ظاهر | style | ظاهر | ظاهر نهاییشدهای که این خانه با آن رسم میشود. ظاهر پیشفرض ظاهر پیشفرض پایانه را میخواهد. بافر، نه ویجت، آن را به بایت تبدیل میکند. |
نمونهی این مورد همراه با موارد بالاتر آمده است: tui-buffer.salam
بافر Buffer
ساختار بافرمحدوده برش (یا بیرون از شبکه) بیصدا نادیده گرفته میشود، پس رسم هرگز شکست نمیخورد.| نام | انگلیسی | گونه | توضیح |
|---|---|---|---|
| عرض | width | صحیح = 0 | تعداد ستونها. |
| ارتفاع | height | صحیح = 0 | تعداد ردیفها. |
| سلولها | cells | وکتور<سلول> | ذخیره خانهها به ترتیب ردیفی: خانه (x, y) برابر سلولها[y * عرض + x] است. دریافت و تنظیم را ترجیح دهید که محدوده را بررسی میکنند و برش میدهند. از طریق تنظیم / پرکردن / نوشتن متن / پاکسازی بنویسید. نوشتن مستقیم در بردار زیرین خارج از قرارداد است و ردیابی نمیشود. |
| بافر پیشین | front | وکتور<سلول> | شبکه جلویی: آنچه پایانه اکنون نشان میدهد. طول و چیدمانش همانند سلولها است. ویجتها هرگز در آن نمینویسند؛ فقط ثبت قاب() آن را جلو میبرد. |
| محدوده برش | clip | مستطیل | نوشتن بیرون از این مستطیل دور ریخته میشود. بافر جدید آن را برابر کل شبکه قرار میدهد؛ صفحه هنگام رسم هر ویجت، آن را به محدوده همان ویجت تنگ میکند. |
| در تمرکز | focused | منطقی = نادرست | زمینه رسم: در مدتی که صفحه ویجت دارای تمرکز را رسم میکند true است تا ویجت بتواند نشانگر تمرکز رسم کند. بیرون از رسمی که صفحه انجام میدهد همیشه false است. |
| سطح رنگ | tier | سطحرنگ | زمینه رسم: توانایی رنگی پایانهای که این بافر برای آن رسم میشود. بافر هنگام تولید فریم، ظاهر هر خانه را به این سطح کاهش میدهد؛ ویجتها و ترسیم کادر فقط ظاهرها را ذخیره میکنند. صفحه.آغاز() آن را یک بار برابر تشخیص سطحرنگ() قرار میدهد؛ بافری که دستی ساخته شود رنگ حقیقی را نگه میدارد، پس رسم بدون پایانه (headless) هر چه محیط بگوید رنگ حقیقی میماند. تغییر اندازه() آن را حفظ میکند. |
| نویسهها | glyphs | سیاستنویسهها | زمینه رسم: سیاست نویسهای که نویسههای ساختاری از آن پیروی میکنند. ترسیم کادر آن را میخواند. صفحه آن را در هر رونوشت فریم مقداردهی میکند؛ بافری که دستی ساخته شود یونیکد را نگه میدارد. تغییر اندازه() آن را حفظ میکند. |
| اجبار بازترسیم کامل | force_full | منطقی = درست | وقتی true است که اختلاف() بعدی باید بهجای فقط خانههای تغییرکرده، کل فریم را سریالسازی کند. بافر جدید و تغییر اندازه آن را تنظیم میکنند؛ ثبت قاب() پس از آنکه شبکه جلویی با شبکه پشتی هماهنگ شد آن را پاک میکند. |
نمونهی این مورد همراه با موارد بالاتر آمده است: tui-buffer.salam
محدوده Area
تابع محدوده(): مستطیلمحدوده area
تابع محدوده(): مستطیل(0, 0, عرض, ارتفاع).نمونهی این مورد همراه با موارد بالاتر آمده است: tui-buffer.salam
تنظیم Set
تابع تنظیم(x: صحیح، y: صحیح، cell: سلول)تنظیم set
تابع تنظیم(x: صحیح، y: صحیح، cell: سلول)محدوده برش باشد کاری نمیکند. ch غیرخالی که پهنای آن یک خانه نباشد خالی میشود؛ "" فقط پس از یک نویسه پهن پذیرفته میشود.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-buffer.salam
دریافت Get
تابع دریافت(x: صحیح، y: صحیح): سلولدریافت get
تابع دریافت(x: صحیح، y: صحیح): سلولسلول پیشفرض خالی برمیگرداند. خواندن محدوده برش را نادیده میگیرد.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-buffer.salam
نوشتن متن PutStr
تابع نوشتن متن(x: صحیح، y: صحیح، text: رشته، style: ظاهر)نوشتن متن put_str
تابع نوشتن متن(x: صحیح، y: صحیح، text: رشته، style: ظاهر)نمونهی این مورد همراه با موارد بالاتر آمده است: tui-buffer.salam
پرکردن Fill
تابع پرکردن(r: مستطیل، ch: رشته، style: ظاهر)پرکردن fill
تابع پرکردن(r: مستطیل، ch: رشته، style: ظاهر)ch چندخانهای یا بیپهنا از طریق تنظیم خالی میشود.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-buffer.salam
پاکسازی Clear
تابع پاکسازی()پاکسازی clear
تابع پاکسازی()سلول پیشفرض خالی بازنشانی میکند و محدوده برش را نادیده میگیرد. اختلاف() و ثبت قاب() بعدی همه خانهها را تغییرکرده در نظر میگیرند.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-buffer.salam
متن ردیف RowText
تابع متن ردیف(y: صحیح): رشتهمتن ردیف row_text
تابع متن ردیف(y: صحیح): رشتهنمونهی این مورد همراه با موارد بالاتر آمده است: tui-buffer.salam
تغییر اندازه Resize
تابع تغییر اندازه(width: صحیح، height: صحیح)تغییر اندازه resize
تابع تغییر اندازه(width: صحیح، height: صحیح)محدوده برش را دوباره روی کل آنها قرار میدهد و در اختلاف() بعدی بازترسیم کامل را اجبار میکند. فقط مالک بافر اصلی میتواند این را فراخوانی کند: حافظه قبلی را که رونوشتها در آن شریک بودند آزاد میکند.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-buffer.salam
خروجی کامل انسی Ansi
تابع خروجی کامل انسی(): رشتهخروجی کامل انسی ansi
تابع خروجی کامل انسی(): رشتهنمونهی این مورد همراه با موارد بالاتر آمده است: tui-buffer.salam
اختلاف Diff
تابع اختلاف(): رشتهاختلاف diff
تابع اختلاف(): رشتهارسال به ترمینال() مینویسد: تا وقتی اجبار بازترسیم کامل برقرار است کل فریم (نگاه کنید به خروجی کامل انسی)، وگرنه فقط خانههایی که با شبکه جلویی فرق دارند، ردیف به ردیف. پیش از هر رشته بیشینه از خانههای تغییرکرده یک جابهجایی مکاننما میآید؛ ظاهرها فقط در جای تغییر عوض میشوند و از یک رشته به رشته بعد منتقل میشوند؛ خروجی غیرخالی با خاموش کردن آخرین ظاهر پایان مییابد. وقتی دو شبکه یکسان باشند "" برمیگرداند.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-buffer.salam
ثبت قاب Commit
تابع ثبت قاب()ثبت قاب commit
تابع ثبت قاب()اجبار بازترسیم کامل برقرار باشد یا پاکسازی() کل شبکه را لمس کرده باشد همه خانهها را رونویسی میکند و در غیر این صورت فقط خانههای علامتخورده را، سپس علامتها و اجبار بازترسیم کامل را پاک میکند تا اختلاف() بعدی فقط تغییرات پس از آن را گزارش کند.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-buffer.salam
ارسال به ترمینال Flush
تابع ارسال به ترمینال()ارسال به ترمینال flush
تابع ارسال به ترمینال()اختلاف) را در پایانه مینویسد، سپس ثبت میکند تا شبکه جلویی با شبکه پشتی یکسان شود. وقتی اختلاف خالی باشد چیزی نوشته نمیشود.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-buffer.salam
آزادسازی Free
تابع آزادسازی()آزادسازی free
تابع آزادسازی()بافر اصلی تمام شد، آن را یک بار روی همان فراخوانی کنید؛ رونوشتها در حافظه شریکاند.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-buffer.salam
ضخامت Weight
جداشمار ضخامتسبک مقدار صفر است؛ سنگین و دوگانه ضخامتهای دیگر جدول نویسهها را توصیف میکنند. نویسههای کادر ضخامت بخشهای افقی و عمودی خود را برای مرحله اتصالیابی پس از رسمِ صفحه ثبت میکند.| نام | انگلیسی | گونه | توضیح |
|---|---|---|---|
| سبک | Light | | خط تکی نازک. |
| سنگین | Heavy | | خط تکی ضخیم. |
| دوگانه | Double | | خط دوتایی. |
نمونهی این مورد همراه با موارد بالاتر آمده است: tui-buffer.salam
نویسههایکادر BorderGlyphs
ساختار نویسههایکادرترسیم کادر با نویسهها لبهها و گوشهها را رسم میکند؛ مرحله پس از رسمِ صفحه نویسههای اتصال را بر اساس بازوهای رسمشده انتخاب میکند.| نام | انگلیسی | گونه | توضیح |
|---|---|---|---|
| افقی | h | رشته = "" | بخش افقی، که روی لبههای بالا و پایین رسم میشود. |
| عمودی | v | رشته = "" | بخش عمودی، که روی لبههای چپ و راست رسم میشود. |
| گوشه بالا چپ | tl | رشته = "" | گوشه بالا چپ. |
| گوشه بالا راست | tr | رشته = "" | گوشه بالا راست. |
| گوشه پایین چپ | bl | رشته = "" | گوشه پایین چپ. |
| گوشه پایین راست | br | رشته = "" | گوشه پایین راست. |
| سهراهی پایین | t_down | رشته = "" | سهراهی با ساقه رو به پایین. |
| سهراهی بالا | t_up | رشته = "" | سهراهی با ساقه رو به بالا. |
| سهراهی راست | t_right | رشته = "" | سهراهی با ساقه رو به راست. |
| سهراهی چپ | t_left | رشته = "" | سهراهی با ساقه رو به چپ. |
| چهارراه | cross | رشته = "" | اتصال چهارطرفه. |
| ضخامت افقی | hw | ضخامت | ضخامت بخش افقی. |
| ضخامت عمودی | vw | ضخامت | ضخامت بخش عمودی. |
نمونهی این مورد همراه با موارد بالاتر آمده است: tui-buffer.salam
پایاها و متغیرها
بدون ویجت NoWidget
پایا بدون ویجت: صحیح۳۲ = -1نمونهی این مورد همراه با موارد بالاتر آمده است: tui-widget.salam
شناسه ریشه RootId
پایا شناسه ریشه: صحیح۳۲ = 0نمونهی این مورد همراه با موارد بالاتر آمده است: tui-widget.salam
ظاهر پیشفرض StyleDefault
پایا ظاهر پیشفرض: tui_Styleظاهر و عنصر خنثی ادغام ظاهر است.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-style.salam
بازه پایش به میلیثانیه PollMs
پایا بازه پایش به میلیثانیه: صحیح۳۲ = 20توقف() و در Windows تأخیر تشخیص تغییر اندازه را محدود میکند (در POSIX تغییر اندازه به صورت SIGWINCH میرسد).نمونهی این مورد همراه با موارد بالاتر آمده است: tui-terminal.salam
ظرفیت رویداد EventCapacity
پایا ظرفیت رویداد: صحیح۳۲ = 256نمونهی این مورد همراه با موارد بالاتر آمده است: tui-terminal.salam
جهتها Dir…
نزدیکترین و جابهجاییهای فضایی تمرکز (تمرکز بالا، تمرکز پایین، تمرکز چپ، تمرکز راست) میگیرند.| نام | انگلیسی | مقدار |
|---|---|---|
| جهت بالا | DirUp | 0 |
| جهت پایین | DirDown | 1 |
| جهت چپ | DirLeft | 2 |
| جهت راست | DirRight | 3 |
نمونهی این مورد همراه با موارد بالاتر آمده است: tui-geometry.salam
بدون رویداد NoEvent
پایا بدون رویداد: صحیح۳۲ = 0رویداد با مقدار صفر که چیزی حمل نمیکند.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-events.salam
رویداد کیبورد KeyEvent
پایا رویداد کیبورد: صحیح۳۲ = 1کلید کلید رمزگشاییشده را نگه میدارد.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-events.salam
رویداد ماوس MouseEvent
پایا رویداد ماوس: صحیح۳۲ = 2ماوس گزارش رمزگشاییشده را نگه میدارد و کلید توالی escape خامی را که گزارش از آن آمده نگه میدارد.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-events.salam
رویداد تغییر اندازه ResizeEvent
پایا رویداد تغییر اندازه: صحیح۳۲ = 3عرض و ارتفاع اندازه جدید را بر حسب خانه نگه میدارند.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-events.salam
رویداد تیک TickEvent
پایا رویداد تیک: صحیح۳۲ = 4نمونهی این مورد همراه با موارد بالاتر آمده است: tui-events.salam
مشکی Black
پایا مشکی: گوناگون<tui___Color__Default، tui___Color__Ansi، tui___Color__Indexed، tui___Color__Rgb>نمونهی این مورد همراه با موارد بالاتر آمده است: tui-style.salam
قرمز Red
پایا قرمز: گوناگون<tui___Color__Default، tui___Color__Ansi، tui___Color__Indexed، tui___Color__Rgb>نمونهی این مورد همراه با موارد بالاتر آمده است: tui-style.salam
سبز Green
پایا سبز: گوناگون<tui___Color__Default، tui___Color__Ansi، tui___Color__Indexed، tui___Color__Rgb>نمونهی این مورد همراه با موارد بالاتر آمده است: tui-style.salam
زرد Yellow
پایا زرد: گوناگون<tui___Color__Default، tui___Color__Ansi، tui___Color__Indexed، tui___Color__Rgb>نمونهی این مورد همراه با موارد بالاتر آمده است: tui-style.salam
آبی Blue
پایا آبی: گوناگون<tui___Color__Default، tui___Color__Ansi، tui___Color__Indexed، tui___Color__Rgb>نمونهی این مورد همراه با موارد بالاتر آمده است: tui-style.salam
ارغوانی Magenta
پایا ارغوانی: گوناگون<tui___Color__Default، tui___Color__Ansi، tui___Color__Indexed، tui___Color__Rgb>نمونهی این مورد همراه با موارد بالاتر آمده است: tui-style.salam
فیروزهای Cyan
پایا فیروزهای: گوناگون<tui___Color__Default، tui___Color__Ansi، tui___Color__Indexed، tui___Color__Rgb>نمونهی این مورد همراه با موارد بالاتر آمده است: tui-style.salam
سفید White
پایا سفید: گوناگون<tui___Color__Default، tui___Color__Ansi، tui___Color__Indexed، tui___Color__Rgb>نمونهی این مورد همراه با موارد بالاتر آمده است: tui-style.salam
مشکی روشن BrightBlack
پایا مشکی روشن: گوناگون<tui___Color__Default، tui___Color__Ansi، tui___Color__Indexed، tui___Color__Rgb>مشکی.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-style.salam
قرمز روشن BrightRed
پایا قرمز روشن: گوناگون<tui___Color__Default، tui___Color__Ansi، tui___Color__Indexed، tui___Color__Rgb>قرمز.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-style.salam
سبز روشن BrightGreen
پایا سبز روشن: گوناگون<tui___Color__Default، tui___Color__Ansi، tui___Color__Indexed، tui___Color__Rgb>سبز.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-style.salam
زرد روشن BrightYellow
پایا زرد روشن: گوناگون<tui___Color__Default، tui___Color__Ansi، tui___Color__Indexed، tui___Color__Rgb>زرد.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-style.salam
آبی روشن BrightBlue
پایا آبی روشن: گوناگون<tui___Color__Default، tui___Color__Ansi، tui___Color__Indexed، tui___Color__Rgb>آبی.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-style.salam
ارغوانی روشن BrightMagenta
پایا ارغوانی روشن: گوناگون<tui___Color__Default، tui___Color__Ansi، tui___Color__Indexed، tui___Color__Rgb>ارغوانی.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-style.salam
فیروزهای روشن BrightCyan
پایا فیروزهای روشن: گوناگون<tui___Color__Default، tui___Color__Ansi، tui___Color__Indexed، tui___Color__Rgb>فیروزهای.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-style.salam
سفید روشن BrightWhite
پایا سفید روشن: گوناگون<tui___Color__Default، tui___Color__Ansi، tui___Color__Indexed، tui___Color__Rgb>سفید.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-style.salam
تابعها
درخت جدید NewTree
تابع درخت جدید(root: dyn ویجت): درختنمونهی این مورد همراه با موارد بالاتر آمده است: tui-widget.salam
شکستن خطوط متن WrapText
تابع شکستن خطوط متن(text: رشته، width: صحیح): وکتور<رشته>width خانه، از بالا به پایین، تقسیم میکند. یک "\n" صریح بند تازهای آغاز میکند و هر بند جداگانه شکسته میشود؛ فاصله در محل شکست حذف میشود. واژهای که از width بلندتر باشد روی شبکه نویسهها بریده میشود. یک نویسه دوخانهای میتواند از عرض 1 بیشتر شود. width <= 0 یعنی بیکران، پس هر بند بدون شکست بازگردانده میشود.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-text.salam
اندازهگیری متن MeasureText
تابع اندازهگیری متن(text: رشته، max_width: صحیح): مستطیلmax_width، به شکل یک مستطیل در (0, 0): عرض، بلندترین خط شکستهشده بر حسب خانه است و ارتفاع، تعداد خطهای شکستهشده. max_width <= 0 یعنی بیکران، پس عرض، بلندترین خط صریح و ارتفاع، تعداد خطهای صریح است. عرضها بر حسب خانههای نمایشی شمرده میشوند.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-text.salam
متن جدید NewText
تابع متن جدید(content: رشته): متنمتن با محتوای دادهشده میسازد: با تراز چپ، بدون ظاهر و با شکست خط بر پایه واژه.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-text.salam
جدول جدید NewTable
تابع جدول جدید(): جدولجدول خالی میسازد: بدون ستون، بدون ردیف، بدون سرآیند، با خطکشی و فاصله درونی افقی برابر 1.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-table.salam
نمای جدول جدید NewTableView
تابع نمای جدول جدید(): نمایجدولنمایجدول خالی میسازد: پیشفرضهای جدول، جابهجایی 0، انتخابشده 0 و یک فعالسازی که نادرست برمیگرداند.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-table.salam
ضخامت کادر BorderInset
تابع ضخامت کادر(b: سبککادر): صحیحبدون کادر و 1 برای هر نوع دیگر. ظرف ناحیه محتوای خود را به همین اندازه کوچک میکند تا ناحیهای را که فرزندانش در آن رسم میکنند به دست آورد.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-style.salam
ادغام ظاهر StyleMerge
تابع ادغام ظاهر(parent: ظاهر، child: ظاهر): ظاهرColor.Default باشد (آنگاه رنگ والد به ارث میرسد) و هر ویژگی OR دو مقدار است. پس ادغام ظاهر(ظاهر پیشفرض, s) و ادغام ظاهر(s, ظاهر پیشفرض) هر دو برابر s هستند و حاصل ادغام در ظاهر پیشفرض یک ظاهر کاملا نهاییشده است. خالص: مقدار تازهای برمیگرداند و هرگز ورودیهایش را تغییر نمیدهد. فرزند میتواند ویژگی بیفزاید یا رنگی را بازنویسی کند، اما نمیتواند ویژگی به ارث رسیده را حذف کند (false در فرزند از تنظیمنشده قابل تشخیص نیست) یا زیر والد رنگی، رنگ پیشفرض پایانه را تحمیل کند (Default در فرزند یعنی ارثبری). سقف: تفریق وجود ندارد. مسیر ارتقا اگر روزی حذف لازم شد: یک StylePatch جداگانه با فیلدهای Option که به یک ظاهر تبدیل شود و ظاهر، خانهها و برابری را دستنخورده بگذارد.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-style.salam
برابری ظاهر StyleEq
تابع برابری ظاهر(a: ظاهر، b: ظاهر): منطقیخاموش، که همه رنگها حذف میشوند، بایتهای یکسان تولید کنند (کامل نیست). بنابراین به سمت «متفاوت» خطا میکند تا خانهای هرگز به اشتباه رد نشود؛ تغییر سطح همه خانهها را نامعتبر میکند، چون برابری سطح را نادیده میگیرد.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-style.salam
دنباله فعالسازی ظاهر StyleSgr
تابع دنباله فعالسازی ظاهر(style: ظاهر، tier: سطحرنگ): رشتهstyle در سطح tier میبرد: اول ویژگیها به ترتیب ثابت پررنگ، کمرنگ، کج، زیرخط، معکوس، سپس پیشزمینه و بعد پسزمینه. ویژگیها سطح را نادیده میگیرند (NO_COLOR یعنی بدون رنگ، نه بدون پررنگی)؛ هر رنگ ابتدا به سطح کاهش مییابد و رنگی که پس از کاهش Default باشد رد میشود. وقتی چیزی تنظیم نشده "" برمیگرداند و هرگز reset تولید نمیکند: هر دنباله با سازندههای پایانه و رمزگذارهای color.salam ساخته میشود و هیچکدام دستی نوشته نمیشود.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-style.salam
دنباله غیرفعالسازی ظاهر StyleSgrOff
تابع دنباله غیرفعالسازی ظاهر(style: ظاهر، tier: سطحرنگ): رشتهدنباله فعالسازی ظاهر: دنباله SGR که پایانه را از style به حالت پیشفرض در سطح tier برمیگرداند، به ترتیب ثابت: یک 22 اگر پررنگ یا کمرنگ تنظیم باشد (22 هر دو را با هم پاک میکند)، سپس 23 اگر کج، سپس 24 اگر زیرخط، سپس 27 اگر معکوس، سپس 39 اگر پیشزمینه پس از کاهش غیرپیشفرض باشد، سپس 49 اگر پسزمینه چنین باشد. وقتی چیزی تنظیم نشده "" برمیگرداند و هرگز reset تولید نمیکند؛ کدها با term.Sgr ساخته میشوند.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-style.salam
شمار ساخت اسجیآر SgrBuilds
تابع شمار ساخت اسجیآر(): صحیحدنباله فعالسازی ظاهر و دنباله غیرفعالسازی ظاهر در این فرایند تولید کردهاند. هیچ چیز آنها را کش نمیکند: بافر به ازای هر تغییر ظاهری که مینویسد یکی اضافه میکند، پس هر فریم به ازای هر دنباله روشن یا خاموش تولیدشده یکی میافزاید. فقطخواندنی؛ پیکربندی نیست.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-style.salam
جداکننده جدید NewSeparator
تابع جداکننده جدید(): جداکنندهجداکننده افقی با نویسه پیشفرض و ظاهر پیشفرض میسازد.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-text.salam
صفحه جدید NewScreen
تابع صفحه جدید(root: dyn ویجت، width: صحیح، height: صحیح): صفحهroot ویجت ریشه آن است (شناسه 0، به اندازه کل صفحه). تا آغاز() هیچ چیز به پایانه دست نمیزند، و آغاز() اندازه صفحه را به اندازه واقعی پایانه تغییر میدهد.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-screen.salam
صفحه ترمینال جدید NewTerminalScreen
تابع صفحه ترمینال جدید(root: dyn ویجت): صفحهپایانه.اندازه()).نمونهی این مورد همراه با موارد بالاتر آمده است: tui-terminal.salam
نوار پیشرفت جدید NewProgress
تابع نوار پیشرفت جدید(): نوارپیشرفتنوارپیشرفت در 0% با بیشینه 100 و ظاهرهای پیشفرض میسازد.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-text.salam
مودال جدید NewModal
تابع مودال جدید(): مودالمودال پنهان میسازد: Percent(50, 40)، بدون عنوان و بدون فرزند. نگهدارنده وضعیتش همینجا ساخته میشود، پس همه رونوشتهایی که بعدا ساخته شوند در آن شریکاند.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-panels.salam
فهرست جدید NewList
تابع فهرست جدید(items: وکتور<رشته>): فهرستفهرست روی items میسازد که انتخاب روی نخستین گزینه است (یا وقتی items خالی است روی هیچ گزینهای نیست) و پنجره در بالا قرار دارد، با ظاهرهای پیشفرض و یک هنگام انتخاب بیاثر.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-controls.salam
فاصلههای چهارگانه جدید NewInsets
تابع فاصلههای چهارگانه جدید(top: صحیح، right: صحیح، bottom: صحیح، left: صحیح): فاصلههایچهارگانهفاصلههای چهارگانه از چهار ضلع به ترتیب بالا، راست، پایین، چپ میسازد و هر مقدار منفی را به 0 محدود میکند.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-layout.salam
فاصلههای چهارگانه یکسان UniformInsets
تابع فاصلههای چهارگانه یکسان(v: صحیح): فاصلههایچهارگانهفاصلههای چهارگانه با مقدار یکسان روی هر چهار ضلع میسازد، محدودشده به 0.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-layout.salam
جاسازی مستطیل FitRect
تابع جاسازی مستطیل(r: مستطیل، box: مستطیل): مستطیلr و box (R2). وقتی تقاطع نداشته باشند، یک مستطیل 0x0 در نزدیکترین نقطه box به r: نتیجه هرگز به شکل منفی تهی نیست، پس مستطیلی که از این تابع خارج میشود یا غیرتهی است یا دقیقا 0x0.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-layout.salam
کاستن از لبههای مستطیل InsetRect
تابع کاستن از لبههای مستطیل(r: مستطیل، i: فاصلههایچهارگانه): مستطیلr را به اندازه i از لبهها کوچک میکند، سپس نتیجه را درون r برش میدهد (R3, R4). هر ضلع ابتدا به 0 محدود میشود، پس فاصله درونی یا حاشیه بیرونی منفی چیزی اضافه نمیکند. فاصله درونی بزرگتر از r جعبه محتوای تهی لنگرشده درون r میدهد؛ مستطیل بازگشتی هرگز منفی نیست.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-layout.salam
تقسیم محور اصلی SplitMain
تابع تقسیم محور اصلی(length: صحیح، sizes: وکتور<قاعدهاندازهگذاری>، gap: صحیح): وکتور<صحیح>length خانه را در امتداد محور اصلی، به ترتیب، میان اندازهها تقسیم میکند (R5). ثابت به اندازه max(0, تعداد سلول) خانه میگیرد و وزن را نادیده میگیرد. gap تعداد خانههای میان دو جایگاه مجاور است. فاصله منفی به 0 محدود میشود. سهم فاصلهها gap * max(0, k - 1) است که در آن k تعداد جایگاهها، با احتساب جایگاههای با اندازه صفر، است؛ اگر k <= 1 باشد چیزی کسر نمیشود. پرکردن فضا و ترجیحی باقیمانده R = max(0, length - مجموع آن اندازههای ثابت - سهم فاصلهها) را میان خود تقسیم میکنند. Arrange پیش از این فراخوانی، ترجیحی اندازهگیریشده را به ثابت و ترجیحی اندازهگیرینشدنی را به پرکردن فضا با وزن 1 تبدیل میکند. این تابع اندازهگیری نمیکند؛ اگر ترجیحی هنوز در بردار مانده باشد، در مخزن وزنی میماند. وزن هر عضو مخزن max(0, وزن) است. سهم هر عضو floor(R * وزن / مجموع وزنها) است، سپس هر خانه باقیمانده، یکی یکی، به اعضایی از مخزن داده میشود که بزرگترین مقدار (R * وزن) mod مجموع وزنها را دارند. در حالت تساوی، جایگاه زودتر مخزن برنده است. اگر مجموع وزنها 0 باشد، سهم همه اعضای مخزن 0 میشود، R بدون استفاده میماند و تقسیمی انجام نمیشود. سرریز ثابت یا سهم فاصلهای که کل طول را مصرف کند R را 0 میکند، پس همه اعضای مخزن 0 میشوند و ثابت کوچک نمیشود. فاصله جزو اندازههای بازگشتی نیست و بازگردانده نمیشود. بردار به ازای هر ورودی یک عضو دارد. وزن 1 برای همه اعضای مخزن یعنی تقسیم مساوی، با باقیمانده برای اعضای زودتر.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-layout.salam
اندازههای بخشهای شبکه TrackSizes
تابع اندازههای بخشهای شبکه(total: صحیح، n: صحیح): وکتور<صحیح>نمونهی این مورد همراه با موارد بالاتر آمده است: tui-layout.salam
اندازه در محور PlaceAxisSize
تابع اندازه در محور(avail: صحیح، align: ترازعرضی، natural: صحیح): صحیحکشیده یا avail غیرمثبت، max(0, avail) را میدهد؛ در غیر این صورت اندازه طبیعی که به بازه [0, avail] محدود شده است.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-layout.salam
جابهجایی در محور PlaceAxisOffset
تابع جابهجایی در محور(avail: صحیح، align: ترازعرضی، natural: صحیح): صحیحکشیده یا avail غیرمثبت، 0 را میدهد؛ در غیر این صورت اندازه طبیعی به بازه [0, avail] محدود میشود و فضای آزاد بر اساس تراز تقسیم میشود: آغاز برابر 0، مرکز برابر floor(free/2) با خانه فرد در انتها، پایان برابر free.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-layout.salam
ردیف جدید NewRow
تابع ردیف جدید(): ردیفردیف خالی بدون فاصله درونی میسازد.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-layout.salam
ستون جدید NewColumn
تابع ستون جدید(): ستونستون خالی بدون فاصله درونی میسازد.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-layout.salam
شبکه جدید NewGrid
تابع شبکه جدید(rows: صحیح، cols: صحیح): شبکهشبکه خالی با rows x cols خانه و بدون فاصله درونی میسازد. اگر تعداد غیرمثبت باشد، هیچ فرزندی خانهای نمیگیرد.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-layout.salam
پشته جدید NewStack
تابع پشته جدید(): پشتهپشته خالی بدون فاصله درونی میسازد.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-layout.salam
نگاشت کلید جدید NewKeymap
تابع نگاشت کلید جدید(): نگاشتکلیدنگاشتکلید.پیوند کلید و گونههای bind_* به آن بدهید و با نگاشتکلید.آزادسازی آزادش کنید. گره ریشه در نخستین نگاشتکلید.پیوند کلید ساخته میشود.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-events.salam
نگاشت کلید پیشفرض NewDefaultKeymap
تابع نگاشت کلید پیشفرض(): نگاشتکلیدتنظیم نگاشتکلید بدهید (یا از طریق فیلد نگاشتکلید صفحه پیوند دهید). Shift+Tab عمدا پیوند داده نشده است: سلام دنباله backtab را به KeyUnknown رمزگشایی میکند.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-events.salam
نگاشت کلید ویم NewVimKeymap
تابع نگاشت کلید ویم(on_search: تابع(صفحه*، رویداد): منطقی): نگاشتکلیدنگاشتکلید پیشفرض است، پس Tab و چهار کلید جهتنما همچنان کار میکنند، و h، j، k و l را برای همان چهار جهت میافزاید؛ "gg" و "G" با حرکتهای جهتی پیاپی به بالا و پایین ستون ویجت دارای تمرکز میروند، پس ستون حفظ میشود؛ Esc یک مورد از پشته تمرکز برمیدارد، اما فقط تا وقتی تمرکزی که push شده باقی باشد، و در ریشه مصرفنشده گزارش میشود تا برنامه همچنان آن را ببیند؛ و "/" کنش on_search را اجرا میکند که کنش خود برنامه است و مقدار بولی آن نتیجه توزیع است. Enter و Space عمدا پیوند داده نشدهاند: توزیع هر کلید را اول به ویجت دارای تمرکز عرضه میکند، جایی که دکمه، کادرانتخاب، فهرست و مودال از پیش به آنها واکنش نشان میدهند، و ویجت فعالسازی عمومی برای پیوند دادن ندارد. کادرمتن دارای تمرکز "/" را پیش از آنکه نگاشتکلید آن را ببیند مصرف میکند. نگاشت را با تنظیم نگاشتکلید نصب کنید که مالکیت آن را میگیرد: پس از آن هرگز رونوشتش نکنید یا آزادش نکنید.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-events.salam
کادر متن جدید NewInput
تابع کادر متن جدید(): کادرمتنکادرمتن خالی میسازد، بدون متن راهنما، با مقدار بدون ظاهر و ظاهرهای پیشفرض مکاننما و متن راهنما.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-controls.salam
نزدیکترین Nearest
تابع نزدیکترین(from: مستطیل، candidates: وکتور<مستطیل>، dir: صحیح): صحیحfrom را در جهت dir (جهت بالا، جهت پایین، جهت چپ، جهت راست) پیدا میکند و نمایه آن را در candidates برمیگرداند، یا اگر هیچ نامزدی واجد شرایط نباشد -1 برمیگرداند. قواعد در توضیحات بدنه تابع شرح داده شدهاند. O(n): هر نامزد یک بار بررسی میشود.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-geometry.salam
دنباله رنگ پیشزمینه FgSeq
تابع دنباله رنگ پیشزمینه(c: رنگ): رشتهDefault برابر SGR 39 است؛ Ansi 0-7 برابر 30+n و Ansi 8-15 برابر 90+(n-8) است؛ Indexed برابر 38;5;n و Rgb برابر 38;2;r;g;b است. با سازندههای دنباله پایانه ساخته میشود: هیچ دنباله گریزی دستی نوشته نمیشود.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-style.salam
دنباله رنگ پسزمینه BgSeq
تابع دنباله رنگ پسزمینه(c: رنگ): رشتهDefault برابر SGR 49 است؛ Ansi 0-7 برابر 40+n و Ansi 8-15 برابر 100+(n-8) است؛ Indexed برابر 48;5;n و Rgb برابر 48;2;r;g;b است. با سازندههای دنباله پایانه ساخته میشود: هیچ دنباله گریزی دستی نوشته نمیشود.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-style.salam
تشخیص سطح رنگ DetectTier
تابع تشخیص سطح رنگ(): سطحرنگخاموش؛ TERM == "dumb" مگر اینکه CLICOLOR_FORCE مقداری غیرخالی و غیر از "0" داشته باشد -> خاموش؛ COLORTERM == "truecolor" یا "24bit" -> رنگ حقیقی؛ TERM شامل "256color" یا هر COLORTERM غیرخالی دیگر -> نمایهای۲۵۶؛ در غیر این صورت انسی۱۶. NO_COLOR بر CLICOLOR_FORCE مقدم است.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-style.salam
کاهش سطح رنگ Lower
تابع کاهش سطح رنگ(c: رنگ، tier: سطحرنگ): رنگخاموش هر رنگ را Default میکند؛ رنگ حقیقی بدون تغییر است؛ نمایهای۲۵۶ فقط Rgb را به نزدیکترین نمایه 256 کاهش میدهد؛ انسی۱۶ Rgb و Indexed 16-255 را به نزدیکترین رنگ از 16 رنگ ANSI کاهش میدهد (Rgb را مستقیم، هرگز از راه Indexed) و Default و Ansi را دستنخورده میگذارد. خالص: مقدار تازهای برمیگرداند و هرگز ورودی خود را تغییر نمیدهد.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-style.salam
دنباله پیشزمینه در سطح FgSeqAt
تابع دنباله پیشزمینه در سطح(c: رنگ، tier: سطحرنگ): رشتهtier: دنباله رنگ پیشزمینه از کاهش سطحرنگ(c, tier)، پس دنباله گریز منتشرشده با سطح همخوان است و هیچ دنبالهای دستی نوشته نمیشود.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-style.salam
دنباله پسزمینه در سطح BgSeqAt
تابع دنباله پسزمینه در سطح(c: رنگ، tier: سطحرنگ): رشتهtier: دنباله رنگ پسزمینه از کاهش سطحرنگ(c, tier)، پس دنباله گریز منتشرشده با سطح همخوان است و هیچ دنبالهای دستی نوشته نمیشود.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-style.salam
کادر انتخاب جدید NewCheckbox
تابع کادر انتخاب جدید(label: رشته، checked: منطقی): کادرانتخابکادرانتخاب با برچسب و وضعیت انتخاب اولیه دادهشده میسازد، فعال، با ظاهرهای پیشفرض و کادرانتخاب.هنگام تغییر انتخاب بیاثر.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-controls.salam
دکمه جدید NewButton
تابع دکمه جدید(label: رشته): دکمهدکمه فعال با برچسب دادهشده، ظاهرهای پیشفرض و یک هنگام کلیک بیاثر میسازد.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-controls.salam
تشخیص سیاست نویسهها DetectGlyphPolicy
تابع تشخیص سیاست نویسهها(): سیاستنویسههاصفحه.آغاز یک بار آن را فراخوانی میکند. نخستین تطابق برنده است: SALAM_TUI_GLYPHS "ascii" -> اسکی، "unicode" -> یونیکد؛ TERM == "dumb" -> اسکی؛ نخستین مقدار غیرخالی از LC_ALL، LC_CTYPE و LANG تصمیم میگیرد: غیر UTF-8 -> اسکی، UTF-8 -> یونیکد؛ در غیر این صورت یونیکد.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-buffer.salam
بافر جدید NewBuffer
تابع بافر جدید(width: صحیح، height: صحیح): بافربافر.اختلاف() بعدی آن یک فریم کامل است. اندازه منفی صفر در نظر گرفته میشود.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-buffer.salam
نویسههای تک خط GlyphsSingle
تابع نویسههای تک خط(): نویسههایکادرسبککادر.تک خط رسم میکند.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-buffer.salam
نویسههای دو خط GlyphsDouble
تابع نویسههای دو خط(): نویسههایکادرسبککادر.دو خط رسم میکند.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-buffer.salam
نویسههای گرد GlyphsRounded
تابع نویسههای گرد(): نویسههایکادرسبککادر.گوشهگرد رسم میکند. گوشهگرد نویسه اتصال گرد ندارد، پس فیلدهای سهراهی و چهارراه آن نازکاند.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-buffer.salam
نویسههای اسکی GlyphsASCII
تابع نویسههای اسکی(): نویسههایکادر- و | برای بخشها و + برای همه گوشهها و اتصالها. زیر سیاست نویسهها.اسکی برای همه کادرها به کار میرود.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-buffer.salam
نویسههای سنگین GlyphsHeavy
تابع نویسههای سنگین(): نویسههایکادرنمونهی این مورد همراه با موارد بالاتر آمده است: tui-buffer.salam
نویسههای ترکیبی GlyphsMixed
تابع نویسههای ترکیبی(): نویسههایکادرنمونهی این مورد همراه با موارد بالاتر آمده است: tui-buffer.salam
نویسهها برای GlyphsFor
تابع نویسهها برای(border: سبککادر، policy: سیاستنویسهها): نویسههایکادرborder زیر policy. سبککادر.بدون کادر مقدار صفر (بدون نویسه) را میدهد. زیر سیاست نویسهها.اسکی هر سبک دیگری نویسههای اسکی را میدهد؛ در غیر این صورت تک خط، دو خط و گوشهگرد به ترتیب نویسههای تک خط، نویسههای دو خط و نویسههای گرد را میدهند.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-buffer.salam
ترسیم کادر DrawBorder
تابع ترسیم کادر(buf: بافر، rect: مستطیل، border: سبککادر، style: ظاهر، title: رشته)border را دور rect در buf رسم میکند، همه خانهها با یک رنگ پیشزمینه که از style.fg گرفته میشود. قواعد: - سبککادر.بدون کادر یا مستطیل بدون مساحت چیزی نمینویسد. - مستطیل یکردیفی یک خط افقی و مستطیل یکستونی یک خط عمودی است؛ هیچکدام گوشه یا عنوان ندارند. - در غیر این صورت ابتدا چهار گوشه، سپس لبههای افقی و بعد لبههای عمودی رسم میشوند. لبهها دقیقا میان گوشهها قرار میگیرند. - title روی لبه بالا از rect.x + 2 آغاز میشود، با یک فاصله پیش و پس از آن. فاصلههای دو سرش حذف میشود؛ عنوان خالی چیزی رسم نمیکند؛ از سمت راست به rect.width - 5 خانه نمایشی بریده میشود و دستکم به پهنای 6 نیاز دارد. - فقط رنگ پیشزمینه به کار میرود. ویژگیهای style نادیده گرفته میشوند و رنگ پیشزمینه Color.Default یک ظاهر خالی (پیشفرض پایانه) مینویسد. نوشتنها از طریق بافر.تنظیم انجام میشود که به شبکه و ناحیه برش محدود است، پس مستطیلی که بخشی از آن بیرون از بافر باشد فقط بخش درونیاش را رسم میکند.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-buffer.salam
ترسیم کادر با نویسهها DrawBorderGlyphs
تابع ترسیم کادر با نویسهها(buf: بافر، rect: مستطیل، glyphs: نویسههایکادر، style: ظاهر، title: رشته)glyphs را دور rect در buf رسم میکند، با همه قواعد ترسیم کادر (مستطیلهای تباهیده، عنوان، یک رنگ پیشزمینه). برای مجموعه نویسه سفارشی یا غیرپیشفرض از آن استفاده کنید. وقتی buf.glyphs برابر سیاست نویسهها.اسکی باشد، مجموعه با نویسههای اسکی جایگزین میشود، پس مجموعه سفارشی زیر این سیاست هرگز نویسه غیر ASCII تولید نمیکند.نمونهی این مورد همراه با موارد بالاتر آمده است: tui-buffer.salam