# 画面設計書 1-TerminalPage（メイン画面）

## 概要

本ドキュメントは、Windows Terminal アプリケーションのメイン画面である TerminalPage の画面設計書である。TerminalPage はアプリケーション起動時の初期画面であり、タブ管理、ペイン管理、ダイアログ表示、各種ツール起動など、ターミナル操作の中核を担う主コンテナページである。

### 本画面の処理概要

**業務上の目的・背景**：TerminalPage は Windows Terminal の主要操作面として機能し、ユーザーが複数のターミナルセッションをタブとペインで管理しながら、コマンド実行、テキスト編集、設定変更などの業務を効率的に行うためのコンテナ画面である。開発者・システム管理者が日常的に使用するターミナル操作を統合的に提供するという業務課題を解決する。

**画面へのアクセス方法**：アプリケーション起動時に自動的に表示される。App クラスから TerminalPage が生成され、ウィンドウのコンテンツとして設定される。設定画面（MainPage）から戻る場合は設定タブを閉じることで TerminalPage のコンテンツ領域に戻る。

**主要な操作・処理内容**：
1. タブの作成・複製・閉じる・切り替え・移動・リネームなどのタブライフサイクル管理
2. ペインの分割（水平/垂直）・リサイズ・移動・入れ替え・ズーム・閉じるなどのペイン操作
3. テキストのコピー・貼り付け（複数行/大量テキスト警告付き）
4. スクロール操作（行単位、ページ単位、バッファ端、マーク位置）
5. フォントサイズ調整、カラースキーム変更、不透明度調整などの表示カスタマイズ
6. フォーカスモード・フルスクリーン・常に最前面などのウィンドウモード切替
7. コマンドパレット・サジェスチョン・検索などのツール起動
8. 各種ダイアログ（終了確認、貼り付け確認、エラー表示など）の表示管理
9. ウィンドウ識別・リネーム・新規ウィンドウ作成
10. 設定画面への遷移

**画面遷移**：
- TerminalPage から遷移可能な画面：CommandPalette（Ctrl+Shift+P）、SuggestionsControl（入力時）、AboutDialog（Helpメニュー）、QuitDialog（ウィンドウ閉じ）、CloseAllDialog（全タブ閉じ）、CloseReadOnlyDialog（読み取り専用タブ閉じ）、MultiLinePasteDialog（複数行貼り付け）、LargePasteDialog（大量テキスト貼り付け）、ControlNoticeDialog（通知イベント）、CouldNotOpenUriDialog（URIエラー）、ColorPickupFlyout（色設定）、MainPage（設定画面、Ctrl+,）
- TerminalPage に遷移してくる画面：App（アプリケーションルート）、MainPage（設定画面を閉じたとき）

**権限による表示制御**：管理者権限で実行中の場合、TabRowControl に ElevationShield アイコンが表示される。また、管理者権限が必要なプロファイルの場合、UAC昇格プロンプトが表示される。

## 関連機能

