# ICED GUI Migration Plan — EGUI Full Parity ## Hedef EGUI (`hcie-egui-app`) üzerindeki tüm özellik, panel, menü, dialog ve fonksiyonların ICED (`hcie-iced-app`) tarafına taşınarak %100 görsel ve işlevsel paritenin sağlanması. ## Kararlar | Karar | Seçim | |-------|-------| | Panel crate yapısı | Gömülü kal (mevcut `hcie-iced-gui/src/panels/` içinde) | | Plugin sistemi | Kapsama al — EGUI'deki PluginHost ICED'e taşınacak | | SVG Editor | Kapsama al — yeni panel olarak eklenecek | | Menü placeholder'ları | Tümü aktifleştirilecek (full parity) | --- ## Faz 1: Kritik Eksik Yapılar (Temel) ### 1.1 Plugin Sistemi (`hcie-iced-gui/src/plugins/`) - [ ] **Kaynak:** `hcie-egui-app/crates/hcie-gui-egui/src/plugins/` - [ ] **Hedef:** `hcie-iced-app/crates/hcie-iced-gui/src/plugins/` - [ ] **Dosyalar:** - `mod.rs` — PluginHost struct, `dispatch_app_event()`, plugin lifecycle - `registry.rs` — PluginRegistry, kayıtlı plugin yönetimi - `integration.rs` — EGUI plugin UI'dan EventBus olay dağıtımı - `built_in/` — Built-in plugin örnekleri (debug_logger) - [ ] **Bağımlılık:** PluginHost `HcieApp` yerine `IcedDocument`+`ToolState` kullanacak şekilde adapte edilmeli - [ ] **Integration:** `app.rs` update() içinde `message` döngüsüne plugin dispatch eklenmeli ### 1.2 SVG Editor Panel - [ ] **Kaynak:** `hcie-egui-app/crates/hcie-gui-egui/src/app/panels/svg_editor_panel.rs` - [ ] **Hedef:** `hcie-iced-app/crates/hcie-iced-gui/src/panels/svg_editor.rs` - [ ] **Durum:** EGUI'de `SvgEditorState` struct + `show_svg_editor()` fonksiyonu. ICED'e `SvgEditorState` + view/update olarak taşınacak - [ ] **App state:** `HcieIcedApp` içine `svg_editor_state: Option` eklenecek - [ ] **Panel:** view fonksiyonu normal panel gibi `panels/mod.rs` üzerinden erişilebilir ### 1.3 Save Error Dialog - [ ] **Kaynak:** EGUI `SaveErrorState` + error dialog render - [ ] **Hedef:** ICED `ActiveDialog::SaveError` varyantı + dialog view - [ ] **Özellik:** Kaydetme hatasında alternatif yol önerisi gösteren modal ### 1.4 Canvas Expand Dialog - [ ] **Kaynak:** EGUI `show_expand_dialog` + paste overflow handling - [ ] **Hedef:** ICED `ActiveDialog::ExpandCanvas` varyantı - [ ] **Özellik:** Clipboard paste sırasında tuval boyutunu aşan içerik için genişletme onayı --- ## Faz 2: Menü Eksikleri (Full Parity) ### 2.1 File Menüsü Eksikleri | EGUI Öğesi | ICED Task | |---|---| | Import… | `MenuCommand::ImportFile` — `rfd::FileDialog` ile dosya seç, engine'e yükle | | Import SVG… | `MenuCommand::ImportSvg` — SVG dosyası aç, engine.import_svg() çağır | | Import Brushes… | `MenuCommand::ImportBrushes` — ABR/KPP parser, brush_presets'e ekle | | Export… | `MenuCommand::Export` — Save As ile aynı akış, farklı etiket | ### 2.2 Edit Menüsü Eksikleri | EGUI Öğesi | ICED Task | |---|---| | Paste Special (Ctrl+Shift+V) | `MenuCommand::PasteSpecial` — Paste internal clipboard (transform olarak) | | Fill… (Shift+F5) | `MenuCommand::Fill` — Primary color ile seçim/layer doldurma | | Stroke… | `MenuCommand::Stroke` — Placeholder dialog (EGUI'de de placeholder) | | Free Transform (Ctrl+T) | `MenuCommand::FreeTransform` — `TransformStart` event'i, selection transform başlatma | | Preferences (Ctrl+K) | `MenuCommand::Preferences` — `ActiveDialog::Settings` dialog'u | ### 2.3 Tools Menüsü - [ ] EGUI `tools` menüsündeki tüm tool'lar için `MenuCommand::SelectTool(Tool)` eklenecek - [ ] **Tool listesi:** Eyedropper, Pen, Brush, Eraser, Spray, FloodFill, MagicWand, Select, Lasso, PolygonSelect, Move, Crop, Text, Gradient - [ ] **Retouch alt menüsü:** `MenuCommand::SelectTool(Tool::RedEyeRemoval)`, `SpotRemoval`, `SmartPatch` - [ ] **AI alt menüsü:** `MenuCommand::SelectTool(Tool::AiObjectRemoval)`, `SmartSelect`, `VisionSelect` ### 2.4 Image Menüsü Eksikleri | EGUI Öğesi | ICED Task | |---|---| | Image Rotation > 90° CW | `MenuCommand::Rotate90CW` → engine.rotate_canvas(90) | | Image Rotation > 90° CCW | `MenuCommand::Rotate90CCW` → engine.rotate_canvas(-90) | | Image Rotation > 180° | `MenuCommand::Rotate180` → engine.rotate_canvas(180) | | Flip Horizontal | `MenuCommand::FlipHorizontal` → engine.flip_horizontal() | | Flip Vertical | `MenuCommand::FlipVertical` → engine.flip_vertical() | | Crop | `MenuCommand::ImageCrop` → selection_rect varsa engine.crop() | | Invert / Negative | `MenuCommand::InvertNegative` → apply_filter("invert") | ### 2.5 Filter Menüsü Eksikleri - [ ] **Distort:** `MenuCommand::FilterDistort(Pinch)`, `FilterDistort(Twirl)` — parametre dialog'u - [ ] **Noise:** `MenuCommand::FilterNoise(AddNoise)`, `FilterNoise(NoisePattern)` - [ ] **Pixelate:** `MenuCommand::FilterPixelate(Crystallize)`, `FilterPixelate(Mosaic)` - [ ] **Render:** `MenuCommand::FilterRender(Clouds)` — procedural texture - [ ] **Restore:** `MenuCommand::FilterRestore(Dehaze)` - [ ] **Stylize:** `FilterStylize(Emboss)`, `FilterStylize(FindEdges)`, `FilterStylize(OilPaint)` - [ ] **Procedural Textures (14 tür):** `FilterTexture(Grass)`, `FilterTexture(Sand)`, `FilterTexture(Dirt)`, `FilterTexture(Water)`, `FilterTexture(Rain)`, `FilterTexture(Stone)`, `FilterTexture(Bricks)`, `FilterTexture(Oak)`, `FilterTexture(Pine)`, `FilterTexture(DarkWood)`, `FilterTexture(Steel)`, `FilterTexture(Gold)`, `FilterTexture(Copper)`, `FilterTexture(Linen)`, `FilterTexture(Glass)`, `FilterTexture(SkyReplacement)` - [ ] **Kaynak:** EGUI `shell/menus.rs:ui_filter_menu()` fonksiyonundaki tüm filtre çağrıları ### 2.6 Select Menüsü Eksikleri - [ ] **Erode Border:** `MenuCommand::ErodeBorder` → engine.selection_erode() - [ ] **Fade Border:** `MenuCommand::FadeBorder` → engine.selection_fade() ### 2.7 View Menüsü Eksikleri - [ ] **Reset Pan:** `MenuCommand::ResetPan` → `doc.pan_offset = Vector::ZERO` ### 2.8 Window Menüsü Eksikleri - [ ] **Open Documents list:** Aktif doküman listesi gösterimi, seçili olana focus - [ ] **Reset Layout:** Varsayılan dock düzenine dön ### 2.9 Layer Menüsü Eksikleri - [ ] **Align:** `MenuCommand::AlignLayer(AlignAxis)` — tüm axis'ler için engine.align_active_layer() ### 2.10 Help Menüsü - [ ] **About:** `ActiveDialog::About` — `dialogs/about.rs` mevcut, menü bağlantısı eklenecek --- ## Faz 3: Panel İçerik İyileştirmeleri ### 3.1 AI Assistant — ComfyUI Sekmesi - [ ] EGUI'de AI paneli 2 sekme: ComfyUI + AI Chat - [ ] ICED'de sadece AI Chat var - [ ] **Task:** ComfyUI pipeline görüntüleyici sekmesi eklenecek ### 3.2 Title Bar Özellikleri - [ ] **Search box:** EGUI title bar'da `title_search` alanı + TextEdit - [ ] **Panel list popup:** EGUI'de hamburger menü ikonu ile panel list toggle - [ ] **Window controls:** EGUI kendi minimize/maximize/close çiziyor. ICED'de `decorations(false)` ile aynı pattern ### 3.3 Thumbnails Panel - [ ] `panels/thumbnails.rs` mevcut — EGUI layers panel içinde thumbnail gösterimi ile uyum kontrolü - [ ] Layer thumbnail boyutları, badge'ler, efekt ikonları EGUI ile eşleştirilecek --- ## Faz 4: Dialog İyileştirmeleri ### 4.1 Filter Dialogları - [ ] EGUI'de her filter kategorisi için ayrı dialog flag'leri: `show_blur_dialog`, `show_sharpen_dialog`, `show_distort_dialog`, `show_stylize_dialog`, `show_color_light_dialog`, `show_restore_dialog`, `show_noise_pattern_dialog`, `show_procedural_textures_dialog` - [ ] ICED'de `ActiveDialog::FilterParams(FilterType)` ile tek dialog — yeterli mi kontrol et - [ ] EGUI `filter_dialogs.rs` ve `modern_dialogs.rs`'deki parametre UI'ları incelenmeli ### 4.2 Selection Op Dialog - [ ] EGUI `SelectionOpDialogState` ile Grow/Shrink/Feather/Erode/Fade için değer girişi - [ ] ICED `ActiveDialog::SelectionOp` mevcut ama Erode/Fade eklenmeli --- ## Faz 5: Viewer Mode Parity ### 5.1 Viewer Mode (FastStone-like) - [ ] EGUI viewer (`shell/viewer.rs`): `ViewerState`, thumbnail grid, directory tree, fullscreen - [ ] ICED viewer (`viewer/`): Mevcut, EGUI ile karşılaştırılmalı - [ ] **Eksik olabilir:** Önceki/Sonraki navigasyon, fullscreen toggle, thumbnail cache --- ## Faz 6: Görsel Tutarlılık ### 6.1 gui_layout.json Sistemi - [ ] EGUI'de `shell/gui_layout.rs` ile tüm panel boyut/padding/renk override'ları - [ ] ICED'de benzer bir sistem yok - [ ] **Task:** ICED için basitleştirilmiş layout override mekanizması ### 6.2 Tema Paletleri - [ ] EGUI'de 5 tema: Photoshop, PhotoshopLight, Amoled, ProDark, ProLight - [ ] ICED'de `ThemePreset` aynı seti kapsıyor mu kontrol et - [ ] `iced-panel-adapter` içindeki renk token'ları EGUI `ThemeColors` ile eşleştirilmeli --- ## Faz 7: Kod Temizliği ve Doğrulama ### 7.1 Dead Code Temizliği - [ ] EGUI `_dead_code_candidates_/` klasöründeki dosyalar incelenmeli - [ ] `panel_layout.rs`, `dock_controller.rs`, `dock_engine.rs`, `history.rs` ### 7.2 Test ve Doğrulama - [ ] `cargo test -p hcie-iced-gui` — mevcut testler - [ ] Görsel screenshot karşılaştırması - [ ] Her Faz sonunda `cargo check -p hcie-iced-gui` ile derleme kontrolü --- ## Faz Sıralaması ve Bağımlılıklar ``` Faz 1 (Kritik Yapılar) ──→ Faz 2 (Menüler) ──→ Faz 3 (Paneller) ──→ Faz 4 (Dialoglar) ──→ Faz 5 (Viewer) ──→ Faz 6 (Görsel) │ │ └── Plugin sistemi └── Tüm menü komutları aktif └── SVG Editor └── Import/Export └── Save Error Dialog └── Expand Canvas Dialog ``` Her faz kendi içinde bağımsız çalışabilir. Faz 1 ön koşuldur çünkü yeni state alanları ve dialog varyantları sonraki fazlarda kullanılır. --- ## Riskler 1. **Plugin sistemi:** EGUI `EventBus` tabanlı, ICED Message tabanlı. Uyumlama sırasında event→message dönüşümü dikkatli yapılmalı 2. **SVG Editor:** EGUI'de `hcie_engine_api::SvgEditable` kullanılıyor. Aynı API ICED'de de mevcut 3. **Procedural Textures (14 adet):** Her biri ayrı filter_id + parametre seti. EGUI'deki parametre isimleri birebir korunmalı (örn. `"texture_grass"`, `"scale": 1.0, "roughness": 0.5`) 4. **ComfyUI sekmesi:** EGUI'de AI paneli içinde iki sekme var. ICED'de AI panel widget'ının tab desteği eklenmeli --- ## Implementation Notları - **Yeni dosyalar eklenirken mevcut değiştirilmez** kuralı: Menü komutları `panels/menus.rs`'e, dialoglar `dialogs/`'a, yeni paneller `panels/`'e ek dosya olarak - `app.rs` `update()` fonksiyonuna yeni Message varyantları eklenecek - `app.rs` `view()` fonksiyonuna yeni panel/dialog view'ları bağlanacak - Engine API çağrıları EGUI ile birebir aynı (`hcie_engine_api::Engine`) - Görsel stiller `iced-panel-adapter::theme::ThemeColors` üzerinden