# FikoCAD — Dinamik & Durum-Farkında Alt Şerit Toolbar (Tasarım)

> **Durum:** Yalnız TASARIM. Kod yok, build yok. Sonraki ajan bunu uygular.
> **Amaç:** Ekranın altına sabit, GRUPLU, aktif workbench'e göre içeriği DEĞİŞEN,
> komutları DURUMA GÖRE etkin/pasif olan yatay bir şerit toolbar. Referans: CATIA/
> Fusion alt şeridi — her komut **simge + altında ad**, gruplar ayraç + küçük grup
> etiketiyle bölünür (GEÇMİŞ · ESKİZ · PRİMİTİF KATI · İÇE AKTAR … + sağda kalite).
> **Tek İlke:** Komut kaydı (`cekirdek.menuler()`) TEK KAYNAK. Toolbar oradan çizilir;
> komut eklemek/çıkarmak yalnız registry'de olur, toolbar otomatik yansır (DRY).

---

## 0. Mevcut Durum — Ne Var, Ne Kullanılıyor

Keşif bulguları (bu tasarımın dayanağı):

| Parça | Yer | Durum |
|-------|-----|-------|
| Komut registry | `motor/cekirdek/include/fiko/cekirdek/kayit.hpp:35-67` (`MenuOge`, `MenuKaydi`) | ✅ Tek kaynak, olgun |
| Merkezi dispatch | `cekirdek.hpp:40-60` `komutCalistir(oge, kaynak)` — lisans kapısı + etkinMi + `KomutCalisti` olayı | ✅ Kullan |
| Menü çubuğu | `main.cpp:2156-2169` — `gruplar()` → her grup `BeginMenu`, `etkinMi` ile enabled, `komutCalistir(o,"menu")` | ✅ Çalışıyor, referans kalıp |
| Workbench kaydı | `workbench.hpp` (`WorkbenchKaydi`, `aktif()`), kayıt `main.cpp:826-838` | ✅ 6 workbench: part/sketcher/cam/gsd/analiz/dokum |
| Workbench seçici | `workbench_secici.cpp` — sağ-alt köşe **radyal** çeyrek-pasta | ✅ Ayrı bileşen (dokunma) |
| **FikoUi AracCubuguSistemi** | `motor/ui/…/arac_cubugu.hpp` + `.cpp` (431 sat) | ⚠️ N ayrı dock/serbest **tek-gruplu** toolbar, **simge-only** (ad-altı YOK). Uygulamada `g_araclar` sadece `geometri_cubugu` ile kurulu ve `gorunur=false` (`main.cpp:1767-1775`, çizim `main.cpp:3261`) |
| Legacy WB toolbar | `main.cpp:3175-3249` `g_wbToolbarGoster` | ⚠️ `false` — gizli, simge-only yüzen pencereler |

**Sonuç:** İki yarım toolbar sistemi var ama ikisi de kapalı ve ikisi de "tek grup =
tek pencere, simge-only" modelinde. Referans ise **tek yatay şeritte ÇOKLU grup +
her butonda simge+ad-altı**. Bu farklı bir yerleşim modeli → **yeni özel bileşen**
(aşağıda gerekçe). Mevcut AracCubugu emekliye ayrılabilir (bkz. §6).

---

## 1. Veri Kaynağı & Veri Akışı

### 1.1 Akış (registry → filtre → grupla → çiz)

```
cekirdek.menuler().hepsi()            // TÜM MenuOge'ler (tek kaynak)
        │
        ├─ filtre: workbench            oge.workbench.empty()  ||  oge.workbench == cekirdek.workbenchler().aktif()
        │
        ├─ grupla: MenuOge.grup         "Düzenle","Geometri","Feature","Dosya"…  (ilk-görülme sırası)
        │            + grupSira/gizli    (app tarafı yeniden sıralar / gizler — registry'ye dokunmadan)
        │
        └─ her buton:
             simge   = oge.simge (boşsa → ad'ın ilk harfi / grup default glif)
             ad      = oge.ad
             etkin   = !oge.etkinMi || oge.etkinMi(cekirdek)     // HER KARE
             tıkla   = cekirdek.komutCalistir(oge, "toolbar")    // merkezi dispatch
```

