13 KiB
HCIE-egui app/ Klasörü Refactor Planı
Hedef
hcie-egui-app/crates/hcie-gui-egui/src/app/ altındaki 25+ flat dosyayı mantıksal alt klasörlere ayırarak:
- Kodun kategorisini kestirmeyi kolaylaştırmak,
- Ölü kod adaylarını tespit edip ayrı listelemek,
- Her alt klasörün
mod.rsaracılığıyla net bir sözleşme sunmasını sağlamak.
Kapsam Dışı / Sınırlar
- Davranış değişikliği yok: sadece dosya konumu ve modül path'i değişir.
- mod.rs bölünmesi yapılmayacak: 5108 satırlık
mod.rsiçindeki state/app tanımları bu plan kapsamında ayrılmayacak; yalnızca alt modül deklarasyonları düzenlenecek. - Ölü kod adayları yeni yapıya taşınmayacak: sadece raporlanacak, silme kararı kullanıcıya bırakılacak.
- Engine (Layer 1–5) dokunulmaz: sadece GUI (Layer 6) içinde hareket edilecek.
- Build öncesi manifest hatası:
hcie-egui-app/Cargo.tomlbir[lib]bölümü içeriyor amasrc/lib.rsyok; bu plan öncesi ön koşul olarak not edildi, plana dahil değil.
Ölü Kod Adayları (import edilmeyen / mod.rs'de tanımlı olmayan)
Aşağıdaki dosyalar app/mod.rs içinde pub mod/mod olarak declare edilmemiş veya aktif kod tarafından referans alınmıyor. Refactor kapsamında yeni alt klasörlere taşınmamalı, ayrı bir "dead-code candidates" listesi olarak ele alınmalı.
| Dosya | Gerekçe |
|---|---|
dock_controller.rs |
mod.rs'de declare edilmemiş; yalnızca dock_engine.rs ve grim_dock.rs ile kendi içinde döngüsel import ediyor. |
dock_engine.rs |
mod.rs'de declare edilmemiş; sadece dock_controller.rs tarafından kullanılıyor. |
panel_layout.rs + panel_layout.json |
Hiçbir aktif modül PanelLayout::load_default() dışı referans vermiyor; load_default() da çağrılmıyor. |
history.rs |
mod.rs'de declare edilmemiş; panels::show_history() engine API üzerinden kendi mini history UI'ını çiziyor, bu dosya kullanılmıyor. |
i18n.rs |
mod.rs'de declare edilmemiş (varsa) veya hiç referans almıyor. |
manifest.rs |
mod.rs'de declare edilmemiş (varsa) veya hiç referans almıyor. |
Not:
grim_dock.rsaktif olarakmod.rstarafındanpub mod grim_dock;olarak declare ediliyor veHcieAppiçindegrim_dock_host/use_grimdockalanları var; bu yüzden ölü kod sayılmaz. Ancak mevcut başka bir plan (1783517996924-egui-app-refactoring-plan.mdPhase 1) grimdock backend'in kaldırılmasını öngörüyor; bu planla çakışmaması için grimdock bu refactor kapsamında dokunulmadan bırakılacak.
Önerilen Yeni Klasör Yapısı
hcie-egui-app/crates/hcie-gui-egui/src/app/
├── mod.rs # state/app tanımları + alt modül re-export'ları (~5108 satır, içerik değişmez)
├── theme.rs # apply_theme, setup_custom_fonts, default_font_bytes (mod.rs'den çıkarılabilir ama opsiyonel)
├── state/ # (gelecek aşama) AppDocument, ToolState, HcieApp vb.
│
├── panels/ # Panel UI modülleri
│ ├── mod.rs # show_* fonksiyonlarını ve alt modülleri re-export et
│ ├── menubar.rs # panels.rs içindeki show_menu_bar + yardımcılar
│ ├── toolbar.rs # panels.rs içindeki unified toolbar
│ ├── statusbar.rs # panels.rs içindeki show_status_bar
│ ├── filters.rs # panels.rs içindeki show_filters_ui
│ ├── brushes.rs # panels.rs içindeki show_brushes_ui (thin wrapper)
│ ├── color.rs # panels.rs içindeki show_color_palette (thin wrapper)
│ ├── layers.rs # panels.rs içindeki show_layers
│ ├── history.rs # panels.rs içindeki show_history
│ ├── properties.rs # panels.rs içindeki show_properties
│ ├── plugins.rs # panels.rs içindeki show_plugins_ui
│ ├── ai_chat.rs # panels.rs içindeki show_ai_chat
│ └── comfy_ai.rs # panels.rs içindeki show_comfy_ai
│
├── dock/ # Docking/layout sistemleri
│ ├── mod.rs # dock.rs + grim_dock.rs re-export (grimdock ayrı tutulur)
│ ├── egui_dock.rs # mevcut dock.rs (V3 egui_dock)
│ └── grim_dock.rs # mevcut grim_dock.rs (dokunulmadan taşınır)
│
├── dialogs/ # Diyaloglar
│ ├── mod.rs # dialog fonksiyonlarını re-export et
│ ├── new_image.rs # dialogs.rs içindeki new image dialog
│ ├── adjustments.rs # dialogs.rs içindeki adjustments
│ ├── selection_op.rs # dialogs.rs içindeki selection op
│ └── filter_dialogs.rs # filter_dialog.rs içeriği
│
├── tools/ # Araç/editör modülleri
│ ├── mod.rs
│ ├── toolbox.rs # mevcut toolbox.rs
│ ├── brush_editor.rs # mevcut brush_editor.rs
│ ├── text_editor.rs # mevcut text_editor.rs
│ ├── geometry_panel.rs # mevcut geometry_panel.rs
│ ├── layer_styles_panel.rs # mevcut layer_styles_panel.rs
│ ├── layer_details_panel.rs # mevcut layer_details_panel.rs
│ ├── shape_sync.rs # mevcut shape_sync.rs
│ └── pressure_indicator.rs # mevcut pressure_indicator.rs
│
├── io/ # Dosya/format yükleme
│ ├── mod.rs
│ ├── custom_loaders.rs # mevcut
│ ├── custom_loaders_kra_v2.rs# mevcut
│ └── clipboard.rs # mevcut
│
├── shell/ # Menüler, ayarlar, layout, viewer
│ ├── mod.rs
│ ├── menus.rs # mevcut
│ ├── settings.rs # mevcut
│ ├── viewer.rs # mevcut
│ ├── dock_profile_dialog.rs # mevcut
│ ├── gui_layout.rs # mevcut
│ ├── layout_solver.rs # mevcut
│ ├── scrollable_panel.rs # mevcut
│ └── tablet_input.rs # mevcut
│
├── widgets/ # Genel UI widget'ları
│ ├── mod.rs
│ └── widgets.rs # mevcut widgets.rs
│
└── _dead_code_candidates_/ # Tasıma Dışı Tutulanlar (geçici, silinmeyecek)
├── dock_controller.rs
├── dock_engine.rs
├── panel_layout.rs
├── panel_layout.json
├── history.rs
├── i18n.rs (varsa)
└── manifest.rs (varsa)
Detaylı Dosya Haritası
Aktif olarak declare edilen 24 dosya ve önerilen hedef klasörleri
| Mevcut Dosya | Hedef Klasör | Açıklama |
|---|---|---|
brush_editor.rs |
tools/brush_editor.rs |
Fırça düzenleyici UI |
brushes_panel.rs |
tools/brushes_panel.rs |
Fırça preset paneli (görünüm) |
clipboard.rs |
io/clipboard.rs |
Sistem clipboard işlemleri |
colors_panel.rs |
panels/color.rs veya tools/color_panel.rs |
Renk paleti (panel seviyesinde çiziliyor) |
dialogs.rs |
dialogs/*.rs (böl) |
New/adjustments/selection diyalogları |
dock.rs |
dock/egui_dock.rs |
V3 egui_dock implementasyonu |
filter_dialog.rs |
dialogs/filter_dialogs.rs |
Blur/sharpen/stylize vb. filter dialogs |
grim_dock.rs |
dock/grim_dock.rs |
Grimdock prototype backend (dokunulmadan) |
gui_layout.rs |
shell/gui_layout.rs |
Theme/layout tracking sistemi |
menus.rs |
shell/menus.rs |
Ana menüler |
modern_dialogs.rs |
dialogs/modern_dialogs.rs |
Ortak dialog UI yapı taşları |
panels.rs |
panels/*.rs (böl) |
Panel render merkezi; menü bar, toolbar, status bar, layers, history vb. |
settings.rs |
shell/settings.rs |
Preferences dialogu |
text_editor.rs |
tools/text_editor.rs |
Metin aracı UI |
toolbox.rs |
tools/toolbox.rs |
Photopea-style sol toolbox |
widgets.rs |
widgets/widgets.rs |
Genel widget'lar |
viewer.rs |
shell/viewer.rs |
Viewer modu |
custom_loaders.rs |
io/custom_loaders.rs |
Krita/PSD/Native loader |
custom_loaders_kra_v2.rs |
io/custom_loaders_kra_v2.rs |
KRA v2 loader detayı |
geometry_panel.rs |
tools/geometry_panel.rs |
Geometri/vektör paneli |
shape_sync.rs |
tools/shape_sync.rs |
Vektör shape senkronizasyonu |
pressure_indicator.rs |
tools/pressure_indicator.rs |
Basınç göstergesi widget'ı |
layout_solver.rs |
shell/layout_solver.rs |
Layout çözümleme |
layer_styles_panel.rs |
tools/layer_styles_panel.rs |
Layer stil paneli |
layer_details_panel.rs |
tools/layer_details_panel.rs |
Layer detay paneli |
dock_profile_dialog.rs |
shell/dock_profile_dialog.rs |
Dock profil diyalogu |
tablet_input.rs |
shell/tablet_input.rs |
Tablet/evdev input |
scrollable_panel.rs |
shell/scrollable_panel.rs |
Kaydırılabilir panel wrapper |
Uygulama Sırası (Aşamalı)
- Ön koşul:
hcie-egui-app/Cargo.toml'daki[lib]hatası çözülene kadar build testleri crate-seviyesinde (cargo check -p hcie-gui-egui) çalışmayabilir; önce manifest düzeltilmeli. - Ölü kod adaylarını ayır:
dock_controller.rs,dock_engine.rs,panel_layout.rs,panel_layout.json,history.rsvarsa_dead_code_candidates_/klasörüne taşı (hiçbirmod.rsdeclare etmesin, böylece derleme etkilenmez). - ** widgets →
widgets/**: En bağımsız ve az bağımlılıklı dosya; güvenli başlangıç. - ** clipboard + custom_loaders* →
io/**: IO kategorisi net. - ** toolbox, brush_editor, text_editor, geometry_panel, shape_sync, pressure_indicator, layer_styles_panel, layer_details_panel →
tools/**. - ** menus, settings, viewer, dock_profile_dialog, gui_layout, layout_solver, scrollable_panel, tablet_input →
shell/**. - ** dock.rs →
dock/egui_dock.rs, grim_dock.rs →dock/grim_dock.rs**.mod.rsiçindekipub mod dock;vepub mod grim_dock;yerinepub mod dock;kullanılsın;dock::egui_dockvedock::grim_dockalt modülleri re-export edilsin. - ** colors_panel.rs →
panels/color.rs** (veyatools/colors_panel.rs);panels.rsiçindeki thin wrapper'ı güncelle. - ** dialogs.rs parçalan →
dialogs/*.rs**;filter_dialog.rsdedialogs/filter_dialogs.rsiçine taşınır. - ** panels.rs parçalan →
panels/*.rs**; orijinalpanels.rsthin dispatcher olarak kalır veya tamamen kaldırılır (tüm call site'larpanels::*üzerinden yönlendirilir). - ** Tüm
use crate::app::Xpath'lerini güncelle:**crate::app::dock::HciePane→crate::app::dock::egui_dock::HciePanegibi değişiklikler. - **
cargo check -p hcie-gui-eguiçalıştır** ve tüm derleme hatalarını iteratif düzelt. - ** Clippy / rustfmt:**
cargo clippy -p hcie-gui-egui -- -D warnings(uyarı veren eski kodlar hariç) vecargo fmt. - ** Commit:** Her büyük alt klasör taşımasından sonra ayrı commit.
Riskler ve Azaltma
| Risk | Azaltma |
|---|---|
| Path hatalarından oluşan derleme hatası dalgası | Her taşıma sonrası cargo check; taşıma başına tek kategori |
mod.rs içindeki use ifadeleri bozulur |
mod.rs sadece re-export'ları günceller, state/app tanımlarına dokunulmaz |
grim_dock.rs ile dock_controller.rs arasındaki fark karışır |
dock_controller.rs ölü koda ayrılır, grimdock dokunulmaz |
panels.rs parçalanırken public fonksiyon imzaları kaybolur |
panels/mod.rs eski fonksiyon isimlerini aynen re-export eder |
| İki farklı refactor planı çakışır | Mevcut 1783517996924-egui-app-refactoring-plan.md (state/events/canvas bölümü) ayrı bir ileri aşama olarak ele alınır; bu plan sadece klasör yapısı ile sınırlıdır |
Validasyon Planı
cargo check -p hcie-gui-eguiher aşamada başarılı olmalı.cargo clippy -p hcie-gui-eguiyeni oluşan hata vermemeli (varolan uyarılar kalabilir).cargo test -p hcie-gui-egui(manifest hatası çözüldükten sonra) başarılı olmalı.- Runtime davranış değişikliği olmamalı: uygulama başlatıldığında default
Untitledcanvas ilk framede görünür olmalı (AGENTS.md'deki first-frame visibility kritik mekanizmalarına dokunulmayacak).
Açık Sorular
colors_panel.rsnet olarakpanels/mı yoksatools/mu? Şu anpanels.rsiçinden çağrılıyor; önerimpanels/color.rs.modern_dialogs.rsdialogs/altında mı kalmalı, yoksawidgets/altında mı? Hem dialog hem widget yapı taşı; önerimdialogs/modern_dialogs.rs.- Ölü kod adayları
_dead_code_candidates_/gibi geçici klasöre mi konulmalı, yoksa flat olarakapp/kökünde mi kalmalı? Kullanıcı silme kararını verene kadar geçici klasör daha az karışıklık yaratır.
Sonraki Adımlar
Plan onaylandıktan sonra uygulama-capable ajan ile:
- Manifest
[lib]hatasını çöz (seçenekler:src/lib.rsekle veya[lib]bölümünü kaldır). - Ölü kod adaylarını
_dead_code_candidates_/içine taşı. - Kategori taşımalarını sırayla uygula, her adımda
cargo check.