# 画面設計書 36-Profiles_Terminal（ターミナル設定）

## 概要

本ドキュメントは、Windows Terminal の設定画面における「プロファイルターミナル設定」画面（Profiles_Terminal）の設計仕様を記述する。プロファイルのアプリケーションタイトル抑制、VT入力制御、チェックサムレポート、クリップボード書き込み、アンサーバックメッセージなどターミナル動作に関する設定項目を編集するサブページである。

### 本画面の処理概要

**業務上の目的・背景**：ターミナルの入出力動作に関する詳細設定をプロファイルごとに管理するための画面である。アプリケーションタイトルの抑制、VT入力の強制、VTチェックサムレポートやクリップボード書き込みの許可、アンサーバックメッセージの設定など、ターミナルプロトコルに関連する設定を提供する。これらの設定は主に互換性や安全性に関わるもので、一般ユーザーにはデフォルト設定が推奨されるが、上級ユーザーが特定のアプリケーションとの互換性を確保するために調整できる。

**画面へのアクセス方法**：Profiles_Base（基本設定）ページの「ターミナル」ナビゲーターボタンをクリックして遷移する。

**主要な操作・処理内容**：
1. アプリケーションタイトル抑制の有効/無効切り替え
2. VT入力強制の有効/無効切り替え
3. VTチェックサムレポート許可の有効/無効切り替え
4. VTクリップボード書き込み許可の有効/無効切り替え
5. アンサーバックメッセージの編集

**画面遷移**：Profiles_Base（基本設定）から遷移する。MainPage のパンくずリストに追加される。

**権限による表示制御**：IsBaseLayer（デフォルトプロファイル）の場合、免責事項テキストが表示される。

## 関連機能

| 機能No | 機能名 | 関連種別 | 関連する操作・処理 |
|--------|--------|----------|------------------|
| 82 | 設定の読み込み・保存 | 主機能 | カーソル形状・マウス入力・選択操作の設定 |
| 84 | 設定UI | 主機能 | プロファイルターミナル設定のUI表示 |

## 画面種別

編集

## URL/ルーティング

設定画面内のNavigationViewによるページ遷移。Profiles_Base の ProfileSubPage.Terminal として遷移される。OnNavigatedTo のパラメータは ProfileViewModel が直接渡される。

## 入出力項目

| No | 項目名 | 型 | 入力/出力 | 必須 | 説明 |
|----|--------|-----|----------|------|------|
| 1 | アプリケーションタイトル抑制（Profile_SuppressApplicationTitle） | ToggleSwitch | 入力 | - | アプリケーションが設定するタイトルを無視するか。TwoWay バインド |
| 2 | VT入力強制（Profile_ForceVTInput） | ToggleSwitch | 入力 | - | VT入力モードを強制するか。TwoWay バインド |
| 3 | VTチェックサムレポート許可（Profile_AllowVtChecksumReport） | ToggleSwitch | 入力 | - | VTチェックサムレポートを許可するか。TwoWay バインド |
| 4 | VTクリップボード書き込み許可（Profile_AllowVtClipboardWrite） | ToggleSwitch | 入力 | - | VTシーケンスによるクリップボード書き込みを許可するか。TwoWay バインド |
| 5 | アンサーバックメッセージ（Profile_AnswerbackMessage） | TextBox | 入力 | - | ENQ に対するレスポンスメッセージ。TwoWay バインド |

## 表示項目

| No | 項目名 | 表示形式 | 説明 |
|----|--------|----------|------|
| 1 | BaseLayer 免責事項 | DisclaimerStyle テキスト | デフォルトプロファイル編集時の注意書き |
| 2 | アンサーバックメッセージプレビュー | テキスト | 現在設定されているメッセージの表示 |

## イベント仕様

### 1-ページ遷移

OnNavigatedTo イベントで ProfileViewModel をパラメータから取得する。Profiles_Terminal は NavigateToProfileArgs ではなく ProfileViewModel が直接渡される点が他のプロファイルサブページと異なる（Profiles_Terminal.cpp 23行目）。テレメトリ（PageId="profile.terminal"）が送信される。

### 2-設定変更

すべての設定項目は XAML の TwoWay バインドにより ProfileViewModel のプロパティに直接反映される。各設定項目は SettingContainer でラップされ、HasSettingValue / ClearSettingValue / SettingOverrideSource プロパティによりリセットボタンとオーバーライド表示が制御される。

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