**Kritik:** Toolbar hiçbir komut verisini KOPYALAMAZ/SAKLAMAZ. Her kare doğrudan
`menuler().hepsi()` üzerinden çizer. Böylece registry'ye `menuler().ekle(...)` /
`sil(...)` yapıldığı an (modül, plugin, makro) toolbar bir sonraki karede yansıtır —
manuel senkron yok. Bu, mevcut `AracCubugu`'dan ayrıldığı ana noktadır (o, butonları
`AracButon` vektörüne kopyalar → senkron borcu doğurur).

### 1.2 MenuOge alanları (mevcut, `kayit.hpp:36-44`)

```cpp
struct MenuOge {
  std::string grup;      // "Geometri"           → şerit grubu
  std::string ad;        // "Kutu"               → buton altı ad + tooltip
  std::string simge;     // "◼" (bazıları boş)   → buton simgesi
  int sira = 0;          // (grup içi sıralama — şu an hep 0; ileride kullanılabilir)
  std::function<void(Cekirdek&)> calistir;
  std::function<bool(Cekirdek&)> etkinMi = nullptr;  // yoksa hep etkin
  std::string workbench = "";  // "" = global; "part"/"sketcher"/… = o WB'de
};
```

Şerit için **yeni alan gerekmez**. (Opsiyonel iyileştirmeler §7.)

---

## 2. Bileşen Mimarisi — Nerede & API

### 2.1 Karar: Yeni FikoUi bileşeni `motor/ui/serit_cubugu.{hpp,cpp}`

**Neden yeni bileşen (mevcut AracCubugu'yu genişletmek yerine):**
- Yerleşim modeli farklı: tek şeritte çoklu grup + ayraç + grup etiketi + simge/ad-altı;
  AracCubugu = N ayrı pencere, tek grup, simge-only. Genişletmek onu iki-kişilikli yapardı.
- Veri modeli farklı: şerit **kopyasız**, doğrudan registry çizer (DRY); AracCubugu kopyalar.
- Etkileşim farklı: şerit **tek sabit HUD** (alt-orta/tam-genişlik), sürükle/dock/snap yok.

**Neden `motor/ui` (uygulama-içi çizim değil):** FikoUi mimari ilkesi — "her şey
`motor/ui` içinde, `main.cpp` şişirilmez" (bkz. `workbench_secici`, `komut_paleti`,
`galeri` hep motor/ui). Yeniden kullanılabilir + tema/simge/animasyon altyapısına
zaten burada erişir.

**Neden AracCubugu'yu genişletmiyoruz ama yine de silmiyoruz:** §6'da emeklilik planı.

### 2.2 Header taslağı (`motor/ui/include/fiko/ui/serit_cubugu.hpp`)

