2 Punkte von GN⁺ 2024-08-17 | 1 Kommentare | Auf WhatsApp teilen

ImRAD

ImRAD ist ein GUI-Builder für die ImGui-Bibliothek. Er kann C++-Code erzeugen und parsen, sodass er direkt in Anwendungen verwendet werden kann. ImRAD läuft unter Windows, Linux und MacOS.

Funktionen

ImRAD wird aktiv weiterentwickelt und bietet die folgenden Hauptfunktionen:

  • Unterstützung für verschiedene Fensterdesigns

    • Schwebende Fenster, Pop-ups und modale Pop-ups. Unabhängig vom ImGui-Backend
    • MainWindow über GLFW-Integration. ImRAD erzeugt GLFW-Aufrufe, die ImGui-Fenster mit OS-Fenstern synchronisieren (Titelleiste, Größenänderungs-Flags, automatische Größenanpassung usw.)
    • Activity. Ein rahmenloses Fenster, das den gesamten Viewport-Bereich ausfüllt. Wird hauptsächlich für Android-Apps verwendet
    • Enthält ein GLFW-Template, das ein typisches main.cpp erzeugt
    • Enthält ein Android-Template, das ein typisches MainActivity.java + manifest + main.cpp erzeugt
  • Unterstützung für verschiedene Widgets

    • Grundlegende Widgets wie Text, Checkbox, Combo, Button, Slider, ColorEdit
    • Container-Widgets wie Child, Table, CollapsingHeader, TreeNode, TabBar
    • Ungewöhnliche Widgets wie Splitter
    • Bearbeitung von MenuBar und Kontextmenüs
    • CustomWidget für benutzerdefinierten Code (Platzhalter)
  • Erstellung von Layouts mit SameLine/Spacing/NextColumn

    • Dadurch wird sichergestellt, dass Widgets die Abstände zwischen Elementen und das Frame-Padding konsistent einhalten
    • Klare Beziehungen zwischen Parent- und Child-Widgets sowie die Reihenfolge der Child-Elemente sind wichtig
  • Unterstützung für Box-Layouts

    • Ein leistungsfähiger und einfach zu nutzender Layout-Mechanismus, der auf ImGui-Funktionen aufbaut
    • Größenveränderbare Widgets können in horizontaler oder vertikaler Richtung gestreckt werden
    • Spacer können zur Ausrichtung eingefügt werden
    • Mit einem Tabellen-Layout-Helfer lassen sich horizontale Layouts erzeugen
  • Unterstützung für Property Binding

    • Klassenvariablen können über einen einfachen Klassen-Assistenten oder einen Binding-Dialog verwaltet werden
    • Über Property Binding erzeugte UIs sind dynamisch und gleichzeitig entwerfbar
  • Erzeugung von Event-Handlern und anderem Support-Code

    • Ein modaler Dialog erzeugt zum Beispiel die Member-Funktion OpenPopup und einen Lambda-Callback, der aufgerufen wird, wenn der Dialog geschlossen wird
    • Event-Handler trennen benutzerdefinierten Code von den generierten Teilen, damit der Designer weiterhin funktioniert
  • Der erzeugte Code ist durch Kommentar-Marker getrennt, und Benutzer können frei zusätzlichen Code einfügen

    • Kann verwendet werden, um Draw-Aufrufe für abhängige Pop-ups auszuführen oder Variablen zu berechnen
    • CustomWidget kann verwendet werden, um Callbacks für benutzerdefinierten Code aufzurufen
  • Der Stil des Zielfensters ist vollständig konfigurierbar

    • Zusätzlich zu den von ImGui bereitgestellten Standardstilen können Benutzer neue Stile definieren und als INI-Dateien im Ordner style speichern
    • ImRAD berücksichtigt die Style-Einstellungen beim UI-Design
    • Gespeicherte Stile können in der Anwendung mit einer einfachen Funktion aus imrad.h geladen werden
  • Der erzeugte Code kann sofort im Projekt verwendet werden und benötigt nur die ImGui-Bibliothek und eine Header-Datei (imrad.h)

    • Einige Funktionen wie MainWindow oder das Image-Widget benötigen eine GLFW-Abhängigkeit. Sie können durch Kompilieren mit IMRAD_WITH_GLFW aktiviert werden
    • Das Image-Widget benötigt derzeit außerdem die stb-Bibliothek. Entweder mit IMRAD_WITH_STB kompilieren oder LoadTextureFromFile() bereitstellen
    • Optionale Unterstützung für die populäre fmt-Bibliothek kann durch Definieren von IMRAD_WITH_FMT aktiviert werden. Dadurch können Formatierungs-Flags für alle String-Properties verwendet werden
  • ImRAD verfolgt Änderungen an geöffneten Dateien, sodass Dateien in der IDE entworfen und bearbeitet werden können

    • Die Auto-Save-Funktion kann dabei nützlich sein

