# 画面設計書 23-Interaction（操作設定）

## 概要

本ドキュメントは、Windows Terminal の操作設定画面（Interaction）の設計を記述する。コピー・貼り付けの動作、スクロール、フォーカス動作、警告表示などの操作に関する設定を管理する画面である。

### 本画面の処理概要

**業務上の目的・背景**：ターミナル操作時のユーザーインタラクションをカスタマイズするための設定画面である。テキストの選択・コピー・貼り付け動作、スクロール挙動、フォーカス追従、URL自動検出、警告表示の有無など、日常的なターミナル操作の細かな挙動をユーザーの好みに合わせて調整できる。

**画面へのアクセス方法**：MainPage（設定ナビゲーション）の左側ナビゲーションから「操作」項目をクリックすることでアクセスする。

**主要な操作・処理内容**：
1. 選択時自動コピー（CopyOnSelect）の有効/無効切替
2. コピー形式の選択（プレーンテキスト、HTML、RTF等）
3. ブロック選択時の末尾空白トリミング設定
4. 貼り付け時のトリミング設定
5. 単語区切り文字の設定
6. リサイズ時のグリッドスナップ設定
7. タブスイッチャーモードの選択
8. マウスフォーカス追従の有効/無効切替
9. スクロールでズーム/不透明度変更の有効/無効切替
10. URL自動検出の有効/無効切替
11. Web検索デフォルトURL設定
12. カラー選択機能の有効/無効切替
13. 全タブ閉じ確認、入力サービス警告、大量貼り付け警告、複数行貼り付け警告の設定

**画面遷移**：
- 遷移元：MainPage（設定ナビゲーション）
- 遷移先：なし（MainPageのcontentFrame内で表示される設定ページ）

**権限による表示制御**：特に権限による制御はない。全設定項目が常に表示される。

## 関連機能

| 機能No | 機能名 | 関連種別 | 関連する操作・処理 |
|--------|--------|----------|------------------|
| 82 | 設定の読み込み・保存 | 主機能 | コピー・貼り付け警告・スクロール速度等の設定を編集 |
| 84 | 設定UI | 主機能 | 操作設定のUI表示と編集 |

## 画面種別

編集（設定）

## URL/ルーティング

UWP/WinUI アプリケーションのためURL/ルーティングは適用されない。MainPage の contentFrame 内に Frame.Navigate で表示される。ナビゲーションパラメータとして InteractionViewModel が渡される。

## 入出力項目

| 項目名 | 入出力 | データ型 | 説明 |
|--------|--------|----------|------|
| CopyOnSelect | 入出力 | Boolean | 選択時自動コピー |
| CurrentCopyFormat | 入出力 | EnumEntry | コピー形式 |
| TrimBlockSelection | 入出力 | Boolean | ブロック選択時トリミング |
| TrimPaste | 入出力 | Boolean | 貼り付け時トリミング |
| WordDelimiters | 入出力 | String | 単語区切り文字 |
| SnapToGridOnResize | 入出力 | Boolean | リサイズ時グリッドスナップ |
| CurrentTabSwitcherMode | 入出力 | EnumEntry | タブスイッチャーモード |
| FocusFollowMouse | 入出力 | Boolean | マウスフォーカス追従 |
| ScrollToZoom | 入出力 | Boolean | スクロールでフォントサイズ変更 |
| ScrollToChangeOpacity | 入出力 | Boolean | スクロールで不透明度変更 |
| DetectURLs | 入出力 | Boolean | URL自動検出 |
| SearchWebDefaultQueryUrl | 入出力 | String | Web検索デフォルトURL |
| EnableColorSelection | 入出力 | Boolean | カラー選択機能 |
| ConfirmCloseAllTabs | 入出力 | Boolean | 全タブ閉じ確認 |
| InputServiceWarning | 入出力 | Boolean | 入力サービス警告 |
| WarnAboutLargePaste | 入出力 | Boolean | 大量貼り付け警告 |
| CurrentWarnAboutMultiLinePaste | 入出力 | EnumEntry | 複数行貼り付け警告モード |

## 表示項目

| 表示領域 | 項目名 | コントロール種別 | 説明 |
|----------|--------|-----------------|------|
| 操作設定 | Globals_CopyOnSelect | ToggleSwitch | 選択時自動コピー |
| 操作設定 | Globals_CopyFormat | ComboBox | コピー形式 |
| 操作設定 | Globals_TrimBlockSelection | ToggleSwitch | ブロック選択トリミング |
| 操作設定 | Globals_TrimPaste | ToggleSwitch | 貼り付けトリミング |
| 操作設定 | Globals_WordDelimiters | TextBox（Expander内） | 単語区切り文字（SpellCheck無効） |
| 操作設定 | Globals_SnapToGridOnResize | ToggleSwitch | グリッドスナップ |
| 操作設定 | Globals_TabSwitcherMode | ComboBox | タブスイッチャーモード |
| 操作設定 | Globals_FocusFollowMouse | ToggleSwitch | フォーカス追従 |
| 操作設定 | Globals_ScrollToZoom | ToggleSwitch | スクロールズーム |
| 操作設定 | Globals_ScrollToChangeOpacity | ToggleSwitch | スクロール不透明度変更 |
| 操作設定 | Globals_DetectURLs | ToggleSwitch | URL検出 |
| 操作設定 | Globals_SearchWebDefaultQueryUrl | TextBox（Expander内） | Web検索URL（SpellCheck無効） |
| 操作設定 | Globals_EnableColorSelection | ToggleSwitch | カラー選択 |
| 警告設定 | Globals_WarningsHeader | TextBlock（サブヘッダー） | 「警告」セクションヘッダー |
| 警告設定 | Globals_ConfirmCloseAllTabs | ToggleSwitch | 全タブ閉じ確認 |
| 警告設定 | Globals_InputServiceWarning | ToggleSwitch | 入力サービス警告 |
| 警告設定 | Globals_WarnAboutLargePaste | ToggleSwitch | 大量貼り付け警告 |
| 警告設定 | Globals_WarnAboutMultiLinePaste | ComboBox | 複数行貼り付け警告 |