```cpp
#pragma once
#include <functional>
#include <string>
#include <vector>
#include "imgui.h"

namespace fiko { class Cekirdek; struct MenuOge; }

namespace fiko::ui {

// ============================================================================
// Dinamik Alt Şerit Toolbar (Ribbon) — DURUM-FARKINDA, WORKBENCH-DUYARLI
// ----------------------------------------------------------------------------
// Ekran altına sabit tek yatay şerit. İçerik cekirdek.menuler()'den her kare
// çizilir (KOPYASIZ): aktif workbench'e göre filtre + MenuOge.grup'a göre grupla.
// Her buton: simge (üst) + ad (alt). Gruplar dikey ayraç + küçük grup etiketiyle
// ayrılır. Buton etkinliği HER KARE etkinMi(cekirdek) ile — pasifse gri+tıklanamaz.
// Tık → cekirdek.komutCalistir(oge, "toolbar") (merkezi dispatch → lisans/olay/makro).
// Çizim FikoUi neon dili (glowCerceve/gradient/animf) + tema token (RENK HARDCODE YOK).
// ============================================================================

struct SeritAyar {
  float yukseklik    = 66.0f;   // şerit yüksekliği (simge + ad-altı sığar)
  float butonGen     = 54.0f;   // her buton genişliği
  float butonSimgeB  = 22.0f;   // simge boyutu
  float adFont       = 12.0f;   // buton-altı ad font
  float grupFont     = 11.0f;   // grup etiketi font
  float kBosluk      = 3.0f;    // buton arası
  float grupBosluk   = 14.0f;   // grup arası (ayraç dahil)
  bool  tamGenislik  = false;   // true = viewport tam-en; false = alt-orta ortalı, içeriğe göre
  bool  adlariGoster = true;    // false → yalnız simge (kompakt mod, tooltip'te ad)

  // Grup görünüm haritası — registry Türkçe iç adı → şeritte gösterilecek etiket.
  //   {"Düzenle","GEÇMİŞ"}, {"Geometri","PRİMİTİF KATI"} …  (registry'ye dokunmadan)
  std::vector<std::pair<std::string,std::string>> grupEtiket;
  // Grup çizim sırası (bu listedeki gruplar önce, listelenen sırada; kalanlar
  // registry ilk-görülme sırasıyla arkaya). Boşsa registry sırası.
  std::vector<std::string> grupSira;
  // Şeritte GÖSTERİLMEYECEK gruplar ("Dosya"/"Araçlar" menüde kalsın istenirse).
  std::vector<std::string> gizliGruplar;

  // Sağ bölge (kalite dropdown/slider, FPS, workbench göstergesi…). App doldurur;
  // bileşen sağda yer ayırıp bu callback'i o ImGui bağlamında çağırır. Opsiyonel.
  std::function<void(Cekirdek&)> sagCiz = nullptr;
  // Sol gösterge: aktif workbench çipi (tıkla → radyal seçiciyi aç vb.). Opsiyonel;
  // yoksa bileşen kendi workbench adı+simge çipini çizer (salt gösterim).
  std::function<void(Cekirdek&)> solCiz = nullptr;
};

class SeritCubugu {
 public:
  explicit SeritCubugu(SeritAyar ayar = {}) : ayar_(std::move(ayar)) {}
  SeritAyar& ayar() { return ayar_; }

  // Her kare bir kez (dockspace/3D Görünüm çizildikten SONRA). Boş/gizliyse ucuz erken çıkış.
  void ciz(Cekirdek& cekirdek);

  void gizle()  { gorunur_ = false; }
  void goster() { gorunur_ = true;  }
  bool gorunurMu() const { return gorunur_; }

 private:
  SeritAyar ayar_;
  bool gorunur_ = true;

  // --- kare-yerel yeniden kullanılan tampon (heap alloc'suz): grup → oge index'leri ---
  struct GrupGorunum { const std::string* ad; const char* etiket; int bas, son; };
  std::vector<int>         sirali_;   // menuler().hepsi() içine index'ler, gruplu sırada
  std::vector<GrupGorunum> gruplar_;  // her görünür grubun [bas,son) aralığı

  void duzenKur(Cekirdek& c, const std::string& aktifWb);  // sirali_/gruplar_ doldur (kare-yerel)
  const char* etiketBul(const std::string& grup) const;    // grupEtiket haritası
  bool grupGizli(const std::string& grup) const;
};

}  // namespace fiko::ui
```

### 2.3 `ciz()` iç akışı (özet — .cpp)

1. **Erken çıkış:** `!gorunur_` → return. `cekirdek.menuler().hepsi().empty()` → return.
   `cekirdek.workbenchler().hepsi().empty()` → return (çökme guard, workbench_secici:216 kalıbı).
2. **`duzenKur()`** — `sirali_.clear(); gruplar_.clear();` (kapasite korunur, alloc yok):
   grup sırasını (`grupSira` + kalanlar) gez; her grup için `hepsi()`'i tek geçişte tara,
   `oge.workbench.empty() || oge.workbench==aktifWb` ve `!grupGizli` olanların index'ini
   `sirali_`'ya it, `gruplar_`'a `[bas,son)` yaz. Boş grup atlanır.
