# 画面設計書 5-About Window

## 概要

Dear ImGuiのバージョン情報、ライセンス、ビルド情報を表示するウィンドウの設計書である。ライブラリの基本情報とシステム環境の詳細を確認できる。

### 本画面の処理概要

About Windowは、Dear ImGuiのバージョン番号、著作権表示、ライセンス情報、および詳細なビルド/システム設定情報を表示するウィンドウである。

**業務上の目的・背景**：ImGuiを使用したアプリケーションにおいて、使用しているライブラリのバージョンを確認したり、問題報告時にビルド設定やシステム情報を取得したりするために使用する。「Config/Build Information」セクションは、GitHubでの問題報告時に貼り付け可能なフォーマットで情報を出力できる。

**画面へのアクセス方法**：
1. Demo Windowのメニューバーから「Tools」→「About Dear ImGui」を選択
2. コード内で直接`ImGui::ShowAboutWindow()`を呼び出す

**主要な操作・処理内容**：
1. バージョン番号とライセンス情報を確認する
2. 各種リソースへのリンク（Homepage、FAQ、Wiki等）をクリックして開く
3. 「Config/Build Information」チェックボックスを有効にして詳細情報を表示する
4. 「Copy to clipboard」ボタンでビルド情報をコピーする

**画面遷移**：
- 遷移元：Demo Window（Tools Menu）、またはアプリケーションコードからの直接呼び出し
- 遷移先：外部URL（Homepage、FAQ、Wiki等）

**権限による表示制御**：なし

## 関連機能

| 機能No | 機能名 | 関連種別 | 関連する操作・処理 |
|--------|--------|----------|------------------|
| 16 | ShowAboutWindow | 主機能 | Aboutウィンドウの表示 |
| 24 | Begin | 主機能 | ウィンドウの開始処理 |
| 25 | End | 主機能 | ウィンドウの終了処理 |
| 85 | Text | 補助機能 | バージョン情報テキストの表示 |
| 90 | BulletText | 補助機能 | 機能リストのビュレット表示 |
| 72 | Separator | 補助機能 | セクション間のセパレータ |

## 画面種別

情報表示画面

## URL/ルーティング

N/A（Immediate Mode GUIのため、URLやルーティングの概念は適用されない）

## 入出力項目

| 項目名 | 型 | 入力/出力 | 必須 | 説明 |
|--------|-----|----------|------|------|
| p_open | bool* | 入出力 | 任意 | ウィンドウの表示状態を制御するポインタ |

## 表示項目

| 項目名 | 説明 |
|--------|------|
| バージョン情報 | Dear ImGuiのバージョン番号（例：1.92.7 WIP (19262)） |
| リソースリンク | Homepage、FAQ、Wiki、Extensions、Releases、Fundingへのリンク |
| 著作権表示 | 著作権情報とライセンス表示 |
| Config/Build Informationチェックボックス | 詳細情報の表示切替 |
| Copy to clipboardボタン | ビルド情報をクリップボードにコピー |
| ビルド情報表示領域 | sizeof情報、コンパイラ定義、バックエンド情報、スタイル設定等 |

## イベント仕様

### 1-リソースリンククリック

Homepage、FAQ、Wiki等のリンクをクリックすると、TextLinkOpenURL関数によりデフォルトブラウザで該当URLが開かれる。

### 2-Config/Build Information表示切替

チェックボックスを有効にすると、詳細なビルド情報（sizeof情報、コンパイラ定義、バックエンド情報等）が表示される。

### 3-クリップボードコピー

「Copy to clipboard」ボタンをクリックすると、LogToClipboard()によりビルド情報がMarkdown形式でクリップボードにコピーされる。GitHubでの問題報告時にそのまま貼り付け可能。

## データベース更新仕様

N/A（Dear ImGuiはUIライブラリであり、データベース操作は行わない）

## メッセージ仕様

N/A

## 例外処理

| 状態 | 処理内容 |
|------|----------|
| ウィンドウ折りたたみ状態 | Begin()がfalseを返し、End()のみ呼び出して早期リターン |

## 備考

