#include "yardimci_penceler.hpp" #include #include #include #include "uygulama_baglam.hpp" // catia_makro.hpp / catia_makro.cpp GECICI olarak devre disi: dosyalar depoda ve // diskte yok, catiaCalismaAlaniMakroUret() tanimi bulunamadi. Dosya geri // geldiğinde bu guard'ı ve CMakeLists.txt'teki satırı geri al. #if defined(FIKO_CATIA_MAKRO) #include "catia_makro.hpp" #endif #include "fiko/betik/makro_motor.hpp" #include "fiko/eklenti/eklenti_yonetici.hpp" #include "fiko/platform/sistem.hpp" #include "fiko/ui/pencere_cerceve.hpp" #include "fiko/ui/tema.hpp" #include "imgui.h" namespace fiko { // ---- Makro Konsolu (Lua) ---- void makroKonsoluCiz(UygulamaBaglam& b) { if (!b.panelMakro) return; ui::Pencere pen{"⚙ Makro Konsolu", &b.panelMakro, {.boyut = {480, 360}}}; if (pen) { static char satir[1024] = ""; static int seciliMakro = -1; const auto calistirSatir = [&] { if (satir[0]) { b.makro.satirCalistir(satir); satir[0] = '\0'; } }; ImGui::TextDisabled("Lua 5.4 · fiko.* API · makrolar: %s", b.makroDizin.c_str()); if (ImGui::Button("Yenile")) seciliMakro = -1; ImGui::SameLine(); const std::vector dosyalar = b.makro.makroListele(b.makroDizin); ImGui::SetNextItemWidth(-90); if (ImGui::BeginCombo("##makrolar", (seciliMakro >= 0 && seciliMakro < (int)dosyalar.size()) ? dosyalar[seciliMakro].c_str() : "(makro seç)")) { for (int i = 0; i < (int)dosyalar.size(); ++i) { if (ImGui::Selectable(dosyalar[i].c_str(), seciliMakro == i)) seciliMakro = i; } ImGui::EndCombo(); } ImGui::SameLine(); if (ImGui::Button("Çalıştır") && seciliMakro >= 0 && seciliMakro < (int)dosyalar.size()) { b.makro.dosyaCalistir(dosyalar[seciliMakro]); } ImGui::Separator(); #if defined(FIKO_CATIA_MAKRO) if (ImGui::SmallButton("📄 CATScript Makrountarı İndir")) { std::string metin = catiaCalismaAlaniMakroUret("CATScript calisma alani kayit"); std::string yol = b.makroDizin + "/CalismaAlaniKaydet.bas"; std::error_code ec; std::filesystem::create_directories(b.makroDizin, ec); std::ofstream f(yol, std::ios::binary); if (f) { f << metin; b.bilgiVer("CATScript makrountari indirildi: " + yol + " (CATScript makro editorene surukle)"); } else { b.bilgiVer("Makrountari yaslamiadi: " + yol); } } #endif ImGui::BeginChild("makroCikti", {0, -ImGui::GetFrameHeightWithSpacing() - 4}, true, ImGuiWindowFlags_HorizontalScrollbar); for (const std::string& s : b.makro.cikti()) { const bool hata = s.rfind("HATA", 0) == 0; if (hata) ImGui::PushStyleColor(ImGuiCol_Text, IM_COL32(255, 120, 110, 255)); ImGui::TextUnformatted(s.c_str()); if (hata) ImGui::PopStyleColor(); } if (ImGui::GetScrollY() >= ImGui::GetScrollMaxY() - 4) ImGui::SetScrollHereY(1.0f); ImGui::EndChild(); ImGui::SetNextItemWidth(-118); if (ImGui::InputText("##satir", satir, sizeof(satir), ImGuiInputTextFlags_EnterReturnsTrue)) { calistirSatir(); ImGui::SetKeyboardFocusHere(-1); } ImGui::SameLine(); if (ImGui::Button("Gönder")) calistirSatir(); ImGui::SameLine(); if (ImGui::Button("Temizle")) b.makro.ciktiTemizle(); } } // ---- Eklenti Yöneticisi (DLL) ---- void eklentiYoneticiCiz(UygulamaBaglam& b) { if (!b.panelEklenti) return; ui::Pencere pen{"🧩 Eklenti Yöneticisi", &b.panelEklenti, {.boyut = {520, 300}}}; if (pen) { const std::string eklDizin = sistem::calistirilabilirDizin() + "eklentiler"; ImGui::TextDisabled("Dizin: %s", eklDizin.c_str()); if (ImGui::Button("Dizini Tara")) { const size_t n = b.eklentiler.tara(eklDizin); b.bilgiVer(std::to_string(n) + " eklenti yüklendi"); } ImGui::SameLine(); const std::string sh = b.eklentiler.sonHata(); if (!sh.empty()) { ImGui::TextColored(ui::tema().hata, "%s", sh.c_str()); } ImGui::Separator(); if (ImGui::BeginTable("eklentiler", 4, ImGuiTableFlags_RowBg | ImGuiTableFlags_BordersInnerV | ImGuiTableFlags_SizingStretchProp)) { ImGui::TableSetupColumn("Ad", ImGuiTableColumnFlags_WidthStretch); ImGui::TableSetupColumn("Sürüm", ImGuiTableColumnFlags_WidthFixed, 60); ImGui::TableSetupColumn("Açıklama", ImGuiTableColumnFlags_WidthStretch); ImGui::TableSetupColumn("", ImGuiTableColumnFlags_WidthFixed, 72); ImGui::TableHeadersRow(); const auto& kayitlar = b.eklentiler.hepsi(); int kaldirIndeks = -1; for (size_t i = 0; i < kayitlar.size(); ++i) { const auto& k = kayitlar[i]; ImGui::TableNextRow(); ImGui::TableNextColumn(); ImGui::TextUnformatted(k.bilgi.ad ? k.bilgi.ad : "?"); if (k.bilgi.yazar && k.bilgi.yazar[0]) { ImGui::SameLine(); ImGui::TextDisabled("· %s", k.bilgi.yazar); } ImGui::TableNextColumn(); ImGui::TextDisabled("%s", k.bilgi.surum ? k.bilgi.surum : "-"); ImGui::TableNextColumn(); ImGui::TextUnformatted(k.bilgi.aciklama ? k.bilgi.aciklama : ""); ImGui::TableNextColumn(); ImGui::PushID((int)i); if (ImGui::SmallButton("Kaldır")) kaldirIndeks = (int)i; ImGui::PopID(); } if (kaldirIndeks >= 0) b.eklentiler.kaldir((size_t)kaldirIndeks); ImGui::EndTable(); } if (b.eklentiler.hepsi().empty()) { ImGui::TextDisabled("Yüklü eklenti yok. DLL'leri 'eklentiler/' dizinine koyup tarayın."); } } } } // namespace fiko