2 points par GN⁺ 2024-08-17 | 1 commentaires | Partager sur WhatsApp

ImRAD

ImRAD est un générateur d’interface graphique pour la bibliothèque ImGui. Il peut générer et analyser du code C++ afin d’être utilisé directement dans une application. ImRAD peut s’exécuter sur Windows, Linux et MacOS.

Fonctionnalités

ImRAD est en développement actif, et ses principales fonctionnalités sont les suivantes :

  • Prise en charge de différents types de fenêtres

    • Fenêtres flottantes, popups et popups modales. Indépendant du backend ImGui
    • MainWindow via l’intégration GLFW. ImRAD génère des appels GLFW qui synchronisent les fenêtres ImGui avec les fenêtres de l’OS (barre de titre, indicateurs de redimensionnement, redimensionnement automatique, etc.)
    • Activity. Fenêtre sans décoration qui remplit toute la zone du viewport. Principalement utilisée pour les applications Android
    • Inclut un template GLFW qui génère un main.cpp classique
    • Inclut un template Android qui génère un MainActivity.java classique + manifest + main.cpp
  • Prise en charge de nombreux widgets

    • Widgets de base tels que Text, Checkbox, Combo, Button, Slider, ColorEdit
    • Widgets conteneurs tels que Child, Table, CollapsingHeader, TreeNode, TabBar
    • Widgets atypiques comme Splitter
    • Édition de MenuBar et des menus contextuels
    • CustomWidget pour le code utilisateur (placeholder)
  • Génération de layouts avec SameLine/Spacing/NextColumn

    • Cela garantit que les widgets respectent de façon cohérente l’espacement entre éléments et le frame padding
    • La relation parent-enfant entre les widgets et l’ordre des enfants sont importants
  • Prise en charge des box layouts

    • Mécanisme de layout puissant et facile à utiliser, implémenté au-dessus des fonctionnalités d’ImGui
    • Possibilité d’étirer des widgets redimensionnables horizontalement ou verticalement
    • Possibilité d’insérer des spacers pour l’alignement
    • Possibilité de créer des layouts horizontaux à l’aide de l’helper de layout de tableau
  • Prise en charge du binding de propriétés

    • Les variables de classe peuvent être gérées via un assistant de classe simple ou une boîte de dialogue de binding
    • Grâce au binding de propriétés, l’UI générée peut être dynamique tout en restant concevable
  • Génération de gestionnaires d’événements et d’autres éléments de code de support

    • Par exemple, une boîte de dialogue modale génère une fonction membre OpenPopup et un callback lambda appelé à la fermeture de la boîte de dialogue
    • Les gestionnaires d’événements séparent le code utilisateur des parties générées afin que le designer continue de fonctionner
  • Le code généré est séparé par des marqueurs de commentaire, et l’utilisateur peut librement ajouter du code supplémentaire

    • Cela peut servir à appeler le Draw de popups dépendantes ou à calculer des variables
    • Possibilité d’utiliser CustomWidget pour appeler des callbacks de code utilisateur
  • Le style de la fenêtre cible est entièrement configurable

    • En plus des styles par défaut fournis par ImGui, l’utilisateur peut définir de nouveaux styles et les enregistrer comme fichiers INI dans le dossier style
    • ImRAD respecte les paramètres de style lors de la conception de l’UI
    • Les styles enregistrés peuvent être chargés dans l’application à l’aide d’une simple fonction de imrad.h
  • Le code généré peut être utilisé immédiatement dans un projet et ne nécessite que la bibliothèque ImGui et un seul fichier d’en-tête (imrad.h)

    • Certaines fonctionnalités, comme MainWindow ou le widget Image, nécessitent une dépendance à GLFW. Elles peuvent être activées en compilant avec IMRAD_WITH_GLFW
    • Actuellement, le widget Image nécessite aussi la bibliothèque stb. Il faut compiler avec IMRAD_WITH_STB ou fournir LoadTextureFromFile()
    • La prise en charge optionnelle de la populaire bibliothèque fmt peut être activée en définissant IMRAD_WITH_FMT. Cela permet d’utiliser des indicateurs de formatage pour toutes les propriétés de type chaîne
  • ImRAD suit les modifications des fichiers ouverts, ce qui permet de concevoir et d’éditer les fichiers dans un IDE

    • La fonctionnalité d’enregistrement automatique peut être utile

Licence

  • Le code source d’ImRAD est sous licence GPL
  • Le code généré par l’outil est exclu de la GPL et peut être inclus dans des projets open source ou commerciaux. L’utilisateur choisit la licence
  • imrad.h est également exclu de la licence GPL

Téléchargement

La dernière version peut être obtenue en clonant le dépôt et en la compilant avec CMake. Il faut également récupérer les sous-modules du répertoire 3rdparty. Une version un peu plus ancienne peut être téléchargée depuis les Releases

Résumé de GN⁺

  • ImRAD est un puissant générateur d’interface graphique pour la bibliothèque ImGui, prenant en charge divers types de fenêtres et de widgets
  • Le binding de propriétés et la génération de gestionnaires d’événements permettent de concevoir des interfaces dynamiques et flexibles
  • Le code généré peut être utilisé immédiatement dans un projet et prend en charge diverses dépendances
  • ImRAD est en développement actif, et les utilisateurs peuvent librement définir et enregistrer des styles
  • D’autres projets aux fonctionnalités similaires incluent Qt Designer et Dear ImGui

1 commentaires

 
GN⁺ 2024-08-17
Commentaires Hacker News
  • L’un des aspects les plus impressionnants de ce projet est l’implémentation d’un parseur écrit à la main pour traiter un sous-ensemble de C++ dans un unique fichier d’en-tête
  • Puisque le créateur de dear-imgui a dit l’avoir nommé avec « dear », il faudrait donc l’appeler la bibliothèque « Dear »
    • IMGUI signifie GUI en mode immédiat, et le créateur dit s’être inspiré d’un autre IMGUI, « simgui »
  • Cela rappelle avec nostalgie Visual Basic, mais on dirait la cerise sur le gâteau pour imgui
  • Ce serait aussi génial d’avoir une appli wasm html5 dans le navigateur pour créer rapidement une GUI et copier-coller le résultat dans l’éditeur
    • Cet outil peut générer et analyser du code C++ pour être utilisé directement dans l’application
  • Je travaille sur des applis ImGui en C++ depuis quelques années, et cet outil aurait pu me faire gagner beaucoup de temps
  • En utilisant les bindings pyimgui, je me demande si le code C++ généré peut être utilisé depuis Python
  • Je me demande pourquoi un GUI builder n’a pas été intégré directement dans ImGui lui-même
  • En travaillant sur des projets avec ImGui, je me suis souvent dit qu’un outil comme celui-ci serait utile, donc je vais certainement l’essayer
  • Steam est un système cross-platform populaire, mais je me demande s’il peut aussi convenir à des applications non ludiques ou à des applications d’entreprise
  • Il semble y avoir un peu trop de commandes sudo, mais dans l’ensemble cela a l’air vraiment très cool