2 poin oleh GN⁺ 2024-08-17 | 1 komentar | Bagikan ke WhatsApp

ImRAD

ImRAD adalah GUI builder untuk pustaka ImGui. Alat ini dapat menghasilkan dan mem-parsing kode C++ sehingga bisa langsung digunakan di aplikasi. ImRAD dapat berjalan di Windows, Linux, dan MacOS.

Fitur

ImRAD sedang dikembangkan secara aktif, dan fitur utamanya adalah sebagai berikut:

  • Mendukung berbagai desain jendela

    • Jendela floating, popup, dan popup modal. Independen dari backend ImGui
    • MainWindow melalui integrasi GLFW. ImRAD menghasilkan pemanggilan GLFW yang menyinkronkan jendela ImGui dengan jendela OS (title bar, flag dapat diubah ukurannya, auto-resize, dll.)
    • Activity. Jendela tanpa dekorasi yang mengisi seluruh area viewport. Umumnya digunakan untuk aplikasi Android
    • Termasuk template GLFW yang menghasilkan main.cpp umum
    • Termasuk template Android yang menghasilkan MainActivity.java + manifest + main.cpp
  • Mendukung berbagai widget

    • Widget dasar seperti Text, Checkbox, Combo, Button, Slider, ColorEdit
    • Widget kontainer seperti Child, Table, CollapsingHeader, TreeNode, TabBar
    • Widget khusus seperti Splitter
    • Pengeditan MenuBar dan menu konteks
    • CustomWidget untuk kode pengguna (placeholder)
  • Pembuatan layout dengan SameLine/Spacing/NextColumn

    • Ini memastikan widget secara konsisten mematuhi item spacing dan frame padding
    • Relasi parent-child yang jelas dan urutan child antar widget sangat penting
  • Mendukung box layout

    • Mekanisme layout yang kuat dan mudah digunakan, diimplementasikan di atas fitur ImGui
    • Widget yang ukurannya dapat diubah dalam arah horizontal atau vertikal dapat dibuat stretchable
    • Spacer dapat disisipkan untuk alignment
    • Layout horizontal dapat dibuat dengan helper table layout
  • Mendukung property binding

    • Variabel kelas dapat dikelola melalui class wizard sederhana atau dialog binding
    • UI yang dihasilkan melalui property binding tetap dinamis sekaligus dapat dirancang
  • Menghasilkan event handler dan kode pendukung lainnya

    • Sebagai contoh, dialog modal menghasilkan fungsi anggota OpenPopup dan callback lambda yang dipanggil saat dialog ditutup
    • Event handler memisahkan kode pengguna dari bagian yang dihasilkan agar designer tetap dapat bekerja
  • Kode yang dihasilkan dipisahkan dengan penanda komentar, dan pengguna bebas menambahkan kode tambahan

    • Dapat digunakan untuk memanggil Draw popup dependen atau menghitung variabel
    • Dapat menggunakan CustomWidget yang memanggil callback kode pengguna
  • Style jendela target dapat dikonfigurasi sepenuhnya

    • Selain style default yang disediakan ImGui, pengguna dapat mendefinisikan style baru dan menyimpannya sebagai file INI di folder style
    • ImRAD mengikuti pengaturan style saat mendesain UI
    • Style yang disimpan dapat dimuat di aplikasi menggunakan fungsi sederhana di imrad.h
  • Kode yang dihasilkan dapat langsung digunakan di proyek dan hanya memerlukan pustaka ImGui serta satu file header (imrad.h)

    • Beberapa fitur seperti MainWindow atau widget Image memerlukan dependensi GLFW. Dapat diaktifkan dengan kompilasi menggunakan IMRAD_WITH_GLFW
    • Saat ini widget Image juga memerlukan pustaka stb. Kompilasi dengan IMRAD_WITH_STB atau sediakan LoadTextureFromFile()
    • Dukungan opsional untuk pustaka populer fmt dapat diaktifkan dengan mendefinisikan IMRAD_WITH_FMT. Ini memungkinkan penggunaan flag formatting pada semua properti string
  • ImRAD melacak perubahan pada file yang dibuka sehingga file dapat didesain dan diedit di IDE

    • Fitur auto-save dapat berguna

Lisensi

  • Kode sumber ImRAD berada di bawah lisensi GPL
  • Kode yang dihasilkan oleh alat ini dikecualikan dari GPL dan dapat disertakan dalam proyek open source maupun komersial. Pengguna menentukan lisensinya
  • imrad.h juga dikecualikan dari lisensi GPL

Unduhan

Versi terbaru dapat diperoleh dengan meng-clone repositori dan membangunnya menggunakan CMake. Submodule di direktori 3rdparty juga harus diambil. Versi yang agak lama dapat diunduh dari Releases

Ringkasan GN⁺

  • ImRAD adalah GUI builder yang kuat untuk pustaka ImGui, dengan dukungan untuk berbagai jendela dan widget
  • Dengan property binding dan fitur pembuatan event handler, perancangan UI yang dinamis dan fleksibel menjadi memungkinkan
  • Kode yang dihasilkan dapat langsung digunakan di proyek dan mendukung berbagai dependensi
  • ImRAD sedang dikembangkan secara aktif, dan pengguna dapat secara bebas mendefinisikan serta menyimpan style
  • Proyek lain dengan fungsi serupa antara lain Qt Designer dan Dear ImGui

1 komentar

 
GN⁺ 2024-08-17
Komentar Hacker News
  • Salah satu bagian paling mengesankan dari proyek ini adalah parser buatan tangan yang menangani subset C++ diimplementasikan dalam satu file header
  • Karena pencipta dear-imgui mengatakan penamaannya menggunakan "dear", maka seharusnya disebut "Dear library"
    • IMGUI berarti immediate mode GUI, dan sang pencipta mengatakan terinspirasi dari IMGUI lain, yaitu "simgui"
  • Terasa ada nostalgia terhadap Visual Basic, tetapi ini seperti memberi lapisan icing di atas kue imgui
  • Akan keren juga jika ada aplikasi wasm html5 untuk membuat GUI dengan cepat di browser lalu menyalin-tempel hasilnya ke editor
    • Alat ini dapat menghasilkan dan mengurai kode C++ untuk digunakan langsung di aplikasi
  • Saya sudah mengerjakan aplikasi ImGui C++ selama beberapa tahun terakhir, dan alat ini bisa saja menghemat banyak waktu
  • Saat menggunakan binding pyimgui, saya penasaran apakah kode C++ yang dihasilkan bisa digunakan dari Python
  • Saya penasaran mengapa GUI builder tidak diimplementasikan langsung di ImGui sendiri
  • Saat mengerjakan proyek dengan ImGui, saya pernah berpikir akan bagus jika ada alat seperti ini, jadi saya pasti akan mencobanya
  • Steam adalah sistem lintas platform yang populer, tetapi saya penasaran apakah ini juga cocok untuk aplikasi non-game atau aplikasi enterprise
  • Sepertinya ada terlalu banyak perintah sudo, tetapi secara keseluruhan terlihat sangat keren