From 62000b7c87f7c1f9cd6990b3c5694476b0392253 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Erkan=20I=C5=9EIK?= Date: Fri, 10 Jul 2026 01:59:59 +0300 Subject: [PATCH] feat: slide images moved to slides/img/, direct path in TOML, slides_test binary - Moved 16 slide PNGs from assets/ to slides/img/ - Replaced [icons] mapping section with direct paths in icon field - Added slides_test standalone binary for testing slideshows - Added default-run = "yali-rs" in Cargo.toml to fix cargo run ambiguity - Fixed edit dialog auto-resize and text field wrapping in partition.rs - Updated branding.rs to load external slides from slides/ directory - Removed [slides] section from branding.toml files - Revamped CopyFilesJob with find-based progress tracking (rsync --out-format) - Fixed install progress bar visibility logic - Tweaked auto-install CLI output with sub-progress and current file - Switched language-icon.svg to white fills for dark theme - Minor locale fixes --- Cargo.toml | 9 + assets/icons/language-icon.svg | 12 +- branding.toml | 309 ------------- branding_en.toml | 298 ------------- branding_tr.toml | 303 ------------- locales/en.toml | 2 +- locales/tr.toml | 2 +- {assets => slides/img}/budgie.png | Bin {assets => slides/img}/cinnamon.png | Bin {assets => slides/img}/community.png | Bin {assets => slides/img}/file_manager.png | Bin {assets => slides/img}/gnome.png | Bin {assets => slides/img}/kde.png | Bin {assets => slides/img}/lumina.png | Bin {assets => slides/img}/lxde.png | Bin {assets => slides/img}/lxqt.png | Bin {assets => slides/img}/mate.png | Bin .../img}/pisi-software-center.png | Bin {assets => slides/img}/pisi_speed.png | Bin {assets => slides/img}/pisilinux-logo.png | Bin {assets => slides/img}/securety.png | Bin {assets => slides/img}/xfce.png | Bin {assets => slides/img}/xfce_settings.png | Bin slides/slides_en.toml | 243 +++++++++++ slides/slides_tr.toml | 240 +++++++++++ src/bin/slides_test.rs | 83 ++++ src/branding.rs | 73 +++- src/jobs/mod.rs | 139 +++--- src/lib.rs | 9 + src/main.rs | 10 +- src/steps/execution.rs | 71 +-- src/steps/partition.rs | 406 ++++++++++-------- src/ui/slideshow.rs | 11 +- 33 files changed, 979 insertions(+), 1241 deletions(-) rename {assets => slides/img}/budgie.png (100%) rename {assets => slides/img}/cinnamon.png (100%) rename {assets => slides/img}/community.png (100%) rename {assets => slides/img}/file_manager.png (100%) rename {assets => slides/img}/gnome.png (100%) rename {assets => slides/img}/kde.png (100%) rename {assets => slides/img}/lumina.png (100%) rename {assets => slides/img}/lxde.png (100%) rename {assets => slides/img}/lxqt.png (100%) rename {assets => slides/img}/mate.png (100%) rename {assets => slides/img}/pisi-software-center.png (100%) rename {assets => slides/img}/pisi_speed.png (100%) rename {assets => slides/img}/pisilinux-logo.png (100%) rename {assets => slides/img}/securety.png (100%) rename {assets => slides/img}/xfce.png (100%) rename {assets => slides/img}/xfce_settings.png (100%) create mode 100644 slides/slides_en.toml create mode 100644 slides/slides_tr.toml create mode 100644 src/bin/slides_test.rs create mode 100644 src/lib.rs diff --git a/Cargo.toml b/Cargo.toml index caa4aa7..d033ef0 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -2,6 +2,7 @@ name = "yali-rs" version = "4.0.0" edition = "2024" +default-run = "yali-rs" [dependencies] eframe = { version = "0.27", features = ["default", "wgpu"] } @@ -18,5 +19,13 @@ async-trait = "0.1" chrono = "0.4" xkbcommon = "0.9" +[[bin]] +name = "yali-rs" +path = "src/main.rs" + +[[bin]] +name = "slides_test" +path = "src/bin/slides_test.rs" + [patch.crates-io] # Yerel mudur veya comar-api kütüphaneleri buraya eklenebilir diff --git a/assets/icons/language-icon.svg b/assets/icons/language-icon.svg index 2fae488..0b0e12e 100644 --- a/assets/icons/language-icon.svg +++ b/assets/icons/language-icon.svg @@ -2,14 +2,14 @@ - - + - - - - + diff --git a/branding.toml b/branding.toml index 8181834..75533c6 100644 --- a/branding.toml +++ b/branding.toml @@ -22,315 +22,6 @@ pisi_logo_light = "assets/pisi-logo-light.png" # Kurulum penceresinin başlığı (pencere çubuğu) title = "PiSi Linux Kurulumu" -# ────────────────────────────────────────────────────────────────── -# [slides] – Kurulum sırasında gösterilen slaytlar -# ────────────────────────────────────────────────────────────────── -[slides] - -# Slayt geçiş süresi (saniye) -interval_secs = 6 - - -# ── Slayt ikonları → görsel dosya yolu eşlemesi ────────────────── -# Geliştirici notu: Yeni ikon eklemek için sadece buraya satır ekle. -[slides.icons] -pisilogo_dark = "assets/pisi-logo-dark.png" -pisilogo_light = "assets/pisi-logo-light.png" -pisi = "assets/pisi-software-center.png" -community = "assets/community.png" -pisi_speed = "assets/pisi_speed.png" -securety = "assets/securety.png" -customization = "assets/customization.png" - -budgie = "assets/budgie.png" -budgie_applets = "assets/budgie_applets.png" -budgie_raven = "assets/budgie_raven.png" -budgie_gtk_theme = "assets/budgie_gtk_theme.png" - -cinnamon = "assets/cinnamon.png" -cinnamon_panel = "assets/cinnamon_panel.png" -cinnamon_settings = "assets/cinnamon_settings.png" -cinnamon_desklets = "assets/cinnamon_desklets.png" - -gnome = "assets/gnome.png" -gnome_search = "assets/gnome_search.png" -gnome_extensions = "assets/gnome_extensions.png" - -kde = "assets/kde.png" -kde_connect = "assets/kde_connect.png" -discover = "assets/discover.png" -file_manager = "assets/file_manager.png" - -lxde = "assets/lxde.png" -lxqt = "assets/lxqt.png" -lumina = "assets/lumina.png" - -mate = "assets/mate.png" -mate_settings = "assets/mate_settings.png" - -xfce = "assets/xfce.png" -xfce_settings = "assets/xfce_settings.png" -xfce_panel = "assets/xfce_panel.png" - - -# ══════════════════════════════════════════════════════════════════ -# [[slides.items]] – Slayt içerikleri -# ══════════════════════════════════════════════════════════════════ -# -# Her [[slides.items]] bloğu bir slaytı tanımlar. -# -# Alanlar: -# icon = Görsel için yukarıdaki [slides.icons] anahtarı -# title = Slayt başlığı -# description = Slayt açıklama metni -# desktop = (isteğe bağlı) Yalnızca belirli masaüstünde göster. -# Boş bırakılırsa tüm masaüstlerinde gösterilir. -# Değerler: "xfce", "kde", "gnome", "mate", "budgie", -# "cinnamon", "lxde", "lxqt", "lumina" -# -# Geliştirici notu: -# Yeni bir slayt eklemek veya metni değiştirmek için yalnızca -# buraya [[slides.items]] bloğu ekleyin / düzenleyin. -# Rust koduna dokunmanıza gerek yoktur. -# ────────────────────────────────────────────────────────────────── - -# ── Tüm masaüstlerinde gösterilen ortak slaytlar ────────────────── - -[[slides.items]] -icon = "pisilogo" -title = "Pisi GNU/Linux'a Hoş Geldiniz" -description = "Pisi; hız, kararlılık ve kullanım kolaylığını bir araya getiren Türkçe destekli bir GNU/Linux dağıtımıdır." - -[[slides.items]] -icon = "pisi" -title = "PISI Paket Yöneticisi" -description = "Binlerce pakete tek komutla erişin. `pisi install ` ile ihtiyacınız olan her şeyi kolayca kurabilirsiniz." - -[[slides.items]] -icon = "community" -title = "Topluluk Desteği" -description = "forum.pisilinux.org adresindeki aktif topluluğumuz sorularınızı yanıtlamak için hazır. Wiki sayfalarımız da her an erişilebilir." - -[[slides.items]] -icon = "pisi_speed" -title = "Hız ve Performans" -description = "Optimize edilmiş çekirdek ve başlangıç servisleri sayesinde PisiLinux saniyeler içinde açılır ve minimum kaynak kullanır." - -[[slides.items]] -icon = "securety" -title = "Güvenlik Önce Gelir" -description = "Düzenli güvenlik güncellemeleri, AppArmor profilleri ve güvenli varsayılan ayarlarla sisteminizi koruyun." - -[[slides.items]] -icon = "customization" -title = "Özelleştirme" -description = "Masaüstü ortamından tema renklerine, panel düzeninden klavye kısayollarına kadar her şeyi zevkinize göre ayarlayın." - -# ── XFCE ────────────────────────────────────────────────────────── - -[[slides.items]] -desktop = "xfce" -icon = "xfce" -title = "PisiLinux XFCE" -description = "Hafif, hızlı ve kullanıcı dostu XFCE masaüstü ortamı. Kaynak tüketimi düşük, performansı yüksektir." - -[[slides.items]] -desktop = "xfce" -icon = "xfce_panel" -title = "XFCE Panel" -description = "Geleneksel panel düzeni ile görev çubuğu, uygulama menüsü ve sistem tepsisi her zaman elinizin altında." - -[[slides.items]] -desktop = "xfce" -icon = "file_manager" -title = "Thunar Dosya Yöneticisi" -description = "Hızlı ve hafif Thunar ile dosya işlemlerinizi kolayca yapın. Ağaç görünümü, sekmeli gezinme ve özelleştirilebilir özellikler sunar." - -[[slides.items]] -desktop = "xfce" -icon = "xfce_settings" -title = "Ayarlar Merkezi" -description = "Klasik uygulama menüsüne modern bir alternatif. Whisker Menu ile uygulamaları kolayca bulun, favorilerinizi düzenleyin." - -# ── KDE Plasma ──────────────────────────────────────────────────── - -[[slides.items]] -desktop = "kde" -icon = "kde" -title = "PisiLinux KDE Plasma" -description = "Modern, özelleştirilebilir ve güçlü KDE Plasma masaüstü ortamıyla tanışın. Her şey elinizin altında." - -[[slides.items]] -desktop = "kde" -icon = "file_manager" -title = "Dolphin Dosya Yöneticisi" -description = "Sekmeli gezinme, ikili panel ve güçlü arama özelliğiyle Dolphin dosyalarınızı yönetmeyi kolaylaştırır." - -[[slides.items]] -desktop = "kde" -icon = "kde_connect" -title = "KDE Bağlan" -description = "Telefonunuzu bilgisayarınıza bağlayın. Bildirimler, dosya aktarımı ve klipboard paylaşımı KDE Connect ile mümkün." - -[[slides.items]] -desktop = "kde" -icon = "discover" -title = "Discover Yazılım Merkezi" -description = "Discover ile uygulamaları görsel arayüzden kolayca bulun, kurun ve güncelleyin." - -# ── GNOME ───────────────────────────────────────────────────────── - -[[slides.items]] -desktop = "gnome" -icon = "gnome" -title = "PisiLinux GNOME" -description = "Sade ve odaklı GNOME masaüstü ortamı ile dikkat dağıtıcı unsurları azaltın, işinize konsantre olun." - -[[slides.items]] -desktop = "gnome" -icon = "gnome_search" -title = "GNOME Arama" -description = "Super tuşuna basıp yazmaya başlayın. Uygulama, dosya ve ayarlara anında ulaşın." - -[[slides.items]] -desktop = "gnome" -icon = "gnome_extensions" -title = "GNOME Eklentileri" -description = "extensions.gnome.org adresinden yüzlerce eklentiyle masaüstünüzü ihtiyaçlarınıza göre şekillendirin." - -# ── MATE ────────────────────────────────────────────────────────── - -[[slides.items]] -desktop = "mate" -icon = "mate" -title = "PisiLinux MATE" -description = "Geleneksel masaüstü düzenini sevenler için MATE. GTK+ 3 ile geliştirilmiş, modern ve akıcı bir deneyim sunar." - -[[slides.items]] -desktop = "mate" -icon = "file_manager" -title = "Caja Dosya Yöneticisi" -description = "MATE'in güçlü dosya yöneticisi Caja ile dosya işlemlerinizi kolayca yapın. Çift panel, sekmeli gezinme ve geniş özellikler sunar." - -[[slides.items]] -desktop = "mate" -icon = "mate_settings" -title = "MATE Ayarları" -description = "Görünüm, ekran, klavye ve daha fazlası için kapsamlı ayarlarla MATE masaüstünüzü özelleştirin." - -[[slides.items]] -desktop = "mate" -icon = "customization" -title = "Zengin Uygulama Paketi" -description = "MATE; metin editöründen görüntü görüntüleme yazılımına kadar geniş, iyi entegre edilmiş klasik uygulamalar sunar." - -# ── Budgie ──────────────────────────────────────────────────────── - -[[slides.items]] -desktop = "budgie" -icon = "budgie" -title = "PisiLinux Budgie" -description = "Modern, sade ve şık Budgie masaüstü. GNOME altyapısı üzerine inşa edilmiş, kullanıcı dostudur." - -[[slides.items]] -desktop = "budgie" -icon = "budgie_applets" -title = "Budgie Desktop Applets" -description = "Budgie'nin panel appletleri sayesinde hava durumu, sistem izleyici, takvim gibi araçları kolayca ekleyin." - -[[slides.items]] -desktop = "budgie" -icon = "budgie_raven" -title = "Raven Bildirim Merkezi" -description = "Raven panelinden ses seviyesi, medya kontrolleri, bildirimler ve hızlı ayarlara erişin." - -[[slides.items]] -desktop = "budgie" -icon = "budgie_gtk_theme" -title = "GTK Tema Desteği" -description = "Budgie, GTK temalarını ve GNOME uygulamalarını sorunsuz çalıştırır, görsel bütünlük sağlar." - -# ── Cinnamon ────────────────────────────────────────────────────── - -[[slides.items]] -desktop = "cinnamon" -icon = "cinnamon" -title = "PisiLinux Cinnamon" -description = "Geleneksel masaüstü deneyimini modern özelliklerle birleştiren Cinnamon, güçlü ve esnek bir ortam sunar." - -[[slides.items]] -desktop = "cinnamon" -icon = "cinnamon_panel" -title = "Cinnamon Paneli" -description = "Panelinizi applet'ler, başlatıcılar ve sistem göstergeleriyle özelleştirin; klasik ama güçlü bir masaüstü deneyimi yaşayın." - -[[slides.items]] -desktop = "cinnamon" -icon = "cinnamon_settings" -title = "Ayarlar Yöneticisi" -description = "Cinnamon'un kapsamlı Ayarlar Yöneticisi aracılığıyla masaüstünüzün her yönünü özelleştirin." - -[[slides.items]] -desktop = "cinnamon" -icon = "cinnamon_desklets" -title = "Cinnamon Desklets" -description = "Masaüstü widget'ları ile notlar, saatler ve sistem bilgileri her zaman görünür kalsın." - -# ── LXQt ────────────────────────────────────────────────────────── - -[[slides.items]] -desktop = "lxqt" -icon = "lxqt" -title = "PisiLinux LXQt" -description = "Hafif, hızlı ve modern LXQt masaüstü ortamı. Kaynak tüketimi düşük, performansı yüksektir." - -[[slides.items]] -desktop = "lxqt" -icon = "file_manager" -title = "LXQt Panel" -description = "Geleneksel panel düzeni ile görev çubuğu, uygulama başlatıcı ve sistem tepsisi her zaman elinizin altında." - -[[slides.items]] -desktop = "lxqt" -icon = "file_manager" -title = "PCManFM-Qt Dosya Yöneticisi" -description = "Hafif ve hızlı PCManFM-Qt ile dosya işlemlerini kolayca yönetin. Sekmeli gezinme ve özelleştirilebilir arayüz sunar." - -# ── LXDE ────────────────────────────────────────────────────────── - -[[slides.items]] -desktop = "lxde" -icon = "lxde" -title = "PisiLinux LXDE" -description = "Efsanevi hafif masaüstü LXDE. Çok düşük kaynak tüketimi ve güvenilir yapısıyla tanınır." - -[[slides.items]] -desktop = "lxde" -icon = "lxde" -title = "Openbox Tabanlı" -description = "LXDE, Openbox pencere yöneticisini kullanır. İnce ayarlar ile akıcı bir deneyim sunar." - -[[slides.items]] -desktop = "lxde" -icon = "file_manager" -title = "PCManFM Dosya Yöneticisi" -description = "PCManFM, hızlı ve hafif yapısıyla dosya işlemlerinizi kolaylaştırır, ağaç görünümü ve sekme destekler." - -# ── Lumina ──────────────────────────────────────────────────────── - -[[slides.items]] -desktop = "lumina" -icon = "lumina" -title = "PisiLinux Lumina" -description = "Hafif ve bağımsız Lumina masa üstü. Qt tabanlı, BSD ve Linux sistemlerde düzgün çalışan minimal bir ortam." - -[[slides.items]] -desktop = "lumina" -icon = "customization" -title = "Tema Özelleştirme" -description = "Lumina'nın tema sistemiyle renk şemaları ve arayüz stilini kolayca özelleştirin." - - # ────────────────────────────────────────────────────────────────── # [theme] – Arayüz renk şeması (Hex) # ────────────────────────────────────────────────────────────────── diff --git a/branding_en.toml b/branding_en.toml index 8e3be1b..e7b5ba5 100644 --- a/branding_en.toml +++ b/branding_en.toml @@ -20,304 +20,6 @@ title = "YALI Installation Wizard" # Subtitle displayed in the left sidebar subtitle = "YALI" -# ────────────────────────────────────────────────────────────────── -# [slides] – Slides shown during installation -# ────────────────────────────────────────────────────────────────── -[slides] - -# Slide transition duration (seconds) -interval_secs = 6 - - -# ── Slide Icons → File Path Mappings ───────────────────────────── -[slides.icons] -pisilogo = "assets/pisilinux-logo.png" -pisi = "assets/pisi-software-center.png" -community = "assets/community.png" -pisi_speed = "assets/pisi_speed.png" -securety = "assets/securety.png" -customization = "assets/customization.png" - -# Masaüstü İkonları -budgie = "assets/budgie.png" -budgie_applets = "assets/budgie_applets.png" -budgie_raven = "assets/budgie_raven.png" -budgie_gtk_theme = "assets/budgie_gtk_theme.png" - -cinnamon = "assets/cinnamon.png" -cinnamon_panel = "assets/cinnamon_panel.png" -cinnamon_settings = "assets/cinnamon_settings.png" -cinnamon_desklets = "assets/cinnamon_desklets.png" - -gnome = "assets/gnome.png" -gnome_search = "assets/gnome_search.png" -gnome_extensions = "assets/gnome_extensions.png" - -kde = "assets/kde.png" -file_manager = "assets/file_manager.png" -kde_connect = "assets/kde_connect.png" -discover = "assets/discover.png" - -lxde = "assets/lxde.png" -lxde_openbox = "assets/lxde_openbox.png" -lxde_lxpanel = "assets/lxde_lxpanel.png" - -lxqt = "assets/lxqt.png" -lxqt_panel = "assets/lxqt_panel.png" - -lumina = "assets/lumina.png" -lumina_applications = "assets/lumina_applications.png" -lumina_theme = "assets/lumina_theme.png" -lumina_panel = "assets/lumina_panel.png" - -mate = "assets/mate.png" -mate_settings = "assets/mate_settings.png" -mate_applications = "assets/mate_applications.png" - -xfce = "assets/xfce.png" -xfce_panel = "assets/xfce_panel.png" -xfce_settings = "assets/xfce_settings.png" - - -# ── Common Slides ──────────────────────────────────────────────── -[[slides.items]] -icon = "pisilogo" -title = "Welcome to Pisi GNU/Linux" -description = "Pisi is a Turkish-supported GNU/Linux distribution that combines speed, stability, and ease of use." - -[[slides.items]] -icon = "pisi" -title = "PISI Package Manager" -description = "Access thousands of packages with a single command. Install anything you need easily with `pisi install `." - -[[slides.items]] -icon = "community" -title = "Community Support" -description = "Our active community at forum.pisilinux.org is ready to answer your questions. Our wiki pages are always accessible." - -[[slides.items]] -icon = "pisi_speed" -title = "Speed & Performance" -description = "Thanks to an optimized kernel and startup services, PisiLinux boots in seconds and uses minimal resources." - -[[slides.items]] -icon = "securety" -title = "Security First" -description = "Keep your system secure with regular security updates, AppArmor profiles, and secure default settings." - -[[slides.items]] -icon = "customization" -title = "Customization" -description = "Tailor everything to your taste — from the desktop environment and theme colors to panel layout and keyboard shortcuts." - -# ── Budgie ──────────────────────────────────────────────────────── -[[slides.items]] -desktop = "budgie" -icon = "budgie" -title = "PisiLinux Budgie" -description = "A modern, clean, and elegant Budgie desktop. Built on the GNOME stack and user-friendly." - -[[slides.items]] -desktop = "budgie" -icon = "budgie_applets" -title = "Budgie Desktop Applets" -description = "Easily add tools like weather, system monitor, and calendar via Budgie's panel applets." - -[[slides.items]] -desktop = "budgie" -icon = "budgie_raven" -title = "Raven Notification Center" -description = "Access volume, media controls, notifications, and quick settings from the Raven panel." - -[[slides.items]] -desktop = "budgie" -icon = "budgie_gtk_theme" -title = "GTK Theme Support" -description = "Budgie runs GTK themes and GNOME applications seamlessly, ensuring visual consistency." - -# ── Cinnamon ────────────────────────────────────────────────────── -[[slides.items]] -desktop = "cinnamon" -icon = "cinnamon" -title = "PisiLinux Cinnamon" -description = "Cinnamon combines the traditional desktop experience with modern features, offering a powerful and flexible environment." - -[[slides.items]] -desktop = "cinnamon" -icon = "cinnamon_panel" -title = "Cinnamon Panel" -description = "Customize your panel with applets, launchers, and system indicators for a classic yet powerful desktop." - -[[slides.items]] -desktop = "cinnamon" -icon = "cinnamon_settings" -title = "Settings Manager" -description = "Fine-tune every aspect of your Cinnamon desktop through the comprehensive Settings Manager." - -[[slides.items]] -desktop = "cinnamon" -icon = "cinnamon_desklets" -title = "Cinnamon Desklets" -description = "Keep notes, clocks, and system info always visible on your desktop with Cinnamon Desklets." - -# ── GNOME ───────────────────────────────────────────────────────── -[[slides.items]] -desktop = "gnome" -icon = "gnome" -title = "PisiLinux GNOME" -description = "Reduce distractions and focus on your work with the clean and focused GNOME desktop environment." - -[[slides.items]] -desktop = "gnome" -icon = "gnome_search" -title = "GNOME Search" -description = "Press the Super key and start typing. Instantly reach applications, files, and settings." - -[[slides.items]] -desktop = "gnome" -icon = "gnome_extensions" -title = "GNOME Extensions" -description = "Shape your desktop to your needs with hundreds of extensions from extensions.gnome.org." - -# ── KDE ─────────────────────────────────────────────────────────── -[[slides.items]] -desktop = "kde" -icon = "kde" -title = "PisiLinux KDE Plasma" -description = "Meet the modern, customizable, and powerful KDE Plasma desktop. Everything is at your fingertips." - -[[slides.items]] -desktop = "kde" -icon = "file_manager" -title = "Dolphin File Manager" -description = "Dolphin makes managing your files easy with tabbed browsing, dual-panel view, and powerful search." - -[[slides.items]] -desktop = "kde" -icon = "kde_connect" -title = "KDE Connect" -description = "Connect your phone to your computer. Notifications, file transfer, and clipboard sharing — all with KDE Connect." - -[[slides.items]] -desktop = "kde" -icon = "discover" -title = "Discover Software Center" -description = "Easily find, install, and update applications from the visual interface with Discover." - -# ── LXQt ────────────────────────────────────────────────────────── -[[slides.items]] -desktop = "lxqt" -icon = "lxqt" -title = "PisiLinux LXQt" -description = "A lightweight, fast, and modern LXQt desktop environment. Low resource consumption, high performance." - -[[slides.items]] -desktop = "lxqt" -icon = "lxqt_panel" -title = "LXQt Panel" -description = "The traditional panel layout puts the taskbar, application launcher, and system tray always within reach." - -[[slides.items]] -desktop = "lxqt" -icon = "file_manager" -title = "PCManFM-Qt File Manager" -description = "Manage files effortlessly with the lightweight and fast PCManFM-Qt. Tabbed navigation and a customizable interface." - -# ── LXDE ────────────────────────────────────────────────────────── -[[slides.items]] -desktop = "lxde" -icon = "lxde" -title = "PisiLinux LXDE" -description = "The legendary lightweight LXDE desktop. Known for extremely low resource usage and a reliable build." - -[[slides.items]] -desktop = "lxde" -icon = "lxde_openbox" -title = "Openbox-Based" -description = "LXDE uses the Openbox window manager. Fine-tune it for a smooth and responsive experience." - -[[slides.items]] -desktop = "lxde" -icon = "file_manager" -title = "PCManFM File Manager" -description = "PCManFM speeds up your file operations with its fast and lightweight build, supporting tree view and tabs." - -# ── Lumina ──────────────────────────────────────────────────────── -[[slides.items]] -desktop = "lumina" -icon = "lumina" -title = "PisiLinux Lumina" -description = "A lightweight and independent Lumina desktop. Qt-based, designed to run cleanly on BSD and Linux systems." - -[[slides.items]] -desktop = "lumina" -icon = "lumina_applications" -title = "Application Support" -description = "Lumina works well with core utilities and many popular Qt apps, providing a practical everyday experience." - -[[slides.items]] -desktop = "lumina" -icon = "lumina_theme" -title = "Theme Customization" -description = "Easily customize color schemes and interface styles with Lumina's flexible theme system." - -[[slides.items]] -desktop = "lumina" -icon = "lumina_panel" -title = "Lumina Panel" -description = "A clean panel with a taskbar, application launcher, and system tray keeps your desktop organized." - -# ── MATE ────────────────────────────────────────────────────────── -[[slides.items]] -desktop = "mate" -icon = "mate" -title = "PisiLinux MATE" -description = "MATE for those who love the traditional desktop layout. Developed with GTK+ 3 for a modern and smooth experience." - -[[slides.items]] -desktop = "mate" -icon = "file_manager" -title = "Caja File Manager" -description = "Manage your files easily with MATE's powerful Caja. Dual panel, tabbed navigation, and rich features." - -[[slides.items]] -desktop = "mate" -icon = "mate_settings" -title = "MATE Settings" -description = "Customize your MATE desktop with comprehensive settings for appearance, display, keyboard, and more." - -[[slides.items]] -desktop = "mate" -icon = "mate_applications" -title = "Rich Application Suite" -description = "MATE comes with a rich set of classic applications — from text editors to image viewers, all well-integrated." - -# ── XFCE ────────────────────────────────────────────────────────── -[[slides.items]] -desktop = "xfce" -icon = "xfce" -title = "PisiLinux XFCE" -description = "A lightweight, fast, and user-friendly XFCE desktop environment. Low resource consumption, high performance." - -[[slides.items]] -desktop = "xfce" -icon = "xfce_panel" -title = "XFCE Panel" -description = "The traditional panel layout puts the taskbar, application menu, and system tray always within reach." - -[[slides.items]] -desktop = "xfce" -icon = "file_manager" -title = "Thunar File Manager" -description = "Manage your files easily with the fast and lightweight Thunar. Tree view, tabbed navigation, and customizable features." - -[[slides.items]] -desktop = "xfce" -icon = "xfce_settings" -title = "Whisker Menu" -description = "A modern alternative to the classic application menu. Find apps easily and organize your favorites with Whisker Menu." - - # ────────────────────────────────────────────────────────────────── # [theme] – UI Style & Color Palette # ────────────────────────────────────────────────────────────────── diff --git a/branding_tr.toml b/branding_tr.toml index 0e2478e..a1d9c3d 100644 --- a/branding_tr.toml +++ b/branding_tr.toml @@ -30,309 +30,6 @@ subtitle = "YALI" # ────────────────────────────────────────────────────────────────── [slides] -# Slayt geçiş süresi (saniye) -interval_secs = 6 - - -# ── Slayt ikonları → görsel dosya yolu eşlemesi ────────────────── -# Geliştirici notu: Yeni ikon eklemek için sadece buraya satır ekle. -[slides.icons] -pisilogo = "assets/pisilinux-logo.png" -pisi = "assets/pisi-software-center.png" -community = "assets/community.png" -pisi_speed = "assets/pisi_speed.png" -securety = "assets/securety.png" -customization = "assets/customization.png" - -budgie = "assets/budgie.png" -budgie_applets = "assets/budgie_applets.png" -budgie_raven = "assets/budgie_raven.png" -budgie_gtk_theme = "assets/budgie_gtk_theme.png" - -cinnamon = "assets/cinnamon.png" -cinnamon_panel = "assets/cinnamon_panel.png" -cinnamon_settings = "assets/cinnamon_settings.png" -cinnamon_desklets = "assets/cinnamon_desklets.png" - -gnome = "assets/gnome.png" -gnome_search = "assets/gnome_search.png" -gnome_extensions = "assets/gnome_extensions.png" - -kde = "assets/kde.png" -kde_connect = "assets/kde_connect.png" -discover = "assets/discover.png" -file_manager = "assets/file_manager.png" - -lxde = "assets/lxde.png" -lxqt = "assets/lxqt.png" -lumina = "assets/lumina.png" - -mate = "assets/mate.png" -mate_settings = "assets/mate_settings.png" - -xfce = "assets/xfce.png" -xfce_settings = "assets/xfce_settings.png" -xfce_panel = "assets/xfce_panel.png" - - -# ══════════════════════════════════════════════════════════════════ -# [[slides.items]] – Slayt içerikleri -# ══════════════════════════════════════════════════════════════════ -# -# Her [[slides.items]] bloğu bir slaytı tanımlar. -# -# Alanlar: -# icon = Görsel için yukarıdaki [slides.icons] anahtarı -# title = Slayt başlığı -# description = Slayt açıklama metni -# desktop = (isteğe bağlı) Yalnızca belirli masaüstünde göster. -# Boş bırakılırsa tüm masaüstlerinde gösterilir. -# Değerler: "xfce", "kde", "gnome", "mate", "budgie", -# "cinnamon", "lxde", "lxqt", "lumina" -# -# Geliştirici notu: -# Yeni bir slayt eklemek veya metni değiştirmek için yalnızca -# buraya [[slides.items]] bloğu ekleyin / düzenleyin. -# Rust koduna dokunmanıza gerek yoktur. -# ────────────────────────────────────────────────────────────────── - -# ── Tüm masaüstlerinde gösterilen ortak slaytlar ────────────────── - -[[slides.items]] -icon = "pisilogo" -title = "Pisi GNU/Linux'a Hoş Geldiniz" -description = "Pisi; hız, kararlılık ve kullanım kolaylığını bir araya getiren Türkçe destekli bir GNU/Linux dağıtımıdır." - -[[slides.items]] -icon = "pisi" -title = "PISI Paket Yöneticisi" -description = "Binlerce pakete tek komutla erişin. `pisi install ` ile ihtiyacınız olan her şeyi kolayca kurabilirsiniz." - -[[slides.items]] -icon = "community" -title = "Topluluk Desteği" -description = "forum.pisilinux.org adresindeki aktif topluluğumuz sorularınızı yanıtlamak için hazır. Wiki sayfalarımız da her an erişilebilir." - -[[slides.items]] -icon = "pisi_speed" -title = "Hız ve Performans" -description = "Optimize edilmiş çekirdek ve başlangıç servisleri sayesinde PisiLinux saniyeler içinde açılır ve minimum kaynak kullanır." - -[[slides.items]] -icon = "securety" -title = "Güvenlik Önce Gelir" -description = "Düzenli güvenlik güncellemeleri, AppArmor profilleri ve güvenli varsayılan ayarlarla sisteminizi koruyun." - -[[slides.items]] -icon = "customization" -title = "Özelleştirme" -description = "Masaüstü ortamından tema renklerine, panel düzeninden klavye kısayollarına kadar her şeyi zevkinize göre ayarlayın." - -# ── XFCE ────────────────────────────────────────────────────────── - -[[slides.items]] -desktop = "xfce" -icon = "xfce" -title = "PisiLinux XFCE" -description = "Hafif, hızlı ve kullanıcı dostu XFCE masaüstü ortamı. Kaynak tüketimi düşük, performansı yüksektir." - -[[slides.items]] -desktop = "xfce" -icon = "xfce_panel" -title = "XFCE Panel" -description = "Geleneksel panel düzeni ile görev çubuğu, uygulama menüsü ve sistem tepsisi her zaman elinizin altında." - -[[slides.items]] -desktop = "xfce" -icon = "file_manager" -title = "Thunar Dosya Yöneticisi" -description = "Hızlı ve hafif Thunar ile dosya işlemlerinizi kolayca yapın. Ağaç görünümü, sekmeli gezinme ve özelleştirilebilir özellikler sunar." - -[[slides.items]] -desktop = "xfce" -icon = "xfce_settings" -title = "Ayarlar Merkezi" -description = "Klasik uygulama menüsüne modern bir alternatif. Whisker Menu ile uygulamaları kolayca bulun, favorilerinizi düzenleyin." - -# ── KDE Plasma ──────────────────────────────────────────────────── - -[[slides.items]] -desktop = "kde" -icon = "kde" -title = "PisiLinux KDE Plasma" -description = "Modern, özelleştirilebilir ve güçlü KDE Plasma masaüstü ortamıyla tanışın. Her şey elinizin altında." - -[[slides.items]] -desktop = "kde" -icon = "file_manager" -title = "Dolphin Dosya Yöneticisi" -description = "Sekmeli gezinme, ikili panel ve güçlü arama özelliğiyle Dolphin dosyalarınızı yönetmeyi kolaylaştırır." - -[[slides.items]] -desktop = "kde" -icon = "kde_connect" -title = "KDE Bağlan" -description = "Telefonunuzu bilgisayarınıza bağlayın. Bildirimler, dosya aktarımı ve klipboard paylaşımı KDE Connect ile mümkün." - -[[slides.items]] -desktop = "kde" -icon = "discover" -title = "Discover Yazılım Merkezi" -description = "Discover ile uygulamaları görsel arayüzden kolayca bulun, kurun ve güncelleyin." - -# ── GNOME ───────────────────────────────────────────────────────── - -[[slides.items]] -desktop = "gnome" -icon = "gnome" -title = "PisiLinux GNOME" -description = "Sade ve odaklı GNOME masaüstü ortamı ile dikkat dağıtıcı unsurları azaltın, işinize konsantre olun." - -[[slides.items]] -desktop = "gnome" -icon = "gnome_search" -title = "GNOME Arama" -description = "Super tuşuna basıp yazmaya başlayın. Uygulama, dosya ve ayarlara anında ulaşın." - -[[slides.items]] -desktop = "gnome" -icon = "gnome_extensions" -title = "GNOME Eklentileri" -description = "extensions.gnome.org adresinden yüzlerce eklentiyle masaüstünüzü ihtiyaçlarınıza göre şekillendirin." - -# ── MATE ────────────────────────────────────────────────────────── - -[[slides.items]] -desktop = "mate" -icon = "mate" -title = "PisiLinux MATE" -description = "Geleneksel masaüstü düzenini sevenler için MATE. GTK+ 3 ile geliştirilmiş, modern ve akıcı bir deneyim sunar." - -[[slides.items]] -desktop = "mate" -icon = "file_manager" -title = "Caja Dosya Yöneticisi" -description = "MATE'in güçlü dosya yöneticisi Caja ile dosya işlemlerinizi kolayca yapın. Çift panel, sekmeli gezinme ve geniş özellikler sunar." - -[[slides.items]] -desktop = "mate" -icon = "mate_settings" -title = "MATE Ayarları" -description = "Görünüm, ekran, klavye ve daha fazlası için kapsamlı ayarlarla MATE masaüstünüzü özelleştirin." - -[[slides.items]] -desktop = "mate" -icon = "customization" -title = "Zengin Uygulama Paketi" -description = "MATE; metin editöründen görüntü görüntüleme yazılımına kadar geniş, iyi entegre edilmiş klasik uygulamalar sunar." - -# ── Budgie ──────────────────────────────────────────────────────── - -[[slides.items]] -desktop = "budgie" -icon = "budgie" -title = "PisiLinux Budgie" -description = "Modern, sade ve şık Budgie masaüstü. GNOME altyapısı üzerine inşa edilmiş, kullanıcı dostudur." - -[[slides.items]] -desktop = "budgie" -icon = "budgie_applets" -title = "Budgie Desktop Applets" -description = "Budgie'nin panel appletleri sayesinde hava durumu, sistem izleyici, takvim gibi araçları kolayca ekleyin." - -[[slides.items]] -desktop = "budgie" -icon = "budgie_raven" -title = "Raven Bildirim Merkezi" -description = "Raven panelinden ses seviyesi, medya kontrolleri, bildirimler ve hızlı ayarlara erişin." - -[[slides.items]] -desktop = "budgie" -icon = "budgie_gtk_theme" -title = "GTK Tema Desteği" -description = "Budgie, GTK temalarını ve GNOME uygulamalarını sorunsuz çalıştırır, görsel bütünlük sağlar." - -# ── Cinnamon ────────────────────────────────────────────────────── - -[[slides.items]] -desktop = "cinnamon" -icon = "cinnamon" -title = "PisiLinux Cinnamon" -description = "Geleneksel masaüstü deneyimini modern özelliklerle birleştiren Cinnamon, güçlü ve esnek bir ortam sunar." - -[[slides.items]] -desktop = "cinnamon" -icon = "cinnamon_panel" -title = "Cinnamon Paneli" -description = "Panelinizi applet'ler, başlatıcılar ve sistem göstergeleriyle özelleştirin; klasik ama güçlü bir masaüstü deneyimi yaşayın." - -[[slides.items]] -desktop = "cinnamon" -icon = "cinnamon_settings" -title = "Ayarlar Yöneticisi" -description = "Cinnamon'un kapsamlı Ayarlar Yöneticisi aracılığıyla masaüstünüzün her yönünü özelleştirin." - -[[slides.items]] -desktop = "cinnamon" -icon = "cinnamon_desklets" -title = "Cinnamon Desklets" -description = "Masaüstü widget'ları ile notlar, saatler ve sistem bilgileri her zaman görünür kalsın." - -# ── LXQt ────────────────────────────────────────────────────────── - -[[slides.items]] -desktop = "lxqt" -icon = "lxqt" -title = "PisiLinux LXQt" -description = "Hafif, hızlı ve modern LXQt masaüstü ortamı. Kaynak tüketimi düşük, performansı yüksektir." - -[[slides.items]] -desktop = "lxqt" -icon = "file_manager" -title = "LXQt Panel" -description = "Geleneksel panel düzeni ile görev çubuğu, uygulama başlatıcı ve sistem tepsisi her zaman elinizin altında." - -[[slides.items]] -desktop = "lxqt" -icon = "file_manager" -title = "PCManFM-Qt Dosya Yöneticisi" -description = "Hafif ve hızlı PCManFM-Qt ile dosya işlemlerini kolayca yönetin. Sekmeli gezinme ve özelleştirilebilir arayüz sunar." - -# ── LXDE ────────────────────────────────────────────────────────── - -[[slides.items]] -desktop = "lxde" -icon = "lxde" -title = "PisiLinux LXDE" -description = "Efsanevi hafif masaüstü LXDE. Çok düşük kaynak tüketimi ve güvenilir yapısıyla tanınır." - -[[slides.items]] -desktop = "lxde" -icon = "lxde" -title = "Openbox Tabanlı" -description = "LXDE, Openbox pencere yöneticisini kullanır. İnce ayarlar ile akıcı bir deneyim sunar." - -[[slides.items]] -desktop = "lxde" -icon = "file_manager" -title = "PCManFM Dosya Yöneticisi" -description = "PCManFM, hızlı ve hafif yapısıyla dosya işlemlerinizi kolaylaştırır, ağaç görünümü ve sekme destekler." - -# ── Lumina ──────────────────────────────────────────────────────── - -[[slides.items]] -desktop = "lumina" -icon = "lumina" -title = "PisiLinux Lumina" -description = "Hafif ve bağımsız Lumina masa üstü. Qt tabanlı, BSD ve Linux sistemlerde düzgün çalışan minimal bir ortam." - -[[slides.items]] -desktop = "lumina" -icon = "customization" -title = "Tema Özelleştirme" -description = "Lumina'nın tema sistemiyle renk şemaları ve arayüz stilini kolayca özelleştirin." - - # ────────────────────────────────────────────────────────────────── # [theme] – Arayüz renk şeması (Hex) # ────────────────────────────────────────────────────────────────── diff --git a/locales/en.toml b/locales/en.toml index bb05cd3..49e88f8 100644 --- a/locales/en.toml +++ b/locales/en.toml @@ -98,7 +98,7 @@ finish_title = "Installation Complete" # ── Execution (extra) ───────────────────────────────────── install_failed = "Installation failed" install_done = "Installation complete! Click Next to continue." -install_current_file = "Current file" +install_current_file = "Copy file" retry_install = "Retry" finish_next = "Finish →" diff --git a/locales/tr.toml b/locales/tr.toml index c4e97b3..1a35f20 100644 --- a/locales/tr.toml +++ b/locales/tr.toml @@ -97,7 +97,7 @@ finish_title = "Kurulum Tamamlandı" # ── Execution (ek) ──────────────────────────────────────── install_failed = "Kurulum başarısız" install_done = "Kurulum tamamlandı! Devam etmek için İleri'ye basın." -install_current_file = "İşlemdeki dosya" +install_current_file = "Kopyalanan dosya" retry_install = "Yeniden Dene" finish_next = "Tamamlandı →" diff --git a/assets/budgie.png b/slides/img/budgie.png similarity index 100% rename from assets/budgie.png rename to slides/img/budgie.png diff --git a/assets/cinnamon.png b/slides/img/cinnamon.png similarity index 100% rename from assets/cinnamon.png rename to slides/img/cinnamon.png diff --git a/assets/community.png b/slides/img/community.png similarity index 100% rename from assets/community.png rename to slides/img/community.png diff --git a/assets/file_manager.png b/slides/img/file_manager.png similarity index 100% rename from assets/file_manager.png rename to slides/img/file_manager.png diff --git a/assets/gnome.png b/slides/img/gnome.png similarity index 100% rename from assets/gnome.png rename to slides/img/gnome.png diff --git a/assets/kde.png b/slides/img/kde.png similarity index 100% rename from assets/kde.png rename to slides/img/kde.png diff --git a/assets/lumina.png b/slides/img/lumina.png similarity index 100% rename from assets/lumina.png rename to slides/img/lumina.png diff --git a/assets/lxde.png b/slides/img/lxde.png similarity index 100% rename from assets/lxde.png rename to slides/img/lxde.png diff --git a/assets/lxqt.png b/slides/img/lxqt.png similarity index 100% rename from assets/lxqt.png rename to slides/img/lxqt.png diff --git a/assets/mate.png b/slides/img/mate.png similarity index 100% rename from assets/mate.png rename to slides/img/mate.png diff --git a/assets/pisi-software-center.png b/slides/img/pisi-software-center.png similarity index 100% rename from assets/pisi-software-center.png rename to slides/img/pisi-software-center.png diff --git a/assets/pisi_speed.png b/slides/img/pisi_speed.png similarity index 100% rename from assets/pisi_speed.png rename to slides/img/pisi_speed.png diff --git a/assets/pisilinux-logo.png b/slides/img/pisilinux-logo.png similarity index 100% rename from assets/pisilinux-logo.png rename to slides/img/pisilinux-logo.png diff --git a/assets/securety.png b/slides/img/securety.png similarity index 100% rename from assets/securety.png rename to slides/img/securety.png diff --git a/assets/xfce.png b/slides/img/xfce.png similarity index 100% rename from assets/xfce.png rename to slides/img/xfce.png diff --git a/assets/xfce_settings.png b/slides/img/xfce_settings.png similarity index 100% rename from assets/xfce_settings.png rename to slides/img/xfce_settings.png diff --git a/slides/slides_en.toml b/slides/slides_en.toml new file mode 100644 index 0000000..f083747 --- /dev/null +++ b/slides/slides_en.toml @@ -0,0 +1,243 @@ +# ╔══════════════════════════════════════════════════════════════════╗ +# ║ Yali-RS — Slide Content (English) ║ +# ╚══════════════════════════════════════════════════════════════════╝ + +# Slide transition duration (seconds) +interval_secs = 6 + +[[items]] +icon = "slides/img/pisilinux-logo.png" +title = "Welcome to Pisi GNU/Linux" +description = "Pisi is a Turkish-supported GNU/Linux distribution that combines speed, stability, and ease of use." + +[[items]] +icon = "slides/img/pisi-software-center.png" +title = "PISI Package Manager" +description = "Access thousands of packages with a single command. Install anything you need easily with `pisi install `." + +[[items]] +icon = "slides/img/community.png" +title = "Community Support" +description = "Our active community at forum.pisilinux.org is ready to answer your questions. Our wiki pages are always accessible." + +[[items]] +icon = "slides/img/pisi_speed.png" +title = "Speed & Performance" +description = "Thanks to an optimized kernel and startup services, PisiLinux boots in seconds and uses minimal resources." + +[[items]] +icon = "slides/img/securety.png" +title = "Security First" +description = "Keep your system secure with regular security updates, AppArmor profiles, and secure default settings." + +[[items]] +icon = "slides/img/customization.png" +title = "Customization" +description = "Tailor everything to your taste — from the desktop environment and theme colors to panel layout and keyboard shortcuts." + +# ── Budgie ──────────────────────────────────────────────────────── +[[items]] +desktop = "budgie" +icon = "slides/img/budgie.png" +title = "PisiLinux Budgie" +description = "A modern, clean, and elegant Budgie desktop. Built on the GNOME stack and user-friendly." + +[[items]] +desktop = "budgie" +icon = "slides/img/budgie_applets.png" +title = "Budgie Desktop Applets" +description = "Easily add tools like weather, system monitor, and calendar via Budgie's panel applets." + +[[items]] +desktop = "budgie" +icon = "slides/img/budgie_raven.png" +title = "Raven Notification Center" +description = "Access volume, media controls, notifications, and quick settings from the Raven panel." + +[[items]] +desktop = "budgie" +icon = "slides/img/budgie_gtk_theme.png" +title = "GTK Theme Support" +description = "Budgie runs GTK themes and GNOME applications seamlessly, ensuring visual consistency." + +# ── Cinnamon ────────────────────────────────────────────────────── +[[items]] +desktop = "cinnamon" +icon = "slides/img/cinnamon.png" +title = "PisiLinux Cinnamon" +description = "Cinnamon combines the traditional desktop experience with modern features, offering a powerful and flexible environment." + +[[items]] +desktop = "cinnamon" +icon = "slides/img/cinnamon_panel.png" +title = "Cinnamon Panel" +description = "Customize your panel with applets, launchers, and system indicators for a classic yet powerful desktop." + +[[items]] +desktop = "cinnamon" +icon = "slides/img/cinnamon_settings.png" +title = "Settings Manager" +description = "Fine-tune every aspect of your Cinnamon desktop through the comprehensive Settings Manager." + +[[items]] +desktop = "cinnamon" +icon = "slides/img/cinnamon_desklets.png" +title = "Cinnamon Desklets" +description = "Keep notes, clocks, and system info always visible on your desktop with Cinnamon Desklets." + +# ── GNOME ───────────────────────────────────────────────────────── +[[items]] +desktop = "gnome" +icon = "slides/img/gnome.png" +title = "PisiLinux GNOME" +description = "Reduce distractions and focus on your work with the clean and focused GNOME desktop environment." + +[[items]] +desktop = "gnome" +icon = "slides/img/gnome_search.png" +title = "GNOME Search" +description = "Press the Super key and start typing. Instantly reach applications, files, and settings." + +[[items]] +desktop = "gnome" +icon = "slides/img/gnome_extensions.png" +title = "GNOME Extensions" +description = "Shape your desktop to your needs with hundreds of extensions from extensions.gnome.org." + +# ── KDE ─────────────────────────────────────────────────────────── +[[items]] +desktop = "kde" +icon = "slides/img/kde.png" +title = "PisiLinux KDE Plasma" +description = "Meet the modern, customizable, and powerful KDE Plasma desktop. Everything is at your fingertips." + +[[items]] +desktop = "kde" +icon = "slides/img/file_manager.png" +title = "Dolphin File Manager" +description = "Dolphin makes managing your files easy with tabbed browsing, dual-panel view, and powerful search." + +[[items]] +desktop = "kde" +icon = "slides/img/kde_connect.png" +title = "KDE Connect" +description = "Connect your phone to your computer. Notifications, file transfer, and clipboard sharing — all with KDE Connect." + +[[items]] +desktop = "kde" +icon = "slides/img/discover.png" +title = "Discover Software Center" +description = "Easily find, install, and update applications from the visual interface with Discover." + +# ── LXQt ────────────────────────────────────────────────────────── +[[items]] +desktop = "lxqt" +icon = "slides/img/lxqt.png" +title = "PisiLinux LXQt" +description = "A lightweight, fast, and modern LXQt desktop environment. Low resource consumption, high performance." + +[[items]] +desktop = "lxqt" +icon = "slides/img/lxqt_panel.png" +title = "LXQt Panel" +description = "The traditional panel layout puts the taskbar, application launcher, and system tray always within reach." + +[[items]] +desktop = "lxqt" +icon = "slides/img/file_manager.png" +title = "PCManFM-Qt File Manager" +description = "Manage files effortlessly with the lightweight and fast PCManFM-Qt. Tabbed navigation and a customizable interface." + +# ── LXDE ────────────────────────────────────────────────────────── +[[items]] +desktop = "lxde" +icon = "slides/img/lxde.png" +title = "PisiLinux LXDE" +description = "The legendary lightweight LXDE desktop. Known for extremely low resource usage and a reliable build." + +[[items]] +desktop = "lxde" +icon = "slides/img/lxde_openbox.png" +title = "Openbox-Based" +description = "LXDE uses the Openbox window manager. Fine-tune it for a smooth and responsive experience." + +[[items]] +desktop = "lxde" +icon = "slides/img/file_manager.png" +title = "PCManFM File Manager" +description = "PCManFM speeds up your file operations with its fast and lightweight build, supporting tree view and tabs." + +# ── Lumina ──────────────────────────────────────────────────────── +[[items]] +desktop = "lumina" +icon = "slides/img/lumina.png" +title = "PisiLinux Lumina" +description = "A lightweight and independent Lumina desktop. Qt-based, designed to run cleanly on BSD and Linux systems." + +[[items]] +desktop = "lumina" +icon = "slides/img/lumina_applications.png" +title = "Application Support" +description = "Lumina works well with core utilities and many popular Qt apps, providing a practical everyday experience." + +[[items]] +desktop = "lumina" +icon = "slides/img/lumina_theme.png" +title = "Theme Customization" +description = "Easily customize color schemes and interface styles with Lumina's flexible theme system." + +[[items]] +desktop = "lumina" +icon = "slides/img/lumina_panel.png" +title = "Lumina Panel" +description = "A clean panel with a taskbar, application launcher, and system tray keeps your desktop organized." + +# ── MATE ────────────────────────────────────────────────────────── +[[items]] +desktop = "mate" +icon = "slides/img/mate.png" +title = "PisiLinux MATE" +description = "MATE for those who love the traditional desktop layout. Developed with GTK+ 3 for a modern and smooth experience." + +[[items]] +desktop = "mate" +icon = "slides/img/file_manager.png" +title = "Caja File Manager" +description = "Manage your files easily with MATE's powerful Caja. Dual panel, tabbed navigation, and rich features." + +[[items]] +desktop = "mate" +icon = "slides/img/mate_settings.png" +title = "MATE Settings" +description = "Customize your MATE desktop with comprehensive settings for appearance, display, keyboard, and more." + +[[items]] +desktop = "mate" +icon = "slides/img/mate_applications.png" +title = "Rich Application Suite" +description = "MATE comes with a rich set of classic applications — from text editors to image viewers, all well-integrated." + +# ── XFCE ────────────────────────────────────────────────────────── +[[items]] +desktop = "xfce" +icon = "slides/img/xfce.png" +title = "PisiLinux XFCE" +description = "A lightweight, fast, and user-friendly XFCE desktop environment. Low resource consumption, high performance." + +[[items]] +desktop = "xfce" +icon = "slides/img/xfce_panel.png" +title = "XFCE Panel" +description = "The traditional panel layout puts the taskbar, application menu, and system tray always within reach." + +[[items]] +desktop = "xfce" +icon = "slides/img/file_manager.png" +title = "Thunar File Manager" +description = "Manage your files easily with the fast and lightweight Thunar. Tree view, tabbed navigation, and customizable features." + +[[items]] +desktop = "xfce" +icon = "slides/img/xfce_settings.png" +title = "Whisker Menu" +description = "A modern alternative to the classic application menu. Find apps easily and organize your favorites with Whisker Menu." diff --git a/slides/slides_tr.toml b/slides/slides_tr.toml new file mode 100644 index 0000000..942629e --- /dev/null +++ b/slides/slides_tr.toml @@ -0,0 +1,240 @@ +# ╔══════════════════════════════════════════════════════════════════╗ +# ║ Yali-RS — Slayt İçerikleri (Türkçe) ║ +# ╚══════════════════════════════════════════════════════════════════╝ + +# Slayt geçiş süresi (saniye) +interval_secs = 6 + +[[items]] +icon = "slides/img/pisilinux-logo.png" +title = "Pisi GNU/Linux'a Hoş Geldiniz" +description = "Pisi; hız, kararlılık ve kullanım kolaylığını bir araya getiren Türkçe destekli bir GNU/Linux dağıtımıdır." + +[[items]] +icon = "slides/img/pisi-software-center.png" +title = "PISI Paket Yöneticisi" +description = "Binlerce pakete tek komutla erişin. `pisi install ` ile ihtiyacınız olan her şeyi kolayca kurabilirsiniz." + +[[items]] +icon = "slides/img/community.png" +title = "Topluluk Desteği" +description = "forum.pisilinux.org adresindeki aktif topluluğumuz sorularınızı yanıtlamak için hazır. Wiki sayfalarımız da her an erişilebilir." + +[[items]] +icon = "slides/img/pisi_speed.png" +title = "Hız ve Performans" +description = "Optimize edilmiş çekirdek ve başlangıç servisleri sayesinde PisiLinux saniyeler içinde açılır ve minimum kaynak kullanır." + +[[items]] +icon = "slides/img/securety.png" +title = "Güvenlik Önce Gelir" +description = "Düzenli güvenlik güncellemeleri, AppArmor profilleri ve güvenli varsayılan ayarlarla sisteminizi koruyun." + +[[items]] +icon = "slides/img/customization.png" +title = "Özelleştirme" +description = "Masaüstü ortamından tema renklerine, panel düzeninden klavye kısayollarına kadar her şeyi zevkinize göre ayarlayın." + +# ── XFCE ────────────────────────────────────────────────────────── + +[[items]] +desktop = "xfce" +icon = "slides/img/xfce.png" +title = "PisiLinux XFCE" +description = "Hafif, hızlı ve kullanıcı dostu XFCE masaüstü ortamı. Kaynak tüketimi düşük, performansı yüksektir." + +[[items]] +desktop = "xfce" +icon = "slides/img/xfce_panel.png" +title = "XFCE Panel" +description = "Geleneksel panel düzeni ile görev çubuğu, uygulama menüsü ve sistem tepsisi her zaman elinizin altında." + +[[items]] +desktop = "xfce" +icon = "slides/img/file_manager.png" +title = "Thunar Dosya Yöneticisi" +description = "Hızlı ve hafif Thunar ile dosya işlemlerinizi kolayca yapın. Ağaç görünümü, sekmeli gezinme ve özelleştirilebilir özellikler sunar." + +[[items]] +desktop = "xfce" +icon = "slides/img/xfce_settings.png" +title = "Ayarlar Merkezi" +description = "Klasik uygulama menüsüne modern bir alternatif. Whisker Menu ile uygulamaları kolayca bulun, favorilerinizi düzenleyin." + +# ── KDE Plasma ──────────────────────────────────────────────────── + +[[items]] +desktop = "kde" +icon = "slides/img/kde.png" +title = "PisiLinux KDE Plasma" +description = "Modern, özelleştirilebilir ve güçlü KDE Plasma masaüstü ortamıyla tanışın. Her şey elinizin altında." + +[[items]] +desktop = "kde" +icon = "slides/img/file_manager.png" +title = "Dolphin Dosya Yöneticisi" +description = "Sekmeli gezinme, ikili panel ve güçlü arama özelliğiyle Dolphin dosyalarınızı yönetmeyi kolaylaştırır." + +[[items]] +desktop = "kde" +icon = "slides/img/kde_connect.png" +title = "KDE Bağlan" +description = "Telefonunuzu bilgisayarınıza bağlayın. Bildirimler, dosya aktarımı ve klipboard paylaşımı KDE Connect ile mümkün." + +[[items]] +desktop = "kde" +icon = "slides/img/discover.png" +title = "Discover Yazılım Merkezi" +description = "Discover ile uygulamaları görsel arayüzden kolayca bulun, kurun ve güncelleyin." + +# ── GNOME ───────────────────────────────────────────────────────── + +[[items]] +desktop = "gnome" +icon = "slides/img/gnome.png" +title = "PisiLinux GNOME" +description = "Sade ve odaklı GNOME masaüstü ortamı ile dikkat dağıtıcı unsurları azaltın, işinize konsantre olun." + +[[items]] +desktop = "gnome" +icon = "slides/img/gnome_search.png" +title = "GNOME Arama" +description = "Super tuşuna basıp yazmaya başlayın. Uygulama, dosya ve ayarlara anında ulaşın." + +[[items]] +desktop = "gnome" +icon = "slides/img/gnome_extensions.png" +title = "GNOME Eklentileri" +description = "extensions.gnome.org adresinden yüzlerce eklentiyle masaüstünüzü ihtiyaçlarınıza göre şekillendirin." + +# ── MATE ────────────────────────────────────────────────────────── + +[[items]] +desktop = "mate" +icon = "slides/img/mate.png" +title = "PisiLinux MATE" +description = "Geleneksel masaüstü düzenini sevenler için MATE. GTK+ 3 ile geliştirilmiş, modern ve akıcı bir deneyim sunar." + +[[items]] +desktop = "mate" +icon = "slides/img/file_manager.png" +title = "Caja Dosya Yöneticisi" +description = "MATE'in güçlü dosya yöneticisi Caja ile dosya işlemlerinizi kolayca yapın. Çift panel, sekmeli gezinme ve geniş özellikler sunar." + +[[items]] +desktop = "mate" +icon = "slides/img/mate_settings.png" +title = "MATE Ayarları" +description = "Görünüm, ekran, klavye ve daha fazlası için kapsamlı ayarlarla MATE masaüstünüzü özelleştirin." + +[[items]] +desktop = "mate" +icon = "slides/img/customization.png" +title = "Zengin Uygulama Paketi" +description = "MATE; metin editöründen görüntü görüntüleme yazılımına kadar geniş, iyi entegre edilmiş klasik uygulamalar sunar." + +# ── Budgie ──────────────────────────────────────────────────────── + +[[items]] +desktop = "budgie" +icon = "slides/img/budgie.png" +title = "PisiLinux Budgie" +description = "Modern, sade ve şık Budgie masaüstü. GNOME altyapısı üzerine inşa edilmiş, kullanıcı dostudur." + +[[items]] +desktop = "budgie" +icon = "slides/img/budgie_applets.png" +title = "Budgie Desktop Applets" +description = "Budgie'nin panel appletleri sayesinde hava durumu, sistem izleyici, takvim gibi araçları kolayca ekleyin." + +[[items]] +desktop = "budgie" +icon = "slides/img/budgie_raven.png" +title = "Raven Bildirim Merkezi" +description = "Raven panelinden ses seviyesi, medya kontrolleri, bildirimler ve hızlı ayarlara erişin." + +[[items]] +desktop = "budgie" +icon = "slides/img/budgie_gtk_theme.png" +title = "GTK Tema Desteği" +description = "Budgie, GTK temalarını ve GNOME uygulamalarını sorunsuz çalıştırır, görsel bütünlük sağlar." + +# ── Cinnamon ────────────────────────────────────────────────────── + +[[items]] +desktop = "cinnamon" +icon = "slides/img/cinnamon.png" +title = "PisiLinux Cinnamon" +description = "Geleneksel masaüstü deneyimini modern özelliklerle birleştiren Cinnamon, güçlü ve esnek bir ortam sunar." + +[[items]] +desktop = "cinnamon" +icon = "slides/img/cinnamon_panel.png" +title = "Cinnamon Paneli" +description = "Panelinizi applet'ler, başlatıcılar ve sistem göstergeleriyle özelleştirin; klasik ama güçlü bir masaüstü deneyimi yaşayın." + +[[items]] +desktop = "cinnamon" +icon = "slides/img/cinnamon_settings.png" +title = "Ayarlar Yöneticisi" +description = "Cinnamon'un kapsamlı Ayarlar Yöneticisi aracılığıyla masaüstünüzün her yönünü özelleştirin." + +[[items]] +desktop = "cinnamon" +icon = "slides/img/cinnamon_desklets.png" +title = "Cinnamon Desklets" +description = "Masaüstü widget'ları ile notlar, saatler ve sistem bilgileri her zaman görünür kalsın." + +# ── LXQt ────────────────────────────────────────────────────────── + +[[items]] +desktop = "lxqt" +icon = "slides/img/lxqt.png" +title = "PisiLinux LXQt" +description = "Hafif, hızlı ve modern LXQt masaüstü ortamı. Kaynak tüketimi düşük, performansı yüksektir." + +[[items]] +desktop = "lxqt" +icon = "slides/img/file_manager.png" +title = "LXQt Panel" +description = "Geleneksel panel düzeni ile görev çubuğu, uygulama başlatıcı ve sistem tepsisi her zaman elinizin altında." + +[[items]] +desktop = "lxqt" +icon = "slides/img/file_manager.png" +title = "PCManFM-Qt Dosya Yöneticisi" +description = "Hafif ve hızlı PCManFM-Qt ile dosya işlemlerini kolayca yönetin. Sekmeli gezinme ve özelleştirilebilir arayüz sunar." + +# ── LXDE ────────────────────────────────────────────────────────── + +[[items]] +desktop = "lxde" +icon = "slides/img/lxde.png" +title = "PisiLinux LXDE" +description = "Efsanevi hafif masaüstü LXDE. Çok düşük kaynak tüketimi ve güvenilir yapısıyla tanınır." + +[[items]] +desktop = "lxde" +icon = "slides/img/lxde.png" +title = "Openbox Tabanlı" +description = "LXDE, Openbox pencere yöneticisini kullanır. İnce ayarlar ile akıcı bir deneyim sunar." + +[[items]] +desktop = "lxde" +icon = "slides/img/file_manager.png" +title = "PCManFM Dosya Yöneticisi" +description = "PCManFM, hızlı ve hafif yapısıyla dosya işlemlerinizi kolaylaştırır, ağaç görünümü ve sekme destekler." + +# ── Lumina ──────────────────────────────────────────────────────── + +[[items]] +desktop = "lumina" +icon = "slides/img/lumina.png" +title = "PisiLinux Lumina" +description = "Hafif ve bağımsız Lumina masa üstü. Qt tabanlı, BSD ve Linux sistemlerde düzgün çalışan minimal bir ortam." + +[[items]] +desktop = "lumina" +icon = "slides/img/customization.png" +title = "Tema Özelleştirme" +description = "Lumina'nın tema sistemiyle renk şemaları ve arayüz stilini kolayca özelleştirin." diff --git a/src/bin/slides_test.rs b/src/bin/slides_test.rs new file mode 100644 index 0000000..8524a8a --- /dev/null +++ b/src/bin/slides_test.rs @@ -0,0 +1,83 @@ +//! Slayt gösterisini test etmek için bağımsız GUI binary'si. +//! +//! Gerçek kurulum ekranındaki slideshow boyutlarında ve konumda görüntüler. +//! +//! Kullanım: +//! cargo run --bin slides_test [desktop] [lang] +//! +//! desktop: "default" (varsayılan), "kde", "gnome", "xfce", "mate" vb. +//! lang: "tr", "en" (varsayılan), "de" vb. — branding_{lang}.toml yüklenir + +use eframe::egui; + +fn main() -> eframe::Result<()> { + let args: Vec = std::env::args().collect(); + let desktop = args.get(1).cloned().unwrap_or_else(|| "default".to_string()); + let lang = args.get(2).cloned().unwrap_or_else(|| "tr".to_string()); + + let options = eframe::NativeOptions { + viewport: egui::ViewportBuilder::default() + .with_inner_size([1200.0, 900.0]) + .with_min_inner_size([1080.0, 720.0]) + .with_title(format!("Slides Test - {} ({})", desktop, lang)), + ..Default::default() + }; + + eframe::run_native( + "Slideshow Test", + options, + Box::new(move |cc| { + egui_extras::install_image_loaders(&cc.egui_ctx); + + let branding = yali_rs::branding::BrandingConfig::load_for_lang(&lang); + let icons: std::collections::HashMap = branding.slides.icons + .iter() + .map(|(k, v)| (k.clone(), yali_rs::branding::path_to_file_uri(v))) + .collect(); + + Box::new(SlidesApp { + slideshow: yali_rs::ui::slideshow::Slideshow::new( + &desktop, + icons, + branding.slides.items.clone(), + ), + }) + }), + ) +} + +struct SlidesApp { + slideshow: yali_rs::ui::slideshow::Slideshow, +} + +impl eframe::App for SlidesApp { + fn update(&mut self, ctx: &egui::Context, _frame: &mut eframe::Frame) { + egui::CentralPanel::default() + .frame(egui::Frame::none().fill(yali_rs::ui::theme::c_bg_dark())) + .show(ctx, |ui| { + let available_w = ui.available_width(); + let available_h = ui.available_height(); + let slide_h = (available_h * 0.45).max(280.0); + + ui.allocate_ui(egui::vec2(available_w, slide_h), |ui| { + ui.vertical(|ui| { + ui.add_space(8.0); + yali_rs::ui::theme::section_heading(ui, "Slideshow Test"); + ui.label( + egui::RichText::new("Gerçek kurulum boyutlarında slayt gösterisi") + .color(yali_rs::ui::theme::c_text_dim()) + .size(13.0), + ); + ui.add_space(16.0); + + self.slideshow.show(ui); + ui.add_space(10.0); + ui.horizontal(|ui| { + if ui.small_button("‹").clicked() { self.slideshow.previous(); } + if ui.small_button("›").clicked() { self.slideshow.advance(); } + }); + }); + }); + }); + } +} \ No newline at end of file diff --git a/src/branding.rs b/src/branding.rs index 98c9be3..981a1ee 100644 --- a/src/branding.rs +++ b/src/branding.rs @@ -161,34 +161,87 @@ impl BrandingConfig { "/usr/share/yali/branding.toml", "branding.toml", ]; + let mut config = BrandingConfig::default(); for path in &paths { if let Ok(content) = std::fs::read_to_string(path) { match toml::from_str(&content) { - Ok(cfg) => return cfg, + Ok(cfg) => { config = cfg; break; } Err(e) => eprintln!("[branding] {}: {}", path, e), } } } - BrandingConfig::default() + + // slides/slides.toml varsa onu da yükle (öncelikli) + if let Some(content) = std::fs::read_to_string("slides/slides.toml").ok() { + if let Ok(slides) = toml::from_str::(&content) { + if !slides.icons.is_empty() { + config.slides.icons = slides.icons; + } + if !slides.items.is_empty() { + config.slides.items = slides.items; + } + if slides.interval_secs > 0 { + config.slides.interval_secs = slides.interval_secs; + } + } + } + + config } /// Belirtilen dile ait `branding_{lang}.toml` dosyasını arar ve yükler. /// Bulunamazsa varsayılan `branding.toml` dosyasına geri döner. + /// Yükleme sonrası `slides/slides_{lang}.toml` varsa slides verilerini da buradan alır. pub fn load_for_lang(lang: &str) -> Self { - let lang_paths = [ - format!("/etc/yali/branding_{}.toml", lang), - format!("/usr/share/yali/branding_{}.toml", lang), - format!("branding_{}.toml", lang), + let mut config = { + let lang_paths = [ + format!("/etc/yali/branding_{}.toml", lang), + format!("/usr/share/yali/branding_{}.toml", lang), + format!("branding_{}.toml", lang), + ]; + let mut found = None; + for path in &lang_paths { + if let Ok(content) = std::fs::read_to_string(path) { + match toml::from_str(&content) { + Ok(cfg) => { found = Some(cfg); break; } + Err(e) => eprintln!("[branding] {}: {}", path, e), + } + } + } + found.unwrap_or_else(Self::load) + }; + + // Harici slides dosyasını dene (slides/slides_{lang}.toml) + if let Some(slides) = Self::load_external_slides(lang) { + if !slides.icons.is_empty() { + config.slides.icons = slides.icons; + } + if !slides.items.is_empty() { + config.slides.items = slides.items; + } + if slides.interval_secs > 0 { + config.slides.interval_secs = slides.interval_secs; + } + } + + config + } + + /// `slides/slides_{lang}.toml` veya `slides/slides.toml` dosyasını yükler. + fn load_external_slides(lang: &str) -> Option { + let paths = [ + format!("slides/slides_{}.toml", lang), + "slides/slides.toml".to_string(), ]; - for path in &lang_paths { + for path in &paths { if let Ok(content) = std::fs::read_to_string(path) { match toml::from_str(&content) { - Ok(cfg) => return cfg, - Err(e) => eprintln!("[branding] {}: {}", path, e), + Ok(cfg) => return Some(cfg), + Err(e) => eprintln!("[slides] {}: {}", path, e), } } } - Self::load() + None } /// İkon adına göre dosya yolunu döner. diff --git a/src/jobs/mod.rs b/src/jobs/mod.rs index 740090b..f3b0d7d 100644 --- a/src/jobs/mod.rs +++ b/src/jobs/mod.rs @@ -11,7 +11,6 @@ //! UI'nin hemen güncellenmesi sağlanır. -use std::path::Path; use std::sync::atomic::{AtomicBool, Ordering}; use std::sync::mpsc; use tokio::io::{AsyncBufReadExt, BufReader}; @@ -182,9 +181,40 @@ impl Job for CopyFilesJob { let is_root_source = self.source.trim_end_matches('/') == ""; + // ── Önce find ile toplam dosya sayısını bul ────────── + let find_path = self.source.trim_end_matches('/'); + let find_path = if find_path.is_empty() { "/" } else { find_path }; + let total_files = { + let mut cmd = Command::new("find"); + cmd.arg(find_path).arg("-type").arg("f"); + if is_root_source { + cmd.arg("-xdev"); + } + cmd.stdout(std::process::Stdio::piped()); + cmd.stderr(std::process::Stdio::null()); + match cmd.spawn() { + Ok(mut c) => { + let stdout = c.stdout.take() + .ok_or_else(|| "find stdout alınamadı".to_string())?; + let r = BufReader::new(stdout); + let mut lines = r.lines(); + let mut n: u64 = 0; + while let Ok(Some(_)) = lines.next_line().await { + n += 1; + } + let _ = c.wait().await; + // if n > 0 { + // ui.log(format!("{} dosya bulundu", n)); + // } + n + } + Err(_) => 0 + } + }; + let mut args: Vec = vec![ "-aAXH".to_string(), - "--info=progress2".to_string(), + "--out-format=%n".to_string(), "--exclude=/proc/**".to_string(), "--exclude=/sys/**".to_string(), "--exclude=/dev/**".to_string(), @@ -242,19 +272,8 @@ impl Job for CopyFilesJob { return Ok(()); } - // rsync çıktısı pipe'a yönlendirilince tam tamponlu (fully buffered) olur, - // bu da progress çıktısının gerçek zamanlı gelmemesine yol açar. - // stdbuf -eL ile stderr'i satır tamponlu (line-buffered) yapıyoruz. - let (program, final_args) = if Path::new("/usr/bin/stdbuf").exists() { - let mut a = vec!["-eL".to_string(), "rsync".to_string()]; - a.extend(args); - ("stdbuf", a) - } else { - ("rsync", args) - }; - - let mut child = Command::new(program) - .args(&final_args) + let mut child = Command::new("rsync") + .args(&args) .stdout(std::process::Stdio::piped()) .stderr(std::process::Stdio::piped()) .spawn() @@ -265,90 +284,38 @@ impl Job for CopyFilesJob { let stderr = child.stderr.take() .ok_or_else(|| "rsync stderr alınamadı".to_string())?; - // Stderr'i arka planda okuyarak tamponun dolmasını ve rsync'in kilitlenmesini engelliyoruz. - let stderr_err_accumulator = std::sync::Arc::new(tokio::sync::Mutex::new(String::new())); - let stderr_accumulator_clone = stderr_err_accumulator.clone(); + // Stderr'i arka planda oku (hata birikimi ve tampon taşmasını engelle) + let stderr_buf = std::sync::Arc::new(tokio::sync::Mutex::new(String::new())); + let stderr_buf_clone = stderr_buf.clone(); tokio::spawn(async move { - let reader = BufReader::new(stderr); - let mut lines = reader.lines(); - while let Ok(Some(line)) = lines.next_line().await { - let mut accum = stderr_accumulator_clone.lock().await; - accum.push_str(&line); - accum.push('\n'); + let r = BufReader::new(stderr); + let mut lines = r.lines(); + while let Ok(Some(l)) = lines.next_line().await { + let mut b = stderr_buf_clone.lock().await; + b.push_str(&l); + b.push('\n'); } }); + // Stdout: --out-format=%n ile her satır bir dosya adı let reader = BufReader::new(stdout); let mut lines = reader.lines(); + let mut file_count: u64 = 0; while let Some(line) = lines.next_line().await .map_err(|e| format!("rsync çıktısı okunamadı: {}", e))? { - // Pipe'a yönlendirilince rsync satırbaşı (\r) içerebilir. - // Önce \r karakterlerini temizle, sonra trim yap. - let cleaned: String = line.chars() - .filter(|&c| c != '\r') - .collect(); - let trimmed = cleaned.trim().to_string(); - + let trimmed = line.trim().to_string(); if trimmed.is_empty() { continue; } - // ── 1) Progress satırı mı? ────────────────────────── - // rsync --info=progress2 format (pipe yoluyla): - // " 1,024 100% 512.00kB/s 0:00:00 (xfr#5, to-chk=99/105)" - // " 3.456M 67% 5.12MB/s 0:00:01 (xfr#17, to-chk=83/105)" - // (xfr# ve to-chk= varsa progress satırıdır) - if trimmed.contains("xfr#") && trimmed.contains("to-chk=") { - // xfr# değerini çıkar - let xfr = if let Some(pos) = trimmed.find("xfr#") { - let after = &trimmed[pos + 4..]; - let end = after.find(|c: char| !c.is_ascii_digit()).unwrap_or(after.len()); - after[..end].parse::().unwrap_or(0) - } else { 0 }; + file_count += 1; + ui.current_file(trimmed); - // to-chk= içinden total değerini çıkar - let total = if let Some(pos) = trimmed.find("to-chk=") { - let after = &trimmed[pos + 7..]; - let slash_pos = after.find('/'); - if let Some(sp) = slash_pos { - let after_slash = &after[sp + 1..]; - let end = after_slash.find(|c: char| !c.is_ascii_digit()).unwrap_or(after_slash.len()); - after_slash[..end].parse::().unwrap_or(1) - } else { 1 } - } else { 1 }; - - if total > 0 { - let p = (xfr as f32) / (total as f32); - ui.sub_progress(p.min(1.0)); - } - continue; - } - - // ── 2) Progress satırının ilk kısmı mı? (sayı + yüzde ile başlayan) ── - // rsync pipe çıktısı bazen iki satıra bölünebilir: - // " 1,024 100% 512.00kB/s 0:00:00" - // " (xfr#5, to-chk=99/105)" - // Bu durumda ilk satırda sadece sayı/yüzde/hız bilgisi vardır, atla. - { - let first = trimmed.chars().next().unwrap_or(' '); - if first.is_ascii_digit() || first == ' ' { - // Sayı veya boşlukla başlayıp xfr içermiyorsa progress'in devamıdır - continue; - } - } - - // ── 3) Gerçek dosya adı ────────────────────────────── - // rsync --out-format kullanılmadığında dosya adları da stderr'e - // göreceli yol olarak yazılır: "etc/passwd", "usr/share/doc/..." - // Bunlar genellikle '.' '/' veya harf ile başlar, sayı ile başlamaz. - // progress satırı olmadığına göre bu bir dosya adıdır. - if trimmed.len() > 3 && !trimmed.starts_with('[') && !trimmed.contains("sending incremental") - && !trimmed.contains("building file list") && !trimmed.contains("done") - && !trimmed.contains("sent ") && !trimmed.contains("total size") - { - ui.current_file(trimmed); + if total_files > 0 { + let p = (file_count as f32) / (total_files as f32); + ui.sub_progress(p.min(1.0)); } } @@ -356,11 +323,11 @@ impl Job for CopyFilesJob { .map_err(|e| format!("rsync beklenemedi: {}", e))?; if !status.success() { - let stderr_content = stderr_err_accumulator.lock().await.clone(); + let err = stderr_buf.lock().await.clone(); return Err(format!( "rsync çıkış kodu: {:?}. Hata: {}", status.code(), - stderr_content.trim() + err.trim() )); } diff --git a/src/lib.rs b/src/lib.rs new file mode 100644 index 0000000..3d83c3c --- /dev/null +++ b/src/lib.rs @@ -0,0 +1,9 @@ +pub mod installer; +pub mod steps; +pub mod jobs; +pub mod ui; +pub mod autoinstall; +pub mod branding; +pub mod funct; + +rust_i18n::i18n!("locales"); \ No newline at end of file diff --git a/src/main.rs b/src/main.rs index ef62488..3497e6b 100644 --- a/src/main.rs +++ b/src/main.rs @@ -188,8 +188,14 @@ fn run_auto_install(path: &str, demo_mode: bool) -> eframe::Result<()> { print!("\r {}: [{:50}] {:.0}%", t!("progress"), "=".repeat((p * 50.0) as usize), p * 100.0); let _ = std::io::Write::flush(&mut std::io::stdout()); } - Ok(InstallMessage::SubProgress(_)) => {} - Ok(InstallMessage::CurrentFile(_)) => {} + Ok(InstallMessage::SubProgress(p)) => { + print!("\r {}: [{:50}] {:.0}% ", t!("progress"), "=".repeat((p * 50.0) as usize), p * 100.0); + let _ = std::io::Write::flush(&mut std::io::stdout()); + } + Ok(InstallMessage::CurrentFile(f)) => { + print!("\r {}: {} ", t!("install_current_file"), f); + let _ = std::io::Write::flush(&mut std::io::stdout()); + } Ok(InstallMessage::Done) => { println!("\n\n{}: {}", t!("installation_done"), t!("installation_done_description")); break; diff --git a/src/steps/execution.rs b/src/steps/execution.rs index 6663d4b..0308ea0 100644 --- a/src/steps/execution.rs +++ b/src/steps/execution.rs @@ -178,10 +178,6 @@ impl InstallerStep for ExecutionStep { loop { match rx.try_recv() { Ok(InstallMessage::Log(line)) => { - if line.starts_with('▶') { - state.install_sub_progress = 0.0; - state.install_current_file = None; - } state.install_log.push(line); } Ok(InstallMessage::Progress(p)) => { @@ -272,7 +268,8 @@ impl InstallerStep for ExecutionStep { // İlerleme çubuğu let running = !self.finished - && self.error_screen.is_none(); + && self.error_screen.is_none() + && state.install_progress > 0.0; egui::Frame::none() .fill(theme::c_bg_widget()) @@ -280,25 +277,46 @@ impl InstallerStep for ExecutionStep { .inner_margin(egui::Margin::same(12.0)) .show(ui, |ui| { ui.set_width(available_w - 4.0); - - // Yüzde + adım etiketi let step_label = state.install_log.last() .cloned() .unwrap_or_default(); - ui.horizontal(|ui| { - ui.label( - egui::RichText::new( - format!("{:.0}%", state.install_progress * 100.0) - ) - .strong() - .color(theme::c_accent()), + ui.label( + egui::RichText::new(&step_label) + .size(12.0) + .color(theme::c_text_dim()), + ); + + let pct = format!("{:.0}%", state.install_progress * 100.0); + let bar = ui.add( + egui::ProgressBar::new(state.install_progress) + .animate(running) + .desired_height(20.0), + ); + ui.painter().text( + bar.rect.center(), + egui::Align2::CENTER_CENTER, + pct, + egui::FontId::proportional(14.0), + theme::c_text(), + ); + + if state.install_sub_progress > 0.0 { + let sub_pct = format!("{:.0}%", state.install_sub_progress * 100.0); + ui.add_space(4.0); + let sub_bar = ui.add( + egui::ProgressBar::new(state.install_sub_progress) + .animate(running) + .desired_height(20.0) + .fill(theme::c_accent_dim()), ); - ui.label( - egui::RichText::new(&step_label) - .size(12.0) - .color(theme::c_text_dim()), + ui.painter().text( + sub_bar.rect.center(), + egui::Align2::CENTER_CENTER, + sub_pct, + egui::FontId::proportional(12.0), + theme::c_text(), ); - }); + } if let Some(ref current_file) = state.install_current_file { ui.add_space(4.0); @@ -308,21 +326,6 @@ impl InstallerStep for ExecutionStep { .color(theme::c_text_dim()), ); } - - ui.add_space(4.0); - ui.add( - egui::ProgressBar::new(state.install_progress) - .animate(running) - .desired_height(10.0), - ); - - ui.add_space(4.0); - ui.add( - egui::ProgressBar::new(state.install_sub_progress) - .animate(running) - .desired_height(6.0) - .fill(theme::c_accent_dim()), - ); }); // Durum etiketi diff --git a/src/steps/partition.rs b/src/steps/partition.rs index 4fd7b8d..e595ecd 100644 --- a/src/steps/partition.rs +++ b/src/steps/partition.rs @@ -3,7 +3,7 @@ use eframe::egui; use rust_i18n::t; use crate::ui::theme; -use crate::funct::{form_label, form_input_text}; +use crate::funct::form_label; // sysinfo::Disks mount point başına bir kayıt döndürür (partition'lar), // ham disk listesi için lsblk kullanıyoruz. @@ -503,96 +503,96 @@ impl PartitionStep { partition_bar(ui, plan); ui.add_space(8.0); - // Bootstrap 5 tarzı tablo + // Bootstrap 5 tarzı çizgili tablo let col_widths = [0.40, 0.25, 0.35]; - let tam_genislik = ui.available_width(); - let header_color = egui::Color32::from_rgb(33, 37, 41); // dark bg + let header_color = egui::Color32::from_rgb(33, 37, 41); let header_text = egui::Color32::WHITE; - let _border_stroke = egui::Stroke::new(1.0, crate::ui::theme::c_border()); + let baslik_yukseklik = 36.0; + let satir_yukseklik = 34.0; + let headers = [t!("plan_col_part"), t!("plan_col_fs"), t!("plan_col_size")]; - let grid = egui::Grid::new("plan_grid") - .num_columns(3) - .spacing([0.0, 0.0]) - .min_col_width(0.0); - - grid.show(ui, |ui| { - // ── Başlık satırı ───────────────────────────────── - let headers = [t!("plan_col_part"), t!("plan_col_fs"), t!("plan_col_size")]; - for (j, h) in headers.into_iter().enumerate() { - let (rect, _) = ui.allocate_exact_size( - egui::vec2(tam_genislik * col_widths[j], 30.0), - egui::Sense::hover(), - ); - let child_ui = &mut ui.child_ui(rect, egui::Layout::top_down(egui::Align::LEFT)); - egui::Frame::none() - .fill(header_color) - .inner_margin(egui::Margin::symmetric(8.0, 4.0)) - .show(child_ui, |ui| { - ui.label(egui::RichText::new(h) - .strong() - .color(header_text) - .size(13.0)); - }); - } - ui.end_row(); - - // ── Veri satırları ──────────────────────────────── - struct Satir { - part: String, - fs: &'static str, - size: String, - } - let mut satirlar = Vec::new(); - if plan.efi_mb > 0 { - satirlar.push(Satir { - part: format!("{}1 (EFI)", plan.disk), - fs: "FAT32", - size: format!("{} MB", plan.efi_mb), - }); - } - let swap_part = if plan.efi_mb > 0 { 2 } else { 1 }; + struct Satir { + part: String, + fs: &'static str, + size: String, + } + let mut satirlar = Vec::new(); + if plan.efi_mb > 0 { satirlar.push(Satir { - part: format!("{}{} (swap)", plan.disk, swap_part), - fs: "swap", - size: format!("{} MB", plan.swap_mb), + part: format!("{}1 (EFI)", plan.disk), + fs: "FAT32", + size: format!("{} MB", plan.efi_mb), }); - let root_part = swap_part + 1; - satirlar.push(Satir { - part: format!("{}{}{}", plan.disk, root_part, t!("plan_root_suffix")), - fs: "ext4", - size: format!("{:.1} GB", plan.root_mb as f64 / 1024.0), - }); - - for (row_idx, satir) in satirlar.iter().enumerate() { - let row_bg = if row_idx % 2 == 0 { - egui::Color32::from_rgba_unmultiplied(60, 60, 80, 60) - } else { - egui::Color32::TRANSPARENT - }; - let hucreler: [&str; 3] = [&satir.part, satir.fs, &satir.size]; - for (j, deger) in hucreler.iter().enumerate() { - let (rect, _) = ui.allocate_exact_size( - egui::vec2(tam_genislik * col_widths[j], 34.0), - egui::Sense::hover(), - ); - let child_ui = &mut ui.child_ui(rect, egui::Layout::top_down(egui::Align::Center)); - egui::Frame::none() - .fill(row_bg) - .stroke(egui::Stroke::new(0.0, egui::Color32::TRANSPARENT)) - .inner_margin(egui::Margin::symmetric(8.0, 4.0)) - .show(child_ui, |ui| { - ui.vertical_centered(|ui| { - ui.label(egui::RichText::new(*deger).size(13.0).color(crate::ui::theme::c_text())); - }); - }); - } - // satır alt çizgisi - if row_idx < satirlar.len() - 1 { - ui.separator(); - } - ui.end_row(); - } + } + let swap_part = if plan.efi_mb > 0 { 2 } else { 1 }; + satirlar.push(Satir { + part: format!("{}{} (swap)", plan.disk, swap_part), + fs: "swap", + size: format!("{} MB", plan.swap_mb), }); + let root_part = swap_part + 1; + satirlar.push(Satir { + part: format!("{}{}{}", plan.disk, root_part, t!("plan_root_suffix")), + fs: "ext4", + size: format!("{:.1} GB", plan.root_mb as f64 / 1024.0), + }); + + egui::Frame::none() + .stroke(egui::Stroke::new(1.0, crate::ui::theme::c_border())) + .rounding(egui::Rounding::same(6.0)) + .show(ui, |ui| { + let tam = ui.available_width(); + + ui.horizontal(|ui| { + ui.set_height(baslik_yukseklik); + ui.spacing_mut().item_spacing.x = 0.0; + for (j, h) in headers.iter().enumerate() { + let w = tam * col_widths[j]; + let (rect, _) = ui.allocate_exact_size( + egui::vec2(w, baslik_yukseklik), + egui::Sense::hover(), + ); + let mut cell_ui = ui.child_ui(rect, egui::Layout::top_down(egui::Align::Center)); + egui::Frame::none() + .fill(header_color) + .inner_margin(egui::Margin::symmetric(10.0, 6.0)) + .show(&mut cell_ui, |ui| { + ui.vertical_centered(|ui| { + ui.label(egui::RichText::new(h.as_ref()).strong().color(header_text).size(14.0)); + }); + }); + } + }); + + for (row_idx, satir) in satirlar.iter().enumerate() { + let row_bg = if row_idx % 2 == 0 { + egui::Color32::from_rgba_unmultiplied(60, 60, 80, 40) + } else { + egui::Color32::TRANSPARENT + }; + let hucreler: [&str; 3] = [&satir.part, satir.fs, &satir.size]; + ui.horizontal(|ui| { + ui.set_height(satir_yukseklik); + ui.spacing_mut().item_spacing.x = 0.0; + for (j, deger) in hucreler.iter().enumerate() { + let w = tam * col_widths[j]; + let (rect, _) = ui.allocate_exact_size( + egui::vec2(w, satir_yukseklik), + egui::Sense::hover(), + ); + let mut cell_ui = ui.child_ui(rect, egui::Layout::top_down(egui::Align::Center)); + egui::Frame::none() + .fill(row_bg) + .inner_margin(egui::Margin::symmetric(10.0, 4.0)) + .show(&mut cell_ui, |ui| { + ui.vertical_centered(|ui| { + ui.label(egui::RichText::new(*deger).size(13.0).color(crate::ui::theme::c_text())); + }); + }); + } + }); + } + }); ui.add_space(8.0); ui.label(format!("{}: {}", t!("partition_table_type"), plan.table_type)); @@ -749,19 +749,16 @@ impl PartitionStep { let header_text = egui::Color32::WHITE; let _border_stroke = egui::Stroke::new(1.0, crate::ui::theme::c_border()); - let grid = egui::Grid::new("manual_parts_grid") - .num_columns(5) - .spacing([0.0, 0.0]) - .min_col_width(0.0); - - grid.show(ui, |ui| { - // ── Başlık satırı ───────────────────────────────── - let headers: [String; 4] = [ - t!("mp_device").to_string(), - t!("mp_size").to_string(), - t!("mp_fstype").to_string(), - t!("mp_mountpoint").to_string(), - ]; + // ── Başlık satırı ───────────────────────────────── + let headers: [String; 4] = [ + t!("mp_device").to_string(), + t!("mp_size").to_string(), + t!("mp_fstype").to_string(), + t!("mp_mountpoint").to_string(), + ]; + ui.horizontal(|ui| { + ui.set_height(30.0); + ui.spacing_mut().item_spacing.x = 0.0; for (j, h) in headers.into_iter().enumerate() { let (rect, _) = ui.allocate_exact_size( egui::vec2(tam_genislik * col_widths[j], 30.0), @@ -776,88 +773,77 @@ impl PartitionStep { ui.label(egui::RichText::new(h).strong().color(header_text).size(13.0)); }); } - ui.end_row(); - - // ── Veri satırları ──────────────────────────────── - for (row_idx, part) in state.custom_partitions.iter().enumerate() { - let is_selected = self.manual.selected_idx == Some(row_idx); - let row_bg = if is_selected { - egui::Color32::from_rgba_unmultiplied(80, 100, 180, 80) - } else if row_idx % 2 == 0 { - egui::Color32::from_rgba_unmultiplied(60, 60, 80, 60) - } else { - egui::Color32::TRANSPARENT - }; - - let size_str = if part.size_mb == 0 { - t!("mp_size_remaining").to_string() - } else if part.size_mb >= 1024 { - format!("{:.1} GB", part.size_mb as f64 / 1024.0) - } else { - format!("{} MB", part.size_mb) - }; - - let mut fstype_label = part.fstype.label().to_string(); - if part.encrypt { - fstype_label = format!("🔐 {}", fstype_label); - } - - let hucreler: [(String, bool); 5] = [ - (part.device.clone(), false), - (size_str, false), - (fstype_label, false), - (part.mountpoint.clone(), false), - (String::new(), true), // action column - button - ]; - - for (j, (deger, is_action)) in hucreler.iter().enumerate() { - let sense = if *is_action { - egui::Sense::click() - } else { - egui::Sense::click() - }; - let (rect, response) = ui.allocate_exact_size( - egui::vec2(tam_genislik * col_widths[j], 34.0), - sense, - ); - - if !*is_action { - if response.clicked() { - self.manual.selected_idx = Some(row_idx); - } - response.on_hover_cursor(egui::CursorIcon::PointingHand); - } - - let child_ui = &mut ui.child_ui(rect, egui::Layout::top_down(egui::Align::Center)); - - if *is_action { - egui::Frame::none() - .fill(egui::Color32::TRANSPARENT) - .inner_margin(egui::Margin::symmetric(8.0, 4.0)) - .show(child_ui, |ui| { - ui.vertical_centered(|ui| { - ui.label(egui::RichText::new(deger).size(13.0).color(crate::ui::theme::c_text())); - }); - }); - } else { - egui::Frame::none() - .fill(row_bg) - .stroke(egui::Stroke::new(0.0, egui::Color32::TRANSPARENT)) - .inner_margin(egui::Margin::symmetric(8.0, 4.0)) - .show(child_ui, |ui| { - ui.vertical_centered(|ui| { - ui.label(egui::RichText::new(deger).size(13.0).color(crate::ui::theme::c_text())); - }); - }); - } - } - if row_idx < state.custom_partitions.len() - 1 { - ui.separator(); - } - ui.end_row(); - } }); + // ── Veri satırları ──────────────────────────────── + for (row_idx, part) in state.custom_partitions.iter().enumerate() { + let is_selected = self.manual.selected_idx == Some(row_idx); + let row_bg = if is_selected { + egui::Color32::from_rgba_unmultiplied(80, 100, 180, 80) + } else if row_idx % 2 == 0 { + egui::Color32::from_rgba_unmultiplied(60, 60, 80, 60) + } else { + egui::Color32::TRANSPARENT + }; + + let size_str = if part.size_mb == 0 { + t!("mp_size_remaining").to_string() + } else if part.size_mb >= 1024 { + format!("{:.1} GB", part.size_mb as f64 / 1024.0) + } else { + format!("{} MB", part.size_mb) + }; + + let mut fstype_label = part.fstype.label().to_string(); + if part.encrypt { + fstype_label = format!("🔐 {}", fstype_label); + } + + // Entire row as a single clickable target (painter-based, no widget nesting) + let (row_rect, row_response) = ui.allocate_exact_size( + egui::vec2(tam_genislik, 34.0), + egui::Sense::click(), + ); + + if row_response.clicked() { + self.manual.selected_idx = Some(row_idx); + } + row_response.on_hover_cursor(egui::CursorIcon::PointingHand); + + // Paint row background + let painter = ui.painter(); + painter.rect_filled(row_rect, egui::Rounding::ZERO, row_bg); + + // Paint cell texts directly (no child_ui/label widgets that steal clicks) + let cell_texts = [ + part.device.as_str(), + size_str.as_str(), + fstype_label.as_str(), + part.mountpoint.as_str(), + "", + ]; + let mut x = row_rect.left(); + for (j, text) in cell_texts.iter().enumerate() { + let cell_w = tam_genislik * col_widths[j]; + let text_rect = egui::Rect::from_min_size( + egui::pos2(x + 8.0, row_rect.top() + 4.0), + egui::vec2(cell_w - 16.0, 26.0), + ); + painter.text( + text_rect.center(), + egui::Align2::CENTER_CENTER, + *text, + egui::FontId::proportional(13.0), + crate::ui::theme::c_text(), + ); + x += cell_w; + } + + if row_idx < state.custom_partitions.len() - 1 { + ui.separator(); + } + } + // ── Bölümleme Planı (manuel) ────────────────────────── if !state.custom_partitions.is_empty() { ui.add_space(12.0); @@ -965,8 +951,12 @@ impl PartitionStep { egui::Window::new(title) .collapsible(false) .resizable(false) - .anchor(egui::Align2::CENTER_CENTER, [0.0, 0.0]) + .default_size(egui::vec2(420.0, 300.0)) + //.anchor(egui::Align2::CENTER_CENTER, [0.0, 0.0]) + .default_pos(ui.ctx().screen_rect().center() - egui::vec2(210.0, 150.0)) .show(ui.ctx(), |ui| { + ui.set_min_width(420.0); + ui.set_max_width(420.0); ui.label(t!("mp_fstype")); let prev_fs = self.manual.add_fstype; let fs_label = FS_OPTIONS.get(self.manual.add_fstype).map(|x| x.0).unwrap_or("?"); @@ -988,10 +978,22 @@ impl PartitionStep { ui.add_space(6.0); form_label(ui, &t!("mp_size_hint")); ui.horizontal(|ui| { - form_input_text(ui, &mut self.manual.add_size_str); + ui.add_sized( + [160.0, 32.0], // Genişlik 160.0, Yükseklik 40.0 piksel + egui::TextEdit::singleline(&mut self.manual.add_size_str) + .text_color(egui::Color32::from_rgb(230, 230, 230)) + .vertical_align(egui::Align::Center) + ); + // ui.add(egui::TextEdit::singleline(&mut self.manual.add_size_str) + // .desired_width(120.0) + // .text_color(egui::Color32::from_rgb(230, 230, 230))); let parsed: u64 = self.manual.add_size_str.trim().parse().unwrap_or(0); if parsed > 0 { + let gb = parsed as f64 / 1024.0; ui.label(format!("{} MB", format_number_thousands(parsed))); + ui.label(egui::RichText::new(format!("(≈ {:.1} GB)", gb)) + .color(crate::ui::theme::c_text_dim()) + .size(11.0)); } else { ui.label("MB"); } @@ -1017,6 +1019,8 @@ impl PartitionStep { } ui.add_space(6.0); + ui.separator(); + ui.label(t!("mp_mountpoint")); ui.horizontal(|ui| { let current_mp = if self.manual.add_mountpoint.is_empty() { @@ -1029,15 +1033,30 @@ impl PartitionStep { theme::selectable_value(ui, &mut self.manual.add_mountpoint, mp.to_string(), *mp, w); } }); - form_input_text(ui, &mut self.manual.add_mountpoint); + // ui.add(egui::TextEdit::singleline(&mut self.manual.add_mountpoint) + // .desired_width(160.0) + // .text_color(egui::Color32::from_rgb(230, 230, 230))); + ui.add_sized( + [160.0, 32.0], // Genişlik 160.0, Yükseklik 40.0 piksel + egui::TextEdit::singleline(&mut self.manual.add_mountpoint) + .text_color(egui::Color32::from_rgb(230, 230, 230)) + .vertical_align(egui::Align::Center) + ); }); ui.add_space(6.0); - ui.label(t!("luks_enable_root")); + ui.separator(); + let fstype = FS_OPTIONS.get(self.manual.add_fstype).map(|x| x.1.clone()).unwrap_or(FsType::Ext4); let can_encrypt = matches!(fstype, FsType::Ext4 | FsType::Ext3 | FsType::Btrfs | FsType::Xfs); + + // ui.label(t!("luks_enable_root")); + // ui.add_enabled_ui(can_encrypt, |ui| { + // ui.checkbox(&mut self.manual.add_encrypt, ""); + // }); ui.add_enabled_ui(can_encrypt, |ui| { - ui.checkbox(&mut self.manual.add_encrypt, ""); + // Checkbox'ı yazısıyla birlikte tek bir bileşen olarak ekliyoruz: + ui.checkbox(&mut self.manual.add_encrypt, t!("luks_enable_root")); }); if !can_encrypt { self.manual.add_encrypt = false; } @@ -1047,18 +1066,27 @@ impl PartitionStep { let pw = &mut self.manual.add_luks_password; ui.horizontal(|ui| { if self.show_luks_password { - ui.text_edit_singleline(pw); + ui.add_sized( + [200.0, 32.0], // Genişlik 200.0, Yükseklik 32.0 piksel + egui::TextEdit::singleline(pw) + ); } else { - ui.add(egui::TextEdit::singleline(pw).password(true)); - } - let eye = if self.show_luks_password { "🙈" } else { "👁" }; - if ui.small_button(eye).clicked() { - self.show_luks_password = !self.show_luks_password; + ui.add_sized( + [200.0, 32.0], // Genişlik 200.0, Yükseklik 32.0 piksel + egui::TextEdit::singleline(pw).password(true) + .text_color(egui::Color32::from_rgb(230, 230, 230)) + .vertical_align(egui::Align::Center) + ); + let eye = if self.show_luks_password { "🙈" } else { "👁" }; + if ui.small_button(eye).clicked() { + self.show_luks_password = !self.show_luks_password; + } } }); } ui.add_space(8.0); + ui.separator(); ui.horizontal(|ui| { let ok_label = if is_edit { t!("mp_save") } else { t!("mp_add_btn") }; if theme::primary_button(ui, &ok_label).clicked() { diff --git a/src/ui/slideshow.rs b/src/ui/slideshow.rs index 9fb0487..147ef47 100644 --- a/src/ui/slideshow.rs +++ b/src/ui/slideshow.rs @@ -338,8 +338,15 @@ impl Slideshow { let slide = &self.slides[self.current]; - // İkona karşılık gelen URI'yi branding haritasından al - let resolved_uri = self.icons.get(slide.icon).cloned(); + // İkona karşılık gelen URI: önce branding haritasından, yoksa doğrudan dosya yolu olarak dene + let resolved_uri = self.icons.get(slide.icon).cloned() + .or_else(|| { + if slide.icon.contains('/') || slide.icon.contains('\\') { + Some(crate::branding::path_to_file_uri(slide.icon)) + } else { + None + } + }); egui::Frame::none() .fill(crate::ui::theme::c_bg_widget())