3. **Pencere:** alt kenara sabit `ImGui` penceresi (bkz. §4.1). Zemin = FikoUi gradient +
   `glowCerceve` (arac_cubugu.cpp:217-224 kalıbı).
4. **Sol bölge:** `solCiz` varsa çağır; yoksa aktif workbench çipi (ad+simge, `wbk.bul(aktif)`).
5. **Gruplar:** her `gruplar_` aralığı için:
   - Butonlar: `sirali_[bas..son)` → `const MenuOge& o = hepsi()[idx]`; `etkin = !o.etkinMi || o.etkinMi(cekirdek)`;
     buton çiz (simge üst + ad alt); hover glow yalnız etkinken; tık & etkin → `komutCalistir(o,"toolbar")`.
   - Grup sonunda: dikey ayraç çizgisi + küçük grup etiketi (`etiketBul(grup)`), `grupBosluk` boşluk.
6. **Sağ bölge:** `sagCiz` varsa; içeriğe göre `tamGenislik`'te sağa dayalı, ortalıda şeridin sağ ucunda.
7. `ImGui::End()`.

### 2.4 Tek buton çizimi (simge + ad-altı) — FikoUi kalıbı

`arac_cubugu.cpp:284-310`'daki buton kalıbını **ad-altı ekleyerek** uyarla:
- `InvisibleButton({butonGen, yukseklik-2})` → hover/active/tik.
- `etkin=false` iken: glow YOK, dolgu alfa ~0.35, simge+ad `metinSoluk`, tık yok sayılır.
- Simge: `simgeCiz(dl, simge, {cx, üst}, butonSimgeB, renk)` (simge.hpp:28).
  `o.simge` boşsa fallback: ad'ın ilk UTF-8 harfi glifi (kısa) veya grup default.
- Ad: `dl->AddText` ile buton altına, `butonGen`'e sığmıyorsa "…" kırp
  (workbench_secici.cpp:128 `sigdir` yardımcı taşınabilir/paylaşılabilir).
