2 puan yazan GN⁺ 2024-08-17 | 1 yorum | WhatsApp'ta paylaş

ImRAD

ImRAD, ImGui kütüphanesi için bir GUI oluşturucudur. C++ kodu üretip ayrıştırabilir ve doğrudan uygulamada kullanılabilir. ImRAD, Windows, Linux ve macOS üzerinde çalışabilir.

Özellikler

ImRAD aktif olarak geliştirilmektedir ve başlıca özellikleri şunlardır:

  • Çeşitli pencere tasarımlarını destekler

    • Kayan pencereler, açılır pencereler ve modal açılır pencereler. ImGui backend'inden bağımsızdır
    • GLFW entegrasyonu üzerinden MainWindow. ImRAD, ImGui penceresini OS penceresiyle senkronize eden GLFW çağrıları üretir (başlık çubuğu, yeniden boyutlandırılabilir bayraklar, otomatik boyutlandırma vb.)
    • Activity. Tüm viewport alanını dolduran, süslemesiz pencere. Çoğunlukla Android uygulamalarında kullanılır
    • Tipik bir main.cpp üreten GLFW şablonu içerir
    • Tipik bir MainActivity.java + manifest + main.cpp üreten Android şablonu içerir
  • Çeşitli widget'ları destekler

    • Text, Checkbox, Combo, Button, Slider, ColorEdit gibi temel widget'lar
    • Child, Table, CollapsingHeader, TreeNode, TabBar gibi kapsayıcı widget'lar
    • Splitter gibi sıra dışı widget'lar
    • MenuBar ve bağlam menüsü düzenleme
    • Kullanıcı kodu için CustomWidget (yer tutucu)
  • SameLine/Spacing/NextColumn kullanarak yerleşim oluşturma

    • Bu, widget'ların öğe aralığına ve çerçeve dolgusuna tutarlı biçimde uymasını garanti eder
    • Ebeveyn-çocuk widget ilişkilerinin netliği ve çocuk sırası önemlidir
  • Kutu yerleşimi desteği

    • ImGui özelliklerinin üzerine kurulmuş güçlü ve kullanımı kolay bir yerleşim mekanizması
    • Yatay veya dikey yönde yeniden boyutlandırılabilen widget'lar esnetilebilir
    • Hizalama için spacer eklenebilir
    • Tablo yerleşimi yardımcıları kullanılarak yatay yerleşim oluşturulabilir
  • Özellik bağlama desteği

    • Sınıf değişkenleri basit bir sınıf sihirbazı veya bağlama iletişim kutusu üzerinden yönetilebilir
    • Özellik bağlama sayesinde üretilen arayüzler dinamik olurken aynı zamanda tasarlanabilir kalır
  • Olay işleyicileri ve diğer destek kodlarını üretir

    • Örneğin modal iletişim kutuları, OpenPopup üye fonksiyonunu ve iletişim kutusu kapandığında çağrılan lambda callback'ini üretir
    • Olay işleyicileri, tasarımcının çalışmaya devam edebilmesi için kullanıcı kodunu ve üretilen bölümleri ayırır
  • Üretilen kod, yorum işaretleyicileriyle ayrılır ve kullanıcılar özgürce ek kod ekleyebilir

    • Bağımlı popup Draw çağrıları yapmak veya değişkenleri hesaplamak için kullanılabilir
    • Kullanıcı kodu callback'lerini çağıran CustomWidget kullanılabilir
  • Hedef pencere stili tamamen yapılandırılabilir

    • ImGui'nin sağladığı varsayılan stillere ek olarak kullanıcı yeni stiller tanımlayıp bunları style klasöründe INI dosyaları olarak kaydedebilir
    • ImRAD, arayüz tasarlanırken stil ayarlarına uyar
    • Kaydedilen stiller, uygulamada basit bir imrad.h fonksiyonu kullanılarak yüklenebilir
  • Üretilen kod doğrudan projede kullanılabilir ve yalnızca ImGui kütüphanesi ile tek bir başlık dosyası (imrad.h) gerektirir

    • MainWindow veya Image widget'ı gibi bazı özellikler GLFW bağımlılığı gerektirir. IMRAD_WITH_GLFW ile derlenerek etkinleştirilebilir
    • Şu anda Image widget'ı ayrıca stb kütüphanesi de gerektirir. IMRAD_WITH_STB ile derlenebilir veya LoadTextureFromFile() sağlanmalıdır
    • Popüler fmt kütüphanesi için isteğe bağlı destek, IMRAD_WITH_FMT tanımlanarak etkinleştirilebilir. Bu, tüm string özelliklerinde biçimlendirme bayraklarının kullanılmasını sağlar
  • ImRAD, açık dosyalardaki değişiklikleri izleyebilir; böylece dosya IDE içinde hem tasarlanabilir hem de düzenlenebilir

    • Otomatik kaydetme özelliği faydalı olabilir