## イベント仕様

### 1-OnNavigatedTo

MainPage からナビゲートされた時に発火する。ナビゲーションパラメータから InteractionViewModel を取得し、ViewModel プロパティに設定する。テレメトリログとして "NavigatedToPage" イベント（PageId="interaction"）を記録する。

### 2-各設定項目の変更

各設定項目は x:Bind の Mode=TwoWay で ViewModel と双方向バインドされている。変更は即座に ViewModel に反映され、MainPage の SaveButton で一括保存される。

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

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

| 操作（イベント） | 対象テーブル | 操作種別 | 概要 |
|----------------|-------------|---------|------|
| 設定変更 | settings.json（ファイル） | UPDATE | MainPage の SaveButton 経由で全設定を一括保存 |

### テーブル別更新項目詳細

本画面自体は直接ファイルに書き込まない。MainPage の SaveButton 経由で永続化される。

## メッセージ仕様

特になし。設定変更はリアルタイムで ViewModel に反映される。

## 例外処理

- WordDelimiters や SearchWebDefaultQueryUrl に不正な文字列が入力された場合、ViewModel 側でバリデーションが行われる。

## 備考

- 画面は2つの StackPanel セクションに分かれている。上段が操作設定、下段が警告設定（Globals_WarningsHeader）。
- WarnAboutMultiLinePaste は INITIALIZE_BINDABLE_ENUM_SETTING マクロで初期化される Enum 型設定項目。
- WordDelimiters と SearchWebDefaultQueryUrl は ExpanderSettingContainerStyle を使用しており、展開すると TextBox が表示される。

---

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

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

### 推奨読解順序

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

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 1-1 | InteractionViewModel.idl | `src/cascadia/TerminalSettingsEditor/InteractionViewModel.idl` | PERMANENT_OBSERVABLE_PROJECTED_SETTING マクロで定義された各設定プロパティ、TabSwitcherModeList と CopyFormatList の EnumEntry リストを確認する |

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

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 2-1 | Interaction.cpp | `src/cascadia/TerminalSettingsEditor/Interaction.cpp` | コンストラクタ（行15-20）で INITIALIZE_BINDABLE_ENUM_SETTING の使用を確認。OnNavigatedTo（行22-33）で ViewModel 取得とテレメトリ記録を確認 |

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

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 3-1 | Interaction.xaml | `src/cascadia/TerminalSettingsEditor/Interaction.xaml` | 2つの StackPanel セクション（操作設定・警告設定）の構造を理解する |

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

```
MainPage._Navigate("Interaction_Nav")
    |
    +-- contentFrame.Navigate(typeof(Interaction), InteractionViewModel)
            |
            +-- Interaction::Interaction (コンストラクタ)
            |       |
            |       +-- InitializeComponent
            |       +-- INITIALIZE_BINDABLE_ENUM_SETTING(WarnAboutMultiLinePaste)
            |
            +-- Interaction::OnNavigatedTo
                    |
                    +-- InteractionViewModel 取得
                    +-- TraceLogging (テレメトリ)
```

### データフロー図

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

InteractionViewModel --------> Interaction Page       -----> ToggleSwitch / ComboBox / TextBox
(設定データ)                     |                             |
                                 +-- x:Bind TwoWay             +-- ViewModel プロパティ更新
                                 |                             |
GlobalAppSettings ------------> InteractionViewModel   -----> settings.json (MainPage経由)
```

### 関連ファイル一覧

| ファイル | パス | 種別 | 役割 |
|---------|------|------|------|
| Interaction.xaml | `src/cascadia/TerminalSettingsEditor/Interaction.xaml` | テンプレート | UI レイアウト定義 |
| Interaction.cpp | `src/cascadia/TerminalSettingsEditor/Interaction.cpp` | ソース | 初期化・ナビゲーション処理 |
| InteractionViewModel.idl | `src/cascadia/TerminalSettingsEditor/InteractionViewModel.idl` | IDL | ViewModel インターフェース定義 |
| InteractionViewModel.h | `src/cascadia/TerminalSettingsEditor/InteractionViewModel.h` | ソース | ViewModel クラス定義 |
| InteractionViewModel.cpp | `src/cascadia/TerminalSettingsEditor/InteractionViewModel.cpp` | ソース | ViewModel 実装 |
| CommonResources.xaml | `src/cascadia/TerminalSettingsEditor/CommonResources.xaml` | リソース | 共通スタイル定義 |