### 操作別データベース影響一覧

本画面はデータベースを使用しない。設定は settings.json ファイルに保存される。

| 操作（イベント） | 対象 | 操作種別 | 概要 |
|----------------|------|---------|------|
| ターミナル設定変更 | settings.json (profiles) | UPDATE | プロファイルのターミナル設定を更新 |

## メッセージ仕様

| No | メッセージID | 種別 | メッセージ内容 | 表示条件 |
|----|-------------|------|---------------|----------|
| 1 | Profile_BaseLayerDisclaimer | 情報 | デフォルトプロファイル編集の注意書き | IsBaseLayer が true の場合 |

## 例外処理

- 特筆すべき例外処理はない。すべての設定項目は ToggleSwitch または TextBox による単純な入力であり、バリデーションはモデル層で行われる。

## 備考

- 設定項目数が比較的少なく、シンプルなページ構成となっている
- すべての ToggleSwitch は ToggleSwitchInExpanderStyle が適用されている
- アンサーバックメッセージは ExpanderSettingContainerStyle で表示され、CurrentValue にプレビューが表示される
- OnNavigatedFrom で _ViewModelChangedRevoker.revoke() が呼ばれ、イベントハンドラの登録解除が行われる

---

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

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

### 推奨読解順序

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

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 1-1 | Profiles_Terminal.idl | `src/cascadia/TerminalSettingsEditor/Profiles_Terminal.idl` | ページクラスのインターフェース定義 |
| 1-2 | Profiles_Terminal.h | `src/cascadia/TerminalSettingsEditor/Profiles_Terminal.h` | ページの構造体定義。Profile プロパティ |

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

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 2-1 | Profiles_Terminal.cpp | `src/cascadia/TerminalSettingsEditor/Profiles_Terminal.cpp` | 16-19行目: コンストラクタ。21-35行目: OnNavigatedTo で ProfileViewModel を直接受け取り、テレメトリ送信 |

**主要処理フロー**:
1. **16-19行目**: InitializeComponent() のみのシンプルな初期化
2. **21-23行目**: OnNavigatedTo で ProfileViewModel を直接取得（他サブページと異なる）
3. **25-35行目**: テレメトリ送信
4. **37-40行目**: OnNavigatedFrom で ViewModelChangedRevoker を解除

#### Step 3: XAML レイアウトを理解する

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 3-1 | Profiles_Terminal.xaml | `src/cascadia/TerminalSettingsEditor/Profiles_Terminal.xaml` | 23-82行目: 5つの設定項目のレイアウト。各項目が SettingContainer でラップされている |

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

```
Profiles_Base (基本設定ページ)
    |
    +-- Profiles_Terminal (ターミナル設定サブページ)
            |
            +-- ProfileViewModel
                    +-- SuppressApplicationTitle (ToggleSwitch)
                    +-- ForceVTInput (ToggleSwitch)
                    +-- AllowVtChecksumReport (ToggleSwitch)
                    +-- AllowVtClipboardWrite (ToggleSwitch)
                    +-- AnswerbackMessage (TextBox)
```

### データフロー図

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

ToggleSwitch ---------> XAML TwoWay バインド ----------> ProfileViewModel プロパティ更新
TextBox 入力 ---------> XAML TwoWay バインド ----------> ProfileViewModel プロパティ更新
                                                            |
                                                        settings.json に反映
```

### 関連ファイル一覧

| ファイル | パス | 種別 | 役割 |
|---------|------|------|------|
| Profiles_Terminal.xaml | `src/cascadia/TerminalSettingsEditor/Profiles_Terminal.xaml` | ソース | ページのXAMLレイアウト定義 |
| Profiles_Terminal.cpp | `src/cascadia/TerminalSettingsEditor/Profiles_Terminal.cpp` | ソース | ページのコードビハインド |
| Profiles_Terminal.h | `src/cascadia/TerminalSettingsEditor/Profiles_Terminal.h` | ソース | ヘッダー定義 |
| Profiles_Terminal.idl | `src/cascadia/TerminalSettingsEditor/Profiles_Terminal.idl` | ソース | WinRT インターフェース定義 |
| ProfileViewModel.h | `src/cascadia/TerminalSettingsEditor/ProfileViewModel.h` | ソース | プロファイル ViewModel の定義 |
| CommonResources.xaml | `src/cascadia/TerminalSettingsEditor/CommonResources.xaml` | リソース | 共通スタイル・テンプレートリソース |