Lisans

  • ImRAD kaynak kodu GPL lisansı altındadır
  • Araç tarafından üretilen kod GPL kapsamı dışındadır ve açık kaynak veya ticari projelere dahil edilebilir. Lisansa kullanıcı karar verir
  • imrad.h da GPL lisansının kapsamı dışındadır

İndirme

En son sürüm, depoyu clone edip CMake kullanarak derleyerek edinilebilir. 3rdparty dizinindeki alt modüller de alınmalıdır. Biraz daha eski sürümler Releases bölümünden indirilebilir

GN⁺ Özeti

  • ImRAD, ImGui kütüphanesi için çeşitli pencere ve widget'ları destekleyen güçlü bir GUI oluşturucudur
  • Özellik bağlama ve olay işleyicisi üretimi sayesinde dinamik ve esnek arayüz tasarımı mümkündür
  • Üretilen kod doğrudan projede kullanılabilir ve çeşitli bağımlılıkları destekler
  • ImRAD aktif olarak geliştirilmektedir ve kullanıcıların stilleri özgürce tanımlayıp kaydetmesine olanak tanır
  • Benzer işlevlere sahip diğer projeler arasında Qt Designer ve Dear ImGui bulunur

1 yorum

 
GN⁺ 2024-08-17
Hacker News görüşleri
  • Bu projedeki en şaşırtıcı parçalardan biri, C++'ın bir alt kümesini işleyen el yapımı bir parser'ın tek bir header dosyasında uygulanmış olması
  • dear-imgui'nin yaratıcısı ona "dear" adını verdiğini söylediğine göre, buna "Dear library" denmeli
    • IMGUI, immediate mode GUI anlamına geliyor ve yaratıcısı başka bir IMGUI olan "simgui"den ilham aldığını söylemiş
  • Visual Basic nostaljisi hissettiriyor, ama bu sanki imgui pastasının üstüne krema eklemek gibi
  • Tarayıcıda wasm html5 uygulaması olarak hızlıca GUI oluşturup sonucu editöre kopyala-yapıştır yapmak da harika olurdu
    • Bu araç C++ kodu üretiyor ve parse ediyor, böylece doğrudan uygulamada kullanılabiliyor
  • Son birkaç yıldır ImGui C++ uygulamaları üzerinde çalışıyorum; bu araç çok zaman kazandırabilirdi
  • pyimgui binding'lerini kullanırken, üretilen C++ kodunun Python'da kullanılıp kullanılamayacağını merak ediyorum
  • Neden ImGui'nin kendisinde bir GUI builder uygulanmadığını merak ediyorum
  • ImGui ile proje geliştirirken böyle bir aracın olsa iyi olur diye düşünmüştüm; kesinlikle deneyeceğim
  • Steam popüler bir cross-platform sistem, ama oyun dışı uygulamalar veya kurumsal uygulamalar için de kullanılabilir mi diye merak ediyorum
  • Biraz fazla sudo komutu var gibi, ama genel olarak çok etkileyici görünüyor