- Hover: `glowCerceve(dl, rMin, rMax, t.vurgu, t.yuvarlak, h)` + tooltip = `o.ad`
  (pasifse tooltip'e "(kullanılamıyor)" eklenebilir — §3).
- Basış: `yay()` ile hafif küçülme (arac_cubugu.cpp:295).

---

## 3. Durum-Farkındalık Mekanizması

| Boyut | Mekanizma |
|-------|-----------|
| **Etkin/pasif (canlı)** | Her kare `etkin = !o.etkinMi || o.etkinMi(cekirdek)`. Pasif → gri (metinSoluk, dolgu α≈0.35), hover-glow yok, tık yok sayılır. (menü çubuğu `main.cpp:2163` ile birebir aynı ölçüt.) |
| **Workbench duyarlılığı** | Filtre `o.workbench.empty() || o.workbench==aktif`. `WorkbenchDegisti` olayına gerek yok — her kare `wbk.aktif()` okunur, içerik anında değişir. (İstenirse geçiş animasyonu: yeni grupların stagger belirmesi, workbench_secici.cpp:115 `stagger` kalıbı.) |
| **Aktif workbench göstergesi** | Sol çipte ad+simge; tıkla → radyal seçiciyi tetikle (opsiyonel: `solCiz` app'te `workbenchSecici` FAB'ını açacak flag'e bağlar) veya küçük açılır liste. |
| **"Neden pasif" ipucu** | MenuOge'de gerekçe alanı YOK. Kısa yol: pasif tooltip = `"<ad> — şu an kullanılamıyor"`. Zengin yol (opsiyonel, §7): `MenuOge`'ye `std::function<std::string(Cekirdek&)> pasifSebep` ekle; komut `bilgiVer(...)` metnini (ör. "Pad için önce sketch açın", `main.cpp:884`) buradan da döndürsün → tek kaynak. |
| **Seçim filtresi / trap gibi toggle'lar** | Bunlar komut değil, durum toggle'ı (`secimSis.fYuz` vb., `main.cpp:2243`). Şeride SOKMA — menü çubuğunda/ayrı yerde kalsın; şerit yalnız `MenuOge` komutlarını çizer (kapsam netliği). |

---

## 4. Yerleşim & Görünüm

### 4.1 Konumlanma (alt kenar, 3D'yi kapatmadan)

- `ImGui::GetMainViewport()` → `WorkPos`/`WorkSize`. Şerit `WorkSize.y - yukseklik` üstünde.
- **`tamGenislik=false` (varsayılan, referans hissi):** içerik genişliği kadar, viewport
  alt-**orta**da ortalı, köşeleri yuvarlak yüzen şerit. **`=true`:** tam-en, düz alt bar.
- Pencere bayrakları: `NoTitleBar|NoResize|NoMove|NoScrollbar|NoSavedSettings|NoDocking|NoNav|NoFocusOnAppearing`
  (arac_cubugu.cpp:204-206 kalıbı). `SetNextWindowViewport(mainViewport->ID)` → ayrı OS
  penceresine kaçmaz. `BringWindowToDisplayFront` → panellerin/3D'nin üstünde kalır (odak çalmadan).
- Zemin yarı-saydam gradient (α≈0.96) → 3D sahne kenarları hafif görünür; **3D Görünüm
  merkez dock'unun ALT şeridiyle çakışmasın** diye: ya (a) `WorkSize` şerit yüksekliği kadar
  kısaltılır (dockspace alanı küçülür), ya (b) şerit 3D'nin üstüne overlay olur. **Öneri (b)**
  overlay — dockspace'e dokunmadan, alt panellerin (Olay Denetçi) üstünde yüzer; 3D Görünüm
  zaten `PassthruCentralNode`. Alt dock'lu panel varsa şerit onları örtebilir → şerit
  yüksekliği kadar `WorkSize` kırpma (a) daha temiz olur; uygulamada test edilip seçilecek.

### 4.2 Referans grupları (varsayılan `SeritAyar`)

App, `grupEtiket` + `grupSira` ile registry iç adlarını referans etiketlerine eşler:

| Şerit etiketi (grupEtiket) | Registry grup | Komutlar (bugünkü kayıt) | WB |
|---|---|---|---|
| **GEÇMİŞ** | `Düzenle` | Geri Al ↶ / Yinele ↷ (etkinMi durum-duyarlı, `main.cpp:867-870`) | global |
| **ESKİZ** | `Sketch`* | Eskiz / Ref. Düzlem / Geo. Set / Body / 3D Yazı | part/gsd |
| **PRİMİTİF KATI** | `Geometri` | Kutu ◼ / Silindir ▮ / Küre ● / Koni ▲ (`main.cpp:872-875`) | part |
| **BOOLEAN** | `Boolean` | Birleştir ∪ / Çıkar ∖ / Kesişim ∩ | part |
| **FEATURE** | `Feature` | Pad ⬒ / Pocket ⬓ / Shaft ⟳ / Groove ◠ … | part |
| **İÇE AKTAR** | `Dosya` (seçili) | STEP İçe Aktar (grup gizlenmeyip tekil öğe de gösterilebilir) | global |

\* "ESKİZ" grubundaki bazı komutlar (Ref. Düzlem, Geo. Set, Body, 3D Yazı) bugün registry'de
tek "Sketch/Geometri" grubunda toplu olmayabilir — uygulama adımında bu komutların `grup`'u
netleştirilir (registry düzenlemesi, §5). Şerit koddan bağımsız: hangi grup varsa onu çizer.

**Görsel:** her buton dikey (simge üstte ~22px, ad altta ~12px). Grup arası ince dikey neon
ayraç (`t.kenar`), ayracın hemen sağında/altında küçük büyük-harf grup etiketi (`t.metinSoluk`).
Aktif workbench çipi solda (vurgu). Sağda kalite dropdown/slider + FPS (`sagCiz`).

### 4.3 Tema & animasyon (FikoUi kimliği)
- Renkler yalnız `ui::tema()` token: `panel/arka/vurgu/vurgu2/metin/metinSoluk/kenar/hata`
  (tema.hpp). **Hardcode renk yok.** Koyu/Neon/Açık temada otomatik uyum.
- `animf(id, hover?1:0, 14)` hover parlaması; `yay()` basış; `nabiz()` aktif WB çipi pulse.
- `glowCerceve`/gradient zemin (arac_cubugu.cpp), `simgeCiz` (glif/PNG/SVG destekli).
- **Sis yok** (proje kuralı).

---

## 5. Taşıma / Geçiş Stratejisi (menüyü kırmadan)

Registry TEK kaynak olduğundan "taşıma" = şeridi registry'den çizmek + (isteğe bağlı) menüyü
sadeleştirmek. Menü ve şerit aynı `MenuOge`'lerden beslenir → tanım mükerrerliği YOK.

**Faz P1 — Bileşen + kablolama (görünmez risk).**
1. `motor/ui/serit_cubugu.{hpp,cpp}` ekle; `motor/ui/CMakeLists.txt` + `fikoui.hpp`'ye kaydet.
2. `main.cpp`'de üye: `ui::SeritCubugu g_serit_{...ayar...};` (sınıf üyesi, MDI pencere-başına
   sahiplik — `g_araclar_` kalıbı `main.cpp:342`). Ayarı referans grup eşlemesiyle doldur.
3. Çizim: dockspace + 3D Görünüm + paneller çizildikten SONRA `g_serit_.ciz(cekirdek);`
   (mevcut `g_araclar.ciz()` yeri `main.cpp:3261` civarı — onunla aynı faz).
4. Başlangıçta `Görünüm` menüsüne "Alt Şerit" toggle ekle; **varsayılan açık** ama menü çubuğu
   da açık → geri dönüş garantili.

**Faz P2 — Grupları düzenle (registry tek dokunuş).**
5. Referans grup adlarını netleştir: "ESKİZ" komutlarının (Ref. Düzlem/Geo. Set/Body/3D Yazı)
   `MenuOge.grup`'unu tutarlı yap; eksik simgeleri (`simge==""` olan Dosya/STEP komutları,
   `main.cpp:856-861`) doldur ki şeritte anlamlı simge çıksın. Bu değişiklik menüye de yansır
   (tek kaynak) — çift bakım yok.

