# 画面設計書 37-Profiles_Advanced（詳細設定）

## 概要

本ドキュメントは、Windows Terminal の設定画面における「プロファイル詳細設定」画面（Profiles_Advanced）の設計仕様を記述する。プロファイルのアンチエイリアシング、AltGrエイリアシング、スクロール動作、履歴サイズ、終了時動作、ベル設定、コンテキストメニュー、マーク、環境変数、マウスカーソル、サジェスチョン色、パス変換など高度な設定項目を編集するサブページである。

### 本画面の処理概要

**業務上の目的・背景**：ターミナルの詳細な動作設定をプロファイルごとに管理するための画面である。レンダリング品質、入力処理、履歴管理、終了動作、通知音、コンテキストメニュー、シェル統合関連など、高度なカスタマイズ項目を提供する。特にベル音の管理では複数の音声ファイルの追加・削除・プレビュー再生が可能であり、パス変換スタイルの設定では WSL 環境での互換性を確保できる。

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

**主要な操作・処理内容**：
1. アンチエイリアシングモードの選択（ComboBox）
2. AltGr エイリアシングの有効/無効切り替え
3. 入力時スナップの有効/無効切り替え
4. 履歴サイズの設定（NumberBox）
5. 終了時動作の選択（ComboBox）
6. ベルスタイルの設定（チェックボックス群：音声/ウィンドウ/タスクバー）
7. ベル音の管理（追加/削除/プレビュー再生）
8. 右クリックコンテキストメニューの有効/無効切り替え
9. マーク表示の有効/無効切り替え
10. 自動マーク（プロンプト検出）の有効/無効切り替え
11. 環境変数リロードの有効/無効切り替え
12. マウスによるカーソル再配置の有効/無効切り替え
13. レインボーサジェスチョンの有効/無効切り替え
14. パス変換スタイルの選択（ComboBox）

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

**権限による表示制御**：IsBaseLayer（デフォルトプロファイル）の場合、免責事項テキストが表示される。ShowMarks は ShowMarksAvailable、AutoMarkPrompts は AutoMarkPromptsAvailable、RepositionCursorWithMouse は RepositionCursorWithMouseAvailable プロパティにより表示制御される。

## 関連機能

| 機能No | 機能名 | 関連種別 | 関連する操作・処理 |
|--------|--------|----------|------------------|
| 82 | 設定の読み込み・保存 | 主機能 | スクロールバー・余白・その他詳細オプションの設定 |
| 84 | 設定UI | 主機能 | プロファイル詳細設定のUI表示 |

## 画面種別

編集

## URL/ルーティング

設定画面内のNavigationViewによるページ遷移。Profiles_Base の ProfileSubPage.Advanced として遷移される。NavigateToProfileArgs（Profile + WindowRoot）がパラメータとして渡される。

## 入出力項目