| 機能No | 機能名 | 関連種別 | 関連する操作・処理 |
|--------|--------|----------|------------------|
| 1 | 新しいタブの作成 | 主機能 | 新規タブ作成アクション（_HandleNewTab）を処理し、指定プロファイルでタブを開く |
| 2 | タブの複製 | 主機能 | _HandleDuplicateTabにより現在のタブを複製する |
| 3 | タブを閉じる | 主機能 | _HandleCloseTabによりインデックス指定またはフォーカス中のタブを閉じる |
| 4 | 他のタブを閉じる | 主機能 | _HandleCloseOtherTabsにより指定タブ以外を閉じる |
| 5 | 以降のタブを閉じる | 主機能 | _HandleCloseTabsAfterにより指定インデックス以降のタブを閉じる |
| 6 | 次のタブに切り替え | 主機能 | _HandleNextTabにより次タブへフォーカス移動 |
| 7 | 前のタブに切り替え | 主機能 | _HandlePrevTabにより前タブへフォーカス移動 |
| 8 | 指定タブに切り替え | 主機能 | _HandleSwitchToTabによりインデックス指定でタブ切り替え |
| 9 | タブの移動 | 主機能 | _HandleMoveTabによりタブ位置を移動 |
| 10 | タブ検索 | 補助機能 | _HandleTabSearchによりコマンドパレットをタブ検索モードで起動 |
| 11 | タブ名の変更 | 主機能 | _HandleRenameTabによりタブ表示名を変更 |
| 12 | タブ名変更UIを開く | 補助機能 | _HandleOpenTabRenamerによりインライン名前変更UIを開く |
| 13 | タブ色の設定 | 補助機能 | _HandleSetTabColorによりタブに色を設定 |
| 14 | タブ色ピッカーを開く | 補助機能 | _HandleOpenTabColorPickerによりColorPickupFlyoutを表示 |
| 15 | 新しいタブドロップダウンを開く | 補助機能 | _HandleOpenNewTabDropdownによりプロファイル選択メニューを表示 |
| 16 | 閉じたタブ/ペインの復元 | 主機能 | _HandleRestoreLastClosedにより直前に閉じたタブ/ペインを復元 |
| 17 | ペインの分割 | 主機能 | _HandleSplitPaneによりタブを水平/垂直分割 |
| 18 | ペインを閉じる | 主機能 | _HandleClosePaneによりフォーカス中のペインを閉じる |
| 19 | 他のペインを閉じる | 主機能 | _HandleCloseOtherPanesによりフォーカス中以外のペインを閉じる |
| 20 | ペインのリサイズ | 主機能 | _HandleResizePaneによりペイン境界を移動 |
| 21 | フォーカスの移動 | 主機能 | _HandleMoveFocusによりペイン間フォーカス移動 |
| 22 | ペインの移動 | 主機能 | _HandleMovePaneにより別タブへペイン移動 |
| 23 | ペインの入れ替え | 主機能 | _HandleSwapPaneにより隣接ペインと位置入れ替え |
| 24 | ペインのズーム切替 | 主機能 | _HandleTogglePaneZoomによりペインのズーム/解除 |
| 25 | 分割方向の切替 | 主機能 | _HandleToggleSplitOrientationにより分割方向を切替 |
| 26 | ペインの読み取り専用切替 | 補助機能 | _HandleTogglePaneReadOnlyにより読み取り専用モードを切替 |
| 27 | ペインの読み取り専用を有効化 | 補助機能 | _HandleEnablePaneReadOnlyにより読み取り専用を有効化 |
| 28 | ペインの読み取り専用を無効化 | 補助機能 | _HandleDisablePaneReadOnlyにより読み取り専用を無効化 |
| 29 | ペインへのフォーカス | 主機能 | _HandleFocusPaneによりID指定でペインにフォーカス移動 |
| 30 | ブロードキャスト入力切替 | 補助機能 | _HandleToggleBroadcastInputにより全ペインへの入力ブロードキャストを切替 |
| 32 | テキストの貼り付け | 主機能 | _HandlePasteTextによりクリップボード内容をターミナルに貼り付け |
| 42 | 検索を開く | 主機能 | _HandleFindにより検索ダイアログを開く |
| 45 | 上にスクロール | 主機能 | _HandleScrollUpにより指定行数分上にスクロール |
| 46 | 下にスクロール | 主機能 | _HandleScrollDownにより指定行数分下にスクロール |
| 47 | ページ上にスクロール | 主機能 | _HandleScrollUpPageにより1ページ分上にスクロール |
| 48 | ページ下にスクロール | 主機能 | _HandleScrollDownPageにより1ページ分下にスクロール |
| 49 | 先頭にスクロール | 主機能 | _HandleScrollToTopによりバッファ先頭へスクロール |
| 50 | 末尾にスクロール | 主機能 | _HandleScrollToBottomによりバッファ末尾へスクロール |
| 51 | マークにスクロール | 主機能 | _HandleScrollToMarkによりマーク位置へスクロール |
| 52 | マークの追加 | 補助機能 | _HandleAddMarkにより現在位置にマークを追加 |
| 53 | マークの削除 | 補助機能 | _HandleClearMarkにより現在位置のマークを削除 |
| 54 | 全マークの削除 | 補助機能 | _HandleClearAllMarksにより全マークを削除 |
| 55 | フォントサイズの調整 | 補助機能 | _HandleAdjustFontSizeによりフォントサイズを拡大/縮小 |
| 56 | フォントサイズのリセット | 補助機能 | _HandleResetFontSizeによりフォントサイズをデフォルトにリセット |
| 57 | カラースキームの設定 | 補助機能 | _HandleSetColorSchemeによりターミナルの配色を変更 |
| 58 | シェーダーエフェクト切替 | 補助機能 | _HandleToggleShaderEffectsによりピクセルシェーダーを切替 |
| 59 | 不透明度の調整 | 補助機能 | _HandleAdjustOpacityによりウィンドウ透明度を調整 |
| 60 | フォーカスモード切替 | 主機能 | _HandleToggleFocusModeによりフォーカスモードを切替 |
| 61 | フルスクリーン切替 | 主機能 | _HandleToggleFullscreenにより全画面表示を切替 |
| 62 | 常に最前面切替 | 主機能 | _HandleToggleAlwaysOnTopにより常に最前面表示を切替 |
| 63 | 最大化の設定 | 主機能 | _HandleSetMaximizedによりウィンドウの最大化状態を設定 |
| 64 | ウィンドウを閉じる | 主機能 | _HandleCloseWindowにより現在のウィンドウを閉じる |
| 65 | 新しいウィンドウを開く | 主機能 | _HandleNewWindowにより新しいTerminalウィンドウを起動 |
| 66 | ウィンドウの識別 | 補助機能 | _HandleIdentifyWindow/IdentifyWindowsによりウィンドウ情報をオーバーレイ表示 |
| 67 | ウィンドウ名の変更 | 補助機能 | _HandleRenameWindowによりウィンドウに名前を付ける |
| 68 | ウィンドウ名変更UIを開く | 補助機能 | _HandleOpenWindowRenamerによりWindowRenamer TeachingTipを表示 |
| 69 | システムメニューを開く | 補助機能 | _HandleOpenSystemMenuによりシステムメニューを表示 |
| 70 | グローバル呼び出し | 補助機能 | _HandleGlobalSummonによりグローバルホットキーでウィンドウを呼び出し |
| 71 | Quakeモード | 補助機能 | _HandleQuakeModeによりQuakeスタイルのウィンドウ表示 |
| 72 | アプリケーション終了 | 主機能 | _HandleQuitにより全ウィンドウを閉じてアプリ終了 |
| 73 | コマンドパレット切替 | 主機能 | _HandleToggleCommandPaletteによりコマンドパレットの開閉 |
| 74 | サジェスチョン | 主機能 | _HandleSuggestionsによりサジェスチョンパネルを表示 |
| 76 | バッファのエクスポート | 補助機能 | _HandleExportBufferによりバッファ内容をファイルに保存 |
| 77 | バッファのクリア | 補助機能 | _HandleClearBufferによりバッファをクリア |
| 80 | 接続の再起動 | 補助機能 | _HandleRestartConnectionにより接続を再起動 |
| 81 | 設定を開く | 遷移先機能 | _HandleOpenSettingsにより設定UIまたはsettings.jsonを開く |
| 111 | コマンドライン実行 | 補助機能 | _HandleExecuteCommandlineによりWTコマンドラインを実行 |
| 112 | 複数アクションの一括実行 | 補助機能 | _HandleMultipleActionsにより複数アクションを順番に実行 |
| 115 | 作業ディレクトリ表示 | 補助機能 | _HandleDisplayWorkingDirectoryによりデバッグ機能として作業ディレクトリを表示 |
| 116 | 作業ディレクトリを開く | 補助機能 | _HandleOpenCWDによりファイルエクスプローラーで作業ディレクトリを開く |
| 117 | コンテキストメニュー表示 | 補助機能 | _HandleShowContextMenuにより右クリックメニューを表示 |
| 118 | デバッガーへのブレーク | 補助機能 | _HandleBreakIntoDebuggerによりデバッガーにブレークイン |
| 120 | Aboutダイアログ | 遷移先機能 | AboutDialogをTerminalPage内に配置し表示する |