**Faz P3 — Menü sadeleştirme (opsiyonel, geri-döndürülebilir).**
6. İstenirse menü çubuğunu Dosya/Düzenle/Görünüm/Pencereler/Yardım'a indir; eylem grupları
   (Geometri/Boolean/Feature/GSD) şeritte birincil olur. Registry değişmez → komut paleti +
   makro + plugin hepsi çalışmaya devam. Menüyü tamamen kaldırmak GEREKMEZ (keşif erişimi kalsın).

**Faz P4 — Eski toolbar emekliliği.**
7. `g_wbToolbarGoster` bloğu (`main.cpp:3175-3249`) ve kullanılmayan `g_araclar` `geometri_cubugu`
   kurulumu (`main.cpp:1767-1775`, çizim 3261) kaldırılabilir/emekliye ayrılabilir. `AracCubugu`
   bileşeni galeri demosunda (`galeri.cpp:498`) kalabilir; app'te kullanılmıyorsa silme kararı
   ayrı (WIP olabilir — tek-taraflı silme). **Bu fazı kullanıcı onayı olmadan yapma.**

---

## 6. Neden AracCubugu'yu Genişletmiyoruz — Net Gerekçe

`AracCubugu` = **N pencere, tek grup/pencere, simge-only, sürükle-dock-snap, buton KOPYASI**.
Referans = **1 şerit, çoklu grup, simge+ad-altı, sabit HUD, KOPYASIZ registry çizimi**.
İki modeli tek sınıfta birleştirmek ("mode" bayrakları) sınıfı iki-kişilikli ve kırılgan yapar;
ayrıca kopyasız-DRY ilkesini kopya-tabanlı sınıfa sokmak veri modelini bozar. Ayrı, dar,
tek-sorumluluklu `SeritCubugu` daha temiz (OOP/minimal ilke). Ortak görsel kod (buton çizimi,
`sigdir`, glow) yardımcıya çıkarılıp paylaşılabilir — mükerrer çizim yazma.

