2P by neo 3달전 | favorite | 댓글 1개

ImRAD

ImRAD는 ImGui 라이브러리를 위한 GUI 빌더임. C++ 코드를 생성하고 파싱하여 애플리케이션에서 직접 사용할 수 있음. ImRAD는 Windows, Linux, MacOS에서 실행 가능함.

특징

ImRAD는 활발히 개발 중이며 주요 특징은 다음과 같음:

  • 다양한 창 디자인 지원

    • 플로팅 창, 팝업 및 모달 팝업. ImGui 백엔드와 독립적임
    • GLFW 통합을 통한 MainWindow. ImRAD는 ImGui 창을 OS 창과 동기화하는 GLFW 호출을 생성함 (제목 표시줄, 크기 조정 가능 플래그, 자동 크기 조정 등)
    • Activity. 전체 뷰포트 영역을 채우는 장식 없는 창. 주로 안드로이드 앱에 사용됨
    • 일반적인 main.cpp를 생성하는 GLFW 템플릿 포함
    • 일반적인 MainActivity.java + manifest + main.cpp를 생성하는 안드로이드 템플릿 포함
  • 다양한 위젯 지원

    • Text, Checkbox, Combo, Button, Slider, ColorEdit 등의 기본 위젯
    • Child, Table, CollapsingHeader, TreeNode, TabBar 등의 컨테이너 위젯
    • Splitter 같은 특이한 위젯
    • MenuBar 및 컨텍스트 메뉴 편집
    • 사용자 코드용 CustomWidget (플레이스홀더)
  • SameLine/Spacing/NextColumn을 사용한 레이아웃 생성

    • 이는 위젯이 항목 간격 및 프레임 패딩을 일관되게 준수하도록 보장함
    • 부모-자식 위젯 간의 명확한 관계와 자식 순서가 중요함
  • 박스 레이아웃 지원

    • ImGui 기능 위에 구현된 강력하고 사용하기 쉬운 레이아웃 메커니즘
    • 수평 또는 수직 방향으로 크기 조정 가능한 위젯을 스트레치 가능
    • 정렬을 위해 스페이서를 삽입 가능
    • 테이블 레이아웃 헬퍼를 사용하여 수평 레이아웃 생성 가능
  • 속성 바인딩 지원

    • 클래스 변수는 간단한 클래스 마법사 또는 바인딩 대화 상자를 통해 관리 가능
    • 속성 바인딩을 통해 생성된 UI는 동적이면서도 동시에 설계 가능
  • 이벤트 핸들러 및 기타 지원 코드 생성

    • 예를 들어, 모달 대화 상자는 OpenPopup 멤버 함수와 대화 상자가 닫힐 때 호출되는 람다 콜백을 생성함
    • 이벤트 핸들러는 사용자 코드와 생성된 부분을 분리하여 디자이너가 계속 작동하도록 함
  • 생성된 코드는 주석 마커로 구분되며 사용자는 추가 코드를 자유롭게 추가 가능

    • 종속 팝업 Draw 호출을 하거나 변수를 계산하는 데 사용 가능
    • 사용자 코드 콜백을 호출하는 CustomWidget 사용 가능
  • 대상 창 스타일은 완전히 구성 가능

    • ImGui에서 제공하는 기본 스타일 외에도 사용자가 새로운 스타일을 정의하고 style 폴더에 INI 파일로 저장 가능
    • ImRAD는 UI 설계 시 스타일 설정을 따름
    • 저장된 스타일은 간단한 imrad.h 함수를 사용하여 애플리케이션에서 로드 가능
  • 생성된 코드는 프로젝트에서 바로 사용 가능하며 ImGui 라이브러리와 하나의 헤더 파일 (imrad.h)만 필요함

    • MainWindow 또는 Image 위젯과 같은 일부 기능은 GLFW 종속성이 필요함. IMRAD_WITH_GLFW로 컴파일하여 활성화 가능
    • 현재 Image 위젯은 stb 라이브러리도 필요함. IMRAD_WITH_STB로 컴파일하거나 LoadTextureFromFile()을 제공해야 함
    • 인기 있는 fmt 라이브러리에 대한 선택적 지원은 IMRAD_WITH_FMT를 정의하여 활성화 가능. 이는 모든 문자열 속성에 형식 지정 플래그를 사용할 수 있게 함
  • ImRAD는 열린 파일의 변경 사항을 추적하여 IDE에서 파일을 설계하고 편집할 수 있음

    • 자동 저장 기능이 유용할 수 있음

라이선스

  • ImRAD 소스 코드는 GPL 라이선스 하에 있음
  • 도구에 의해 생성된 코드는 GPL에서 제외되며 오픈 소스 또는 상업 프로젝트에 포함될 수 있음. 사용자가 라이선스를 결정함
  • imrad.h도 GPL 라이선스에서 제외됨

다운로드

최신 버전은 CMake를 사용하여 저장소를 클론하고 빌드하여 얻을 수 있음. 3rdparty 디렉토리의 서브모듈도 가져와야 함. 다소 오래된 버전은 Releases에서 다운로드 가능함

GN⁺의 정리

  • ImRAD는 ImGui 라이브러리를 위한 강력한 GUI 빌더로, 다양한 창과 위젯을 지원함
  • 속성 바인딩과 이벤트 핸들러 생성 기능을 통해 동적이고 유연한 UI 설계가 가능함
  • 생성된 코드는 프로젝트에서 바로 사용 가능하며, 다양한 종속성을 지원함
  • ImRAD는 활발히 개발 중이며, 사용자가 자유롭게 스타일을 정의하고 저장할 수 있음
  • 비슷한 기능을 가진 다른 프로젝트로는 Qt Designer와 Dear ImGui가 있음
Hacker News 의견
  • 이 프로젝트의 가장 놀라운 부분 중 하나는 C++의 하위 집합을 처리하는 핸드롤드 파서를 단일 헤더 파일로 구현한 것임
  • dear-imgui의 창시자가 "dear"로 명명했다고 했으므로 "Dear library"라고 불러야 함
    • IMGUI는 즉시 모드 GUI를 의미하며, 창시자는 다른 IMGUI인 "simgui"에서 영감을 받았다고 함
  • Visual Basic에 대한 향수가 느껴지지만, 이것은 imgui의 케이크 위에 아이싱을 얹은 것 같음
  • wasm html5 앱으로 브라우저에서 GUI를 빠르게 만들고 결과를 편집기에 복사하여 붙여넣는 것도 멋질 것임
    • 이 도구는 C++ 코드를 생성하고 파싱하여 애플리케이션에서 직접 사용할 수 있음
  • 지난 몇 년 동안 ImGui C++ 앱을 작업해왔는데, 이 도구가 많은 시간을 절약해 줄 수 있었을 것임
  • pyimgui 바인딩을 사용할 때, 생성된 C++ 코드를 Python에서 사용할 수 있는지 궁금함
  • 왜 ImGui 자체에 GUI 빌더가 구현되지 않았는지 궁금함
  • ImGui로 프로젝트를 작업하면서 이런 도구가 있으면 좋겠다고 생각했는데, 꼭 시도해볼 것임
  • Steam은 인기 있는 크로스 플랫폼 시스템인데, 비게임 애플리케이션이나 엔터프라이즈 애플리케이션에도 사용할 수 있을지 궁금함
  • 너무 많은 sudo 명령이 있는 것 같지만, 전체적으로 매우 멋져 보임