## 画面種別

コンテナ / メイン画面

## URL/ルーティング

デスクトップアプリケーション（UWP/WinUI）のため、URLルーティングは存在しない。アプリケーション起動時に App -> TerminalWindow -> TerminalPage の順で初期化される。

## 入出力項目

| 項目名 | 入出力 | 型 | 説明 |
|--------|--------|------|------|
| WindowProperties | 入力 | WindowProperties | ウィンドウID、ウィンドウ名、仮想作業ディレクトリ等 |
| ContentManager | 入力 | ContentManager | TermControl コンテンツの生成・管理 |
| CascadiaSettings | 入力 | CascadiaSettings | アプリケーション設定（プロファイル、カラースキーム等） |
| StartupActions | 入力 | vector<ActionAndArgs> | 起動時に実行するアクション群 |
| StartupConnection | 入力 | ITerminalConnection | 起動時のターミナル接続 |
| Title | 出力 | hstring | 現在のウィンドウタイトル |
| TaskbarState | 出力 | TaskbarState | タスクバーの進行状況 |
| TitlebarBrush | 出力 | Brush | タイトルバーの背景ブラシ |
| FocusMode | 出力 | bool | フォーカスモード状態 |
| Fullscreen | 出力 | bool | フルスクリーン状態 |
| AlwaysOnTop | 出力 | bool | 常に最前面状態 |