---

## 7. Opsiyonel Registry İyileştirmeleri (yalnız istenirse)

`MenuOge`'ye eklenebilecek, geriye-uyumlu (varsayılan boş) alanlar:
- `std::function<std::string(Cekirdek&)> pasifSebep` — pasif tooltip'te "neden" (§3).
- `bool tehlikeli = false` / `bool cokmeRiski = false` — denetim ajanının işaretlediği riskli
  komutlar (§8); şerit bunları ekstra görsel uyarıyla (kenar `t.uyari`) çizebilir.
- `int agirlik` / öne-çıkarma — grup içi sıralama (bugün `sira` hep 0).

Bunlar **gerekmez**; şerit mevcut alanlarla tam çalışır. Eklenirse menü/palet de kazanır.

---

## 8. Çökme-Farkındalığı (denetim ajanıyla kesişim)

- Şerit **her komuta erişim verir** → riskli komutlar `etkinMi` ile ön koşulları
  sağlanmadıkça PASİF kalmalı. Örn. Pad/Pocket bugün `aktifSketch`/hedef yokken çalışınca
  `bilgiVer` ile uyarıp erken dönüyor (`main.cpp:884,890-895`) ama menüde **etkin** görünüyor.
  **Öneri:** bu ön koşulları `etkinMi`'ye taşı (tek kaynak) → şerit + menü + palet aynı anda
  komutu pasifleştirir, kullanıcı çökme/no-op yoluna hiç giremez. Denetim ajanının haritaladığı
  her "riskli komut" için `etkinMi` guard'ı registry'de tanımlanır; şerit otomatik uyar.
- Şerit kendi tarafında da: `etkin==false` iken `komutCalistir` **çağırmaz** (görsel + davranış
  kilidi çift). `komutCalistir` zaten lisans+etkinMi kapısından geçirir (`cekirdek.hpp:47-49`) —
  şerit ekstra ön-kilit ile tık israfını da önler.
- Guard'lar: boş registry / aktif workbench yok / 3D Görünüm henüz konumlanmamış (ilk kareler,
  `main.cpp:3192` `vpGecerli` kalıbı) → erken çıkış, ölü konuma kilitlenme yok.

---

## 9. Performans

- **Alloc yok (sıcak yol):** `sirali_`/`gruplar_` üye tampon, her kare `clear()` (kapasite kalır),
  `push_back` yalnız int/pointer. Registry O(n≈düzine) tek geçiş — ölçülemez maliyet.
- **`etkinMi` her kare** ama komut sayısı küçük ve callback'ler ucuz (bool sorgu). Ağır bir
  `etkinMi` olursa o komutun sorumluluğu; şerit ekstra iş yapmaz.
- **Kopyasız:** buton verisi saklanmaz → bellek sabit, senkron yok.
- **Gizli/boş → erken çıkış:** `!gorunur_`/boş registry maliyeti ~sıfır.
- **Tek ImGui penceresi + tek DrawList**; simge dokuları FikoUi atlasından (glif/PNG/SVG paylaşımlı).
- Çoklu-viewport/MDI: `SetNextWindowViewport(main)` + display-front → ayrı pencereye kaçmaz,
  pencere-başına `SeritCubugu` üyesiyle her belge kendi şeridini çizer.

---

## 10. Uygulama Adımları (sonraki ajan için — sıralı)