Lizenz

  • Der ImRAD-Quellcode steht unter der GPL-Lizenz
  • Von dem Tool erzeugter Code ist von der GPL ausgenommen und kann in Open-Source- oder kommerziellen Projekten enthalten sein. Die Lizenz wird vom Benutzer festgelegt
  • imrad.h ist ebenfalls von der GPL-Lizenz ausgenommen

Download

Die neueste Version erhält man, indem man das Repository mit CMake klont und baut. Die Submodule im Verzeichnis 3rdparty müssen ebenfalls geholt werden. Etwas ältere Versionen können unter Releases heruntergeladen werden

Zusammenfassung von GN⁺

  • ImRAD ist ein leistungsfähiger GUI-Builder für die ImGui-Bibliothek und unterstützt verschiedene Fenster und Widgets
  • Mit Property Binding und der Erzeugung von Event-Handlern ist dynamisches und flexibles UI-Design möglich
  • Der erzeugte Code kann sofort im Projekt verwendet werden und unterstützt verschiedene Abhängigkeiten
  • ImRAD wird aktiv weiterentwickelt, und Benutzer können Stile frei definieren und speichern
  • Andere Projekte mit ähnlichen Funktionen sind Qt Designer und Dear ImGui

1 Kommentare

 
GN⁺ 2024-08-17
Hacker-News-Kommentare
  • Einer der erstaunlichsten Teile dieses Projekts ist, dass ein handgeschriebener Parser, der eine Teilmenge von C++ verarbeitet, in einer einzigen Header-Datei implementiert wurde.
  • Da der Schöpfer von dear-imgui gesagt hat, dass es nach dem Wort "dear" benannt wurde, sollte man es wohl eine "Dear library" nennen.
    • IMGUI bedeutet Immediate Mode GUI, und der Schöpfer sagte, er habe sich von einem anderen IMGUI namens "simgui" inspirieren lassen.
  • Das weckt Nostalgie nach Visual Basic, aber es wirkt wie das Sahnehäubchen auf dem Kuchen von imgui.
  • Es wäre auch cool, als wasm-html5-App im Browser schnell eine GUI zu erstellen und das Ergebnis per Copy-and-Paste in den Editor zu übernehmen.
    • Dieses Tool kann C++-Code erzeugen und parsen, sodass er direkt in der Anwendung verwendet werden kann.
  • Ich habe in den letzten Jahren an ImGui-C++-Apps gearbeitet, und dieses Tool hätte mir viel Zeit sparen können.
  • Bei der Verwendung der pyimgui-Bindings frage ich mich, ob sich der erzeugte C++-Code auch in Python nutzen lässt.
  • Ich frage mich, warum ein GUI-Builder nicht direkt in ImGui selbst implementiert wurde.
  • Während ich mit ImGui an Projekten gearbeitet habe, dachte ich oft, dass so ein Tool hilfreich wäre — ich werde es definitiv ausprobieren.
  • Steam ist ein populäres plattformübergreifendes System, und ich frage mich, ob es sich auch für Nicht-Spielanwendungen oder Enterprise-Anwendungen eignen könnte.
  • Es scheint ein paar zu viele sudo-Befehle zu geben, aber insgesamt sieht es sehr cool aus.