| No | 項目名 | 型 | 入力/出力 | 必須 | 説明 |
|----|--------|-----|----------|------|------|
| 1 | アンチエイリアシングモード（Profile_AntialiasingMode） | ComboBox | 入力 | - | Grayscale/ClearType/Aliased の選択 |
| 2 | AltGrエイリアシング（Profile_AltGrAliasing） | ToggleSwitch | 入力 | - | AltGr キーの Ctrl+Alt エイリアシング |
| 3 | 入力時スナップ（Profile_SnapOnInput） | ToggleSwitch | 入力 | - | 入力時にスクロール位置を末尾にスナップ |
| 4 | 履歴サイズ（Profile_HistorySize） | NumberBox | 入力 | - | スクロールバック履歴の行数。最小0、ステップ10/100 |
| 5 | 終了時動作（Profile_CloseOnExit） | ComboBox | 入力 | - | Graceful/Always/Never の選択 |
| 6 | ベルスタイル - 音声（Profile_BellStyleAudible） | CheckBox | 入力 | - | ベル発生時に音声を再生 |
| 7 | ベルスタイル - ウィンドウ（Profile_BellStyleWindow） | CheckBox | 入力 | - | ベル発生時にウィンドウをフラッシュ |
| 8 | ベルスタイル - タスクバー（Profile_BellStyleTaskbar） | CheckBox | 入力 | - | ベル発生時にタスクバーをフラッシュ |
| 9 | ベル音一覧 | ItemsControl | 出力 | - | 設定済みベル音ファイルの一覧 |
| 10 | ベル音プレビューボタン | Button | 入力 | - | ベル音の再生プレビュー |
| 11 | ベル音削除ボタン | Button | 入力 | - | ベル音の削除 |
| 12 | ベル音追加ボタン | Button | 入力 | - | ベル音ファイルの追加（ファイルピッカー） |
| 13 | 右クリックコンテキストメニュー（Profile_RightClickContextMenu） | ToggleSwitch | 入力 | - | 右クリック時のコンテキストメニュー表示 |
| 14 | マーク表示（Profile_ShowMarks） | ToggleSwitch | 入力 | - | スクロールバーにマークを表示。ShowMarksAvailable 時のみ表示 |
| 15 | 自動マーク（Profile_AutoMarkPrompts） | ToggleSwitch | 入力 | - | プロンプトを自動検出してマーク。AutoMarkPromptsAvailable 時のみ表示 |
| 16 | 環境変数リロード（Profile_ReloadEnvVars） | ToggleSwitch | 入力 | - | 環境変数の自動リロード |
| 17 | マウスカーソル再配置（Profile_RepositionCursorWithMouse） | ToggleSwitch | 入力 | - | マウスクリックでカーソル位置を変更。RepositionCursorWithMouseAvailable 時のみ表示 |
| 18 | レインボーサジェスチョン（Profile_RainbowSuggestions） | ToggleSwitch | 入力 | - | サジェスチョンの色分け表示 |
| 19 | パス変換スタイル（Profile_PathTranslationStyle） | ComboBox | 入力 | - | パス変換スタイルの選択 |

## 表示項目

| No | 項目名 | 表示形式 | 説明 |
|----|--------|----------|------|
| 1 | BaseLayer 免責事項 | DisclaimerStyle テキスト | デフォルトプロファイル編集時の注意書き |
| 2 | ベル音ファイル情報 | ファイル名 + ディレクトリ | 各ベル音ファイルのパスと所在ディレクトリ |
| 3 | ベル音ファイル不在表示 | 取り消し線テキスト | ファイルが見つからない場合の表示 |
| 4 | ベルスタイルプレビュー | テキスト | 現在のベルスタイル設定のプレビュー表示 |

## イベント仕様

### 1-ベル音プレビュー再生

BellSoundAudioPreview_Click イベントハンドラにより、ボタンの Tag から BellSoundViewModel を取得し、パスを展開して MediaPlayer で再生する。MediaPlayer が存在しない場合（Windows N SKU）はフォールバックする。CommandManager.IsEnabled(false) でメディアキーの干渉を防止する。

### 2-ベル音削除

BellSoundDelete_Click イベントハンドラにより、ボタンの Tag から BellSoundViewModel を取得し、Profile.RequestDeleteBellSound() を呼び出す。

### 3-ベル音追加

BellSoundAdd_Click イベントハンドラにより、_PickFileForBellSound() を呼び出す。ファイルピッカー（wav/mp3/flac フィルタ）を表示し、選択したファイルを Profile.RequestAddBellSound() で追加する。デフォルトフォルダは FOLDERID_Music。

### 4-ベルスタイル設定

3つの CheckBox（Audible/Window/Taskbar）はビットフラグとして管理される。IsBellStyleFlagSet() で各ビットの状態を読み取り、SetBellStyleAudible/Window/Taskbar で各ビットを設定する。ビット値はそれぞれ 1, 2, 4。

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

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

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

| 操作（イベント） | 対象 | 操作種別 | 概要 |
|----------------|------|---------|------|
| 詳細設定変更 | settings.json (profiles) | UPDATE | プロファイルの詳細設定を更新 |
| ベル音追加 | settings.json (profiles.bellSound) | UPDATE | ベル音ファイルパスを追加 |
| ベル音削除 | settings.json (profiles.bellSound) | UPDATE | ベル音ファイルパスを削除 |

## メッセージ仕様

