2 ポイント 投稿者 GN⁺ 2024-08-17 | 1件のコメント | WhatsAppで共有

ImRAD

ImRADはImGuiライブラリ向けのGUIビルダー。C++コードを生成・解析し、アプリケーションで直接利用できる。ImRADはWindows、Linux、MacOSで実行可能。

特徴

ImRADは活発に開発中で、主な特徴は以下の通り。

  • 多様なウィンドウデザインをサポート

    • フローティングウィンドウ、ポップアップ、およびモーダルポップアップ。ImGuiバックエンドから独立
    • GLFW統合によるMainWindow。ImRADはImGuiウィンドウをOSウィンドウと同期するGLFW呼び出しを生成する(タイトルバー、リサイズ可能フラグ、自動リサイズなど)
    • Activity。ビューポート全体を埋める装飾なしウィンドウ。主にAndroidアプリで使用される
    • 一般的な main.cpp を生成するGLFWテンプレートを同梱
    • 一般的な MainActivity.java + manifest + main.cpp を生成するAndroidテンプレートを同梱
  • 多様なウィジェットをサポート

    • TextCheckboxComboButtonSliderColorEdit などの基本ウィジェット
    • ChildTableCollapsingHeaderTreeNodeTabBar などのコンテナウィジェット
    • Splitter のようなユニークなウィジェット
    • MenuBar およびコンテキストメニューの編集
    • ユーザーコード用の CustomWidget(プレースホルダー)
  • SameLine/Spacing/NextColumn を使ったレイアウト生成

    • これにより、ウィジェットが項目間隔とフレームパディングを一貫して守ることが保証される
    • 親子ウィジェット間の明確な関係と子の順序が重要
  • ボックスレイアウトをサポート

    • ImGui機能の上に実装された、強力で使いやすいレイアウト機構
    • 水平方向または垂直方向で、サイズ変更可能なウィジェットをストレッチ可能
    • 整列のためにスペーサーを挿入可能
    • テーブルレイアウトヘルパーを使って水平レイアウトを作成可能
  • プロパティバインディングをサポート

    • クラス変数はシンプルなクラスウィザードまたはバインディングダイアログを通じて管理可能
    • プロパティバインディングにより、生成されたUIは動的でありながら同時に設計可能
  • イベントハンドラおよびその他の補助コードを生成

    • たとえば、モーダルダイアログは OpenPopup メンバー関数と、ダイアログが閉じたときに呼ばれるラムダコールバックを生成する
    • イベントハンドラはユーザーコードと生成部分を分離し、デザイナーが引き続き機能するようにする
  • 生成されたコードはコメントマーカーで区切られ、ユーザーは自由に追加コードを書ける

    • 従属ポップアップのDraw呼び出しや変数の計算に利用可能
    • ユーザーコードのコールバックを呼び出す CustomWidget を利用可能
  • 対象ウィンドウスタイルは完全に設定可能

    • ImGuiが提供する基本スタイルに加え、ユーザーは新しいスタイルを定義して style フォルダにINIファイルとして保存できる
    • ImRADはUI設計時にそのスタイル設定に従う
    • 保存されたスタイルは、シンプルな imrad.h 関数を使ってアプリケーションで読み込める
  • 生成されたコードはプロジェクトでそのまま利用可能で、ImGuiライブラリと1つのヘッダーファイル(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がある

1件のコメント

 
GN⁺ 2024-08-17
Hacker Newsの意見
  • このプロジェクトで最も驚くべき点の1つは、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コマンドが多すぎるようにも見えるが、全体的にはとてもクールに見える