## 表示項目

| 項目名 | 表示位置 | 説明 |
|--------|----------|------|
| TabRow | Grid.Row=0 | タブ行コントロール（TabRowControl） |
| KeyboardServiceWarningInfoBar | Grid.Row=1 | キーボードサービス無効時の警告InfoBar |
| CloseOnExitInfoBar | Grid.Row=1 | CloseOnExit情報のInfoBar |
| TabContent | Grid.Row=2 | タブコンテンツ領域（各ペインが配置される） |
| AboutDialog | Grid.Row=2 (オーバーレイ) | バージョン情報ダイアログ |
| QuitDialog | Grid.Row=2 (オーバーレイ) | 終了確認ダイアログ |
| CloseAllDialog | Grid.Row=2 (オーバーレイ) | 全タブ閉じ確認ダイアログ |
| CloseReadOnlyDialog | Grid.Row=2 (オーバーレイ) | 読み取り専用警告ダイアログ |
| MultiLinePasteDialog | Grid.Row=2 (オーバーレイ) | 複数行貼り付け確認ダイアログ |
| LargePasteDialog | Grid.Row=2 (オーバーレイ) | 大量貼り付け確認ダイアログ |
| ControlNoticeDialog | Grid.Row=2 (オーバーレイ) | 通知ダイアログ |
| CouldNotOpenUriDialog | Grid.Row=2 (オーバーレイ) | URIエラーダイアログ |
| CommandPaletteElement | Grid.Row=2 (オーバーレイ) | コマンドパレット |
| SuggestionsElement | Grid.Row=2 (オーバーレイ) | サジェスチョンコントロール |
| WindowIdToast | TeachingTip | ウィンドウ識別Toast |
| WindowRenamer | TeachingTip | ウィンドウリネームUI |
| WindowCwdToast | TeachingTip | 作業ディレクトリ表示Toast |
| ActionSavedToast | TeachingTip | アクション保存通知Toast |
| ActionSaveFailedToast | TeachingTip | アクション保存失敗通知Toast |

