2 pontos por GN⁺ 2024-08-17 | 1 comentários | Compartilhar no WhatsApp

ImRAD

ImRAD é um construtor de GUI para a biblioteca ImGui. Ele gera e faz o parsing de código C++, podendo ser usado diretamente em aplicações. O ImRAD pode ser executado em Windows, Linux e MacOS.

Características

O ImRAD está em desenvolvimento ativo e seus principais recursos são os seguintes:

  • Suporte a vários designs de janela

    • Janelas flutuantes, popups e popups modais. Independente do backend do ImGui
    • MainWindow com integração GLFW. O ImRAD gera chamadas GLFW que sincronizam a janela do ImGui com a janela do sistema operacional (barra de título, flag de redimensionamento, redimensionamento automático etc.)
    • Activity. Janela sem decoração que preenche toda a área da viewport. Usada principalmente em apps Android
    • Inclui template GLFW que gera um main.cpp típico
    • Inclui template Android que gera MainActivity.java + manifest + main.cpp
  • Suporte a vários widgets

    • Widgets básicos como Text, Checkbox, Combo, Button, Slider, ColorEdit etc.
    • Widgets de contêiner como Child, Table, CollapsingHeader, TreeNode, TabBar etc.
    • Widgets incomuns como Splitter
    • Edição de MenuBar e menus de contexto
    • CustomWidget para código do usuário (placeholder)
  • Geração de layout usando SameLine/Spacing/NextColumn

    • Isso garante que os widgets respeitem de forma consistente o espaçamento entre itens e o padding do frame
    • Relações claras entre widgets pai e filho e a ordem dos filhos são importantes
  • Suporte a box layout

    • Mecanismo de layout poderoso e fácil de usar implementado sobre os recursos do ImGui
    • Widgets redimensionáveis podem ser esticados em direção horizontal ou vertical
    • É possível inserir spacers para alinhamento
    • É possível gerar layouts horizontais usando o helper de layout de tabela
  • Suporte a property binding

    • Variáveis de classe podem ser gerenciadas por meio de um assistente de classe simples ou da caixa de diálogo de binding
    • A UI gerada por property binding pode ser dinâmica e ao mesmo tempo projetável
  • Geração de event handlers e outros códigos de suporte

    • Por exemplo, uma caixa de diálogo modal gera uma função membro OpenPopup e um callback lambda chamado quando a caixa de diálogo é fechada
    • Os event handlers separam o código do usuário da parte gerada, permitindo que o designer continue funcionando
  • O código gerado é separado por marcadores de comentário, e o usuário pode adicionar código extra livremente

    • Pode ser usado para fazer chamadas Draw de popups dependentes ou calcular variáveis
    • É possível usar CustomWidget que chama callbacks de código do usuário
  • O estilo da janela de destino é totalmente configurável

    • Além dos estilos padrão fornecidos pelo ImGui, o usuário pode definir novos estilos e salvá-los como arquivos INI na pasta style
    • O ImRAD segue as configurações de estilo ao projetar a UI
    • Os estilos salvos podem ser carregados na aplicação usando uma função simples de imrad.h
  • O código gerado pode ser usado imediatamente no projeto e requer apenas a biblioteca ImGui e um arquivo de cabeçalho (imrad.h)

    • Alguns recursos, como MainWindow ou o widget Image, exigem dependência de GLFW. Isso pode ser ativado compilando com IMRAD_WITH_GLFW
    • Atualmente, o widget Image também exige a biblioteca stb. Compile com IMRAD_WITH_STB ou forneça LoadTextureFromFile()
    • O suporte opcional à popular biblioteca fmt pode ser ativado definindo IMRAD_WITH_FMT. Isso permite usar flags de formatação em todas as propriedades de string
  • O ImRAD acompanha alterações em arquivos abertos, permitindo projetar e editar arquivos na IDE

    • O recurso de salvamento automático pode ser útil

Licença

  • O código-fonte do ImRAD está sob a licença GPL
  • O código gerado pela ferramenta é excluído da GPL e pode ser incluído em projetos open source ou comerciais. O usuário decide a licença
  • imrad.h também é excluído da licença GPL

Download

A versão mais recente pode ser obtida clonando o repositório e compilando com CMake. Também é necessário trazer os submódulos do diretório 3rdparty. Versões um pouco mais antigas podem ser baixadas em Releases

Resumo do GN⁺

  • O ImRAD é um poderoso construtor de GUI para a biblioteca ImGui, com suporte a várias janelas e widgets
  • Recursos de property binding e geração de event handlers permitem projetar UIs dinâmicas e flexíveis
  • O código gerado pode ser usado imediatamente no projeto e oferece suporte a várias dependências
  • O ImRAD está em desenvolvimento ativo, e o usuário pode definir e salvar estilos livremente
  • Outros projetos com recursos semelhantes incluem Qt Designer e Dear ImGui

1 comentários

 
GN⁺ 2024-08-17
Comentários no Hacker News
  • Uma das partes mais impressionantes deste projeto é que ele implementa um parser feito à mão para um subconjunto de C++ em um único arquivo de cabeçalho
  • Como o criador do dear-imgui disse que o nomeou com "dear", ele deveria ser chamado de "biblioteca Dear"
    • IMGUI significa GUI de modo imediato, e o criador disse que se inspirou em outro IMGUI, o "simgui"
  • Dá uma sensação de nostalgia de Visual Basic, mas isso parece a cereja do bolo para o imgui
  • Também seria legal ter um app wasm html5 para criar rapidamente uma GUI no navegador e copiar e colar o resultado no editor
    • Esta ferramenta pode gerar e analisar código C++ para uso direto no aplicativo
  • Tenho trabalhado em apps C++ com ImGui nos últimos anos, e esta ferramenta poderia ter me poupado muito tempo
  • Ao usar os bindings do pyimgui, fico me perguntando se o código C++ gerado pode ser usado em Python
  • Fico me perguntando por que um construtor de GUI não foi implementado no próprio ImGui
  • Enquanto trabalhava em um projeto com ImGui, pensei que seria bom ter uma ferramenta como esta, então com certeza vou testar
  • Steam é um sistema multiplataforma popular, mas fico me perguntando se ele também poderia ser usado para aplicativos não voltados a jogos ou aplicativos corporativos
  • Parece haver comandos sudo demais, mas, no geral, isso parece muito legal