1. **`motor/ui/include/fiko/ui/serit_cubugu.hpp`** — §2.2 header'ı yaz.
2. **`motor/ui/src/serit_cubugu.cpp`** — `duzenKur` (filtre+grupla, alloc'suz), `ciz`
   (pencere+zemin+sol/gruplar/sağ), tek-buton çizimi (simge+ad-altı, etkin/pasif, hover/glow,
   tık→`komutCalistir(o,"toolbar")`). Görsel kalıp: `arac_cubugu.cpp:217-310`. Sığdır yardımcısı:
   `workbench_secici.cpp:128` `sigdir` → ortak yardımcıya çıkar (mükerrer yazma).
3. **`motor/ui/CMakeLists.txt`** + **`fikoui.hpp`** — kaydet (arac_cubugu kaydı kalıbı).
4. **`main.cpp`** — sınıf üyesi `ui::SeritCubugu g_serit_` (`g_araclar_` yanına, `:342`);
   `SeritAyar` referans eşlemesiyle doldur (grupEtiket/grupSira/gizli, sagCiz=kalite+FPS,
   solCiz=WB çipi→radyal seçici flag'i).
5. **Çizim çağrısı** — paneller/`galeriCiz`/`g_araclar.ciz()` fazından sonra `g_serit_.ciz(cekirdek);`
   (`:3261` civarı).
6. **`Görünüm` menüsü** — "▭ Alt Şerit" toggle (`main.cpp:2178` Pencereler menüsü kalıbı),
   varsayılan açık.
7. **Registry düzeni (P2)** — ESKİZ grup adlarını netleştir + eksik simgeleri doldur
   (`main.cpp:856-861,872-…`). Yalnız `grup`/`simge` string'leri; davranış değişmez.
8. **Test/doğrulama** — kullanıcı yapar (uygulamayı ajan çalıştırmaz, yalnız derler).
   Kontrol: workbench değişince şerit içeriği değişiyor mu; Geri Al/Yinele boş geçmişte pasif mi;
   Pad sketch yokken pasif mi (P2 sonrası); kalite/FPS sağda mı; koyu/açık temada uyum.

---

## 11. Dosya:Satır Referans Özeti

| Konu | Konum |
|------|-------|
| `MenuOge`/`MenuKaydi` (veri kaynağı) | `motor/cekirdek/include/fiko/cekirdek/kayit.hpp:35-67` |
| Merkezi dispatch `komutCalistir` | `motor/cekirdek/include/fiko/cekirdek/cekirdek.hpp:40-60` |
| Menü çubuğu çizimi (kalıp) | `uygulama/fikocad/main.cpp:2156-2169` |
| Komut kayıt helper `komut(...)` + örnekler | `uygulama/fikocad/main.cpp:817-878` |
| Workbench kaydı | `uygulama/fikocad/main.cpp:826-838`; `workbench.hpp` |
| Workbench göstergesi (menü içi) | `uygulama/fikocad/main.cpp:2224-2236` |
| Radyal workbench seçici (dokunma) | `uygulama/fikocad/workbench_secici.cpp` |
| Mevcut FikoUi toolbar (referans/emeklilik) | `motor/ui/…/arac_cubugu.hpp` + `.cpp` (buton çizimi `:284-310`, zemin `:217-224`) |
| Legacy WB toolbar bloğu (emeklilik) | `uygulama/fikocad/main.cpp:3175-3249` |
| `g_araclar` kurulum/çizim | `uygulama/fikocad/main.cpp:1767-1775`, `:3261` |
| Tema token | `motor/ui/include/fiko/ui/tema.hpp` |
| Animasyon (`animf/yay/nabiz`) | `motor/ui/include/fiko/ui/animasyon.hpp` |
| Simge (`Simge/simgeCiz`) | `motor/ui/include/fiko/ui/simge.hpp` |
| Metin sığdırma `sigdir` (ortak yardımcıya) | `uygulama/fikocad/workbench_secici.cpp:128-162` |
| Komut çökme haritası (etkinMi guard kaynağı) | `docs/komut_denetim_raporu.md` |