## イベント仕様

### 1-タブ作成（NewTab）

キーバインドまたはNewTabButtonから_HandleNewTabが呼び出される。指定されたNewTerminalArgsに基づきプロファイルを解決し、_OpenNewTabで新しいタブを作成する。TerminalSettingsCacheからプロファイル設定を取得し、ConPTY接続を確立してTermControlを生成し、新しいPane/Tabとして追加する。

### 2-ペイン分割（SplitPane）

_HandleSplitPaneにより、現在のタブに対して水平/垂直方向にペインを分割する。新しいTermControlを生成し、Paneツリーに追加する。分割方向（SplitDirection）と分割サイズ（splitSize）をパラメータとして受け取る。

### 3-貼り付け（PasteText）

_HandlePasteTextでクリップボード内容を取得する。複数行テキストの場合はMultiLinePasteDialogを表示し、大量テキスト（設定閾値超過）の場合はLargePasteDialogを表示する。ユーザーが確認後、テキストをアクティブなTermControlに送信する。

### 4-コマンドパレット起動（ToggleCommandPalette）

_HandleToggleCommandPaletteにより、CommandPaletteElementの表示/非表示を切り替える。初回表示時に遅延読み込み（x:Load="False"）からインスタンス化される。ActionMode、TabSearchMode、CommandlineModeの3モードを切り替え可能。

### 5-設定画面遷移（OpenSettings）

_HandleOpenSettingsにより、SettingsTarget.SettingsUIの場合は設定タブ（SettingsPaneContent）を新規タブとして開く。SettingsTarget.SettingsFileの場合はsettings.jsonをデフォルトエディタで開く。

### 6-ウィンドウ閉じ（CloseWindow/Quit）

CloseWindow時はCloseWindowRequestedイベントを発火する。Quit時は_HandleQuitが呼び出され、複数タブが存在する場合はQuitDialogで確認後、全ウィンドウを閉じてアプリケーションを終了する。

### 7-ダイアログ表示

各ダイアログはx:Load="False"で遅延読み込みされ、_ShowDialogHelperを通じて表示される。IDialogPresenterインターフェースにより、アプリケーション全体で一度に1つのダイアログのみが表示されることが保証される。

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

本画面はデータベースを使用しない。設定はsettings.json（ローカルファイル）に保存され、CascadiaSettingsクラスを通じて読み書きされる。閉じたタブ/ペインの復元用データは _previouslyClosedPanesAndTabs メンバ変数にメモリ上で保持される。

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

該当なし（データベース非使用）

## メッセージ仕様

| メッセージID | 種別 | メッセージ内容 | 表示条件 |
|-------------|------|---------------|---------|
| QuitDialog | 確認 | アプリケーション終了確認 | Quit操作時 |
| CloseAllDialog | 確認 | 全タブ閉じ確認 | 全タブ閉じ操作時 |
| CloseReadOnlyDialog | 警告 | 読み取り専用セッション閉じ警告 | 読み取り専用ペイン閉じ時 |
| MultiLinePasteDialog | 確認 | 複数行テキスト貼り付け確認 | 複数行テキスト貼り付け時 |
| LargePasteDialog | 確認 | 大量テキスト貼り付け確認 | 大量テキスト貼り付け時 |
| ControlNoticeDialog | 通知 | コントロール通知メッセージ | 接続切断等の通知イベント時 |
| CouldNotOpenUriDialog | エラー | URIを開けなかったエラー | URI起動失敗時 |
| KeyboardServiceWarningInfoBar | 警告 | TabletInputService無効警告 | キーボードサービス無効時 |
| CloseOnExitInfoBar | 情報 | CloseOnExit情報 | CloseOnExit設定に関する情報表示時 |
| ActionSavedToast | 成功 | アクション保存完了通知 | アクション保存成功時 |
| ActionSaveFailedToast | エラー | アクション保存失敗通知 | アクション保存失敗時 |