- ImGuiWindowFlags_AlwaysAutoResizeフラグが設定されており、コンテンツに合わせてウィンドウサイズが自動調整される
- ビルド情報にはIM_ASSERTマクロの状態も含まれ、アサートが無効化されている場合は警告が表示される
- IMGUI_DISABLE_DEMO_WINDOWSマクロが定義されている場合、この関数は空実装になる

---

## コードリーディングガイド

本画面を理解するために参照すべきファイルと、推奨する読み解き順序を以下に示す。

### 推奨読解順序

#### Step 1: エントリーポイントを理解する

ShowAboutWindow関数がAbout Windowの描画処理のエントリーポイント。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 1-1 | imgui_demo.cpp | `imgui_demo.cpp` | ShowAboutWindow()関数（行8115以降）がエントリーポイント |

**主要処理フロー**:
1. **行8117-8121**: ウィンドウ開始（AlwaysAutoResizeフラグ付き）
2. **行8123**: バージョン情報表示
3. **行8125-8135**: リソースリンク（TextLinkOpenURL）
4. **行8137-8141**: 著作権とライセンス表示
5. **行8143-8144**: Config/Build Informationチェックボックス
6. **行8150-8297**: 詳細ビルド情報の表示

#### Step 2: ビルド情報セクションを理解する

show_config_infoがtrueの場合に表示される詳細情報。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 2-1 | imgui_demo.cpp | `imgui_demo.cpp` | 行8145-8298でビルド情報を構築 |

**主要処理フロー**:
- **行8150-8157**: クリップボードコピー開始（Markdown形式）
- **行8159-8160**: バージョンとサイズ情報
- **行8161-8239**: コンパイラ定義のチェックと表示（#ifdef）
- **行8241-8254**: IM_ASSERTの状態確認
- **行8256-8291**: io/style設定の表示
- **行8293-8297**: クリップボードコピー終了

### プログラム呼び出し階層図

```
ImGui::ShowAboutWindow(bool* p_open)
    |
    +-- ImGui::Begin("About Dear ImGui", p_open, ImGuiWindowFlags_AlwaysAutoResize)
    |       |
    |       +-- Text() [バージョン情報]
    |       |
    |       +-- TextLinkOpenURL("Homepage", ...)
    |       +-- TextLinkOpenURL("FAQ", ...)
    |       +-- TextLinkOpenURL("Wiki", ...)
    |       +-- TextLinkOpenURL("Extensions", ...)
    |       +-- TextLinkOpenURL("Releases", ...)
    |       +-- TextLinkOpenURL("Funding", ...)
    |       |
    |       +-- Separator()
    |       +-- Text() [著作権・ライセンス]
    |       |
    |       +-- Checkbox("Config/Build Information")
    |       |
    |       +-- [show_config_info == true]
    |       |       +-- Button("Copy to clipboard")
    |       |       |       +-- LogToClipboard()
    |       |       |       +-- LogText("```cpp\n")
    |       |       |
    |       |       +-- BeginChild()
    |       |       |       +-- Text() [sizeof情報]
    |       |       |       +-- Text() [コンパイラ定義: #ifdef]
    |       |       |       +-- Text() [IM_ASSERT状態]
    |       |       |       +-- Text() [io/style設定]
    |       |       +-- EndChild()
    |       |       |
    |       |       +-- LogText("```\n")
    |       |       +-- LogFinish()
    |
    +-- ImGui::End()
```

### データフロー図

```
[入力]                        [処理]                         [出力]

p_open (bool*)  ─────────▶ ShowAboutWindow() ─────────────▶  ウィンドウ描画
                                  |
IMGUI_VERSION   ─────────▶       |
                                  |
io (ImGuiIO)    ─────────▶       |  ───▶ バックエンド情報表示
                                  |
style (ImGuiStyle) ────▶         |  ───▶ スタイル設定表示
                                  |
コンパイラ定義  ─────────▶       |  ───▶ ビルド設定表示
(__cplusplus等)                   |
                                  ▼
                           クリップボード
                           (コピー時)
```

### 関連ファイル一覧

| ファイル | パス | 種別 | 役割 |
|---------|------|------|------|
| imgui_demo.cpp | `imgui_demo.cpp` | ソース | ShowAboutWindow()の実装 |
| imgui.h | `imgui.h` | ヘッダー | ShowAboutWindow()のAPI宣言、IMGUI_VERSION定義 |
