2 puntos por GN⁺ 2024-08-17 | 1 comentarios | Compartir por WhatsApp

ImRAD

ImRAD es un constructor de GUI para la biblioteca ImGui. Genera y analiza código C++ para poder usarse directamente en la aplicación. ImRAD puede ejecutarse en Windows, Linux y MacOS.

Características

ImRAD está en desarrollo activo y sus características principales son las siguientes:

  • Soporte para varios diseños de ventana

    • Ventanas flotantes, popups y popups modales. Es independiente del backend de ImGui
    • MainWindow mediante integración con GLFW. ImRAD genera llamadas de GLFW para sincronizar la ventana de ImGui con la ventana del sistema operativo (barra de título, bandera de redimensionable, autoajuste de tamaño, etc.)
    • Activity. Una ventana sin decoraciones que llena toda el área del viewport. Se usa principalmente en apps de Android
    • Incluye una plantilla de GLFW que genera un main.cpp típico
    • Incluye una plantilla de Android que genera un MainActivity.java típico + manifest + main.cpp
  • Soporte para varios widgets

    • Widgets básicos como Text, Checkbox, Combo, Button, Slider, ColorEdit, etc.
    • Widgets contenedores como Child, Table, CollapsingHeader, TreeNode, TabBar, etc.
    • Widgets poco comunes como Splitter
    • Edición de MenuBar y menús contextuales
    • CustomWidget para código de usuario (marcador de posición)
  • Generación de layouts usando SameLine/Spacing/NextColumn

    • Esto garantiza que los widgets respeten de forma consistente el espaciado entre elementos y el padding de los marcos
    • Es importante mantener una relación clara entre widgets padre-hijo y el orden de los hijos
  • Soporte para box layout

    • Un mecanismo de layout potente y fácil de usar implementado sobre las capacidades de ImGui
    • Permite estirar widgets redimensionables en dirección horizontal o vertical
    • Se pueden insertar espaciadores para alineación
    • Se pueden generar layouts horizontales usando el helper de layout de tablas
  • Soporte para enlace de propiedades

    • Las variables de clase pueden gestionarse mediante un asistente de clases simple o un cuadro de diálogo de enlace
    • Gracias al enlace de propiedades, la UI generada puede ser dinámica y al mismo tiempo diseñable
  • Generación de manejadores de eventos y otro código de soporte

    • Por ejemplo, un cuadro de diálogo modal genera la función miembro OpenPopup y un callback lambda que se llama cuando el diálogo se cierra
    • Los manejadores de eventos separan el código de usuario de la parte generada para que el diseñador siga funcionando
  • El código generado se separa mediante marcadores de comentarios y el usuario puede agregar libremente código adicional

    • Puede usarse para hacer llamadas Draw de popups dependientes o calcular variables
    • Se puede usar CustomWidget para llamar callbacks de código de usuario
  • El estilo de la ventana objetivo es completamente configurable

    • Además de los estilos básicos que ofrece ImGui, el usuario puede definir nuevos estilos y guardarlos como archivos INI en la carpeta style
    • ImRAD respeta la configuración de estilo al diseñar la UI
    • Los estilos guardados pueden cargarse en la aplicación usando una función simple de imrad.h
  • El código generado puede usarse directamente en el proyecto y solo requiere la biblioteca ImGui y un archivo de encabezado (imrad.h)

    • Algunas funciones, como MainWindow o el widget Image, requieren dependencia de GLFW. Puede activarse compilando con IMRAD_WITH_GLFW
    • Actualmente el widget Image también requiere la biblioteca stb. Puede activarse compilando con IMRAD_WITH_STB o proporcionando LoadTextureFromFile()
    • El soporte opcional para la popular biblioteca fmt puede activarse definiendo IMRAD_WITH_FMT. Esto permite usar flags de formato en todas las propiedades de tipo cadena
  • ImRAD rastrea cambios en los archivos abiertos, por lo que se puede diseñar y editar el archivo desde el IDE

    • La función de guardado automático puede ser útil

Licencia

  • El código fuente de ImRAD está bajo licencia GPL
  • El código generado por la herramienta queda excluido de la GPL y puede incluirse en proyectos de código abierto o comerciales. El usuario decide la licencia
  • imrad.h también queda excluido de la licencia GPL

Descarga

La versión más reciente puede obtenerse clonando el repositorio y compilándolo con CMake. También hay que traer los submódulos del directorio 3rdparty. Una versión algo más antigua puede descargarse desde Releases

Resumen de GN⁺

  • ImRAD es un potente constructor de GUI para la biblioteca ImGui, con soporte para varias ventanas y widgets
  • Gracias al enlace de propiedades y la generación de manejadores de eventos, permite diseñar interfaces dinámicas y flexibles
  • El código generado puede usarse directamente en proyectos y ofrece soporte para varias dependencias
  • ImRAD está en desarrollo activo y permite que el usuario defina y guarde estilos libremente
  • Otros proyectos con funciones similares incluyen Qt Designer y Dear ImGui

1 comentarios

 
GN⁺ 2024-08-17
Comentarios de Hacker News
  • Una de las partes más sorprendentes de este proyecto es que implementa en un solo archivo de encabezado un parser hecho a mano que procesa un subconjunto de C++
  • Como el creador de dear-imgui dijo que lo nombró con "dear", entonces debería llamarse "Dear library"
    • IMGUI significa GUI de modo inmediato, y el creador dijo que se inspiró en otro IMGUI llamado "simgui"
  • Da cierta nostalgia por Visual Basic, pero esto parece como ponerle glaseado al pastel de imgui
  • También sería genial tener una app wasm html5 para crear GUI rápidamente en el navegador y copiar y pegar el resultado en el editor
    • Esta herramienta puede generar y parsear código C++ para usarse directamente en la aplicación
  • He trabajado en apps C++ con ImGui durante los últimos años, y esta herramienta podría haberme ahorrado mucho tiempo
  • Al usar los bindings de pyimgui, me pregunto si el código C++ generado se puede usar desde Python
  • Me pregunto por qué no se implementó un constructor de GUI en el propio ImGui
  • Mientras trabajaba en un proyecto con ImGui pensé que estaría bien tener una herramienta así, definitivamente la voy a probar
  • Steam es un sistema multiplataforma popular, y me pregunto si también podría usarse para aplicaciones no relacionadas con juegos o aplicaciones empresariales
  • Parece que hay demasiados comandos sudo, pero en general se ve muy bien