## 例外処理

| 例外条件 | 処理内容 |
|---------|---------|
| プロファイルが見つからない | デフォルトプロファイルにフォールバック |
| 接続確立失敗 | ControlNoticeDialogで通知メッセージを表示 |
| URI起動失敗 | CouldNotOpenUriDialogでエラーメッセージとURIを表示 |
| 設定読み込みエラー | ShowLoadWarningsDialogイベントで警告ダイアログを表示 |
| 管理者権限が必要 | UAC昇格プロンプト表示、または別プロセスで管理者ターミナルを起動 |
| クリップボードアクセス失敗 | クリップボードのOpenClipboard再試行後、失敗時は処理を中断 |

## 備考

- TerminalPage は XAML Islands（UWP XAML in Win32）環境で動作する
- ダイアログは全てx:Load="False"で遅延読み込みされ、初回表示時にインスタンス化される（パフォーマンス最適化）
- 全ダイアログはGrid.Row=2に配置されており、GH#12775対応としてコンテンツ領域と同じ行に配置される
- アクションハンドラはマクロ（DECLARE_ACTION_HANDLER / HOOKUP_ACTION）で一括定義されており、AppActionHandlers.cppに実装される
- _previouslyClosedPanesAndTabsによりCtrl+Shift+Tでの閉じたタブ/ペインの復元が可能
- タブのドラッグ&ドロップによる別ウィンドウへの移動に対応

---

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

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

### 推奨読解順序

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

まず、TerminalPage が管理するデータ構造を理解することが重要である。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 1-1 | TerminalPage.idl | `src/cascadia/TerminalApp/TerminalPage.idl` | WinRT インターフェース定義。公開プロパティ・イベントの全体像を把握する（53-106行目） |
| 1-2 | TerminalPage.h | `src/cascadia/TerminalApp/TerminalPage.h` | C++ ヘッダー。内部状態（_tabs, _mruTabs, _isInFocusMode等）とアクションハンドラ宣言を確認する（44-56行目のenum定義、93-583行目のクラス定義） |

**読解のコツ**: WINRT_OBSERVABLE_PROPERTY マクロは observable なプロパティを定義する WinRT のヘルパーマクロ。til::typed_event はイベント定義のヘルパー。DECLARE_ACTION_HANDLER マクロ（19行目）はアクションハンドラのメソッド宣言を自動生成する。

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

処理の起点となるファイル・関数を特定する。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 2-1 | TerminalPage.xaml | `src/cascadia/TerminalApp/TerminalPage.xaml` | XAML レイアウト定義。3行のGrid構成（TabRow/InfoBar/TabContent）と、各ダイアログ・ツールの配置を確認する（16-251行目） |
| 2-2 | TerminalPage.cpp | `src/cascadia/TerminalApp/TerminalPage.cpp` | メイン実装。Create()メソッドが画面初期化のエントリーポイント。HOOKUP_ACTIONマクロ（53行目）でアクションディスパッチャとハンドラを接続する |

**主要処理フロー**:
1. **TerminalPage コンストラクタ**: WindowProperties と ContentManager を受け取り初期化
2. **Create()**: UI要素の初期化、キーバインドの設定、アクションハンドラの登録
3. **ProcessStartupActions()**: 起動時アクション（タブ作成等）を順次実行
4. **_CompleteInitialization()**: 初期化完了後の処理（Initializedイベント発火）

#### Step 3: アクションハンドラ層を理解する

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 3-1 | AppActionHandlers.cpp | `src/cascadia/TerminalApp/AppActionHandlers.cpp` | 全アクションハンドラの実装。_Handle{Action}メソッド群がここに定義される |

**主要処理フロー**:
- **_HandleNewTab**: NewTerminalArgs -> _MakePane -> _CreateNewTabFromPane
- **_HandleSplitPane**: SplitPaneArgs -> _MakePane -> _SplitPane
- **_HandlePasteText**: クリップボード読み取り -> 警告ダイアログ -> TermControl.PasteTextFromClipboard

