#pragma once // FikoPanel — polimorfik UI panel hiyerarşisi (OOP Dalga 1 kalanı). // main.cpp'de kareCiz() tek tek panel çizim fonksiyonlarını çağırıyordu; artık // FikoPencereYonetici tüm panelleri polimorfik olarak sürer (kayıt/görünürlük/ // plugin-dostu). Her pencere kendi FikoPencereYonetici'sine sahiptir (per-window). // // DAVRANIŞ BİREBİR: Bu ilk dalga panelleri (Özellikler/Ürün Ağacı/Işık/Olay/Makro/ // Eklenti) GÖVDELERİNİ TAŞIMAZ — mevcut serbest fonksiyonu SARAR. Bu paneller // görünürlük bayrağını (panelOzellik, panelAgac...) KENDİ İÇİNDE denetler // (ör. `if (!b.panelIsik) return;`) ve kapalıyken bile yan-etki üretebilir // (ör. ozelliklerPaneliCiz → ozellikAcikOnceki güncellemesi). Bu yüzden aktif() // bu sarmalayıcılar için HEP true döner ve cizTumu() her kareyi çizdirir → // eski çağrı sırası/sayısı korunur. İç-denetimsiz gelecekteki paneller aktif()'i // gerçek bayrakla override edebilir. #include #include #include #include #include #include #include "imgui.h" #include "fiko/ayar/ayar_sistemi.hpp" // ayar::AyarSistemi + ayar::sistem() #include "fiko/cekirdek/lisans.hpp" // LisansSistemi (Komut Denetim paneli) #include "lisans_yukle.hpp" // lisansDurumBolumu (lisans durumu/katalog) #include "fiko/cekirdek/guncelleme.hpp" // GuncellemeServisi (Güncelleme paneli) #include "guncelleme_penceresi.hpp" #include "geri_bildirim_penceresi.hpp" // GeriBildirimServisi (Geri Bildirim paneli) #include "surec_kopru.hpp" // SurecKopru (Süreçler paneli — merkezi komut) #include "analiz_penceresi.hpp" #include "ayarlar_penceresi.hpp" #include "cam_operasyon_penceresi.hpp" #include "cam_paneli.hpp" #include "cam_parca_op_penceresi.hpp" #include "cam_simulasyon_penceresi.hpp" #include "malzeme_penceresi.hpp" #include "zeka_penceresi.hpp" #include "istakip_penceresi.hpp" #include "istakip_sema_penceresi.hpp" #include "calisma_alani_penceresi.hpp" #include "cam_takim_ekseni_penceresi.hpp" #include "cam_takim_penceresi.hpp" #include "dinamik_komut_penceresi.hpp" #include "dokum_penceresi.hpp" #include "kinematik_penceresi.hpp" #include "strafor_penceresi.hpp" #include "agirlik_penceresi.hpp" #include "feature_penceresi.hpp" #include "referans_penceresi.hpp" #include "gsd_penceresi.hpp" #include "hizli3d_penceresi.hpp" #include "isik_penceresi.hpp" #include "ozellikler_paneli.hpp" #include "sketch_ui.hpp" #include "urun_agaci_paneli.hpp" #include "uygulama_baglam.hpp" // UygulamaBaglam tam tanım (b.cekirdek/sahne/...) #include "yardimci_penceler.hpp" namespace fiko { class VulkanBaglam; // Soyut taban: kimlikli, görünürlük-farkında, polimorfik çizilebilir panel. class FikoPanel { public: virtual ~FikoPanel() = default; // Bir kare çiz (ImGui immediate-mode). UygulamaBaglam alt sistem + UI durumu taşır. virtual void ciz(UygulamaBaglam& b) = 0; // Panel adı (menü/plugin/hata mesajı için — Türkçe). virtual const char* baslik() const = 0; // Görünürlük denetimi. İç-denetimli paneller HEP true döner (bkz. dosya başı not). virtual bool aktif(const UygulamaBaglam& b) const = 0; }; // Panel kaydı + toplu çizim. Her FikoBelgePenceresi kendi örneğini tutar (per-window). class FikoPencereYonetici { public: void ekle(std::unique_ptr panel) { if (panel) paneller_.push_back(std::move(panel)); } // Kayıtlı tüm panelleri sırayla çizer (aktif olanları). Kayıt sırası = çizim sırası. void cizTumu(UygulamaBaglam& b) { for (auto& p : paneller_) { if (p->aktif(b)) p->ciz(b); } } size_t sayi() const { return paneller_.size(); } private: std::vector> paneller_; }; // ---- Somut paneller (Dalga 1: mevcut serbest fonksiyonu SARAR, gövde taşınmaz) ---- // aktif() HEP true: paneller görünürlüğü kendi içinde denetler (davranış birebir). class FikoOzelliklerPanel : public FikoPanel { public: void ciz(UygulamaBaglam& b) override { // ekranG = ImGui ekran genişliği (ilk konumlandırma). Kare-yerel, buradan alınır. ozelliklerPaneliCiz(b, ImGui::GetIO().DisplaySize.x); } const char* baslik() const override { return "Özellikler"; } bool aktif(const UygulamaBaglam&) const override { return true; } }; class FikoOlayPanel : public FikoPanel { public: void ciz(UygulamaBaglam& b) override { olayDenetciCiz(b); } const char* baslik() const override { return "Olay Denetçi"; } bool aktif(const UygulamaBaglam&) const override { return true; } }; class FikoUrunAgaciPanel : public FikoPanel { public: void ciz(UygulamaBaglam& b) override { urunAgaciPaneliCiz(b); } const char* baslik() const override { return "Ürün Ağacı"; } bool aktif(const UygulamaBaglam&) const override { return true; } }; class FikoIsikPanel : public FikoPanel { public: void ciz(UygulamaBaglam& b) override { isikPenceresiCiz(b); } const char* baslik() const override { return "Işıklar"; } bool aktif(const UygulamaBaglam&) const override { return true; } }; class FikoMakroPanel : public FikoPanel { public: void ciz(UygulamaBaglam& b) override { makroKonsoluCiz(b); } const char* baslik() const override { return "Makro Konsolu"; } bool aktif(const UygulamaBaglam&) const override { return true; } }; class FikoEklentiPanel : public FikoPanel { public: void ciz(UygulamaBaglam& b) override { eklentiYoneticiCiz(b); } const char* baslik() const override { return "Eklenti Yöneticisi"; } bool aktif(const UygulamaBaglam&) const override { return true; } }; // ---- Komut Denetim / Lisans paneli — merkezi LisansSistemi'nin görünür yönetimi ---- // "Tek merkezden takip/yönetim": kullanım istatistiği + lisans kipi + grup izinleri. // LisansSistemi& + Cekirdek& ctor-ref (belge ömrü boyunca geçerli). degistir() ile açılır // (menü komutu toggle eder); kapalıyken çizilmez. class FikoLisansPanel : public FikoPanel { public: FikoLisansPanel(LisansSistemi& lis, Cekirdek& cek) : lis_(lis), cek_(cek) {} void degistir() { acik_ = !acik_; } const char* baslik() const override { return "Komut Denetim"; } bool aktif(const UygulamaBaglam&) const override { return acik_; } void ciz(UygulamaBaglam&) override { if (!acik_) return; ImGui::SetNextWindowSize(ImVec2(420, 560), ImGuiCond_FirstUseEver); if (ImGui::Begin("🔒 Komut Denetim / Lisans", &acik_)) { lisansDurumBolumu(lis_, cek_); // --- Lisans kipi --- ImGui::TextUnformatted("Lisans kipi"); const int kip = static_cast(lis_.kip()); if (ImGui::RadioButton("Serbest (tümü izinli)", kip == 0)) lis_.kipAyarla(LisansSistemi::Kip::Serbest); if (ImGui::RadioButton("Kısıtlı (yalnız izinli gruplar)", kip == 1)) lis_.kipAyarla(LisansSistemi::Kip::Kisitli); // --- Grup izinleri (menü gruplarından) --- if (lis_.kip() == LisansSistemi::Kip::Kisitli) { ImGui::SeparatorText("İzinli gruplar"); for (const std::string& g : cek_.menuler().gruplar()) { bool izin = lis_.grupIzinli(g); if (ImGui::Checkbox(g.c_str(), &izin)) { if (izin) lis_.grupIzinVer(g); else lis_.grupIzinKaldir(g); } } } // --- Kullanım istatistiği (takip) --- ImGui::SeparatorText("Kullanım"); ImGui::Text("Toplam komut: %llu", static_cast(lis_.toplamKomut())); std::vector> sirali(lis_.tumKullanim().begin(), lis_.tumKullanim().end()); std::sort(sirali.begin(), sirali.end(), [](const auto& a, const auto& b) { return a.second > b.second; }); if (ImGui::BeginTable("lisans_kullanim", 2, ImGuiTableFlags_Borders | ImGuiTableFlags_RowBg | ImGuiTableFlags_ScrollY, ImVec2(0, 200))) { ImGui::TableSetupColumn("Komut"); ImGui::TableSetupColumn("Sayı", ImGuiTableColumnFlags_WidthFixed, 60); ImGui::TableHeadersRow(); for (const auto& [ad, sayi] : sirali) { ImGui::TableNextRow(); ImGui::TableSetColumnIndex(0); ImGui::TextUnformatted(ad.c_str()); ImGui::TableSetColumnIndex(1); ImGui::Text("%llu", static_cast(sayi)); } ImGui::EndTable(); } if (ImGui::Button("Sayaçları sıfırla")) lis_.kullanimSifirla(); // --- Red telemetrisi: en çok reddedilen sebep = satış/upsell sinyali --- if (lis_.toplamRed() > 0) { ImGui::SeparatorText("Reddedilen komutlar"); ImGui::Text("Toplam red: %llu", (unsigned long long)lis_.toplamRed()); const std::pair sebepler[] = { {LisansSistemi::RedSebep::Komut, "Komut hakkı yok"}, {LisansSistemi::RedSebep::Grup, "Grup kapalı"}, {LisansSistemi::RedSebep::Feature, "Feature kapalı"}, {LisansSistemi::RedSebep::Workbench, "Workbench kapalı"}, {LisansSistemi::RedSebep::Kota, "Kota doldu"}, {LisansSistemi::RedSebep::Expiry, "Süre doldu"}, {LisansSistemi::RedSebep::NodeLock, "Makine uyuşmuyor"}}; for (const auto& [s, ad] : sebepler) if (const u64 n = lis_.redSayaci(s)) ImGui::BulletText("%s: %llu", ad, (unsigned long long)n); } } ImGui::End(); } private: LisansSistemi& lis_; Cekirdek& cek_; bool acik_ = false; }; // NOT: Süreçler paneli → FikoSurecYoneticiPanel'e TAŞINDI (surec_yonetici_panel.{hpp,cpp}) // — görev yöneticisi dashboard'ı (sonlandırma + olay akışı + heartbeat). main.cpp orada kaydeder. // ---- Sketcher / Hızlı 3D: yalnız UygulamaBaglam& alan basit paneller ---- class FikoSketcherPanel : public FikoPanel { public: void ciz(UygulamaBaglam& b) override { sketcherPaneliCiz(b); } const char* baslik() const override { return "Sketcher"; } bool aktif(const UygulamaBaglam&) const override { return true; } }; class FikoSketchAraclariPanel : public FikoPanel { public: void ciz(UygulamaBaglam& b) override { sketchAraclariCiz(b); } const char* baslik() const override { return "Sketch Tools"; } bool aktif(const UygulamaBaglam&) const override { return true; } }; class FikoHizli3dPanel : public FikoPanel { public: void ciz(UygulamaBaglam& b) override { hizli3dPencereCiz(b); } const char* baslik() const override { return "Hızlı 3D"; } bool aktif(const UygulamaBaglam&) const override { return true; } }; // ---- Karmaşık paneller: alt sistem ref'lerini UygulamaBaglam'dan (b.X) alır ---- // (cekirdek/sahne/camSis/partD/gsdSis/analizSis/refSecim/pencere zaten b'de). class FikoCamOperasyonPanel : public FikoPanel { public: void ciz(UygulamaBaglam& b) override { camOperasyonPencereleriCiz(b.cekirdek, b.sahne, b.camSis); } const char* baslik() const override { return "CAM Operasyon"; } bool aktif(const UygulamaBaglam&) const override { return true; } }; class FikoCamParcaOpPanel : public FikoPanel { public: void ciz(UygulamaBaglam& b) override { camParcaOpPencereleriCiz(b.cekirdek, b.sahne, b.camSis); } const char* baslik() const override { return "CAM Parça Op"; } bool aktif(const UygulamaBaglam&) const override { return true; } }; class FikoCamTakimPanel : public FikoPanel { public: void ciz(UygulamaBaglam& b) override { camTakimPencereleriCiz(b.cekirdek, b.sahne, b.camSis); } const char* baslik() const override { return "CAM Takım"; } bool aktif(const UygulamaBaglam&) const override { return true; } }; class FikoCamTakimEkseniPanel : public FikoPanel { public: void ciz(UygulamaBaglam& b) override { camTakimEkseniPencereleriCiz(b.cekirdek, b.sahne, b.camSis); } const char* baslik() const override { return "CAM Takım Ekseni"; } bool aktif(const UygulamaBaglam&) const override { return true; } }; class FikoFeaturePanel : public FikoPanel { public: void ciz(UygulamaBaglam& b) override { featurePencereleriCiz(b.cekirdek, b.sahne, b.partD, b.refSecim); } const char* baslik() const override { return "Part Design Feature"; } bool aktif(const UygulamaBaglam&) const override { return true; } }; // Otomatik güncelleme bildirim/denetim paneli (app-global GuncellemeServisi). class FikoGuncellemePanel : public FikoPanel { public: explicit FikoGuncellemePanel(GuncellemeServisi& svc) : svc_(svc) {} void ciz(UygulamaBaglam&) override { guncellemePenceresiCiz(svc_, acik_); } const char* baslik() const override { return "Güncelleme"; } bool aktif(const UygulamaBaglam&) const override { return true; } void ac() { acik_ = true; } private: GuncellemeServisi& svc_; bool acik_ = false; }; // Geri bildirim penceresi (app-global GeriBildirimServisi + per-window UI durumu). class FikoGeriBildirimPanel : public FikoPanel { public: explicit FikoGeriBildirimPanel(GeriBildirimServisi& svc) : svc_(svc) {} void ciz(UygulamaBaglam& b) override { geriBildirimPenceresiCiz(b, svc_, ui_); } const char* baslik() const override { return "Geri Bildirim"; } bool aktif(const UygulamaBaglam&) const override { return true; } void ac() { ui_.acik = true; } private: GeriBildirimServisi& svc_; GeriBildirimUI ui_; }; // Dinamik (calisma-zamani) pencereli komutlar — Lua/DLL eklentiden eklenen komutlar. // Her kare: registry→menu senkronu + acik komut pencereleri (paramlar + ✔ Tamam). class FikoDinamikKomutPanel : public FikoPanel { public: void ciz(UygulamaBaglam& b) override { dinamikKomutMenuSenkron(b.cekirdek); dinamikKomutPencereleriCiz(b.cekirdek, b.sahne, b.refSecim); } const char* baslik() const override { return "Dinamik Komut"; } bool aktif(const UygulamaBaglam&) const override { return true; } }; // CATIA Reference Elements: referans Nokta / Çizgi / Düzlem oluşturma penceresi. class FikoReferansPanel : public FikoPanel { public: void ciz(UygulamaBaglam& b) override { referansPencereCiz(b.sahne, b.sketchGir, b.bilgiVer); } const char* baslik() const override { return "Referans Öğe"; } bool aktif(const UygulamaBaglam&) const override { return true; } }; class FikoGsdPanel : public FikoPanel { public: void ciz(UygulamaBaglam& b) override { gsdPencereleriCiz(b.cekirdek, b.sahne, b.gsdSis, b.refSecim); } const char* baslik() const override { return "GSD Feature"; } bool aktif(const UygulamaBaglam&) const override { return true; } }; class FikoAnalizPanel : public FikoPanel { public: void ciz(UygulamaBaglam& b) override { analizPencereleriCiz(b.cekirdek, b.sahne, b.analizSis); } const char* baslik() const override { return "Analiz"; } bool aktif(const UygulamaBaglam&) const override { return true; } }; // CAE/Simülasyon: kinematik + DMU. Görünürlüğü kendi bayrağında (workbench açar). class FikoKinematikPanel : public FikoPanel { public: void ciz(UygulamaBaglam& b) override { kinematikPaneliCiz(b.cekirdek, b.sahne, b.mekanizma, b.caeKurulumlar); } const char* baslik() const override { return "Kinematik / DMU"; } bool aktif(const UygulamaBaglam&) const override { return kinematikPaneliAcik(); } }; class FikoKesitPanel : public FikoPanel { public: void ciz(UygulamaBaglam& b) override { kesitPencereleriCiz(b.cekirdek, b.sahne, b.analizSis); } const char* baslik() const override { return "Kesit"; } bool aktif(const UygulamaBaglam&) const override { return true; } }; // ---- Ctor-ref paneli: UygulamaBaglam'da OLMAYAN ref'leri kur()'da bağlar ---- // CAM Programı paneli: camUstte (ustte-tut bayrağı) UygulamaBaglam'da değil (ort_'ta) // → ctor'da bağlanır. hwnd her kare b.pencere.dogalTutamac()'tan taze alınır. class FikoCamProgramPanel : public FikoPanel { public: explicit FikoCamProgramPanel(bool& camUstte) : camUstte_(camUstte) {} void ciz(UygulamaBaglam& b) override { camPaneliCiz(b.cekirdek, b.sahne, b.camSis, camUstte_, b.pencere.dogalTutamac()); } const char* baslik() const override { return "CAM Programı"; } bool aktif(const UygulamaBaglam&) const override { return true; } private: bool& camUstte_; }; // Döküm sim paneli: DokumSistemi UygulamaBaglam'da değil (belge.dokumSis) → ctor bağlar. class FikoDokumPanel : public FikoPanel { public: explicit FikoDokumPanel(DokumSistemi& ds) : ds_(ds) {} void ciz(UygulamaBaglam& b) override { dokumPencereleriCiz(b.cekirdek, b.sahne, ds_); } const char* baslik() const override { return "Döküm Simülasyonu"; } bool aktif(const UygulamaBaglam&) const override { return true; } private: DokumSistemi& ds_; }; // Strafor Kesici paneli: kendi durumunu (dosya-static) taşır → sarmalayıcı yalnız çizer. class FikoStraforPanel : public FikoPanel { public: void ciz(UygulamaBaglam& b) override { straforPencereCiz(b.cekirdek, b.sahne); } const char* baslik() const override { return "Strafor Kesici"; } bool aktif(const UygulamaBaglam&) const override { return true; } }; // Ağırlık Hesaplama paneli: durum dosya-static (strafor kalıbı) → sarmalayıcı yalnız çizer. class FikoAgirlikPanel : public FikoPanel { public: void ciz(UygulamaBaglam& b) override { agirlikPenceresiCiz(b); } const char* baslik() const override { return "Ağırlık Hesaplama"; } bool aktif(const UygulamaBaglam&) const override { return true; } }; // Malzeme paneli: doku yükleme için BoruHatlari (GPU doku dizisi) gerekir → ctor bağlar. class FikoMalzemePanel : public FikoPanel { public: explicit FikoMalzemePanel(BoruHatlari& hatlar) : hatlar_(hatlar) {} void ciz(UygulamaBaglam& b) override { malzemePenceresiCiz(b, hatlar_); } const char* baslik() const override { return "Malzeme"; } bool aktif(const UygulamaBaglam&) const override { return true; } private: BoruHatlari& hatlar_; }; // Zekâ Analizi paneli: durum dosya-static (malzeme kalıbı) → sarmalayıcı yalnız çizer. class FikoZekaPanel : public FikoPanel { public: void ciz(UygulamaBaglam& b) override { zekaPenceresiCiz(b); } const char* baslik() const override { return "Zekâ Analizi"; } bool aktif(const UygulamaBaglam&) const override { return true; } }; // İş Takip paneli: durum dosya-static (zeka kalıbı) → sarmalayıcı yalnız çizer. class FikoIstakipPanel : public FikoPanel { public: void ciz(UygulamaBaglam& b) override { istakipPenceresiCiz(b); } const char* baslik() const override { return "İş Takip"; } bool aktif(const UygulamaBaglam&) const override { return true; } }; // Şema Tasarımcı paneli (F2) — "_sema" kayıtlarını düzenler (aynı kalıp). class FikoIstakipSemaPanel : public FikoPanel { public: void ciz(UygulamaBaglam& b) override { istakipSemaPenceresiCiz(b); } const char* baslik() const override { return "Şema Tasarımcı"; } bool aktif(const UygulamaBaglam&) const override { return true; } }; // CATIA Çalışma Alanı Yöneticisi (Faz 2 UI) — durum dosya-static (istakip kalıbı). class FikoCalismaAlaniPanel : public FikoPanel { public: void ciz(UygulamaBaglam& b) override { calismaAlaniPenceresiCiz(b); } const char* baslik() const override { return "Çalışma Alanı Yöneticisi"; } bool aktif(const UygulamaBaglam&) const override { return true; } }; // CAM simülasyon paneli: VulkanBaglam UygulamaBaglam'da değil (pencere-altyapısı) → ctor bağlar. class FikoCamSimPanel : public FikoPanel { public: explicit FikoCamSimPanel(VulkanBaglam& vulkan) : vulkan_(vulkan) {} void ciz(UygulamaBaglam& b) override { camSimPenceresiCiz(b, vulkan_); } const char* baslik() const override { return "CAM Simülasyon"; } bool aktif(const UygulamaBaglam&) const override { return true; } private: VulkanBaglam& vulkan_; }; // Merkezi Ayarlar penceresi: UygulamaBaglam kullanmaz (ayar::sistem() global + durum) → ctor bağlar. class FikoAyarlarPanel : public FikoPanel { public: explicit FikoAyarlarPanel(AyarlarPencereDurum& durum) : durum_(durum) {} void ciz(UygulamaBaglam&) override { ayarlarPenceresiCiz(ayar::sistem(), durum_); } const char* baslik() const override { return "Ayarlar"; } bool aktif(const UygulamaBaglam&) const override { return true; } private: AyarlarPencereDurum& durum_; }; } // namespace fiko