Web Analytics

AppCUI-rs

⭐ 376 stars Arabic by gdt050579

🌐 اللغة

AppCUI-rs

`` ⯈ 𝗔𝗽𝗽𝗖𝗨𝗜-𝗿𝘀 🖳


حالة البناء على ويندوز
حالة البناء على لينكس
حالة البناء على macOS
تغطية الكود
الرخصة
Crates.io
Docs.rs
المعرض

AppCUI-rs هي مكتبة Rust سريعة وعبرية للمنصات لبناء واجهات مستخدم حديثة قائمة على النص (TUI) مع عناصر واجهة غنية، وثيمات، ودعم كامل لـ Unicode—بديل لـ ncurses وأطر واجهات المستخدم الطرفية الأخرى.

✨ الميزات

  • [x] العديد من عناصر التحكم الجاهزة (أزرار، ملصقات، صناديق نصية، مربعات اختيار، أزرار راديو، قوائم، عروض شجرية، صناديق كومبو، أدوات اختيار التاريخ/الوقت، أدوات اختيار اللون، علامات تبويب، أكورديون، إلخ). القائمة الكاملة للعناصر تجدها هنا
  • [x] نظام تخطيط قوي يسمح لك بتموضع العناصر باستخدام إحداثيات مطلقة، إحداثيات نسبية، إرساء، محاذاة، مرساة، أو تحديد نقطة ارتكاز (اطلع أكثر هنا)
  • [x] قوائم وأشرطة أدوات
  • [x] دعم متعدد المنصات (ويندوز عبر API والطرفية الافتراضية، لينكس عبر ncurses، macOS عبر termios)
  • [x] دعم تعدد المهام لتمكين عمليات الخلفية
  • [x] مؤقتات
  • [x] دعم الفأرة
  • [x] دعم الحافظة
  • [x] ثيمات الألوان
  • [x] دعم أحرف Unicode
  • [x] مربعات حوار معرفة مسبقاً (رسالة، إدخال، اختيار لون، حفظ وفتح، متصفح المجلدات، إلخ)
  • [x] دعم الألوان الحقيقية (24 بت لكل بكسل) للطرفيات التي تدعمها.

📸 لقطات شاشة

👉 اطلع على المعرض لمشاهدة عروض كاملة لكل العناصر!

🖥️ الأنظمة الخلفية

يدعم AppCUI العديد من الأنظمة الخلفية حسب نظام التشغيل:

  • وحدة تحكم ويندوز - تعتمد على واجهة برمجة التطبيقات Win32 منخفضة المستوى، مصممة لوحدة تحكم ويندوز التقليدية
  • Windows VT - تعتمد على تسلسل ANSI، مصممة لأجهزة ويندوز الحديثة مع المحطات الافتراضية
  • NCurses - تعتمد على واجهة برمجة التطبيقات NCurses لبيئات لينكس
  • Termios - تعتمد على تسلسل ANSI وواجهات برمجة التطبيقات منخفضة المستوى لنظام macOS
  • Web Terminal - مصممة للتطبيقات على الويب (تعتمد على WebGL)
  • CrossTerm - تعتمد على مكتبة crossterm، يتم تفعيلها عبر علامة ميزة
يمكنك معرفة المزيد عن الأنظمة المدعومة هنا

🚀 البداية السريعة

أضف ما يلي إلى ملف Cargo.toml الخاص بك:

toml [dependencies] appcui = "*"

ثم أنشئ مشروع Rust جديد وأضف الكود التالي:
rust use appcui::prelude::*;

fn main() -> Result<(), appcui::system::Error> { let mut app = App::new().build()?; let mut win = Window::new( "Test", LayoutBuilder::new().alignment(Alignment::Center).width(30).height(9).build(), window::Flags::Sizeable, ); win.add(Label::new( "Hello World !", LayoutBuilder::new().alignment(Alignment::Center).width(13).height(1).build(), )); app.add_window(win); app.run(); Ok(()) }

أو نسخة أكثر اختصارًا باستخدام proc-macros:

rs use appcui::prelude::*;

fn main() -> Result<(), appcui::system::Error> { let mut app = App::new().build()?; let mut win = window!("Test,a:c,w:30,h:9"); win.add(label!("'Hello World !',a:c,w:13,h:1")); app.add_window(win); app.run(); Ok(()) }

ثم قم بتشغيل المشروع باستخدام الأمر cargo run. يجب أن ترى نافذة بعنوان Test والنص Hello World ! في المنتصف.

🧪 أمثلة

يأتي AppCUI-rs مع مجموعة من الأمثلة لمساعدتك على البدء. يمكنك العثور عليها في مجلد examples، بما في ذلك:

🛠️ مثال أكثر تعقيداً

مثال يقوم بإنشاء نافذة تحتوي على زر، عند الضغط عليه، يزيد عداداً.

rust use appcui::prelude::*;

// Create a window that handles button events and has a counter #[Window(events = ButtonEvents)] struct CounterWindow { counter: i32 }

impl CounterWindow { fn new() -> Self { let mut w = Self { // set up the window title and position base: window!("'Counter window',a:c,w:30,h:5"), // initial counter is 1 counter: 1 }; // add a single button with the caption "1" (like the counter) w.add(button!("'1',d:b,w:20")); w } } impl ButtonEvents for CounterWindow { // When the button is pressed, this function will be called // with the handle of the button that was pressed // Since we only have one button, we don't need to store its handle // in the struct, as we will receive the handle via the on_pressed method fn on_pressed(&mut self, handle: Handle