| No | メッセージID | 種別 | メッセージ内容 | 表示条件 |
|----|-------------|------|---------------|----------|
| 1 | Profile_BaseLayerDisclaimer | 情報 | デフォルトプロファイル編集の注意書き | IsBaseLayer が true の場合 |
| 2 | Profile_BellSoundInfo | 情報 | ベル音設定についての説明テキスト | ベル音セクション内に常時表示 |

## 例外処理

- ベル音ファイルが見つからない場合、ファイル名に取り消し線が表示され、プレビューボタンが無効化される（FileExists プロパティによるバインド）
- MediaPlayer が利用できない場合（Windows N SKU）、ベル音プレビューは無効化される（CATCH_LOG でエラーを記録するのみ）
- ファイルピッカーでキャンセルした場合、ベル音は追加されない（空文字チェック）

## 備考

- ベルスタイルはビットフラグで管理され、CheckBox のバインドに IsBellStyleFlagSet / SetBellStyleXxx の仕組みが使用される
- ベル音は複数ファイルを登録可能で、ItemsControl で一覧表示される
- ベル音の再生には Windows.Media.Playback.MediaPlayer が使用される
- ShowMarks と AutoMarkPrompts はシェル統合機能に関連し、Available プロパティにより機能が利用可能な場合のみ表示される
- RepositionCursorWithMouse もシェル統合関連で、Available プロパティにより表示制御される
- パス変換スタイルは WSL 環境でのパス互換性に関わる設定

---

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

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

### 推奨読解順序

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

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

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

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 2-1 | Profiles_Advanced.cpp | `src/cascadia/TerminalSettingsEditor/Profiles_Advanced.cpp` | 19-24行目: コンストラクタでアクセシビリティ名設定。26-42行目: OnNavigatedTo で NavigateToProfileArgs を受け取る |

**主要処理フロー**:
1. **19-24行目**: InitializeComponent() とベル音追加ボタンのアクセシビリティ名設定
2. **26-31行目**: OnNavigatedTo で Profile と WindowRoot を取得
3. **32-42行目**: テレメトリ送信

#### Step 3: ベル音管理を理解する

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 3-1 | Profiles_Advanced.cpp | `src/cascadia/TerminalSettingsEditor/Profiles_Advanced.cpp` | 49-81行目: BellSoundAudioPreview_Click（MediaPlayer でプレビュー再生）。82-86行目: BellSoundDelete_Click。88-116行目: BellSoundAdd_Click と _PickFileForBellSound |

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

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 4-1 | Profiles_Advanced.xaml | `src/cascadia/TerminalSettingsEditor/Profiles_Advanced.xaml` | 29-263行目: 14カテゴリの設定項目のレイアウト |

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

```
Profiles_Base (基本設定ページ)
    |
    +-- Profiles_Advanced (詳細設定サブページ)
            |
            +-- ProfileViewModel
            |       +-- AntialiasingMode, AltGrAliasing, SnapOnInput, ...
            |       +-- HistorySize (NumberBox)
            |       +-- CloseOnExit (ComboBox)
            |       +-- BellStyle (ビットフラグ: Audible=1, Window=2, Taskbar=4)
            |       +-- CurrentBellSounds (IObservableVector)
            |       +-- RequestAddBellSound() / RequestDeleteBellSound()
            |       +-- ShowMarks, AutoMarkPrompts (シェル統合)
            |       +-- PathTranslationStyle (ComboBox)
            |
            +-- MediaPlayer (ベル音プレビュー)
            |       +-- Play()
            |
            +-- OpenFilePicker (ベル音ファイル追加)
                    +-- wav/mp3/flac フィルタ
```

### データフロー図

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

ComboBox/Toggle/NumberBox --> XAML TwoWay バインド -----------> ProfileViewModel 更新
                                                                  |
ベル音追加ボタン ----------> _PickFileForBellSound() ---------> RequestAddBellSound()
ベル音削除ボタン ----------> BellSoundDelete_Click -----------> RequestDeleteBellSound()
ベル音プレビューボタン ----> BellSoundAudioPreview_Click ----> MediaPlayer.Play()

CheckBox (BellStyle) ------> IsBellStyleFlagSet / SetBellStyleXxx -> ビットフラグ更新
```

### 関連ファイル一覧

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