#include "fiko/sahne/pmi_nesne.hpp" #include namespace fiko { const char* PmiNesnesi::turAdi() const { const pmi::PmiOge* o = oge(); if (!o) return "PMI"; switch (o->tip) { case pmi::PmiTip::Gdt: return "GD&T"; case pmi::PmiTip::Datum: return "Datum"; case pmi::PmiTip::DatumHedef: return "Datum Hedefi"; case pmi::PmiTip::Not: return "Not"; default: return "Bayrak"; } } std::string PmiNesnesi::ad() const { const Dugum* d = dugum(); return d ? d->ad : std::string(); } void PmiNesnesi::adAyarla(const std::string& yeni) { if (Dugum* d = dugum()) d->ad = yeni; } std::vector PmiNesnesi::bagimliliklar() const { std::vector b; if (const pmi::PmiOge* o = oge()) for (const pmi::PmiHedef& h : o->hedefler) if (h.govde && std::find(b.begin(), b.end(), (Varlik)h.govde) == b.end()) b.push_back((Varlik)h.govde); return b; } OzellikSeti PmiNesnesi::ozellikler(Dunya& dunya) { OzellikSeti s; pmi::PmiOge* o = oge(); if (!o) return s; const Varlik k = kimlik_; PmiSistemi* ps = sistem_; const u32 pk = pmiKimlik_; Ozellik metin = Ozellik::metin( "Metin", [ps, pk] { const pmi::PmiOge* oo = ps->defter().bul(pk); return oo ? pmi::ogeMetni(*oo) : std::string(); }, nullptr); metin.saltOkunur = true; // içerik düzenleme bağlam menüsünden (DM) s.push_back(std::move(metin)); if (o->tip == pmi::PmiTip::Gdt) { s.push_back(Ozellik::sayi( "Tolerans", [ps, pk] { const auto* oo = ps->defter().bul(pk); return oo ? oo->gdt[0].tolerans : 0.0; }, [ps, pk](f64 v) { if (auto* oo = ps->defter().bul(pk)) { oo->gdt[0].tolerans = std::max(0.0, v); ++oo->surum; } })); } if (o->tip == pmi::PmiTip::Not || o->tip == pmi::PmiTip::Bayrak) { s.push_back(Ozellik::metin( "İçerik", [ps, pk] { const auto* oo = ps->defter().bul(pk); return oo ? oo->metin : std::string(); }, [ps, pk](const std::string& m) { if (auto* oo = ps->defter().bul(pk)) { oo->metin = m; ++oo->surum; } })); } for (auto& [ad, deger] : o->ozelAlanlar) { // custom alanlar panelde düzenlenir std::string* dp = °er; s.push_back(Ozellik::metin(ad, [dp] { return *dp; }, [dp](const std::string& m) { *dp = m; })); } s.push_back(Ozellik::bayrak( "Görünür", [ps, pk] { const auto* oo = ps->defter().bul(pk); return oo && oo->goster; }, [ps, pk](bool g) { if (auto* oo = ps->defter().bul(pk)) oo->goster = g; })); (void)dunya; (void)k; return s; } // ---- PmiGorunum ---- bool PmiGorunum::gorunur() const { const pmi::PmiOge* o = oge(); return o ? o->goster : false; } void PmiGorunum::gorunurAyarla(bool g) { if (pmi::PmiOge* o = oge()) o->goster = g; } const char* PmiGorunum::agacSimgesi() const { const pmi::PmiOge* o = oge(); if (!o) return "⌖"; switch (o->tip) { case pmi::PmiTip::Gdt: return pmi::karakterGlif(o->gdt[0].karakter); case pmi::PmiTip::Datum: case pmi::PmiTip::DatumHedef: return "▲"; case pmi::PmiTip::Not: return "🗒"; default: return "🚩"; } } std::string PmiGorunum::agacMiniBilgi(Dunya&) const { const pmi::PmiOge* o = oge(); if (!o) return {}; std::string m = pmi::ogeMetni(*o); for (char& c : m) if (c == '\n') c = ' '; // ağaçta tek satır if (m.size() > 40) m = m.substr(0, 40) + "…"; return m; } void PmiGorunum::agacRozetleri(Dunya&, std::vector& out) const { const pmi::PmiOge* o = oge(); if (!o) return; if (!o->gecerli) { // hedef çözülemedi: sessiz silme YOK, görünür uyarı VAR AgacRozet r; r.metin = "kopuk"; r.renk = agacRenk(255, 90, 80); out.push_back(std::move(r)); } else if (!o->hedefler.empty() && o->hedefler[0].kid == 0) { AgacRozet r; // KYA kimliksiz: ordinal kayarsa yanlış yüze gider (uyar) r.metin = "kimliksiz"; r.renk = agacRenk(255, 180, 60); out.push_back(std::move(r)); } } } // namespace fiko