# 画面設計書 7-User Guide

## 概要

ImGuiの基本的な操作方法のガイドを表示するセクションの設計書である。エンドユーザー向けにマウス操作、キーボード操作、テキスト編集操作等を説明する。

### 本画面の処理概要

User Guideは、ImGuiを使用したアプリケーションのエンドユーザー向けに、基本的なUI操作方法をビュレット形式で説明するヘルプテキストである。

**業務上の目的・背景**：ImGuiベースのアプリケーションを初めて使用するユーザーに、ウィンドウの操作方法、テキスト編集のショートカット、キーボードナビゲーション等を説明するために使用する。この情報はDemo Windowの「Help」セクション内に表示されるほか、単独でも呼び出し可能。

**画面へのアクセス方法**：
1. Demo WindowのHelpセクション内「USER GUIDE」として表示される
2. コード内で直接`ImGui::ShowUserGuide()`を呼び出す

**主要な操作・処理内容**：
- ユーザーガイドは操作のみで、表示される情報を読むだけ
- io.FontAllowUserScalingが有効な場合、ズーム操作の説明が追加表示される

**画面遷移**：
- 遷移元：Demo Window（Helpセクション）、またはアプリケーションコードからの直接呼び出し
- 遷移先：なし

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

## 関連機能

| 機能No | 機能名 | 関連種別 | 関連する操作・処理 |
|--------|--------|----------|------------------|
| 20 | ShowUserGuide | 主機能 | ユーザーガイドの表示 |
| 90 | BulletText | 主機能 | 操作説明のビュレット表示 |
| 77 | Indent | 補助機能 | テキストのインデント |
| 78 | Unindent | 補助機能 | インデントの解除 |

## 画面種別

ヘルプ/情報表示

## URL/ルーティング

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

## 入出力項目

なし（パラメータを取らない関数）

## 表示項目

| 項目名 | 説明 |
|--------|------|
| ウィンドウ操作説明 | タイトルバーダブルクリック、リサイズ、ドラッグ等 |
| テキスト編集操作説明 | Ctrl+Left/Right、Ctrl+A、Ctrl+X/C/V、Ctrl+Z等 |
| キーボードナビゲーション説明 | 矢印キー、Space、Return、Escape、Alt等 |
| ズーム操作説明 | Ctrl+マウスホイール（io.FontAllowUserScalingが有効な場合のみ） |

## イベント仕様

このセクションはユーザー操作を受け付けず、テキスト表示のみを行う。

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

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

## メッセージ仕様

N/A

## 例外処理

なし

## 備考

- ShowUserGuideはウィンドウを作成せず、内容のみを描画する
- io.FontAllowUserScalingの設定によって表示内容が動的に変わる
- IMGUI_DISABLE_DEMO_WINDOWSマクロが定義されている場合、この関数は空実装になる

---

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

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

### 推奨読解順序

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

ShowUserGuide関数がユーザーガイドの描画処理のエントリーポイント。

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

**主要処理フロー**:
1. **行8697**: ImGuiIO参照を取得
2. **行8698**: ウィンドウ折りたたみ操作の説明
3. **行8699-8701**: リサイズ、ドラッグ操作の説明
4. **行8702**: スライダー操作の説明
5. **行8703**: Tab/Shift+Tab操作の説明
6. **行8704**: Ctrl+Tab操作の説明
7. **行8705-8706**: ズーム操作の説明（条件付き）
8. **行8707-8714**: テキスト入力操作の説明（Indentあり）
9. **行8715-8722**: キーボードナビゲーションの説明（Indentあり）

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

```
ImGui::ShowUserGuide()
    |
    +-- GetIO() [io.FontAllowUserScaling確認用]
    |
    +-- BulletText("Double-click on title bar...")
    +-- BulletText("Click and drag on lower corner...")
    +-- BulletText("Ctrl+Click on a slider...")
    +-- BulletText("Tab/Shift+Tab...")
    +-- BulletText("Ctrl+Tab...")
    |
    +-- [io.FontAllowUserScaling == true]
    |       +-- BulletText("Ctrl+Mouse Wheel...")
    |
    +-- BulletText("While inputting text:")
    +-- Indent()
    |       +-- BulletText("Ctrl+Left/Right...")
    |       +-- BulletText("Ctrl+A...")
    |       +-- BulletText("Ctrl+X/C/V...")
    |       +-- BulletText("Ctrl+Z/Ctrl+Y...")
    |       +-- BulletText("Escape...")
    +-- Unindent()
    |
    +-- BulletText("With keyboard navigation enabled:")
    +-- Indent()
    |       +-- BulletText("Arrow keys...")
    |       +-- BulletText("Space...")
    |       +-- BulletText("Return...")
    |       +-- BulletText("Escape...")
    |       +-- BulletText("Alt...")
    +-- Unindent()
```

### データフロー図

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

io.FontAllowUserScaling ──▶ ShowUserGuide() ──────────────▶  テキスト表示
                                  |                         (BulletText)
                                  |
                                  ▼
                           ビュレットリスト
                           (操作説明)
```

### 関連ファイル一覧

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