# 機能設計書 175-TableNextColumn

## 概要

本ドキュメントは、ImGuiライブラリにおける`TableNextColumn`関数の機能設計を記載する。この関数は、次の列（または次の行の最初の列）に移動し、そのセルへのコンテンツ追加を開始する。

### 本機能の処理概要

**業務上の目的・背景**：テーブル内のセルにコンテンツを追加する際、列から列への移動が必要である。`TableNextColumn`関数は、現在の列を終了し、次の列のセルを開始する。最後の列にいる場合は、自動的に新しい行を開始して最初の列に移動する。これにより、連続的なデータ入力フローを実現する。

**機能の利用シーン**：
- テーブルの各セルに順番にデータを追加する場合
- ループ処理で行/列を反復する場合
- 可変長の列データを持つテーブルの構築

**主要な処理内容**：
1. カレントテーブルの存在確認
2. 現在のセルの終了処理（TableEndCell）
3. 次の列への移動、または新しい行の開始
4. 新しいセルの開始処理（TableBeginCell）
5. 列の可視性状態の返却

**関連システム・外部連携**：テーブルの行/列管理システム

**権限による制御**：特になし。

## 関連画面

| 画面No | 画面名 | 関連種別 | 関連する操作・処理 |
|--------|--------|----------|------------------|
| 26 | Tables | 主画面 | セル間の移動 |

## 機能種別

UI制御機能（セル操作）

## 入力仕様

### 入力パラメータ

| パラメータ名 | 型 | 必須 | 説明 | バリデーション |
|-------------|-----|-----|------|---------------|
| なし | - | - | パラメータなし | - |

### 入力データソース

- ImGuiコンテキストのカレントテーブル
- 現在の列インデックス（table->CurrentColumn）

## 出力仕様

### 出力データ

| 項目名 | 型 | 説明 |
|--------|-----|------|
| 戻り値 | bool | 列が可視でコンテンツを出力すべき場合true |

### 出力先

- テーブルの列状態（table->CurrentColumn）
- ウィンドウのカーソル位置

## 処理フロー

### 処理シーケンス

```
1. カレントテーブルの取得
   └─ g.CurrentTableがNULLならfalseを返却
2. 行内で次の列に移動可能か判定
   └─ IsInsideRow && CurrentColumn + 1 < ColumnsCount
3. 移動可能な場合
   ├─ 現在のセルが存在すれば終了（TableEndCell）
   └─ 次の列でセルを開始（TableBeginCell）
4. 移動不可能な場合（最後の列または行外）
   ├─ TableNextRowを呼び出し
   └─ 最初の列でセルを開始（TableBeginCell）
5. 列の可視性を返却
   └─ table->Columns[CurrentColumn].IsRequestOutputを返す
```

### フローチャート

```mermaid
flowchart TD
    A[開始] --> B{テーブル<br/>存在?}
    B -->|No| C[false を返却]
    B -->|Yes| D{行内で<br/>次の列に<br/>移動可能?}
    D -->|Yes| E{現在のセル<br/>存在?}
    E -->|Yes| F[TableEndCell]
    E -->|No| G[TableBeginCell<br/>次の列]
    F --> G
    D -->|No| H[TableNextRow]
    H --> I[TableBeginCell<br/>列0]
    G --> J[IsRequestOutput<br/>を返却]
    I --> J
    C --> K[終了]
    J --> K
```

## ビジネスルール

### 業務ルール

| ルールNo | ルール名 | 内容 | 適用条件 |
|---------|---------|------|---------|
| BR-175-01 | 自動行移動 | 最後の列でTableNextColumnを呼ぶと自動的に新しい行に移動 | CurrentColumn + 1 >= ColumnsCount |
| BR-175-02 | 可視性ベースのスキップ | 戻り値がfalseでも、行高さに寄与しない場合のみコンテンツをスキップ可能 | 常に |

### 計算ロジック

特になし

## データベース操作仕様

該当なし

## エラー処理

### エラーケース一覧

| エラーコード | エラー種別 | 発生条件 | 対処方法 |
|------------|----------|---------|---------|
| N/A | 暗黙的な失敗 | BeginTable外で呼び出し | falseを返却、何も起きない |

### リトライ仕様

該当なし

## トランザクション仕様

該当なし

## パフォーマンス要件

- O(1)の処理コスト

## セキュリティ考慮事項

特になし

## 備考

- 戻り値がfalseでも、最も高いコンテンツを含む可能性のある列ではスキップすべきでない
- TableSetColumnIndexとは異なり、相対的な移動を行う

---

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

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

### 推奨読解順序

#### Step 1: データ構造を理解する

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 1-1 | imgui_internal.h | `imgui_internal.h` | ImGuiTableColumn構造体のIsRequestOutput |
| 1-2 | imgui_internal.h | `imgui_internal.h` | ImGuiTable構造体のCurrentColumn |

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

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 2-1 | imgui.h | `imgui.h` | 904行目: 公開APIの宣言 |
| 2-2 | imgui_tables.cpp | `imgui_tables.cpp` | 2131-2153行目: TableNextColumn実装 |

**主要処理フロー**:
- **2133-2136行目**: カレントテーブルの確認
- **2138-2143行目**: 行内での列移動
- **2144-2148行目**: 新しい行への移動
- **2151-2152行目**: 可視性の返却

#### Step 3: 内部関数を理解する

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 3-1 | imgui_tables.cpp | `imgui_tables.cpp` | 2159行目以降: TableBeginCell実装 |
| 3-2 | imgui_tables.cpp | `imgui_tables.cpp` | TableEndCell実装 |

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

```
TableNextColumn()
    │
    ├─ [行内で次の列に移動可能な場合]
    │   ├─ TableEndCell(table) [現在のセル存在時]
    │   └─ TableBeginCell(table, CurrentColumn + 1)
    │
    └─ [行外または最後の列の場合]
        ├─ TableNextRow()
        │      └─ 新しい行を開始
        └─ TableBeginCell(table, 0)
               └─ 最初の列でセル開始
```

### データフロー図

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

g.CurrentTable ─────────▶ ┌──────────────────┐
                         │ TableNextColumn() │
table->CurrentColumn ───▶│   - セル終了      │ ────▶ [bool: 可視性]
                         │   - 列/行移動     │
table->IsInsideRow ─────▶│   - セル開始      │ ────▶ [CurrentColumn更新]
                         └──────────────────┘
```

### 関連ファイル一覧

| ファイル | パス | 種別 | 役割 |
|---------|------|------|------|
| imgui.h | `imgui.h` | ヘッダー | 公開API宣言 |
| imgui_internal.h | `imgui_internal.h` | ヘッダー | 内部構造体定義 |
| imgui_tables.cpp | `imgui_tables.cpp` | ソース | 実装本体 |