#### Step 4: タブ・ペイン管理層を理解する

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 4-1 | Tab.h | `src/cascadia/TerminalApp/Tab.h` | Tabの基底クラス定義 |
| 4-2 | Pane.h | `src/cascadia/TerminalApp/Pane.h` | Paneツリー構造の定義。バイナリツリーで分割を管理 |

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

```
App
  └─ TerminalWindow
       └─ TerminalPage::Create()
            ├─ _HookupKeyBindings()
            │     └─ AppKeyBindings -> ShortcutActionDispatch
            ├─ _RegisterActionCallbacks()
            │     └─ HOOKUP_ACTION マクロで全アクションハンドラを登録
            ├─ _CreateNewTabFlyout()
            │     └─ プロファイル一覧メニュー構築
            └─ ProcessStartupActions()
                  ├─ _HandleNewTab()
                  │     ├─ _MakeTerminalPane()
                  │     │     ├─ _CreateConnectionFromSettings()
                  │     │     └─ _CreateNewControlAndContent()
                  │     └─ _CreateNewTabFromPane()
                  │           └─ _InitializeTab()
                  ├─ _HandleSplitPane()
                  │     └─ _SplitPane()
                  └─ _HandleToggleCommandPalette()
                        └─ LoadCommandPalette()
```

### データフロー図

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

キーバインド入力 ────> AppKeyBindings              ┌──> タブ/ペイン表示更新
                       └─> ShortcutActionDispatch  │
                            └─> _Handle{Action}    ├──> ダイアログ表示
                                  │                │
設定ファイル ─────────> CascadiaSettings            ├──> イベント発火
(settings.json)         └─> TerminalSettingsCache  │    (TitleChanged等)
                              │                    │
プロファイル設定 ──────> _MakeTerminalPane()        └──> TermControl生成
                         └─> ConPTY接続確立              └─> シェルプロセス

クリップボード ───────> _PasteFromClipboardHandler ──> TermControl入力
                         └─> 警告ダイアログ表示
```

### 関連ファイル一覧

| ファイル | パス | 種別 | 役割 |
|---------|------|------|------|
| TerminalPage.xaml | `src/cascadia/TerminalApp/TerminalPage.xaml` | テンプレート | XAML レイアウト定義 |
| TerminalPage.h | `src/cascadia/TerminalApp/TerminalPage.h` | ソース | クラス宣言・メンバ変数定義 |
| TerminalPage.cpp | `src/cascadia/TerminalApp/TerminalPage.cpp` | ソース | メイン実装（初期化・タブ管理等） |
| TerminalPage.idl | `src/cascadia/TerminalApp/TerminalPage.idl` | ソース | WinRT インターフェース定義 |
| AppActionHandlers.cpp | `src/cascadia/TerminalApp/AppActionHandlers.cpp` | ソース | 全アクションハンドラ実装 |
| Tab.h | `src/cascadia/TerminalApp/Tab.h` | ソース | Tab基底クラス |
| Pane.h | `src/cascadia/TerminalApp/Pane.h` | ソース | Paneツリー構造 |
| AppKeyBindings.h | `src/cascadia/TerminalApp/AppKeyBindings.h` | ソース | キーバインド管理 |
| ShortcutActionDispatch.h | `src/cascadia/TerminalApp/ShortcutActionDispatch.h` | ソース | アクションディスパッチ |
| Toast.h | `src/cascadia/TerminalApp/Toast.h` | ソース | TeachingTip表示ヘルパー |
| TerminalSettingsCache.h | `src/cascadia/TerminalApp/TerminalSettingsCache.h` | ソース | 設定キャッシュ |
| AboutDialog.xaml | `src/cascadia/TerminalApp/AboutDialog.xaml` | テンプレート | バージョン情報ダイアログ |
