# ImRAD, ImGui 라이브러리용 GUI 빌더

> Clean Markdown view of GeekNews topic #16344. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=16344](https://news.hada.io/topic?id=16344)
- GeekNews Markdown: [https://news.hada.io/topic/16344.md](https://news.hada.io/topic/16344.md)
- Type: GN+
- Author: [neo](https://news.hada.io/@neo)
- Published: 2024-08-17T10:09:01+09:00
- Updated: 2024-08-17T10:09:01+09:00
- Original source: [github.com/tpecholt](https://github.com/tpecholt/imrad)
- Points: 2
- Comments: 1

## Topic Body

### 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가 있음

## Comments



### Comment 28064

- Author: neo
- Created: 2024-08-17T10:09:01+09:00
- Points: 1

###### [Hacker News 의견](https://news.ycombinator.com/item?id=41261426) 
- 이 프로젝트의 가장 놀라운 부분 중 하나는 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 명령이 있는 것 같지만, 전체적으로 매우 멋져 보임
